 /* hangman variant with countdown timer
  * (c)2006 Puzzle Genie admim_AT_puzzlegenie_DOT_com
  * For a commercial license, please contact the
  * email address above.
  */
 /* Graphics */
 blank=new Image(10,10);
 blank.src="/games/fixteddy/blank.png"
 tdyhead=new Image(156,136);
 tdyhead.src="/games/fixteddy/teddy_head.png";
 tdybody=new Image(173,190);
 tdybody.src="/games/fixteddy/teddy_body.png";
 tdycoat=new Image(173,190);
 tdycoat.src="/games/fixteddy/teddy_coat.png";
 tdyeyes=new Image(69,32);
 tdyeyes.src="/games/fixteddy/teddy_eyes.png";
 tdynose=new Image(86,44);
 tdynose.src="/games/fixteddy/teddy_mouth.png";
 tdylarm=new Image(117,87);
 tdylarm.src="/games/fixteddy/teddy_leftarm.png";
 tdylarm2=new Image(101,112);
 tdylarm2.src="/games/fixteddy/teddy_leftarm2.png";
 tdyrarm=new Image(103,126);
 tdyrarm.src="/games/fixteddy/teddy_rightarm.png";
 tdylleg=new Image(74,162);
 tdylleg.src="/games/fixteddy/teddy_leftleg.png";
 tdyrleg=new Image(74,162);
 tdyrleg.src="/games/fixteddy/teddy_rightleg.png";

 /* Game object */
 var currgame;

 function gameObj(word, startsecs){
		this.guessword = word.toUpperCase() || "";
		this.guesses = new Array();
		this.rightguesses = 0;
		this.timer = startsecs || (this.guessword.length * 10);
		this.guessdisp = allguesses(this.guessword);
		this.over = false;
		this.showCurrent = displayCurrent;
		this.checkDup = checkDup;
		this.checkLett = checkLett;
		this.decTimer = decTimer;
		this.timeNow = timeNow;
		this.reset = gameReset;
		this.updateImage = showTeddy;
		this.wrongGuess = wrongGuess;
		this.animateWin = animateWin;
 }

 function gameReset(word, startsecs){
		this.guessword = word.toUpperCase() || "";
		this.rightguesses = 0;
		this.guesses = new Array();
		this.timer = startsecs || (this.guessword.length * 10);
		this.guessdisp = allguesses(this.guessword);
		this.over = false;
		this.updateImage();
 }

 function wrongGuess() {
		if (this.rightguesses == 0){
				return;
		}
		/* remove a random guessed letter */
		var rightletts="";
		for (var i=0; i < this.guessdisp.length; i++){
				if (this.guessdisp.charAt(i) != "_" && this.guessdisp.charAt(i) != " "){
						rightletts += this.guessdisp.charAt(i);
				}
		}
		var lett = rightletts.charAt(Math.round(Math.random()*(rightletts.length-1)));
		var newdisp="";
		for (var i=0; i < this.guessdisp.length; i++){
				if (this.guessdisp.charAt(i) == lett){
						newdisp += "_";
						this.rightguesses --;
				} else {
						newdisp += this.guessdisp.charAt(i);
				}
		}
		this.guessdisp = newdisp;

		var alngth=this.guesses.length;
		var newlett;
		for (var i = 0; i < alngth; i ++){
				newlett = this.guesses.shift();
				if (newlett != lett){
						this.guesses.push(newlett);
				} else {
						alngth--;
				}
		}
		this.showCurrent();
		this.updateImage();
 }

 function decTimer(){
		this.timer --;
		return (this.timer < 1? true: false);
 }

 function timeNow(){
		var min = Math.floor(this.timer / 60);
		var sec = this.timer - (60*min);
		var ts = ((min < 10) ? " 0" : " ") + min;
			ts += ((sec < 10) ? ":0" : ":") + sec;
		return ts;
 }

 function checkDup(letter){
		for (var i in this.guesses){
				if (this.guesses[i] == letter){
						return true;
				}
		}
		return false;
 }

 function checkLett(letter){
		this.guessdisp="";
		this.guesses.push(letter);

		var foundLetter=false;
		var foundcount=0;
		for (var i=0; i<this.guessword.length; i++){
				lett=this.guessword.charAt(i);
				displett="_ ";
				for (var j in this.guesses){
						if (this.guesses[j] == lett){
								if (lett == letter) {
										foundLetter=true;
								}
								displett=lett+" ";
								foundcount++;
						}
				}
				this.guessdisp += displett;
		}

		this.rightguesses = foundcount;
		this.showCurrent();
		this.updateImage();

		if (foundcount == this.guessword.length) return 2;
		if (foundLetter) return 1;

		return 0;
 }

 function allguesses(word) {
		var dispword="";
		for (var i=0; i<word.length; i++){
				dispword+="_ ";
		}
	return dispword;
 }

 function displayCurrent(){
		document.getElementById('hmguess').innerHTML=this.guessdisp.bold();
 }

 function showTeddy(){
		var x=YAHOO.util.Dom.getX('hmletters') + 80;
		var y=YAHOO.util.Dom.getY('hmletters');
		var gc = this.guessword.length / 9;
		var guess = this.rightguesses;
		if (guess > 0) { // Left leg
				document.getElementById('tdyleftleg').style.left = x + 130+"px";
				document.getElementById('tdyleftleg').style.top = y + 250+"px";
				document.getElementById('tdyleftleg').src=tdylleg.src;
		}
		else
		{
				document.getElementById('tdyleftleg').src=blank.src;
		}
		guess -= gc;
		if (guess > 0) { // Right leg
				document.getElementById('tdyrightleg').style.left = x + 230 +"px";
				document.getElementById('tdyrightleg').style.top = y + 250+"px";
				document.getElementById('tdyrightleg').src=tdyrleg.src;
		}
		else
		{
				document.getElementById('tdyrightleg').src=blank.src;
		}
		guess -= gc;
		if (guess > 0) { // Left arm
				document.getElementById('tdyleftarm').style.left = x + 60+"px";
				document.getElementById('tdyleftarm').style.top = y + 90+"px";
				document.getElementById('tdyleftarm').src=tdylarm.src;
		}
		else
		{
				document.getElementById('tdyleftarm').src=blank.src;
		}
		guess -= gc;
		if (guess > 0) { // Right arm
				document.getElementById('tdyrightarm').style.left = x + 280+"px";
				document.getElementById('tdyrightarm').style.top = y + 140+"px";
				document.getElementById('tdyrightarm').src=tdyrarm.src;
		}
		else
		{
				document.getElementById('tdyrightarm').src=blank.src;
		}
		guess -= gc;
		if (guess > 0) { // Body
				document.getElementById('tdybody').style.left = x + 135+"px";
				document.getElementById('tdybody').style.top = y + 110+"px";
				document.getElementById('tdybody').src=tdybody.src;
		}
		else
		{
				document.getElementById('tdybody').src=blank.src;
		}
		guess -= gc;
		if (guess > 0) { // Coat
				document.getElementById('tdycoat').style.left = x + 135+"px";
				document.getElementById('tdycoat').style.top = y + 110+"px";
				document.getElementById('tdycoat').src=tdycoat.src;
		}
		else
		{
				document.getElementById('tdycoat').src=blank.src;
		}
		guess -= gc;
		if (guess > 0) { // Head
				document.getElementById('tdyhead').style.left = x + 150+"px";
				document.getElementById('tdyhead').style.top = y+"px";
				document.getElementById('tdyhead').style.zIndex = 2;
				document.getElementById('tdyhead').src=tdyhead.src;
		}
		else
		{
				document.getElementById('tdyhead').src=blank.src;
		}
		guess -= gc;
		if (guess > 0) { // Eyes
				document.getElementById('tdyeyes').style.left = x + 195+"px";
				document.getElementById('tdyeyes').style.top = y + 35+"px";
				document.getElementById('tdyeyes').style.zIndex = 3;
				document.getElementById('tdyeyes').src=tdyeyes.src;
		}
		else
		{
				document.getElementById('tdyeyes').src=blank.src;
		}
		guess -= gc;
		if (guess > 0) { // Nose
				document.getElementById('tdymouth').style.left = x + 185+"px";
				document.getElementById('tdymouth').style.top = y + 75+"px";
				document.getElementById('tdymouth').style.zIndex = 3;
				document.getElementById('tdymouth').src=tdynose.src;
		}
		else
		{
				document.getElementById('tdymouth').src=blank.src;
		}
 }

 function animateWin(state){
		var x=YAHOO.util.Dom.getX('hmletters') + 80;
		var y=YAHOO.util.Dom.getY('hmletters');
		if (state == 0){
				document.getElementById('tdyleftarm').style.left = x + 60+"px";
				document.getElementById('tdyleftarm').style.top = y + 90+"px";
				document.getElementById('tdyleftarm').src=tdylarm.src;
		} else {
				document.getElementById('tdyleftarm').style.left = x + 70+"px";
				document.getElementById('tdyleftarm').style.top = y + 70+"px";
				document.getElementById('tdyleftarm').src=tdylarm2.src;
		}
 }

 /* End of game object */

 function newGame(word, timerval){
		if (currgame == undefined){
				currgame = new gameObj(word, timerval);
		} else {
				currgame.reset(word, timerval);
		}
		currgame.showCurrent();
		var mfo = document.getElementById('controls');
		mfo.stbutton.disabled=true;
		mfo.stbutton.style.color="#a0a0a0";
		document.getElementById('hmmessage').innerHTML='';
		document.getElementById('hmtimer').innerHTML=currgame.timeNow().bold();
		gt=setTimeout("timerTick()", 1000);
 }

 function endGame(message){
		tripleflashmessage(message.bold());
		var mfo = document.getElementById('controls');
		mfo.stbutton.style.color="#ff0000";
		mfo.stbutton.disabled=false;
		currgame.over = true;
 }

 function timerTick(){
		if (currgame.decTimer()){
				document.getElementById('hmtimer').innerHTML=currgame.timeNow().bold();
				endGame(" Your Time Is Up!!!");
		} else {
				if (currgame.over == false) {
						gt=setTimeout("timerTick()", 1000);
				}
	}
		document.getElementById('hmtimer').innerHTML=currgame.timeNow().bold();
 }

 function pickLetter(e) {
	var ev = YAHOO.util.Event.getEvent(e);
	var posx = YAHOO.util.Event.getPageX(ev) - YAHOO.util.Dom.getX('hmletts');
	var posy = YAHOO.util.Event.getPageY(ev) - YAHOO.util.Dom.getY('hmletts');
	var row = Math.floor((posy-1) / 34.7);
	var col = Math.floor((posx-1) / 27);
	var butx = 11 + col * 27;
	var buty = 16 + row * 34.7;
	var alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ*";
	var lett = alphabet.charAt(col + 3*row);
	if (Math.abs(butx - posx) < 12 && Math.abs(buty - posy) < 16 && lett != "*"){
		makeGuess(lett);
	}
 }

 function makeGuess(letter){
		var chekstate;
		if (currgame.over == true){
				return;
		}
		if (currgame.checkDup(letter)){
				flashmessage("You've already<br />picked that one!".bold());
				return;
		}
		chekstate=currgame.checkLett(letter);
		if (chekstate == 2){
				endGame("You have guessed it!!");
		} else if (chekstate == 1) {
				flashmessage("You got a letter!".bold());
		} else {
				currgame.wrongGuess();
				flashmessage("Wrong!! I take a letter".bold());
		}
 }

 function flashmessage(message){
	var x=YAHOO.util.Dom.getX('hmletters') + 120;
	var y=YAHOO.util.Dom.getY('hmletters');
		document.getElementById('hmmessage').style.left = x+"px";
		document.getElementById('hmmessage').style.top = y + 150+"px";
		document.getElementById('hmmessage').innerHTML=message;
		var t1=setTimeout("document.getElementById('hmmessage').innerHTML=''",1000)
 }

 function tripleflashmessage(message){
		var p = 500;
		var x=YAHOO.util.Dom.getX('hmletters') + 120;
		var y=YAHOO.util.Dom.getY('hmletters');
		document.getElementById('hmmessage').style.left = x+"px";
		document.getElementById('hmmessage').style.top = y + 150+"px";
		document.getElementById('hmmessage').innerHTML=message;
		var animstr0="document.getElementById('hmmessage').innerHTML=''";
		var animstr1="document.getElementById('hmmessage').innerHTML='"+message+"'";
		if (currgame.rightguesses == currgame.guessword.length){
				animstr0 += ";currgame.animateWin(0)";
				animstr1 += ";currgame.animateWin(1)";
		}
		var t1=setTimeout(animstr0,p);
		var t2=setTimeout(animstr1,p*2)
		var t1=setTimeout(animstr0,p*3);
		var t2=setTimeout(animstr1,p*4)
 }


