	/*
	 * Look into this for game processing
	 * http://mootools.net/docs/core/Class/Class.Extras#Chain:callChain
	 * 
	 * 
	 * Details to Track
	 * 		Cut Card Points (Hand and Cribbage)
	 * 			Hand
	 * 			Game
	 * 			Match
	 * 			History
	 * 			Top 5 
	 * 
	 * 		Hands
	 * 			Hand
	 * 			Game
	 * 			Match
	 * 			History
	 * 
	 * 			Top 5 Hands
	 * 			Top 5 Cribbage
	 * 			Worst 5 Hands
	 * 			Worst 5 Cribbage
	 * 
	 * 		Pegging
	 * 			Hand
	 * 			Game
	 * 			Match
	 * 			History
	 * 
	 * 			Top 5 Hand Pegging Points
	 * 			Top 5 Single Card Points
	 * 	
	 * 		Cribbage Points
	 * 			Hand
	 * 			Game
	 * 			Match
	 * 			History
	 * 
	 * 		Skunks
	 * 			Times you Skunked another Played
	 * 			Times you Double Skunked another Played
	 * 
	 * 			Times you Skunked Computer
	 * 			Times you Double Skunked Computer
	 * 
	 * 			Times you have been Skunked by another Played
	 * 			Times you have been Double Skunked by another Played
	 * 
	 * 			Times you have been Skunked by Computer
	 * 			Times you have been Double Skunked by Computer
	 * 
	 */

	
    var pointsHistory = new Hash({
        Cut_Cards: new Hash({
            Hand:       0,
            Game:       0, 
            Match:      0,
            History:    0,
            Top:        new Array()
        }),
        
        Hands: new Hash({
            Hand:       0,
            Game:       0, 
            Match:      0,
            History:    0,
            Top:        new Array(),
            Worst:      new Array()
        }),
        
        Cribs: new Hash({
            Hand:       0,
            Game:       0, 
            Match:      0,
            History:    0,
            Top:        new Array(),
            Worst:      new Array()
        }),

        Pegging: new Hash({
            Hand:       0,
            Game:       0, 
            Match:      0,
            History:    0,
            Top_Hands:  new Array(),
            Top_Cards:  new Array()
        }),
        
        Skunks: new Hash({
            Skunked_Played:             0,
            Double_Skunked_Played:      0,

            Skunked_Computer:           0,
            Double_Skunked_Computer:    0,

            Skunked_by_Played:          0,
            Double_Skunked_By_Played:   0,

            Skunked_By_Computer:        0,
            Double_Skunked_By_Computer: 0
        })
    });




	var swiffObj = null;	
	
	var game = null;
	var gameOptions = null;
	
	var toolTips = null;
	var cardToolTips = null;
	var playerToolTips = null;
	
	var pegs = null;
	var currentPegId = 0;
	var posRed		= 1;
	var posBlue		= 1;
	var posGreen	= 1;
	var posYellow	= 1;
	var points		= 
		{
			Red: 	0,
			Blue: 	0,
			Green:	0,
			Yellow:	0
		};

	// This all for keeping detailed point scoring
	// for every point scored, with this we could
	// save / resume a game or even replay a game
	var handNumber=0;
	var pointDetails = new Array();
	var pointDetail = 
		{
			handNumber:	0,
			player: 	null,
			team: 		null,
			type: 		null,	// Hand, Play, Crib
			points:		null	// This should be a point structure like  
								// from the hand class function countPoints
		};
	var handPoints = 
		{
	        'Pairs'		: 0,
	        'Fifteens'	: 0,
	        'Runs'		: 0,
		    'Flush'		: 0,
		    'HisNobs'	: 0,
		    'ThirtyOne' : 0,
		    'FlushPairs': 0,
		    'Go' 		: 0,
		    'LastCard' 	: 0,
		    'HisHeels' 	: 0,
		    'Total'		: 0,
		    'Details'	: 0
		};
	var numDecks = 1;
	var numCards = 6;
	//var gameType = '1-on-1';
	var gameType = null;
	var gameId = null;
	var numPlayers = 2;
	var numberGames = 1;
	var numberGamesToWin = 1;
	var selectedGameType = null;

	var boards = new Array();
	var boardListPos = 0;
	var boardZoom = 60;
	var boardOrgWidth = null;
	var boardOrgHeight = null;
	var boardOrgName = null;
	var orgBoardContainerWidth = null;
	var boardWindow = null;
	
	var currentStep = 0;
	var steps = new Array();
	var gTypes = new Array();

	var settings = new Hash({
		stinkhole:        	1,
		skunks:           	1,
		thirtyoneinhand:  	0,
		thirtyoneinplay:  	0,
		fourcardflush:    	0,
		runaroundworld:   	0,
		zerohandback:     	0,
		zerocribback:     	0,
		numbergames:		1,
		speedround:			0,
        flushpairs:         0,
        differentsuits:     0,
        randombackground:	0,
        backgroundminutes:	0,
        cardback:			0,
        lowhand:			0,
        numjokers:			0,
        rockthecrib:		0
	});

    var gameScore = new Hash({
        Player_0:   0,
        Player_1:   0,
        Player_2:   0,
        Player_3:   0,
        Player_4:   0,
        Player_5:   0,
        Player_6:   0,
        Player_7:   0,
        Settings:   settings
    });
	
	var	pegHandPoints = 	new Hash({
								pair:		    2,
								fifteen: 	    2,
								thirtyone:	    0,
								flushpairs:     0,
								differentsuits: 1,
								go:			    1,
								lastcard:	    1,
								hisnobs:	    1,	// Jack in hand is same suit as cut card
								hishheels:	    2,	// Cut Card is as Jack
								run:		    1,
								flush:	  	    1
							});
		
	var	pegPlayPoints =		new Hash({
                                pair:           2,
                                fifteen:        2,
                                thirtyone:      2,
                                flushpairs:     0,
                                differentsuits: 1,
                                go:             1,
                                lastcard:       1,
                                hisnobs:        1,  // Jack in hand is same suit as cut card
                                hishheels:      2,  // Cut Card is as Jack
                                run:            1,
                                flush:          1
							});
	
	
	var soundOptions = null;
	var sounds = new Hash({
		Shuffle: new Array(
			"/resources/sound/shuffle/shuffle_01.mp3"/*,
			"/resources/sound/shuffle/shuffle_02.mp3",
			"/resources/sound/shuffle/shuffle_03.mp3",
			"/resources/sound/shuffle/shuffle_04.mp3",
			"/resources/sound/shuffle/shuffle_05.mp3",
			"/resources/sound/shuffle/shuffle_06.mp3",
			"/resources/sound/shuffle/shuffle_07.mp3",
			"/resources/sound/shuffle/shuffle_08.mp3",
			"/resources/sound/shuffle/shuffle_09.mp3",
			"/resources/sound/shuffle/shuffle_10.mp3",
			"/resources/sound/shuffle/shuffle_11.mp3",
			"/resources/sound/shuffle/shuffle_12.mp3",
			"/resources/sound/shuffle/shuffle_13.mp3",
			"/resources/sound/shuffle/shuffle_14.mp3",
			"/resources/sound/shuffle/shuffle_15.mp3",
			"/resources/sound/shuffle/shuffle_16.mp3",
			"/resources/sound/shuffle/shuffle_17.mp3"*/
		),

		Boo: new Array(
			"/resources/sound/boo/boo_01.mp3"/*,
			"/resources/sound/boo/boo_02.mp3",
			"/resources/sound/boo/boo_03.mp3",
			"/resources/sound/boo/boo_04.mp3",
			"/resources/sound/boo/boo_05.mp3",
			"/resources/sound/boo/boo_06.mp3",
			"/resources/sound/boo/boo_07.mp3",
			"/resources/sound/boo/boo_08.mp3",
			"/resources/sound/boo/boo_09.mp3",
			"/resources/sound/boo/boo_10.mp3",
			"/resources/sound/boo/boo_11.mp3",
			"/resources/sound/boo/boo_12.mp3"*/
		),

		ApplauseLow: new Array(
			"/resources/sound/applauselow/applause_low_01.mp3"/*,
			"/resources/sound/applauselow/applause_low_02.mp3",
			"/resources/sound/applauselow/applause_low_03.mp3",
			"/resources/sound/applauselow/applause_low_04.mp3",
			"/resources/sound/applauselow/applause_low_05.mp3",
			"/resources/sound/applauselow/applause_low_06.mp3",
			"/resources/sound/applauselow/applause_low_07.mp3"*/
		),

		ApplauseMedium: new Array(
			"/resources/sound/applausemedium/applause_medium_01.mp3"/*,
			"/resources/sound/applausemedium/applause_medium_02.mp3",
			"/resources/sound/applausemedium/applause_medium_03.mp3",
			"/resources/sound/applausemedium/applause_medium_04.mp3",
			"/resources/sound/applausemedium/applause_medium_05.mp3"*/
		),

		ApplauseHigh: new Array(
			"/resources/sound/applausehigh/applause_high_01.mp3"/*,
			"/resources/sound/applausehigh/applause_high_02.mp3",
			"/resources/sound/applausehigh/applause_high_03.mp3",
			"/resources/sound/applausehigh/applause_high_04.mp3",
			"/resources/sound/applausehigh/applause_high_05.mp3"*/
		),

		Number: new Array(
			"/resources/sound/number/00.mp3",
			"/resources/sound/number/01.mp3",
			"/resources/sound/number/02.mp3",
			"/resources/sound/number/03.mp3",
			"/resources/sound/number/04.mp3",
			"/resources/sound/number/05.mp3",
			"/resources/sound/number/06.mp3",
			"/resources/sound/number/07.mp3",
			"/resources/sound/number/08.mp3",
			"/resources/sound/number/09.mp3",
			"/resources/sound/number/10.mp3",
			"/resources/sound/number/11.mp3",
			"/resources/sound/number/12.mp3",
			"/resources/sound/number/13.mp3",
			"/resources/sound/number/14.mp3",
			"/resources/sound/number/15.mp3",
			"/resources/sound/number/16.mp3",
			"/resources/sound/number/17.mp3",
			"/resources/sound/number/18.mp3",
			"/resources/sound/number/19.mp3",
			"/resources/sound/number/20.mp3",
			"/resources/sound/number/21.mp3",
			"/resources/sound/number/22.mp3",
			"/resources/sound/number/23.mp3",
			"/resources/sound/number/24.mp3",
			"/resources/sound/number/25.mp3",
			"/resources/sound/number/26.mp3",
			"/resources/sound/number/27.mp3",
			"/resources/sound/number/28.mp3",
			"/resources/sound/number/29.mp3",
			"/resources/sound/number/30.mp3",
			"/resources/sound/number/31.mp3"
		)
	});

	var numComputerImages = 60;
	var computerImages = new Array();
	
	// This is for database stuff
	var currentUserId = 0;
	var gamesList = new Array();
	
	// Debug Stuff
	var debug = true;
	if (debug && window.location.href.search('crazycribbage.com')>=0)
		debug = false;
	
	steps.push({'container': 'selectNumPlayers', 	'func': playNow,		'title': 'Select Number of Players'});
	steps.push({'container': 'selectNumDecks', 		'func': selectNumDecks,	'title': 'Select Number of Decks'});
	steps.push({'container': 'selectOptions', 		'func': selectSettings,	'title': 'Select Options'});


	function getGame(gameId) {
		var game = null;
		
		gamesList.each(function(g) {
			if (g.game_id == gameId) {
				game = g;
			}
		});
		
		return game;
	}
	
	
	function getGameString(gameId) {
		var game = getGame(gameId);
		var str = '';
		
		if (game) {
			var c = game.cards_to_deal.split(',');
			str = game.number_players + ' players ' + game.name + ' using ' + game.number_decks + ' decks of cards with ' + c[0] + ' cards dealt and a game length of ' + game.game_length + ' points';
		}
		
		return str;
	}
	
	
	function init() {
		var curURI = new URI(document.location.href);
		if (curURI.get('host') == 'apps.facebook.com') {
			$('eCribbage').hide();
		}

		
		gamesList.combine(new Database().getGames());
		//console.log(gamesList);


		$('iconQuestion').addEvent('click', function() {
			window.location.href='http://cribbageforum.com/AskTheExperts.htm';
		});

		$('iconStrategies').addEvent('click', function() {
			window.location.href='http://www.cribbage.org/tips/';
		});

		$('iconRules').addEvent('click', function() {
			window.location.href='http://www.cribbage.org/rules/';
		});

		$('iconEmail').addEvent('click', function() {
			window.location.href='mailto:fractorr@gmail.com&subject=Crazy Cribbage';
			$('emailLink').fireEvent('click');
		});
		
		$('exitIcon').addEvent('click', function(evt) {
			evt.stop();
			evt.stopPropagation();
			evt.preventDefault();

			confirmBox = new MavDialog.Confirm({
				'title': 'Exit',
				'message': 'Are you sure you want to exit this match ?',
				'callback': doConfirm
			});			
		});


		toolTips = new Tips('.showTip', {
			'className': 'gameToolTip',
			'onShow': function(tip, hovered) {
				var showTips = Cookie.read('tooltips');
				if (parseInt(showTips)==0) {
					tip.setStyle('display', 'none');
				} else if (showTips == null || parseInt(showTips)==1) {
					tip.setStyle('display', 'block');
				}
			}
		});
		
		cardToolTips = new Tips('.cardTip');

        playerToolTips = new Tips('.showTip', {
            'className': 'gameToolTip'
        });
        
		
		$('Player0').hide();
		$('Player1').hide();
		$('Player2').hide();
		$('Player3').hide();
		$('Player4').hide();
		$('Player5').hide();
		$('Player6').hide();
		$('Player7').hide();
		
		$('discard').hide();
		$('theplay').hide();
		$('messageBox').hide();
		$('pointsLog').hide();
		$('boardViewer').hide();
		$('gameWinners').hide();
		$('exitIcon').hide();
		
		$('option_speedround').addEvent('click', function() {
			if ($('option_speedround').get('checked')) {
				$('option_peggingonly').erase('disabled');
				$('option_peggingonly').checked = true;
				$('option_peggingonly').set('value', '1');
			} else {
				$('option_peggingonly').set('disabled', 'true');
				$('option_peggingonly').checked = false;
				$('option_peggingonly').set('value', '0');
			}
		});
		

		$('option_lowhand').addEvent('click', function() {
			if ($('option_lowhand').get('checked')) {
				$('option_zerohandback').set('disabled', 'true');
				$('option_zerohandback').checked = false;
				$('option_zerohandback').set('value', '0');

				$('option_zerocribback').set('disabled', 'true');
				$('option_zerocribback').checked = false;
				$('option_zerocribback').set('value', '0');
			} else {
				$('option_zerohandback').erase('disabled');
				$('option_zerohandback').set('value', '1');

				$('option_zerocribback').erase('disabled');
				$('option_zerocribback').set('value', '1');
			}
		});
		$('option_lowhand').fireEvent('click');
		
		
		var go = $('gameOptions');
		

		$('soundOnIcon').addEvent('click', function() {
			$('soundOnIcon').hide();
			$('soundOffIcon').show();
			playlist.disable();
			Cookie.write("sound", 0, {'duration': 365});
			$('topMenu_Sound').set('html', 'Sound [&times;]');
		});

		$('soundOffIcon').addEvent('click', function() {
			$('soundOnIcon').show();
			$('soundOffIcon').hide();
			playlist.enable();
			Cookie.write("sound", 1, {'duration': 365});
			$('topMenu_Sound').set('html', 'Sound [&radic;]');
		});
		
		
		if ($('topMenu_Sound')) {
			var doSound = Cookie.read('sound');
			if (doSound && parseInt(doSound)==0) {
				$('topMenu_Sound').set('html', 'Sound [&times;]');
			}
			
			$('topMenu_Sound').addEvent('click', function(e) {
				var doSound = Cookie.read('sound');
				if (doSound && parseInt(doSound)==0) {
					$('soundOffIcon').fireEvent('click');
					$('topMenu_Sound').set('html', 'Sound [&radic;]');
					Cookie.write("sound", 1, {'duration': 365});
				} else {
					$('soundOnIcon').fireEvent('click');
					$('topMenu_Sound').set('html', 'Sound [&times;]');
					Cookie.write("sound", 0, {'duration': 365});
				}
			});
		}
		
		
		if ($('topMenu_Tooltips')) {
			var showTips = Cookie.read('tooltips');
			if (showTips && parseInt(showTips)==0) {
				$('topMenu_Tooltips').set('html', 'Tool Tips [&times;]');
			}
			
			$('topMenu_Tooltips').addEvent('click', function(e) {
				var showTips = Cookie.read('tooltips');
				if (showTips && parseInt(showTips)==0) {
					Cookie.write("tooltips", 1, {'duration': 365});
					$('topMenu_Tooltips').set('html', 'Tool Tips [&radic;]');
				} else {
					Cookie.write("tooltips", 0, {'duration': 365});
					$('topMenu_Tooltips').set('html', 'Tool Tips [&times;]');
				}
			});
		}
		
		
		if ($('topMenu_Help')) {
			$('topMenu_Help').addEvent('click', function(e) {
				var dg = new MavDialog.Confirm({
					'id': 'help',
					'title': 'Crazy Cribbage Help',
					'url': 'help.html',
					//'callback': this.replaceJoker.bind(this),
					'draggable': true,
					'width': 655,
					'height': 300,
					'center': 'x',
					'onRequest': function() {
						$('help_cancel').hide();
						initHelp();
					}
				});
			});
		}
		
		
		if ($('toggleHelp')) {
			$('toggleHelp').addEvent('click', function(e) {
				var dg = new MavDialog.Confirm({
					'id': 'help',
					'title': 'Crazy Cribbage Help',
					'url': 'help.html',
					//'callback': this.replaceJoker.bind(this),
					'draggable': true,
					'width': 655,
					'height': 300,
					'center': 'x',
					'onRequest': function() {
						$('help_cancel').hide();
						initHelp();
					}
				});
			});
		}
		

		if ($('meebo')) {
			$('meebo').makeDraggable();
			$('meeboClose').addEvent('click', function() {
				$('meebo').hide();
			});
		}

		// Setup player images for computer players
		for (var c=1; c<numComputerImages; c++) {
			computerImages.push(c);
		}
	
	} Onload.add(init);

	
	function doConfirm(resp) {
		if (resp) {
			confirmBox.close();
			goHome();
		}
	}
	
	
	function initOptions(){
        var opts = $$('input[name^=option_]');
        opts.each(function(opt) {
			var key = opt.get('id').split('_')[1];
			opt.setAttribute('checked', Cookie.read(key));
            settings.set(key, Cookie.read(key, opt.checked));
        });

        var opts = $$('select[name^=option_]');
        opts.each(function(opt) {
            var key = opt.get('id').split('_')[1];
            opt.value = Cookie.read(key);
            settings.set(key, Cookie.read(key));
        });
	} 

	
	function SwapPanels(from, to) {
        var fx = new Fx.Tween(from, {duration: 1000});
		
        fx.start('opacity', 0).chain(function() {
			from.fade('out');
            this.callChain();
			
        }).chain(function() {
			from.hide();
            this.callChain();
			
        }).chain(function() {
			to.fade('in');
			this.callChain();
			
        }).chain(function() {
			to.show();
			
        });
	}
	

	function initSteps() {
		$('step_1_back').addEvent('click', function() {
			goHome();
		});

		steps.each(function(step, idx) {
			try {
				var sn = idx + 1;
	
				if (idx != 0) {
					//$('step_'+sn+'_back').addEvent('click', function() {
					$(steps[idx].container).getElement('.stepBack').addEvent('click', function() {
						steps[idx-1].func();
						SwapPanels($(steps[idx].container), $(steps[idx-1].container));
						currentStep--;
						doResize();
					});
				}
				
				if (idx != steps.length-1) {
					//$('step_'+sn+'_next').addEvent('click', function() {
					$(steps[idx].container).getElement('.stepNext').addEvent('click', function() {
						steps[idx+1].func();
						SwapPanels($(steps[idx].container), $(steps[idx+1].container));
						currentStep++;
						doResize();
					});
				}
			}
			catch(e)
			{
				if (debug) {
					console.log(sn);
					console.log(e);
				}
			}
		});

		$('step_5_next').addEvent('click', function() {
			runGame();
		});
	} Onload.add(initSteps);


    function isNumber(num) {
        return num != null && !isNaN(num);
    }


	function setCardSize(d) {
		$$('.card').each(function(c) {
			c.setStyle('font-size', d+'px');
		});
	}
	

	function drawHand(element, numCards, status) {
		for (var c = 0; c < numCards; c++) {
			var curCard = selectHand.getCard(c);
			curCard.setStatus(status);
			var cardHtml = curCard.buildHTML();		
			var off = {
				x: (c * 10) + 12,
				y: 9 
			}; 
							
			cardHtml.inject(element);
			cardHtml.setStyles({
				'left': off.x+'px',
				'top': off.y+'px',
				'cursor': 'default'
			});
		}
	}


    function loadSettings() {
        var np = Cookie.read('numPlayers');
        //console.log('np: %d, %d', np, isNumber(np));
        if (isNumber(np)) {
            numPlayers = np;
        }
        $('num_players_'+numPlayers).addClass('num_players_'+numPlayers+'_selected');
        

        var gt = Cookie.read('gameType');
        //console.log('gt: %s', gt);
        if (gt && gt.length) {
            gameType = gt;
        }
        var gi = Cookie.read('gameId');
        //console.log('gi: %s', gi);
        if (gi && gi.length) {
            gameId = gi;
        }


        var nd = Cookie.read('numDecks');
        //console.log('nd: %d, %d', nd, isNumber(nd));
        if (isNumber(nd)) {
            numDecks = nd;
        }
        $('num_decks_'+numDecks).addClass('selectedDeck');


        var nc = Cookie.read('numCards');
        //console.log('nc: %d, %d', nc, isNumber(nc));
        if (isNumber(nc)) {
            numCards = nc;
        }
        //console.log('numCards: ', numCards);
        $('num_cards_'+numCards).addClass('selectedCards');


        var brd = Cookie.read('board');
        //console.log('brd: %s, %d', brd, brd.length);
        if (brd && brd.length) {
            boards.each(function(bd, idx) {
                if (bd.name == brd) {
                    boardListPos = idx;
                    $('boardPreview').setAttribute('src', '/resources/designs/medium/' + boards[boardListPos].name + '.png');
                    //console.log(brd, idx, boards[boardListPos]);
                }
            });
        }

                    
        var zoom = Cookie.read('boardzoom');
        //console.log('zoom: %s, %d', zoom, zoom.length);
        if (zoom && zoom.length) {
        	boardZoom = parseInt(zoom);
        }


    } //Onload.add(loadSettings);


	function loadOptions() {
		var opts = $$('input[name^=option_]');
		opts.each(function(opt) {
			var key = opt.get('id').split('_')[1];
			var ov = Cookie.read(key);
			if (ov && ov.length && parseInt(ov)==1) {
				opt.checked=true;
			}
		});

		var opts = $$('select[name^=option_]');
		opts.each(function(opt) {
			var key = opt.get('id').split('_')[1];
			var ov = Cookie.read(key);
			if (ov && ov.length) {
				for (var si=0; si<opt.length; si++) {
					if (opt[si].value == ov) {
						opt.selectedIndex = si;
					}
				}				
			}
		});
	} 


	function saveOptions() {
        // Get checkbox settings from Options Panel
        var opts = $$('input[name^=option_]');
        opts.each(function(opt) {
			var key = opt.get('id').split('_')[1];
			if (opt.checked) {
	            settings.set(key, 1);
				Cookie.write(key, 1, {'duration': 365});
			} else {
	            settings.set(key, 0);
				Cookie.write(key, 0, {'duration': 365});
			}
        });
		
        // Get selectbox settings from Options Panel
        var opts = $$('select[name^=option_]');
        opts.each(function(opt) {
            var key = opt.get('id').split('_')[1];
            settings.set(key, opt.get('value'));
            Cookie.write(key, opt.get('value'), {'duration': 365});
        });
        
		Cookie.write('numPlayers', numPlayers, {'duration': 365});
		Cookie.write('gameType', gameType, {'duration': 365});
		Cookie.write('gameId', gameId, {'duration': 365});
		Cookie.write('numDecks', numDecks, {'duration': 365});
		Cookie.write('numCards', numCards, {'duration': 365});
		if (boards.length) {
			Cookie.write('board', boards[boardListPos].name, {'duration': 365});
		}
	}


    function saveElementPosition(key, element) {
        Cookie.write(key + '_left', element.getStyle('left'), {'duration': 365});
        Cookie.write(key + '_top',  element.getStyle('top'), {'duration': 365});
    }


    function getElementPosition(key) {
        var left = Cookie.read(key + '_left');
        var top = Cookie.read(key + '_top');
        var ret = null;
        
        if (left && left.length && top && top.length) {
            ret = {'left': left, 'top': top};
        }
        
        return ret;
    }


	function goHome() {
		window.location.href='/';
		
		
		$('gameLogo').setAttribute('src', '/resources/img/gameoptions_home.png');
		
		
		$('selectNumPlayers').hide();
		$('selectGameType').hide();
		$('selectNumDecks').hide();
		$('selectNumCards').hide();
		$('selectOptions').hide();
		$('selectBoard').hide();


		$('Player0').hide();
		$('Player1').hide();
		$('Player2').hide();
		$('Player3').hide();
		$('Player4').hide();
		$('Player5').hide();
		$('Player6').hide();
		$('Player7').hide();


		$('gameOptions').removeClass('gameOptions_Play');
		$('gameOptions').addClass('gameOptions_Logo');
		$('iconQuestion').show();
		$('iconRules').show();
		$('iconStrategies').show();
		$('iconEmail').show();


		$('gameOptions').removeClass('movable');
		$('gameOptions').removeClass('showTip');
		$('gameOptions').setAttribute('title', '');
		toolTips.detach($('gameOptions'));
		
		
		$('discard').hide();
		$('theplay').hide();
		$('messageBox').hide();
		$('pointsLog').hide();
		$('boardViewer').hide();
		$('gameWinners').hide();
		$('exitIcon').hide();

		$('discard').setStyle('cursor', 'default');
		$('theplay').setStyle('cursor', 'default');
		$('gameWinners').setStyle('cursor', 'default');
		$('messageBox').setStyle('cursor', 'default');


		$('gameOptions').erase('gameDrag');
		$('boardViewer').hide();
		$('boardContainer').hide();
		
		
		$('eCribbage').show();
		
		
		$('playNow').fade('in');
		$('playNow').show();
	}
	
	
	function runGame() {
		$('gameOptions').addClass('movable');
		$('gameOptions').addClass('showTip');
		$('gameOptions').setAttribute('title', 'You can drag and move this anywhere you like');
		toolTips.attach($('gameOptions'));
		
		if (boards.length) {
			loadBoard(boards[boardListPos].name);
		}
		
		gameId = selectedGameType.number;
		if (numCards == 9) {
			gameId++;
		}
		
		$(steps[steps.length-1].container).setStyle('display', 'none');
		//$$('.playerBox').setStyle('visibility', 'visible');


		saveOptions();

		if (parseInt(settings.get('thirtyoneinhand'))) {
			pegHandPoints.set('thirtyone', 5);
		}
		
		if (parseInt(settings.get('thirtyoneinplay'))) {
			pegPlayPoints.set('thirtyone', 5);
		}
		
		if (parseInt(settings.get('flushpairs'))) {
			pegPlayPoints.set('flushpairs', 4);
		}

		switch (gameId) {
			case  1: gameOptions = { 'id':  1, 'numPlayers': 2, 'cardsToDeal': [6,6], 				'cardsToDiscard': 2, 'cardsToKeep': 4, 'cardsToCribbage': 0, 'numTeams': 0, 'gameLength': 121 }; break;
			case  2: gameOptions = { 'id':  2, 'numPlayers': 2, 'cardsToDeal': [9,9], 				'cardsToDiscard': 3, 'cardsToKeep': 6, 'cardsToCribbage': 0, 'numTeams': 0, 'gameLength': 241 }; break;

			case  3: gameOptions = { 'id':  3, 'numPlayers': 3, 'cardsToDeal': [5,5,5],				'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 1, 'numTeams': 0, 'gameLength': 121 }; break;
			case  4: gameOptions = { 'id':  4, 'numPlayers': 3, 'cardsToDeal': [8,8,8],				'cardsToDiscard': 2, 'cardsToKeep': 6, 'cardsToCribbage': 0, 'numTeams': 0, 'gameLength': 241 }; break;
			case  5: gameOptions = { 'id':  5, 'numPlayers': 3, 'cardsToDeal': [5,5,5],				'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 1, 'numTeams': 1, 'gameLength': 121 }; break;
			case  6: gameOptions = { 'id':  6, 'numPlayers': 3, 'cardsToDeal': [8,8,8],				'cardsToDiscard': 2, 'cardsToKeep': 6, 'cardsToCribbage': 0, 'numTeams': 1, 'gameLength': 241 }; break;

			case  7: gameOptions = { 'id':  7, 'numPlayers': 4, 'cardsToDeal': [5,5,5,5], 			'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 0, 'numTeams': 0, 'gameLength': 121 }; break;
			case  8: gameOptions = { 'id':  8, 'numPlayers': 4, 'cardsToDeal': [7,7,7,7], 			'cardsToDiscard': 1, 'cardsToKeep': 6, 'cardsToCribbage': 2, 'numTeams': 0, 'gameLength': 241 }; break;
			case  9: gameOptions = { 'id':  9, 'numPlayers': 4, 'cardsToDeal': [5,5,5,5], 			'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 0, 'numTeams': 2, 'gameLength': 121 }; break;
			case 10: gameOptions = { 'id': 10, 'numPlayers': 4, 'cardsToDeal': [7,7,7,7], 			'cardsToDiscard': 1, 'cardsToKeep': 6, 'cardsToCribbage': 2, 'numTeams': 2, 'gameLength': 241 }; break;

			case 11: gameOptions = { 'id': 11, 'numPlayers': 5, 'cardsToDeal': [5,5,5,5,4], 		'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 0, 'numTeams': 2, 'gameLength': 121 }; break;
			case 12: gameOptions = { 'id': 12, 'numPlayers': 5, 'cardsToDeal': [7,7,7,7,7], 		'cardsToDiscard': 1, 'cardsToKeep': 6, 'cardsToCribbage': 0, 'numTeams': 2, 'gameLength': 241 }; break;

			case 13: gameOptions = { 'id': 13, 'numPlayers': 6, 'cardsToDeal': [5,5,5,4,4,4], 		'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 1, 'numTeams': 3, 'gameLength': 121 }; break;
			case 14: gameOptions = { 'id': 14, 'numPlayers': 6, 'cardsToDeal': [7,7,7,7,7,7], 		'cardsToDiscard': 1, 'cardsToKeep': 6, 'cardsToCribbage': 0, 'numTeams': 3, 'gameLength': 241 }; break;
			case 15: gameOptions = { 'id': 15, 'numPlayers': 6, 'cardsToDeal': [5,5,5,4,4,4], 		'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 1, 'numTeams': 2, 'gameLength': 121 }; break;
			case 16: gameOptions = { 'id': 16, 'numPlayers': 6, 'cardsToDeal': [7,7,7,7,7,7], 		'cardsToDiscard': 1, 'cardsToKeep': 6, 'cardsToCribbage': 0, 'numTeams': 2, 'gameLength': 241 }; break;

			case 17: gameOptions = { 'id': 17, 'numPlayers': 7, 'cardsToDeal': [5,5,5,4,4,4,4], 	'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 1, 'numTeams': 3, 'gameLength': 121 }; break;
			case 18: gameOptions = { 'id': 18, 'numPlayers': 7, 'cardsToDeal': [7,7,7,7,7,7,6], 	'cardsToDiscard': 1, 'cardsToKeep': 6, 'cardsToCribbage': 0, 'numTeams': 3, 'gameLength': 241 }; break;

			case 19: gameOptions = { 'id': 19, 'numPlayers': 8, 'cardsToDeal': [5,5,5,5,4,4,4,4], 	'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 0, 'numTeams': 4, 'gameLength': 121 }; break;
			case 20: gameOptions = { 'id': 20, 'numPlayers': 8, 'cardsToDeal': [7,7,7,7,6,6,6,6], 	'cardsToDiscard': 1, 'cardsToKeep': 6, 'cardsToCribbage': 2, 'numTeams': 4, 'gameLength': 241 }; break;
			case 21: gameOptions = { 'id': 21, 'numPlayers': 8, 'cardsToDeal': [5,5,5,5,4,4,4,4], 	'cardsToDiscard': 1, 'cardsToKeep': 4, 'cardsToCribbage': 0, 'numTeams': 2, 'gameLength': 121 }; break;
			case 22: gameOptions = { 'id': 22, 'numPlayers': 8, 'cardsToDeal': [7,7,7,7,6,6,6,6], 	'cardsToDiscard': 1, 'cardsToKeep': 6, 'cardsToCribbage': 2, 'numTeams': 2, 'gameLength': 241 }; break;
		}

		if (gameOptions.cardsToKeep == 4) {
			gameOptions.minimumPublishPoints = 12;
		} else {
			gameOptions.minimumPublishPoints = 24;
		}

		// Setup computer players
		computerImages.shuffle();

		// This should also set the user_id to this computer id
		// There have been 100 computer players created user_ids: 1-100 
		var user_ids = new Array();
		
		// This needs to be a user_id from database, hard coded for now
		// This is for dev only
		currentUserId = 101;
		
		user_ids.push(currentUserId);
		
		for (var cc=1; cc<gameOptions.numPlayers; cc++) {
			user_ids.push(computerImages[cc]);
			var ct = '<img src="/resources/img/computers/' + leadingZeros(computerImages[cc], 2, '0') + '.jpg" /><br />' + 'Computer ' + computerImages[cc];
			$('Player'+cc).set('title', ct);
			playerToolTips.attach($('Player'+cc));
		}
		gameOptions.userIds = user_ids;
		

		if (settings.speedround) {
			gameOptions.gameLength = 31;
		}

		if (gameId == 20 || gameId == 22) {
			numDecks = 2;
		}

		gameOptions.numDecks = numDecks;
		gameOptions.numberGames = settings.numbergames;
		gameOptions.settings = settings;

		gameOptions.handPoints = pegHandPoints;
		gameOptions.playPoints = pegPlayPoints;
        
		var gwText = '';
		switch (parseInt(gameOptions.numberGames)) {
			case  1:	gwText = "First To Win 1 Game";		gameOptions.numberGamesToWin = 1;	break; 
			case  3:	gwText = "First To Win 2 Games"; 	gameOptions.numberGamesToWin = 2;	break; 
			case  5:	gwText = "First To Win 3 Games"; 	gameOptions.numberGamesToWin = 3;	break; 
			case  7:	gwText = "First To Win 4 Games"; 	gameOptions.numberGamesToWin = 4;	break; 
			case  9:	gwText = "First To Win 5 Games"; 	gameOptions.numberGamesToWin = 5;	break; 
			case 11:	gwText = "First To Win 6 Games"; 	gameOptions.numberGamesToWin = 6;	break; 
		}
		$('gamesWonTitle').set('text', gwText);

		//console.log('gameId: ', gameId);
		//console.log('selectedGameType: ', selectedGameType);
		
		switch (parseInt(numPlayers)) {
			case 2:
				$('Player0').show();
				$('Player1').show();

				$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
				$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
				
				$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
				$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
			break;
				
			case 3:
				$('Player0').show();
				$('Player1').show();
				$('Player2').show();

				if (gameOptions.id==3 || gameOptions.id==4) {
					$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player2').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
				
					$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player2').getElements('.scoreBox').addClass('scoreBox_Green');
				} else if (gameOptions.id==5 || gameOptions.id==6) {
					$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player2').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
				
					$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player2').getElements('.scoreBox').addClass('scoreBox_Blue');
				}
			break;
				
			case 4:
				$('Player0').show();
				$('Player1').show();
				$('Player2').show();
				$('Player3').show();
				
				if (gameOptions.id==7 || gameOptions.id==8) {
					$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player2').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
					$('Player3').setStyle('background', 'url(/resources/img/hand_background_yellow.png) no-repeat');
				
					$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player2').getElements('.scoreBox').addClass('scoreBox_Green');
					$('Player3').getElements('.scoreBox').addClass('scoreBox_Yellow');
				} else if (gameOptions.id==9 || gameOptions.id==10) {
					$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player2').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player3').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
				
					$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player2').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player3').getElements('.scoreBox').addClass('scoreBox_Blue');
				}
			break;
				
			case 5:
				$('Player0').show();
				$('Player1').show();
				$('Player2').show();
				$('Player3').show();
				$('Player4').show();

				$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
				$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
				$('Player2').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
				$('Player3').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
				$('Player4').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
				
				$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
				$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
				$('Player2').getElements('.scoreBox').addClass('scoreBox_Green');
				$('Player3').getElements('.scoreBox').addClass('scoreBox_Blue');
				$('Player4').getElements('.scoreBox').addClass('scoreBox_Green');
			break;
				
			case 6:
				$('Player0').show();
				$('Player1').show();
				$('Player2').show();
				$('Player3').show();
				$('Player4').show();
				$('Player5').show();

				if (gameOptions.id==13 || gameOptions.id==14) {
					$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player2').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
					$('Player3').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player4').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player5').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
				
					$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player2').getElements('.scoreBox').addClass('scoreBox_Green');
					$('Player3').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player4').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player5').getElements('.scoreBox').addClass('scoreBox_Green');
				} else if (gameOptions.id==15 || gameOptions.id==16) {
					$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player2').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player3').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player4').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player5').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
				
					$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player2').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player3').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player4').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player5').getElements('.scoreBox').addClass('scoreBox_Blue');
				}
			break;
				
			case 7:
				$('Player0').show();
				$('Player1').show();
				$('Player2').show();
				$('Player3').show();
				$('Player4').show();
				$('Player5').show();
				$('Player6').show();

				$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
				$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
				$('Player2').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
				$('Player3').setStyle('background', 'url(/resources/img/hand_background_yellow.png) no-repeat');
				$('Player4').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
				$('Player5').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
				$('Player6').setStyle('background', 'url(/resources/img/hand_background_yellow.png) no-repeat');

				$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
				$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
				$('Player2').getElements('.scoreBox').addClass('scoreBox_Green');
				$('Player3').getElements('.scoreBox').addClass('scoreBox_Yellow');
				$('Player4').getElements('.scoreBox').addClass('scoreBox_Blue');
				$('Player5').getElements('.scoreBox').addClass('scoreBox_Green');
				$('Player6').getElements('.scoreBox').addClass('scoreBox_Yellow');
			break;
				
			case 8:
				$('Player0').show();
				$('Player1').show();
				$('Player2').show();
				$('Player3').show();
				$('Player4').show();
				$('Player5').show();
				$('Player6').show();
				$('Player7').show();

				if (gameOptions.id == 19 || gameOptions.id == 20) {
					$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player2').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
					$('Player3').setStyle('background', 'url(/resources/img/hand_background_yellow.png) no-repeat');
					$('Player4').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player5').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player6').setStyle('background', 'url(/resources/img/hand_background_green.png) no-repeat');
					$('Player7').setStyle('background', 'url(/resources/img/hand_background_yellow.png) no-repeat');

					$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player2').getElements('.scoreBox').addClass('scoreBox_Green');
					$('Player3').getElements('.scoreBox').addClass('scoreBox_Yellow');
					$('Player4').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player5').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player6').getElements('.scoreBox').addClass('scoreBox_Green');
					$('Player7').getElements('.scoreBox').addClass('scoreBox_Yellow');
				} else if (gameOptions.id == 21 || gameOptions.id == 22) {
					$('Player0').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player1').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player2').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player3').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player4').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player5').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');
					$('Player6').setStyle('background', 'url(/resources/img/hand_background_red.png) no-repeat');
					$('Player7').setStyle('background', 'url(/resources/img/hand_background_blue.png) no-repeat');

					$('Player0').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player1').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player2').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player3').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player4').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player5').getElements('.scoreBox').addClass('scoreBox_Blue');
					$('Player6').getElements('.scoreBox').addClass('scoreBox_Red');
					$('Player7').getElements('.scoreBox').addClass('scoreBox_Blue');
				}
			break;
		}
		
		$('discard').show();
		$('theplay').show();
		$('messageBox').show();
		//$('pointsLog').show();
		$('logIcon').show();
		$('boardViewer').show();
		$('gameWinners').show();
		$('exitIcon').show();

		$('discard').setStyle('cursor', 'move');
		$('theplay').setStyle('cursor', 'move');
		$('gameWinners').setStyle('cursor', 'move');
		$('messageBox').setStyle('cursor', 'move');


        // Make elements draggable and save positions on drop 
		var gameDrag = $('gameOptions').makeDraggable({
			preventDefault: true,
			stopPropagation: true,
            onDrop: function(element, droppable, event) {
                saveElementPosition('gameOptions', element);
            }
		});
		$('gameOptions').store('gameDrag', gameDrag);
		
		
		var pos = getElementPosition('gameOptions');
		//console.log('gameOptions', pos);
		if (pos) {
            $('gameOptions').setStyles({
               'left': pos.left, 
               'top': pos.top
            });
		}
		
		$('discard').makeDraggable({
			preventDefault: true,
			stopPropagation: true,
            onDrop: function(element, droppable, event) {
                saveElementPosition('discard', element);
            }
		});
        var pos = getElementPosition('discard');
        //console.log('discard', pos);
        if (pos) {
            $('discard').setStyles({
               'left': pos.left, 
               'top': pos.top
            });
        }

		$('theplay').makeDraggable({
			preventDefault: true,
			stopPropagation: true,
            onDrop: function(element, droppable, event) {
                saveElementPosition('theplay', element);
            }
		});
        var pos = getElementPosition('theplay');
        //console.log('theplay', pos);
        if (pos) {
            $('theplay').setStyles({
               'left': pos.left, 
               'top': pos.top
            });
        }

		$('gameWinners').makeDraggable({
			preventDefault: true,
			stopPropagation: true,
            onDrop: function(element, droppable, event) {
                saveElementPosition('gameWinners', element);
            }
		});
        var pos = getElementPosition('gameWinners');
        //console.log('gameWinners', pos);
        if (pos) {
            $('gameWinners').setStyles({
               'left': pos.left, 
               'top': pos.top
            });
        }

		$('messageBox').makeDraggable({
			preventDefault: true,
			stopPropagation: true,
            onDrop: function(element, droppable, event) {
                saveElementPosition('messageBox', element);
            }
		});
        var pos = getElementPosition('messageBox');
        //console.log('messageBox', pos);
        if (pos) {
            $('messageBox').setStyles({
               'left': pos.left, 
               'top': pos.top
            });
        }

		$('pointsLog').makeDraggable({
		    'handle': $('gamePointsTitle'),
            onDrop: function(element, droppable, event) {
                saveElementPosition('pointsLog', element);
            }
        });
        var pos = getElementPosition('pointsLog');
        //console.log('pointsLog', pos);
        if (pos) {
            $('pointsLog').setStyles({
               'left': pos.left, 
               'top': pos.top
            });
        }
		
		$('boardViewer').makeDraggable({
            onDrop: function(element, droppable, event) {
                saveElementPosition('boardViewer', element);
            }		    
		});
        var pos = getElementPosition('boardViewer');
        //console.log('boardViewer', pos);
        if (pos) {
            $('boardViewer').setStyles({
               'left': pos.left, 
               'top': pos.top
            });
        }


		$('boardZoomExpand').hide();
		//$('boardZoomNext').hide();
		//$('boardZoomPrev').hide();
		//$('boardZoomCancel').hide();


		$('boardViewer').show();
		$('boardContainer').show();
		gameOptions.userId = currentUserId;
		game = new Cribbage(gameOptions);
		game.initGame();
		
		
		//console.log(gameOptions);
		
		//redrawPegs();

		
		//toolTips = new Tips('.scoreBox', {'className': 'scoreBoxTip'});
	
	
		$('logWindowClose').addEvent('click', function() {
			$('pointsLog').hide();
			$('logIcon').show();
		});

		$('logWindowCollapse').addEvent('click', function() {
			$('gameLogDataContainer').toggle();
			$('logWindowCollapse').hide();
			$('logWindowExpand').show();
			$('pointsLog').setStyle('height', '0px');
		});

		$('logWindowExpand').addEvent('click', function() {
			$('gameLogDataContainer').toggle();
			$('logWindowCollapse').show();
			$('logWindowExpand').hide();
			$('pointsLog').setStyle('height', (250-68)+'px');
		});
		$('logWindowCollapse').fireEvent('click');
	
        $('logIcon').addEvent('click', function() {
            $('pointsLog').show();
            $('logIcon').hide();
        });



		$('boardZoomBrowse').addEvent('click', function() {
			$('boardZoomBrowseButtons').toggle();
		});

		$('boardZoomCancel').addEvent('click', function() {
			$('boardZoomBrowseButtons').toggle();
		});

		$('boardZoomPrev').addEvent('click', function() {
			boardListPos--;
			if (boardListPos < 0) {
				boardListPos=boards.length-1;
			}
			loadBoard(boards[boardListPos].name);
			redrawPegs();
		});

		$('boardZoomNext').addEvent('click', function() {
			boardListPos++;
			if (boardListPos >= boards.length) {
				boardListPos=0;
			}
			loadBoard(boards[boardListPos].name);
			redrawPegs();
		});

		$('boardZoomIn').addEvent('click', function(e) {
			boardZoomIn();
			loadBoard(boards[boardListPos].name);
		});

		$('boardZoomOut').addEvent('click', function(e) {
			boardZoomOut();
			loadBoard(boards[boardListPos].name);
		});

		$('boardZoomCollapse').addEvent('click', function(e) {
			$('boardZoomCollapse').hide();
			$('boardZoomExpand').show();
			
			orgBoardContainerWidth = $('boardViewer').getStyle('width'); 
			$('boardViewer').setStyle('width', '40px'); 
			$('boardContainer').hide();
		});

		$('boardZoomExpand').addEvent('click', function(e) {
			$('boardZoomCollapse').show();
			$('boardZoomExpand').hide();

			$('boardViewer').setStyle('width', orgBoardContainerWidth); 
			$('boardContainer').show();
		});

		$('boardZoomClose').addEvent('click', function(e) {
			$('boardViewer').hide();
			$('boardIcon').show();
		});

        $('boardIcon').addEvent('click', function() {
            $('boardViewer').show();
            $('boardViewer').show();

            $('boardContainer').show();
            $('boardContainer').show();

            $('boardIcon').hide();

            var bc = $('boardContainer');
            bc.setStyles({
                'cursor': 'default',
                'top': '0px',
                'left': '40px',
                'position': 'absolute'
            });
            bc.inject($('boardViewer'));
            Cookie.write('boardViewer_docked', 0, {'duration': 365});
        });
    
		$('boardZoomDock').addEvent('click', function() {
			fitBoardToTable();
			loadBoard(boards[boardListPos].name);
			
			var bc = $('boardContainer');
			bc.setStyles({
				'cursor': 'default',
				'top': '160px',
				'left': '200px',
				'position': 'absolute'
			});
			bc.inject($('gameOptions'));
            Cookie.write('boardViewer_docked', 1, {'duration': 365});
			$('boardViewer').hide();
			
			$('boardIcon').show();
		});

		$('boardZoomWindow').addEvent('click', function() {
			if (!boardWindow) {
				boardWindow = window.open('boardWindow.html', 'BoardWindow', 'status=0,toolbar=0,menubar=0,directories=0');
				$('boardIcon').show();

				/*
				boardWindow.addEvent('close', function() {
					$('boardIcon').show();
					boardWindow = null;
					console.log('Board Window Closed');
				});
				*/
			} else {
				boardWindow.close();
				boardWindow = null;
			}

			
			/*
			fitBoardToTable();
			loadBoard(boards[boardListPos].name);
			
			var bc = $('boardContainer');
			bc.setStyles({
				'cursor': 'default',
				'top': '160px',
				'left': '200px',
				'position': 'absolute'
			});
			bc.inject($('gameOptions'));
            Cookie.write('boardViewer_docked', 1, {'duration': 365});
			$('boardViewer').hide();
			
			$('boardIcon').show();
			*/
		});

        if (Cookie.read('boardViewer_docked') == '1') {
            $('boardZoomDock').fireEvent('click');
            $('boardIcon').show();
        } else {
            $('boardIcon').hide();
        }


		// Position the Points Log window at the 
		// bottom right corner of the browser window
		if (!getElementPosition('pointsLog')) {
    		var pl = $('pointsLog');
    		var db = $(document.body);
    		pl.setStyle('left', (db.getWidth()-600)+'px');
    		pl.setStyle('top', (db.getHeight()-120)+'px');
		}
		
		// Position the Board Viewer window at the 
		// bottom left corner of the browser window
		if (!getElementPosition('boardViewer')) {
			var bv = $('boardViewer');
			var db = $(document.body);
			bv.setStyle('left', '0px');
			bv.setStyle('top', (db.getHeight()-bv.getDimensions().height)+'px');
		}
		
		/* TODO: Need to figure out 1.3 method for periodical */
		var bg = Cookie.read('randombackground');
		if (bg && parseInt(bg)) {
			//var myImageFunction = pickRandomBackgroundImage.create();
			var myImageFunction = pickRandomBackgroundImage;
			myImageFunction.periodical(parseInt(Cookie.read('backgroundminutes')) * 60 * 1000);
		}
		
		
		var cb = Cookie.read('cardback');
		if (cb) {
			//var myImageFunction = pickRandomBackgroundImage.create();
			//myImageFunction.periodical(parseInt(Cookie.read('backgroundminutes')) * 60 * 1000);
		}
	}


	var pickRandomBackgroundImage = function() {
		var groups = $$('.folder');
		var group = groups.getRandom();
		var numBGs = group.get('rel');
		var newBG = Number.random(1, numBGs);
        var padded = leadingZeros(newBG, 3, "0");
		var newImg = '/resources/img/backgrounds/'+group.get('id').replace(/~/g, '/').toLowerCase()+'/'+padded+'.jpg'; 

		$(document.body).setStyle('background', 'url(' + newImg + ')');
	};


	// 370 x 300
	function fitBoardToTable() {
		var done = false;
		var curWidth = parseInt(boardOrgWidth * getBoardZoom());
		var curHeight = parseInt(boardOrgHeight * getBoardZoom());
		
		while (!done) {
			 //console.log("%d x %d", curWidth, curHeight);
			 
			if (curWidth <= 420 && curHeight <= 350) {
				done = true;
			} else {
				boardZoom -= 5;
				var curWidth = parseInt(boardOrgWidth * getBoardZoom());
				var curHeight = parseInt(boardOrgHeight * getBoardZoom());
			}
		}
	}
	
	
	function playNow() {
		var pn = $('playNow');
		
		pn.addEvent('mouseover', function() {
			pn.addClass('playNow_Over');
		});

		pn.addEvent('mouseleave', function() {
			pn.removeClass('playNow_Over');
		});

		pn.addEvent('click', function() {
			$('gameLogo').set('src', '/resources/img/gameoptions_play.png');
		
			$('gameOptions').removeClass('gameOptions_Logo');
			$('gameOptions').addClass('gameOptions_Play');
			pn.fade('out');
			
			$('iconRules').fade('out');
			$('iconStrategies').fade('out');
			$('iconQuestion').fade('out');
			$('iconEmail').fade('out');
			
			$('selectNumPlayers').show();
			
			// $('eCribbage').hide();

			doResize();
		});
	} Onload.add(playNow);
	
	
	function selectNumPlayers() {
        $('selectGameType').show();
        selectGameType();

        $$('.npSelector').each(function(el) {
			var id = el.getAttribute('id');
			id = id.substring(id.length-1, id.length);
			
			el.addEvent('click', function() {
				if (numPlayers != id) {
					for (var np=2; np<=8; np++) {
						$('num_players_'+np).removeClass('num_players_'+np+'_selected');
					}
					
					$('num_players_'+numPlayers).removeClass('selectedNumPlayers');
					$('num_players_'+id).addClass('num_players_'+id+'_selected');
					numPlayers = id;
                    gameType = null;
                    
                    selectGameType();
                    
                    
                    /*
					var dest = $('selectNumPlayers').getElement('.sectionPanel');
					var pis = dest.getElements('.playerIcon');
					if (pis) {
						pis.each(function(el) {
							el.destroy();
						});
					}
					
					var clrs = ['Red', 'Blue', 'Green', 'Yellow'];
					for (var p=0; p<numPlayers; p++) {
						var xPos = Number.random(10, 320);
						var yPos = Number.random(20, 180);
						var clr = Number.random(0, 3);
						
						var pi = new Element('div', {
							'class': 'playerIcon',
							'html': '<img src="/resources/img/players/'+clrs[clr]+'.png" border="0" />',
							'styles': {
								'width': '48px',
								'height': '48px',
								'position': 'absolute',
								'left': xPos+'px',
								'top': yPos+'px'
							}
						});
						pi.inject(dest, 'bottom');
					}
					*/
				}
			});	
		});
		
        if (Cookie.read('numPlayers')) {
        	$('num_players_'+Cookie.read('numPlayers')).fireEvent('click');
        }
	} Onload.add(selectNumPlayers);
	
	
	function selectGameType() {
		gTypes = new Array();
		
		switch (parseInt(numPlayers)) {
			case 2:
				gTypes.push({
					'number': 1,
					'id': '1-on-1',
					'title': '2 Players head to head',
					'cards6': '6 cards dealt to each player<br />2 cards discarded',
					'cards9': '9 cards dealt to each player<br />3 cards discarded'
				});
			break;

			case 3:
				gTypes.push({
					'number': 3,
					'id': '1-on-1-on-1',
					'title': '3 Players head to head',
					'cards6': '5 cards dealt to each player<br />1 card discarded<br />1 card dealt to cribbage',
					'cards9': '8 cards dealt to each player<br />2 cards discarded'
				});
				
				gTypes.push({
					'number': 5,
					'id': '2-on-1',
					'title': '1 team of 2 players against single player.<br />Single player always gets the Cribbage.<br />Deal rotates as usual.',
					'cards6': '5 cards dealt to each player<br />1 card discarded<br />1 card dealt to cribbage',
					'cards9': '8 cards dealt to each player<br />2 cards discarded'
				});
			break;

			case 4:
				gTypes.push({
					'number': 7,
					'id': '1-on-1-on-1-on-1',
					'title': '4 Players head to head',
					'cards6': '5 cards dealt to each player<br />1 card discarded',
					'cards9': '7 cards dealt to each player<br />2 cards discarded<br />2 cards dealt to cribbage'
				});
				
				gTypes.push({
					'number': 9,
					'id': '2-on-2',
					'title': '2 teams of 2 players',
					'cards6': '5 cards dealt to each player<br />1 card discarded',
					'cards9': '7 cards dealt to each player<br />2 cards discarded<br />2 cards dealt to cribbage'
				});
			break;

			case 5:
				gTypes.push({
					'number': 11,
					'id': '2-on-2-on-1',
					'title': '<ul style="padding: 0 0 0 10px;"><li>2 teams of 2 players against single player.<br />Single player always gets the Cribbage.<br />Deal rotates as usual.',
					'cards6': '5 cards dealt to first 4 players<br />1 card discarded',
					'cards9': '7 cards dealt to each player<br />2 cards discarded<br />1 card dealt to cribbage'
				});
			break;

			case 6:
				gTypes.push({
					'number': 13,
					'id': '2-on-2-on-2',
					'title': '3 teams of 2 players',
					'cards6': '5 cards dealt to first 3 players<br />1 card discarded<br />1 card dealt to cribbage',
					'cards9': '7 cards dealt to each player<br />1 card discarded'
				});

				gTypes.push({
					'number': 15,
					'id': '3-on-3',
					'title': '2 teams of 3 players',
					'cards6': '5 cards dealt to first 4 players<br />1 card discarded',
					'cards9': '7 cards dealt to each player<br />1 card discarded'
				});
			break;

			case 7:
				gTypes.push({
					'number': 17,
					'id': '2-on-2-on-2-on-1',
					'title': '<ul style="padding: 0 0 0 10px;"><li>3 teams of 2 players against single player.<br />Single player always gets the Cribbage.<br />Deal rotates as usual.',
					'cards6': '5 cards dealt to first 4 players<br />1 card discarded',
					'cards9': '7 cards dealt to first 6 players<br />1 card discarded'
				});
			break;

			case 8:
				gTypes.push({
					'number': 19,
					'id': '2-on-2-on-2-on-2',
					'title': '4 teams of 2 players',
					'cards6': '5 cards dealt to first 4 players<br />1 card discarded',
					'cards9': '7 cards dealt to first 6 players<br />1 card discarded'
				});

				gTypes.push({
					'number': 21,
					'id': '4-on-4',
					'title': '2 teams of 4 players',
					'cards6': '5 cards dealt to first 4 players<br />1 card discarded',
					'cards9': '7 cards dealt to first 6 players<br />1 card discarded'
				});
			break;
		}
		
		var egTypes = $$('.gtSelector');
		if (egTypes) {
			egTypes.each(function(gt) {
				gt.dispose();
			});
		}
		
		var gtCon = $('selectGameType');
		//gtCon = gtCon.getElement('.sectionPanel');
		selectedGameType = gTypes[0];
		
		
		toolTips.detach($('num_cards_6'));
		toolTips.detach($('num_cards_9'));
		$('num_cards_6').setAttribute('title', selectedGameType.cards6);
		$('num_cards_9').setAttribute('title', selectedGameType.cards9);
		toolTips.attach($('num_cards_6'));
		toolTips.attach($('num_cards_9'));

		
		//console.log(Cookie.read('panel_selectgametype'));

		
		gTypes.each(function(gt, idx) {
			var op = new Element('div', {
				'id': 'game_type_'+gt.id,
				'class': 'gtSelector showTip',
				'title': gt.title
			});
			toolTips.attach(op);

			if (gameType == gt.id || (!gameType && idx==0) || gameType.contains('object')) {
				gameType=gt.id;
				op.addClass('selectedGameType');
			}
			
			op.inject(gtCon, 'before');
		});
		
		$$('.gtSelector').each(function(el) {
			var id = el.getAttribute('id');
			id = id.split('_')[2];
			
			el.addEvent('click', function() {
				gTypes.each(function(gt) {
					if (gt.id == id) {
						if (gt.number==5 || gt.number==11 || gt.number==17) {
							$('option_rockthecrib').set('disabled', 'true');
							$('option_rockthecrib').checked = false;
							$('option_rockthecrib').set('value', '0');
						} else {
							$('option_rockthecrib').erase('disabled');
							$('option_rockthecrib').checked = true;
							$('option_rockthecrib').set('value', '1');
						}
						
						gameId = gt.number;
						selectedGameType = gt;
						
						$('num_cards_6').setAttribute('title', gt.cards6);
						$('num_cards_9').setAttribute('title', gt.cards9);

						toolTips.detach($('num_cards_6'));
						toolTips.detach($('num_cards_9'));
						$('num_cards_6').setAttribute('title', gt.cards6);
						$('num_cards_9').setAttribute('title', gt.cards9);
						toolTips.attach($('num_cards_6'));
						toolTips.attach($('num_cards_9'));
					}
				});
				
				if (gameType != id) {
					var fromId = $('game_type_'+gameType).getAttribute('id');
					fromId = fromId.split('_')[2];
					
					$('game_type_'+fromId).removeClass('selectedGameType');
					$('game_type_'+id).addClass('selectedGameType');
					gameType = id;
				}
			});	
		});
		
		//toolTips = new Tips('.toolTip', {'className': 'gameToolTip'});
	} //Onload.add(selectGameType);
	
	
	function selectNumDecks() {
		$$('.ndSelector').each(function(el) {
			var id = el.getAttribute('id');
			id = id.substring(id.length-1, id.length);
			
			el.addEvent('click', function() {
				if (numDecks != id) {
					var fromId = $('num_decks_'+numDecks).getAttribute('id');
					fromId = fromId.substring(fromId.length-1, fromId.length);
					
					$('num_decks_'+fromId).removeClass('selectedDeck');
					$('num_decks_'+id).addClass('selectedDeck');
					numDecks = parseInt(id);
				}
			});	
		});
	} Onload.add(selectNumDecks);
	
	
	function selectNumCards() {
		$$('.ncSelector').each(function(el) {
			var id = el.getAttribute('id');
			id = id.substring(id.length-1, id.length);
			
			el.addEvent('click', function() {
				if (numCards != id) {
					var fromId = $('num_cards_'+numCards).getAttribute('id');
					fromId = fromId.substring(fromId.length-1, fromId.length);
					
					$('num_cards_'+fromId).removeClass('selectedCards');
					$('num_cards_'+id).addClass('selectedCards');
					numCards = parseInt(id);
				}
			});	
		});
	} Onload.add(selectNumCards);

	
	function selectSettings() {
	}
	
	
	function selectBoard() {
		var gameId = selectedGameType.number;
		if (numCards == 9) {
			gameId++;
		}
	}


	function listDesigns() {
		var reqUrl = 'listboards.php';

		var myHTMLRequest = new Request( {
			url: reqUrl,
			method :'post',
			onSuccess : function(responseText, responseXML) {
				var designsData = JSON.decode(responseText);
				
				if (designsData.length != undefined && designsData.length) {
					for (var d=0; d<designsData.length; d++) {
						var obj = { name: designsData[d].split('.')[0] };
						boards.push(obj);
					}
					
					//loadBoard(boards[boardListPos].name);

					$('boardNext').addEvent('click', function() {
						boardListPos++;
						
						if (boardListPos>=boards.length) {
							boardListPos=0;
						}
						loadBoard(boards[boardListPos].name);
						
						var x = new Chain();
						
						var one = function() {
							var el = $('handImage');
							$('boardPreview').set('tween', {duration: 500}).fade('out');
						};
			
						var two = function(){
							var el = $('handImage');
							$('boardPreview').setAttribute('src', '/resources/designs/medium/' + boards[boardListPos].name + '.png');
							$('boardPreview').set('tween', {duration: 500}).fade('in');
						};
			
						x.chain(one);
						x.chain(two);
						x.callChain();
						x.callChain.delay(500, x);
						x.callChain.delay(500, x);
					});

					$('boardPrev').addEvent('click', function() {
						boardListPos--;
                        
						if (boardListPos<0) {
							boardListPos=boards.length-1;
						}
						loadBoard(boards[boardListPos].name);

						var x = new Chain();
						
						var one = function() {
							var el = $('handImage');
							$('boardPreview').set('tween', {duration: 500}).fade('out');
						};
			
						var two = function(){
							var el = $('handImage');
							$('boardPreview').setAttribute('src', '/resources/designs/medium/' + boards[boardListPos].name + '.png');
							$('boardPreview').set('tween', {duration: 500}).fade('in');
						};
			
						x.chain(one);
						x.chain(two);
						x.callChain();
						x.callChain.delay(500, x);
						x.callChain.delay(500, x);
					});
				}
				
				loadSettings();
				loadOptions();
			}
		}).send();
		
		loadSettings();
		loadOptions();
	} Onload.add(listDesigns);


	function loadBoard(design) {
		//var boardImg = new Asset.images(["/resources/designs/patterns/"+design+".png?id="+Math.floor(Math.random()*100000)], {
		var boardImg = new Asset.images(["/resources/designs/patterns/"+design+".png"], {
			onComplete: function() {
				$('boardContainer').empty();
				
				var boardImg = new Element('img', {
					'id': 'board',
					'src': '/resources/designs/patterns/'+design+'.png',
					'styles': {
						'cursor': 'move',
						'float': 'left'
					}
				});
				boardImg.inject($('boardContainer'));
				
				//$('board').setAttribute('src', "/resources/designs/patterns/"+design+".png");
				//var boardImg = $('board');

				if (!boardOrgWidth/* || boardOrgName != design */) {
					boardOrgWidth = boardImg.width;
				}

				if (!boardOrgHeight/* || boardOrgName != design */) {
					boardOrgHeight = boardImg.height;
				}
				//boardOrgName = name;

				$('board').setStyles({
					'width': parseInt(boardOrgWidth*getBoardZoom())+'px',
					'height': parseInt(boardOrgHeight*getBoardZoom())+'px'
				});

				$('boardContainer').setStyles({
					'width': parseInt(boardOrgWidth*getBoardZoom())+'px',
					'height': parseInt(boardOrgHeight*getBoardZoom())+'px'
				});

				$('boardControlls').setStyles({
					'height': parseInt(boardOrgHeight*getBoardZoom())+'px'
				});

				$('boardViewer').setStyles({
					'width': (parseInt(boardOrgWidth*getBoardZoom())+43)+'px',
					'height': parseInt(boardOrgHeight*getBoardZoom())+'px'
				});

				//$('boardControlls').setStyles({
				//	'top': '-'+parseInt((boardOrgHeight*getBoardZoom())-10)+'px'
				//});
					
				var reqUrl = 'loaddesign.php';
				var myHTMLRequest = new Request( {
					url: reqUrl,
					method :'post',
					wait: true,
					onSuccess : function(responseText, responseXML) {
						var result = JSON.decode(responseText);
						pegs = JSON.decode(responseText).pegs;
						placePegs(pegs);
						//redrawPegs();
						//autoStartGame(parseInt(gameId));
					}
				}).send('designName=' + design);

			}
		});
	}

	
	function placePegs(pegs) {
		var currentPeg = null;
		var currentPegId = null;
		var sp = new Array(pegs);
		var that = this;
		
		var pegsRed = 0;
		var pegsBlue = 0;
		var pegsGreen = 0;
		var pegsYellow = 0;

		if (pegs) {
			var boardContainer = $('boardContainer');
			
			pegs.each(function(peg) {
				currentPeg = null;
				currentPegId = null;

				//console.log(peg['class']);
				
				if (peg['class'].indexOf('peg_point_red') != -1) {
					pegsRed++;
					currentPegId = pegsRed; 
					currentPeg = 'Red';
				} else if (peg['class'].indexOf('peg_point_blue') != -1) {
					pegsBlue++;
					currentPegId = pegsBlue; 
					currentPeg = 'Blue';
				} else if (peg['class'].indexOf('peg_point_green') != -1) {
					pegsGreen++;
					currentPegId = pegsGreen; 
					currentPeg = 'Green';
				} else if (peg['class'].indexOf('peg_point_yellow') != -1) {
					pegsYellow++;
					currentPegId = pegsYellow; 
					currentPeg = 'Yellow';
				}
				
				if (currentPeg && currentPegId) {
					var cp = $(currentPeg+'_'+currentPegId);
					if (cp) {
						cp.dispose();
					}
					
					var newPeg = new Element('div', {	
						'id': currentPeg+'_'+currentPegId,
						'title': 'Peg #'+currentPegId,
						'class': peg['class'],
						'styles': {
							'position': 'absolute',
							'left': (parseInt(peg.boardXPos*getBoardZoom()))+'px',
							'top': (parseInt(peg.boardYPos*getBoardZoom()))+'px'
						}
					}).inject(boardContainer);
				}
			});

			redrawPegs();
		}
	}

	// JSFiddle for testing
	// http://jsfiddle.net/KBZHr/2/
	function movePeg(color, pts) {
		try {
			var pointsMove = new Array();
			
			for (var p=0; p<pts; p++) {
				pointsMove.push(doMovePeg(color, 1));
			}
			
			var pointsChain = new Chain(pointsMove);
		}
		
		catch(e) {
			if (debug) {
			    console.log('movePeg Error');
				console.log(e);
				console.log(arguments);
			}
			
			return false;
		}
		
		return true;
	}
	
	function doMovePeg(color, pts) {
		try {
			if (!boards.length) {
				return;
			}
			
			if (boardWindow) {
				boardWindow.fireEvent('movePeg', arguments);
			} else {
				var endPos = 0;
				var place = pts;
				if (place > 121) {
					place = 121 - parseInt(place % 121);
				}
				
				eval('points.'+color+' += ' + pts);
				eval('endPos = points.'+color);
				eval('points.'+color+' = Math.min(points.'+color+',120)');
		
				var mover = new Fx.Move($('peg_'+color.toLowerCase()), {
				    relativeTo: $(color+'_'+endPos),
				    position: 'upperleft',
				    edge: 'upperLeft',
				    offset: {x:0, y:0},
				    duration: 'long'
				})
				mover.start();
				
				$('peg_'+color.toLowerCase()).setAttribute('title', 'Score: '+endPos);
			}
		}
		
		catch(e) {
			if (debug) {
			    console.log('doMovePeg Error');
				console.log(e);
				console.log(arguments);
			}
			
			return false;
		}
		
		return true;
	}
	

	function redrawPegs() {
		if (!boards.length) {
			return;
		}
		
		var redPos = 1;
		if (game != null) {
			redPos = game.players[0].getGamePoints();
		}
		if (!redPos) {
			redPos = 1;
		}

		if ($('peg_red')) {
			$('peg_red').dispose();
		}
		
		if ($('Red_'+redPos)) {
			var peg_red = new Element('img', {
				'id': 'peg_red',
				'src': '/resources/img/pegs/point_red.png',
				'styles': {
					'height': parseInt(9*getBoardZoom())+'px',
					'width': parseInt(9*getBoardZoom())+'px',
					'position': 'absolute',
					'left': $('Red_'+redPos).getStyle('left'),
					'top': $('Red_'+redPos).getStyle('top'),
					'z-index': '1000'
				}
			});
			peg_red.inject($('boardContainer'));
		}

		
		var bluePos = 1;
		if (game != null) {
			bluePos = game.players[1].getGamePoints();
		}
		if (!bluePos) {
			bluePos = 1;
		}

		if ($('peg_blue')) {
			$('peg_blue').dispose();
		}
		
		if ($('Blue_' + redPos)) {
			var peg_blue = new Element('img', {
				'id': 'peg_blue',
				'src': '/resources/img/pegs/point_blue.png',
				'styles': {
					'height': parseInt(9 * getBoardZoom()) + 'px',
					'width': parseInt(9 * getBoardZoom()) + 'px',
					'position': 'absolute',
					'left': $('Blue_' + bluePos).getStyle('left'),
					'top': $('Blue_' + bluePos).getStyle('top'),
					'z-index': '1000'
				}
			});
			peg_blue.inject($('boardContainer'));
		}
		
		
		if (game != null && 
			(
				(game.options.numPlayers > 2 && !game.options.numTeams)
				||
				(game.options.numTeams == 3)
				||
				(game.options.numTeams == 2 && isOdd(game.options.numPlayers))
			)
		) {
			var greenPos = 1;
			if (game != null) {
				greenPos = game.players[2].getGamePoints();
			}
			if (!greenPos) {
				greenPos = 1;
			}
	
			if ($('peg_green')) {
				$('peg_green').dispose();
			}
			if ($('Green_' + redPos)) {
				var peg_green = new Element('img', {
					'id': 'peg_green',
					'src': '/resources/img/pegs/point_green.png',
					'styles': {
						'height': parseInt(9 * getBoardZoom()) + 'px',
						'width': parseInt(9 * getBoardZoom()) + 'px',
						'position': 'absolute',
						'left': $('Green_' + greenPos).getStyle('left'),
						'top': $('Green_' + greenPos).getStyle('top'),
						'z-index': '1000'
					}
				});
				peg_green.inject($('boardContainer'));
			}
		}

		if (game != null && 
			(
				(game.options.numPlayers > 3 && !game.options.numTeams)
				||
				(game.options.numTeams == 4)
				||
				(game.options.numTeams == 3 && isOdd(game.options.numPlayers))
			)
		) {
			var yellowPos = 1;
			if (game != null) {
				yellowPos = game.players[3].getGamePoints();
			}
			if (!yellowPos) {
				yellowPos = 1;
			}
			
			if ($('peg_yellow')) {
				$('peg_yellow').dispose();
			}
			if ($('Yellow_' + redPos)) {
				var peg_yellow = new Element('img', {
					'id': 'peg_yellow',
					'src': '/resources/img/pegs/point_yellow.png',
					'styles': {
						'height': parseInt(9 * getBoardZoom()) + 'px',
						'width': parseInt(9 * getBoardZoom()) + 'px',
						'position': 'absolute',
						'left': $('Yellow_' + yellowPos).getStyle('left'),
						'top': $('Yellow_' + yellowPos).getStyle('top'),
						'z-index': '1000'
					}
				});
				peg_yellow.inject($('boardContainer'));
			}
		}
	}


	function getBoardZoom() {
		return (boardZoom / 100); 
	}
	
	
	function boardZoomIn() {
		//if (boardZoom < 100) {
		//	boardZoom += 5;
		//}
		boardZoom += 5;
		
		Cookie.write('boardzoom', boardZoom);
		$('boardZoomIn').set('title', boardZoom+'%');
		$('boardZoomOut').set('title', boardZoom+'%');
		
		return getBoardZoom();
	}
	
	
	function boardZoomOut() {
		if (boardZoom > 50) {
			boardZoom -= 5;
		}
		
		Cookie.write('boardzoom', boardZoom);
		$('boardZoomIn').set('title', boardZoom+'%');
		$('boardZoomOut').set('title', boardZoom+'%');

		return getBoardZoom();
	}


	function isOdd(num) {
		return num % 2;
	}
	
	
	function playRandomSound(key) {
		var mySound = playlist.playSound(sounds.get(key).getRandom());
	}
	
	
	function playNumberSound(num) {
		var val = parseInt(num); 
		if (val < 10) {
			val = "0" + val;
		}
		
		var mySound = playlist.playSound("/resources/sound/number/"+val+".mp3");
	}	
	
	
	function initSounds() {
		var allSounds = new Array();
		
		allSounds.append(sounds.get('Shuffle'));
		allSounds.append(sounds.get('Boo'));
		allSounds.append(sounds.get('ApplauseLow'));
		allSounds.append(sounds.get('ApplauseMedium'));
		allSounds.append(sounds.get('ApplauseHigh'));
		allSounds.append(sounds.get('Number'));

		playlist = new DynaSound('/resources/swf/dynasound.swf', allSounds);

		var snd = Cookie.read('sound');
		if (snd != null && !parseInt(snd)) {
			$('soundOnIcon').hide();
			$('soundOffIcon').show();
			playlist.disable();
			$('topMenu_Sound').set('html', 'Sound [&times;]');
		}

	} Onload.add(initSounds);


	function flashLoadedHandler(){
		playlist.initSounds();
	}
	
	
    if (typeof(console) == 'undefined') {
        console = {};
        console.log = function() {
        };
    }

    
    function initBackgroundImage() {
    	var cBG = Cookie.read('backgroundImage');
    	if (cBG && cBG.length) {
    		$(document.body).setStyle('background', 'url(' + cBG + ')');
        	$('bgIcon').show();
    	} else {
    		$('bgIcon').show();
    		//$('bgContainer').show();
    	}
    	
        var bg = $('Backgrounds');
        var imgs = bg.getElements('.folder');

        imgs.each(function(el) {
            var paths = el.get('id');
            var elImg = new Element('div', {
            	'text':  paths.replace(/_/g, ' ').replace(/~/g, ' / '),
            	'styles': {
            		'padding-left': '5px',
            		'float': 'left',
            		'clear': 'both',
            		'cursor': 'pointer',
            		'width': '248px',
            		'background-color': '#ff0000'
            	} 
            }).inject(el, 'top');
            
            el.setStyles({
                'float': 'left',
                'clear': 'both'
            });
            
            elImg.addEvent('click', function() {
            	var cntImgs = el.getChildren('.bgImage');
            	
            	if (cntImgs.length == 0) {
		            var imgs = parseInt(el.get('rel'));
		            
		            for (var ci=1; ci<=imgs; ci++) {
		                var padded = leadingZeros(ci, 3, "0");
		                
		                var clear = (ci==1) ? 'both' : 'none';
		                var curSrc = '/resources/img/backgrounds/' + el.get('id').replace(/~/g, '/').toLowerCase() + '/' + padded + '.jpg';
		                var elImg = new Element('img', {
		                   'src': curSrc,
		                   'class': 'bgImage block',
		                   'styles': {
		                        'padding-left': (paths.length)*20+'px',
		                        'width': '50px',
		                        'height': '50px',
		                        'cursor': 'pointer',
		                        'float': 'left',
		                        'clear': clear,
		                        'padding': '0 0 0 0'
		                   }
		                }).inject(el, 'bottom');
		
		                elImg.addEvent('click', function(evt) {
		                	$(document.body).setStyle('background', 'url(' + evt.target.get('src') + ')');
		                	Cookie.write('backgroundImage', evt.target.get('src'));
		                });
		            }
            	} else {
            		cntImgs.each(function(ie) {
            			ie.toggle();
            		});
            	}
            });

        });
        
        $('bgContainer').makeDraggable({'handle': $('bgContainerHeader')});
        
        $('bgSelectClose').addEvent('click', function() {
        	$('bgContainer').hide();
        	$('bgIcon').show();
        });
        
        $$('.backgroundSelector').each(function(el) {
        	el.addEvent('click', function() {
        		$('bgContainer').show();
        		$('bgIcon').hide();
        	});
        });
    } Onload.add(initBackgroundImage);


	function leadingZeros(num, totalChars, padWith) {
		num = num + "";
		padWith = (padWith) ? padWith : "0";
		if (num.length < totalChars) {
			while (num.length < totalChars) {
				num = padWith + num;
			}
		} else {}
	
		if (num.length > totalChars) { //if padWith was a multiple character string and num was overpadded
			num = num.substring((num.length - totalChars), totalChars);
		} else {}
	
		return num;
	}
	

    function initCardBackImages() {
    	var cb = Cookie.read('cardback');
    	if (cb && cb.length) {
    		$$('.card').each(function(card) {
    			card.setStyle('background-image', 'url(' + evt.target.get('src') + ')');
    		});
        	$('cardBackIcon').show();
    	} else {
        	$('cardBackIcon').show();
    	}
    	
        $('cardBackContainer').makeDraggable({'handle': $('cardBackContainerHeader')});
        
        $('cardBackSelectClose').addEvent('click', function() {
        	$('cardBackContainer').hide();
        	$('cardBackIcon').show();
        });
        

        
        $$('.cardBackSelector').each(function(el) {
        	el.addEvent('click', function() {
            	$('cardBackContainer').show();
            	$('cardBackIcon').hide();

    	 	    var con = $('cardBackImages');
    			if (!con.getChildren().length) {
    		        var imgs = parseInt(con.get('rel'));
    		        
    		        for (var ci=1; ci<=imgs; ci++) {
    		            var padded = leadingZeros(ci, 3, "0");
    		            var curSrc = '/resources/img/cards/backs/' + padded + '.jpg';
    					
    		            var elImg = new Element('img', {
    		               'src': curSrc,
    		               'class': 'cardBackImage showTip',
    		               'title': '<img src="' + curSrc + '" style="width: 60px; height: 100px;" />'
    		            }).inject(con, 'bottom');
    		            toolTips.attach(elImg);
    		            
    		            elImg.addEvent('click', function(evt) {
    		            	Cookie.write('cardback', evt.target.get('src'));
    		            	$$('.card').each(function(card) {
    		            		card.setStyle('background-image', 'url(' + evt.target.get('src') + ')');
    		            	});
    		            	$$('.cardBackSelected').each(function(card) {
    		            		card.removeClass('cardBackSelected');
    		            	});
    		            	evt.target.addClass('cardBackSelected');
    		            });
    				}
    			}
        	});
        });
    } Onload.add(initCardBackImages);
    
    
    function handleBoardWindowClose() {
    	$(window).addEvent('boardWindowClosed', function() {
			boardWindow = null;
			$('boardIcon').hide();
			
			return 'abc';
    	});
    } Onload.add(handleBoardWindowClose);
    
    
	function drawJokerCards() {
		var selectHand = new Hand({'idPrefix': 'card'});
		selectHand.makeHand(
		[
			'AC', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC', 'JC', 'QC', 'KC', 
			'AD', '2D', '3D', '4D', '5D', '6D', '7D', '8D', '9D', 'TD', 'JD', 'QD', 'KD', 
			'AS', '2S', '3S', '4S', '5S', '6S', '7S', '8S', '9S', 'TS', 'JS', 'QS', 'KS', 
			'AH', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H', 'TH', 'JH', 'QH', 'KH'
		], '9C');
		
		selectHand.Cards.each(function(card, idx) {
			card.setStatus('up');
			card.setId(idx+((numDecks+1)*52));
		});
		
		for (var c=0; c<52; c++) {
			drawJokerCard($('jokerSelectionImages'), selectHand, c);
		}
	}
	

	function drawJokerCard(element, selectHand, card) {
		var curCard = selectHand.getCard(card);
		var cardHtml = curCard.buildHTML();	
			
		cardHtml.inject(element);
		cardHtml.setStyles({
			'font-size':	'10px',
			'position': 	'relative',
			'cursor': 		'pointer'
		});
		
		if ((card) % 13 == 0) {
			cardHtml.setStyle('clear', 'both');
		}
		
		var cardEl = $(cardHtml.get('id')); 
		cardEl.addEvent('click', function(evt) {
			$$('.cardSelected').removeClass('cardSelected');
			cardEl.addClass('cardSelected');
			$('joker_ok').show();
			jokerCard = cardEl.get(('id')).split('_')[1];
		});
	}
	
	
	function drawCutCards() {
		var top = 0;
		
		for (var cc=0; cc<game.deck.Cards.length; cc++) {
			var curCard = game.deck.Cards[cc];
			if (cc < 52 && game.deck.Cards[cc].getId() >= 0) {
				var cardHtml = curCard.buildHTML();	
					
				var off = cc % 20;
				if (off >= 1 && off <= 6) {
					top++;
				} else if ((off >= 12 && off <= 17)) {
					top--;
				}
				
				cardHtml.inject($('cutCardSelectionImages'));
				cardHtml.setStyles({
					'font-size': '16px',
					'position': 'absolute',
					'left': cc*12+'px',
					'top': (top*12)+'px'
				});
				cardHtml.set('rel', top);
				
				if (cc > 3 && cc < 48) {
					cardHtml.setStyle('cursor', 'pointer');
					var cardEl = $(cardHtml.get('id')); 
					cardHtml.addEvent('click', function(evt) {
						if ($$('.cutCard')) {
							$$('.cutCard').removeClass('cutCard');
						}
						evt.target.addClass('cutCard');

						$('cutCard_ok').show();
						
						var id = cardEl.get(('id')).split('_')[1];
						var selCard = game.deck.getCardById(id);
						game.cutCard = selCard;
					});
				}
			}
		}
	}
	
	
	function showPlayerLogPoints(player) {
		var el = $('logFilter_'+player);
		return el.hasClass('logFilterSelected');
	}
	

	function handleLogFilter() {
		var fe = $$('.logFilter'); 
    	fe.each(function(el) {
	    	el.addEvent('click', function(evt) {
	    		var disp = el.hasClass('logFilterSelected')==true ? 'none' : 'table-row';
	    		var pId = parseInt(el.get('id').split('_')[1]);

	    		$$('.pointlog_player_'+pId).setStyle('display', disp);
	    		
	    		el.toggleClass('logFilterSelected');
	    	});
    	});
    } Onload.add(handleLogFilter);
 

	function initHelp() {
		var accordion = new Fx.Accordion('h3.menusection', 'div.menusection', {
			opacity: false,
			
			onActive: function(toggler, element) {
				toggler.removeClass('accordionInactive')
				toggler.addClass('accordionActive')
			},
			
			onBackground: function(toggler, element) {
				toggler.removeClass('accordionActive')
				toggler.addClass('accordionInactive')
			}
		}, $('accordion'));
		


		$$('#accordion li a').each(function(el) {
			el.addEvent('click', function(e) {
				e.stop();
				e.stopPropagation();
				e.preventDefault();
				
				if ($$('.selectedHelpItem')) {
					$$('.selectedHelpItem').each(function(el) {
						el.removeClass('selectedHelpItem');
					});
				}
				el.addClass('selectedHelpItem');
				
				$('helpText').load('help/'+el.get('href')+'.html');
				$('helpTextTitle').set('text', el.get('html'));
			});
		});
	}
 
