function ophogen() {
	this.waarde++
	// document.getElementById("cel_wteller").innerHTML = "Worp <b>" + this.waarde + "</b> van maximaal 3"
}

function reset() {
	this.waarde = 0;
	// document.getElementById("cel_wteller").innerHTML = "Worp <b>" + this.waarde + "</b> van maximaal 3"
}

function worpteller() {
	this.waarde = 0
	this.ophogen = ophogen
	this.reset = reset
}

// maak dobbelstenen met functies uit dobbelsteen.js
// drie extra stenen voor animatie met behoud van officiele stenen
var dice_img = new Array("steen1", "steen2", "steen3", "steen1", "steen2", "steen3")
maakStenen(6, dice_img)	

var held = new Array(false, false, false)
var catnames = new Array("1en", "2en", "3en", "4en", "5en", "6en", "onevenstraat", "evenstraat", "lagestraat", "hogestraat", "3ofakind", "dertien", "crag")
var catscores = new Array(13)	// houdt de gescoorde punten per categorie bij
var frame = 0	// het aantal voltooide frames
var worpteller = new worpteller()
var highscore

function initCats() {
	for (j = 0; j < catnames.length; j++)
		catscores[catnames[j]] = -1
}

function releaseHeld() {
	for (i = 0; i < 3; i++) {
		if ( held[i] )
			hold(i)	// so it is released
	}
}

function evaluateGame( tot ) {
	if ( highscore < tot ) {
		highscore = tot
		setCookieData( "high", tot, 365 )	// update cookie
	}
	meldscore( tot )
	// document.getElementById("cel_high").innerHTML = "Hoogste persoonlijke score: <b>" +  highscore + "</b>"
	document.getElementById("cel_totaal").style.color = "red"
	document.getElementById("cel_totaal").style.fontWeight = "bold"
}

function newFrame() {
	frame++
	releaseHeld()
	worpteller.reset()
	//bereken totaal
	var totaal = 0
	for (j = 0; j < catnames.length; j++)
		if ((c = catscores[catnames[j]]) > 0)
			totaal  += c
	
	document.getElementById("cel_totaal").innerHTML = totaal

	if ( frame == 13 ) // game over
		evaluateGame(totaal)
	else
		document.forms["playform"].gooiknop.focus()
}

function initialize() {
	highscore = getCookieData("high")
	// document.getElementById("cel_high").innerHTML = "Hoogste persoonlijke score: <b>" +  highscore + "</b>"
	newGame()
	// show dice
	for (var t = 0; t < 3; t++) {
		stenen[t].dobbelen()
	}
}

function newGame() {
	releaseHeld()
	initCats()
	frame = 0
	worpteller.reset()	
	document.forms["playform"].gooiknop.focus()
	document.getElementById("cel_totaal").style.color = "black"
	document.getElementById("cel_totaal").style.fontWeight = "normal"
	document.getElementById("cel_totaal").innerHTML = "0"
	for (j = 0; j < catnames.length; j++) {
		document.getElementById("cel_" + catnames[j]).innerHTML = "&nbsp;"
	}
}

function werp() {
	// werpen alleen toegestaan als worpteller < 3, frame < 13
	if ( worpteller.waarde >= 3 ) {
		alert ( "Geen worpen meer mogelijk deze beurt" )
		return
	}
	if ( frame >= 13 ) {
		alert ( "Het spel is uit. Klik op 'Begin opnieuw' om een nieuw spel te starten." )
		return 
	}
	for (var t = 0; t < 3; t++) {
		if ( held[t] == false ) {
			// to make the cast visible when the value doesn't change
			stenen[t].verbergen()
			setTimeout("stenen[" + t + "].dobbelen()", 20)
		}
	}
	// update worpteller
	worpteller.ophogen()
}

function hold(n) {
	// lock/release die number n - input 0, 1 or 2
	// and change style 
	if ( worpteller.waarde == 0 ) {
		// alert ( "Je moet eerst met de dobbelstenen gooien voor je ze vast kunt houden." )
		return
	}
	if ( held[n] == true ) {
		held[n] = false
		document.forms["playform"].elements[n].className = "holdbuttonfree"
	}
	else {
		held[n] = true
		document.forms["playform"].elements[n].className = "holdbuttonheld"
	}
}

function bepaalScore(cat) {
	var score
	var totaal = 0
	var d = new Array(3)

	// create sorted copy of dice values
	for (j = 0; j < 3; j++ ) {
		d[j] = stenen[j].ogen
		totaal += d[j]
	}
	d.sort()

	score = 0
	
	switch(cat) {
		case "onevenstraat":
			if ( d[0] == 1 && d[1] == 3 && d[2] == 5 )
				score = 20
			break
		case "evenstraat":
			if ( d[0] == 2 && d[1] == 4 && d[2] == 6 )
				score = 20
			break
		case "lagestraat":
			if ( d[0] == 1 && d[1] == 2 && d[2] == 3 )
				score = 20
			break
		case "hogestraat":
			if ( d[0] == 4 && d[1] == 5 && d[2] == 6 )
				score = 20
			break
		case "3ofakind":
			if ( d[0] == d[1] && d[1] == d[2] )
				score = 25
			break
		case "dertien":
			if ( totaal == 13 && d[0] != d[1] && d[1] != d[2] )
				score = 26
			break
		case "crag":
			if ( totaal == 13 && (d[0] == d[1] || d[1] == d[2] ))
				score = 50
			break
		default:
			v = parseInt(cat.substr(0, 1))

			for ( i = 0; i < 3; i++ ) {
				if ( d[i] == v )
					score += v
			}
			break
	}
	return score
}

function toonEvtScore(cat) {
	if ( worpteller.waarde == 0 ) 
		return
	if ( catscores[cat] != -1 ) // can't score here no more
		return

	var elem = document.getElementById("cel_" + cat)
	elem.innerHTML = bepaalScore(cat)
}

function toonScore(cat) {
	var elem = document.getElementById("cel_" + cat)
	if ( catscores[cat] == -1 )
		elem.innerHTML = "&nbsp;"
	else
		elem.innerHTML = catscores[cat]
}

function score(cat) {
	// player ends a frame (or tries to)
	if (frame >= 13){
		alert ( "Het spel is uit. Klik op 'Start' om opnieuw te beginnen" )
		return
	}
	if ( worpteller.waarde == 0 )  { // can't score, roll first
		alert("Gooi eerst met de dobbelstenen")
		return
	}
	
	if ( catscores[cat] != -1 ) {
		alert("Deze categorie is niet leeg, kies een andere")
		return
	}

	var result = bepaalScore(cat)
	var elem = document.getElementById("cel_" + cat)
	elem.innerHTML = result
	catscores[cat] = result
	
	newFrame()
}

function mutilate(heelgetal) {
	return (7892 - heelgetal) * 5449;
}
