var score, subScore, possibleScore, diceRoll, roll, select, endGame, oldInfo, joker, yahtzee
var scorePos, subScoreBonus, cheat, statusLine, totalOfDice, maxScore, topRow, seed
var dice = new Array();
var range = new Array();
var held = new Array();
var scores = new Array();
var possibleScores = new Array();
var holdUnhold = "if(roll>0 && select!=1)ShowHeld(i)"
var showHS = "oldInfo=dpcument.getElementById('Dinfo').innerHTML; document.getElementById('Dinfo').innerHTML='High Score: '+highScore;"
var highScore=GetCookie("yahtzee");
if(highScore==null)highScore=0;

if(document.images)
{
	img1  = new Image();
	img2  = new Image();
	img3  = new Image();
	img4  = new Image();
	img5  = new Image();
	img6  = new Image();
	img7  = new Image();
	img8  = new Image();
	img9  = new Image();
	img10 = new Image();
	img11 = new Image();
	img12 = new Image();
	img13 = new Image();
	img14 = new Image();
	img15 = new Image();
	img16 = new Image();
	img1.src="texture_cyan_022.jpg";
	img2.src="texture_red_022.jpg";
	img3.src="d0.gif";
	img4.src="d1.gif";
	img5.src="d2.gif";
	img6.src="d3.gif";
	img7.src="d4.gif";
	img8.src="d5.gif";
	img9.src="d6.gif";
	img10.src="tl.gif";
	img11.src="tr.gif";
	img12.src="bl.gif";
	img13.src="br.gif";
	img14.src="y.gif";
	img15.src="y2.gif";
	img16.src = "tick.gif";
}


function GetCookie(name) {
	var cname=name+"=";
	var dc = document.cookie;
	if(dc.length>0){
		begin=dc.indexOf(cname);
		if(begin!=-1){
			begin+=cname.length
			end=dc.indexOf(";",begin);
			if(end==-1)end=dc.length;
			return unescape(dc.substring(begin,end));
		}//endIf
	}//endIF
	return null;
}

function Goodbye(){
	var exp=new Date();
	exp.setTime(exp.getTime()+(1000*60*60*24*31));
	SetCookie("yahtzee",highScore,exp);
}


function SetCookie(name,value,expires){
	document.cookie=name+"="+escape(value)+";path=/"+((expires==null)? "":";expires="+expires.toGMTString());
}

function Help(){
   window.open("yahtzeehelp.htm","_blank");
}

function InitArrays(){
	ForNextLoop(16,"scores[c]=-1;")
	ForNextLoop(5,"held[c]=1;dice[c]=0;range[c]=0;")
	range[6]=0
	possibleScores[0]="&nbsp; "
}

function ForNextLoop(maxLoop,evalString){
	for(c=1;c<=maxLoop;c++){
		eval(evalString)
	}//endFor
}

function GenRandNo(maxNo){
	seed=(0x015a4e35 * seed) % 0x7fffffff;
	return ((seed >> 16) % maxNo)+1
}

function DisplayStatus(displayString){
	document.getElementById("DstatusLine").innerHTML = displayString;
}

function AnimateDice(count){
	if(count<=10)
	{
		for(i=1; i<=5; i++)
		{
			if(held[i] == 0)
			{
				dice[i]=GenRandNo(6);
				document.getElementById("Idice" + i).src = "d" + dice[i] + ".gif";
			}
		}
	}
	count++
	if(count==10) RollDice2();
	else setTimeout("AnimateDice("+count+")",50);
}

function RollDice1(){
	document.getElementById("Ititle").src = "y.gif";
	DisplayStatus("&nbsp; ")
	if(select==1)
	{
		DisplayStatus("Please select a category to score in from the list on the left");
		return;
	}
	if(endGame==1){
		DisplayStatus("Game is over please press New Game to play again");
		return;
	}
	AnimateDice(0)
}

function RollDice2(){
	yahtzee=0;
	totalOfDice=0;
	ForNextLoop(6,"range[c]=0;")
	for(i=1;i<=5;i++){
		totalOfDice+=dice[i]
		range[dice[i]]++
	}//endFor
	roll+=1 //Increment roll count - 3 rolls per turn
	display = "Roll " + roll + " taken"
	if(roll==3){
		select=1
		display=display+"<br /><b>Select score</b>"
	} else display=display+"<br />Hold, Roll or Select"
	document.getElementById("Dinfo").innerHTML=display;

	CalculateScores()
	for(i=1;i<=16;i++){
		if(possibleScores[i]>0 && scores[i]==-1){
			if(i<=13){
				document.getElementById("DscoreC" + i).style.background = "navy";
				document.getElementById("DscoreC" + i).style.color = "white";
			}//endIF
			else {
				document.getElementById("DscoreC" + i).style.background = "black";
				document.getElementById("DscoreC" + i).style.color = "white";

			}//endElse
		}//endIf
		else{
			if(i<=13){
				document.getElementById("DscoreC" + i).style.background = "lightblue";
				document.getElementById("DscoreC" + i).style.color = "navy";
			}//endIf
			else {
				document.getElementById("DscoreC" + i).style.background = "gray";
				document.getElementById("DscoreC" + i).style.color = "white";
			}//endElse
		}//endElse
	}//endFor
}

function ShowHeld(i){
	if(held[i] == 0) held[i] = 1; else held[i] = 0
	switch(held[i]){
		case 0://not held
			indic="&nbsp; ";
			indicCol='none'
		break;
		case 1://held
			indic="Held";
			indicCol='url(texture_red_022.jpg)'
		break;
	}//endSwitch
	document.getElementById("Dheld" + i).innerHTML = indic;
	document.getElementById("Ddice" + i).style.background = indicCol;
	document.getElementById("Dheld" + i).style.background = indicCol;
}

function IndicateScore(scorePos){
	if(scores[scorePos]>=0 || endGame==1 || roll==0){
		return; //If end of game, category already taken or awaiting first roll return
	}//endIF
	possibleScore=possibleScores[scorePos]
	document.getElementById("DrollScore").innerHTML = possibleScore;
	return;
}

function CalculateScores(){
	maxScore=0;
	joker=0;
	ForNextLoop(16,"possibleScores[c]=0")
	for(i=1;i<=6;i++){
		possibleScores[i]=(range[i]*i)
		if(range[i]>=3)possibleScores[7]=totalOfDice
		if(range[i]>=4)possibleScores[8]=totalOfDice
		if(range[i]==5){
			possibleScores[13]=50
			yahtzee=i
			document.getElementById("Ititle").src="y2.gif"
			DisplayStatus("Yahtzee!!!!")
		}//endIf
		if(range[i]==2){
			for(ii=1;ii<=6;ii++){
				if(range[ii]==3)possibleScores[9]=25
			}//endFor
		}//endIf
		if(i<=3){
			if(range[i]>=1 && range[i+1]>=1 && range[i+2]>=1 && range[i+3]>=1)possibleScores[10]=30
		}//endIf
	};//endFor
	if(range[1]==1 && range[2]==1 && range[3]==1 && range[4]==1 && range[5]==1)possibleScores[11]=40
	if(range[2]==1 && range[3]==1 && range[4]==1 && range[5]==1 && range[6]==1)possibleScores[11]=40
	possibleScores[12]=totalOfDice
	ForNextLoop(6,"if(possibleScores[c]+subScore>=63 && topRow<6 && scores[c]==-1)possibleScores[14]=35")
	if(scores[13]>0 && yahtzee>=1){
		possibleScores[15]=100
	}//endIf
	if(yahtzee>=1 && scores[yahtzee]!=-1 && scores[13]>=0){
		possibleScores[16]=1
		joker=1
		if(scores[9]==-1)possibleScores[9]=25
		if(scores[10]==-1)possibleScores[10]=30
		if(scores[11]==-1)possibleScores[11]=40
	}//endIf

}

function AllocateScore(scorePos){
	if(scores[scorePos]>=0 || endGame==1 || roll==0)return;//If the score is already taken, game over or end of turn
	select=0;
	roll=0;
	statusLine="";
	score=score+possibleScore;//Increase score
	scores[scorePos]=possibleScore;//Maintain the record of scores for each category
	ForNextLoop(5,"held[c]=1;ShowHeld(c);")
	if(scorePos<=6)topRow++
	if(scorePos<=6)subScore=subScore+scores[scorePos]
	if(subScore>=63 && scores[14]==-1){
		score=score+35
		scores[14]=35
		statusLine="Subscore bonus of 35 points awarded!"
		document.getElementById("score14yn").innerHTML="<img src='tick.gif' />";
	}//endIf
	if(possibleScores[15]>0){
		score=score+100 //Yahtzee bonus for top row score and yahtzee already scored
		statusLine="Yahtzee bonus of 100 points awarded!"
		if(document.getElementById("score15yn").innerHTML=="&nbsp; ")
		{
			document.getElementById("score15yn").innerHTML= "<img src='tick.gif' />";
		} else {
			document.getElementById("score15yn").innerHTML = document.getElementById("score15yn").innerHTML + "<img src='tick.gif' />";
		}
	}//endIf
	document.getElementById("DsubScore").innerHTML=subScore;
	document.getElementById("DmainScore").innerHTML=score;
	document.getElementById("DrollScore").innerHTML="&nbsp; ";
	document.getElementById("score" + scorePos + "yn").innerHTML = "<img src='tick.gif' />";
	document.getElementById("score" + scorePos).innerHTML = possibleScore;
	if(statusLine.length==0) statusLine=possibleScore+" points added to your total."
	scoresTaken++
	if(scoresTaken==13){
		endGame=1;
		display="Game over";
		if(score>highScore){
			highScore=score;
			display=display+"<br />New High Score!";
		}//endIf
		display=display+"<br />Press New Game to play again";
		statusLine=statusLine+" Game Over"
	} else {
		display="Roll again"
		statusLine=statusLine+" Press Roll to continue"
	}//endElse
	DisplayStatus(statusLine)
	document.getElementById("Dinfo").innerHTML=display;
}

function NewGame(){
	InitArrays();
	now=new Date()
	seed=now.getTime() % 0xffffffff
	ForNextLoop(5,"ShowHeld(c);")
	topRow=0
	roll=0;
	select=0;
	score=0;
	subScore=0;
	yahtzee=0;
	joker=0;
	endGame=0;
	indicator=0;
	scoresTaken=0;
	cheat=0;
	document.getElementById("DsubScore").innerHTML=subScore;
	document.getElementById("DmainScore").innerHTML=score;
	for(i=1;i<=15;i++){
		document.getElementById("score" + i + "yn").innerHTML = "&nbsp;";
		if(i<=13) 
		{
			document.getElementById("score"+i).innerHTML = "&nbsp;";
		}
	}//endFor
	RollDice1();
}

function KeyPress(){
//	alert("You pressed "+event.keyCode)
	switch(event.keyCode){
		case 114://r
			RollDice1()
		break;
		case 82://R
			RollDice1()
		break;
		case 49://1
			ShowHeld(1);
		break;
		case 50://2
			ShowHeld(2);
		break;
		case 51://3
			ShowHeld(3);
		break;
		case 52://4
			ShowHeld(4);
		break;
		case 53://5
			ShowHeld(5);
		break;
	}//endSwitch

}
