//
// QueryStrings
//
function QueryString(key)
{
	var value = null;
	for (var i=0;i<QueryString.keys.length;i++)
	{
		if (QueryString.keys[i]==key)
		{
			value = QueryString.values[i];
			break;
		}
	}
	return value;
}
QueryString.keys = new Array();
QueryString.values = new Array();

function QueryString_Parse()
{
	var query = window.location.search.substring(1);
	var pairs = query.split("&");
	
	for (var i=0;i<pairs.length;i++)
	{
		var pos = pairs[i].indexOf('=');
		if (pos >= 0)
		{
			var argname = pairs[i].substring(0,pos);
			var value = pairs[i].substring(pos+1);
			QueryString.keys[QueryString.keys.length] = argname;
			QueryString.values[QueryString.values.length] = value;		
		}
	}

}

QueryString_Parse();

// Helper Function
function NewHint(hint)
{
	var newHintObj = new Object();
	newHintObj.hint = hint;
	newHintObj.answers = new Array(arguments.length-1);
	
	for (var i=0;i<arguments.length-1;i++)
		newHintObj.answers[i] = arguments[i+1].toUpperCase();
		
	gHangMan.hintObj[gHangMan.hintObj.length] = newHintObj;
}

// Class Hangman

function Hangman_ResetGame()
{
	window.location.replace(window.location.pathname+"#hangman");
}

function Hangman_ChooseLetter(letter)
{
	this.currGuess += letter;
	
	for (var i=0;i<this.letters.length;i++)
	{
		if (this.letters[i]==letter)
		{
			this.letters[i] = " ";
			break;
		}
	}
	
	if (this.currAnswer.indexOf(letter)<0)
		this.guessesLeft--;
		
	this.Show();
}


function Hangman_DoWin()
{
	return '<P class="alert">You win!</P>';
}

function Hangman_DoLose()
{
	return '<P class="alert">Sorry, you lose.</P>';
}

function Hangman_GetHintString()
{
	return '<P><STRONG>Hint:</STRONG> '+ this.hint + '</P>';
}

function Hangman_GetGuessString()
{
	var guessStr = "";
	
	for (var i=0;i<this.currAnswer.length;i++)
	{
		var lookFor = this.currAnswer.substring(i,i+1);
		if (lookFor == " ")
			guessStr += " ";
		else if (this.currGuess.indexOf(lookFor)>=0)
			guessStr += lookFor;
		else
			guessStr += "_";
			
	}
	return guessStr;
}

function Hangman_GetGuessHTML()
{
	var guessStr = "<P>";
	
	for (var i=0;i<this.currAnswer.length;i++)
	{
		guessStr += "&nbsp;";
		var lookFor = this.currAnswer.substring(i,i+1);
		if (lookFor == " ")
			guessStr += "&nbsp;&nbsp;&nbsp;";
		else if (this.currGuess.indexOf(lookFor)>=0)
			guessStr += lookFor;
		else
			guessStr += "_";
			
	}
	guessStr += "</P>";
	
	return guessStr ;
}

function Hangman_GetLetters()
{
	var letterStr = "<P>";
	
	for (var i=0;i<this.letters.length;i++)
	{
		if ((i==9)||(i==18))
			letterStr += "<br>";
		else
			letterStr += " ";
			
		if (this.letters[i]==" ")
		{
			letterStr += "&nbsp;";
		}
		else
		{
			letterStr += '<a class="linkStyle" href=\'javascript:gHangMan.ChooseLetter("' + this.letters[i] + '")\'>' + this.letters[i] + '</a>';
		}
	}
	letterStr += "</P>";
	return letterStr;
}

function Hangman_GetHTML()
{	
	var guessStr = this.GetGuessString();
		
	var lettersText;

	if (guessStr==this.currAnswer)
		lettersText = this.DoWin();
	else if (this.guessesLeft<=0)
		lettersText = this.DoLose();
	else
		lettersText = this.GetLetters();


	var html = '<table border="0" cellspacing="0" cellpadding="0">';
	html += '<tr><td align="center">';
	html += '<table border="1" bordercolor="black" cellspacing="0" cellpadding="2"><tr><td align="center">';
	html += '<table border="0" cellspacing="0" cellpadding="0">';
	html += '<tr>';
	html += '	<td align="center"><h1 align="center"><a name="hangman">James Bond Hangman</a></h1></td>';
	html += '</tr>';
	html += '</table>';
	html += '</td></tr><tr><td align="center">';
	html += '<table border="0" cellspacing="4" cellpadding="0">';
	html += '<tr>';
	html += '	<td><IMG border="0" SRC="images/spacer.gif" height="1" width="116"></td>';
	html += '	<td><IMG border="0" SRC="images/spacer.gif" height="1" width="140"></td>';
	html += '</tr>';
	html += '<tr>';
	html += '	<td><img border="0" name="gallows" src="images/' + this.imageName + this.guessesLeft + '.gif"></td>';
	html += '	<td ><p>' + lettersText + '</p></td>';
	html += '</tr>';
	html += '</table>';
	html += '</td></tr><tr><td align="center">';
	html += '<table border="0" cellspacing="0" cellpadding="2">';
	html += '<tr>';
	html += '	<td align="center">' +  this.GetHintString() + '</td>';
	html += '</tr>';
	html += '<tr>';
	html += '	<td align="center">' + this.GetGuessHTML() + '</td>';
	html += '</tr>';
	html += '<tr>';
	html += '	<td align="center"><form><input id="reset" type="button" value="New Game" onclick="gHangMan.ResetGame()"></form></td>';
	html += '</tr>';
	html += '</table>';
	html += '</td></tr></table>';
	html += '</td></tr></table>';

	return html;
}

function Hangman_WriteHTML()
{
	if (this.hintIndex < 0)
	{
		this.hintIndex = Math.floor(Math.random()*this.hintObj.length);
		this.ansIndex = Math.floor(Math.random()*this.hintObj[this.hintIndex].answers.length);
	}
	
	this.hint = this.hintObj[this.hintIndex].hint;
	this.answers = this.hintObj[this.hintIndex].answers;
	this.currAnswer = this.hintObj[this.hintIndex].answers[this.ansIndex];
	document.write('<DIV ID=gameLayer STYLE="position:relative">'+this.GetHTML()+'</DIV>');
}

function Hangman_Show()
{
	var search = "?hintIndex=" + this.hintIndex + "&ansIndex=" + this.ansIndex + "&currGuess=" + this.currGuess + "&guessesLeft=" + this.guessesLeft;
	window.location.replace(window.location.pathname+search+"#hangman");
}

function Hangman()
{
	this.letters = new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
	this.hintObj = new Array();
	this.hint = null;
	this.answers = null;
	this.imageName = "hangman";
	this.currAnswer = "";
	this.currGuess = "";
	this.guessesLeft = 6;
	this.hintIndex = -1;
	this.ansIndex = -1;

	// Check query string and initialize fields if set
	var qHintIndex = QueryString("hintIndex");
	
	if (qHintIndex != null)
	{
		this.hintIndex = parseInt(qHintIndex);
		this.ansIndex = parseInt(QueryString("ansIndex"));
		this.currGuess = QueryString("currGuess");
		this.guessesLeft = parseInt(QueryString("guessesLeft"));

		for (var i=0;i<this.letters.length;i++)
		{
			if (this.currGuess.indexOf(this.letters[i])>=0)
				this.letters[i] = " ";
		}
	}

	
	this.ResetGame = Hangman_ResetGame;
	this.ChooseLetter = Hangman_ChooseLetter;
	this.DoWin = Hangman_DoWin;
	this.DoLose = Hangman_DoLose;
	this.GetHintString = Hangman_GetHintString;
	this.GetGuessString = Hangman_GetGuessString;
	this.GetGuessHTML = Hangman_GetGuessHTML;
	this.GetLetters = Hangman_GetLetters;
	this.GetHTML = Hangman_GetHTML;
	this.WriteHTML= Hangman_WriteHTML;
	this.Show = Hangman_Show;
}

gHangMan = new Hangman();

// Add your hints and answers here (as many as you want)
NewHint("James Bond","Sean Connery");
NewHint("James Bond","George Lazenby");
NewHint("James Bond","Roger Moore");
NewHint("James Bond","Timothy Dalton");
NewHint("James Bond","Pierce Brosnan");
NewHint("James Bond","David Niven");
NewHint("James Bond","Barry Nelson");
NewHint("James Bond","Vodka Martini");
NewHint("James Bond","Walther PPK");
NewHint("Henchmen","Miss Taro");
NewHint("Henchmen","Nick Nack");
NewHint("Henchmen","Red Grant");
NewHint("Henchmen","Oddjob");
NewHint("Henchmen","Vargas");
NewHint("Henchmen","Whisper");
NewHint("Henchmen","Dario");
NewHint("Henchmen","Gobinda");
NewHint("Henchmen","Mayday");
NewHint("Henchmen","Jaws");
NewHint("Henchmen","Professor Dent");
NewHint("Henchmen","Baron Samedi");
NewHint("Henchmen","Hector Gonzales");
NewHint("Henchmen","Milton Krest");
NewHint("Henchmen","Zao");
NewHint("Bond Girls","Pussy Galore");
NewHint("Bond Girls","Kissy Suzuki");
NewHint("Bond Girls","Holly Goodhead");
NewHint("Bond Girls","Bibi");
NewHint("Cars","Aston Martin");
NewHint("Cars","Lotus Esprit");
NewHint("Bond Girls","Jinx");
NewHint("Movies","Dr No");
NewHint("Movies","From Russia With Love");
NewHint("Movies","Goldfinger");
NewHint("Movies","Thunderball");
NewHint("Movies","You Only Live Twice");
NewHint("Movies","On Her Majestys Secret Service");
NewHint("Movies","Diamonds Are Forever");
NewHint("Movies","Live and Let Die");
NewHint("Movies","The Man With The Golden Gun");
NewHint("Movies","The Spy Who Loved Me");
NewHint("Movies","Moonraker");
NewHint("Movies","For Your Eyes Only");
NewHint("Movies","Octopussy");
NewHint("Movies","A View To A Kill");
NewHint("Movies","The Living Daylights");
NewHint("Movies","Licence To Kill");
NewHint("Movies","GoldenEye");
NewHint("Movies","Tomorrow Never Dies");
NewHint("Movies","The World Is Not Enough");
NewHint("Movies","Die Another Day");
NewHint("Girls","Sylvia Trench");
NewHint("Girls","Tiffany Case");
NewHint("Girls","Mary Goodnight");
NewHint("Girls","Octopussy");
NewHint("Villains","Ernst Stavro Blofeld");
NewHint("Villains","Max Zorin");
NewHint("Villains","Hugo Drax");
NewHint("Villains","Kamal Khan");
NewHint("Villains","Georgi Koskov");
NewHint("Villains","Franz Sanchez");
NewHint("Villains","Alec Trevelyan");
NewHint("Villains","Fransisco Scaramanga");
NewHint("Villains","Auric Goldfinger");
NewHint("Villains","Renard");
NewHint("Allies","Felix Leiter");
NewHint("Allies","Tiger Tanaka");
NewHint("Allies","Quarrel");
NewHint("Allies","Vijay");
NewHint("Allies","Saunders");
NewHint("Allies","Charles Robinson");
NewHint("Allies","Bill Tanner");
NewHint("Allies","Moneypenny");
NewHint("Allies","Jack Wade");
NewHint("Allies","Dikko Henderson");
NewHint("Crew","Albert R Broccoli");
NewHint("Crew","Michael G Wilson");
NewHint("Crew","John Glen");
NewHint("Crew","Monty Norman");
NewHint("Crew","Kevin McClory");
NewHint("Crew","Roger Spottiswoode");
NewHint("Crew","Martin Campbell");
