// global flag
var isIE = false;

// global request and XML document objects
var req;
var gsreq;
var tHeartBeat = null;
var lastInc="";
var savepieceunder;
var GameImgPath="img.full";

var gamenum;
var gametoken;
var playercolor;
var pieceselected = -1;
var playerinitials;
var playcomp = 0;

/*
function loadXMLDoc(url) {
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("POST", url, true);
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 //     req.setRequestHeader("Content-length", 9+lastInc.length);
      //req.setRequestHeader("Connection", "close");
        //req.send("dataval1=" + lastInc + "&dataval2=7");
        req.send("gamenum=" + document.getElementById("tstgamenum").value + "&playercolor=" + document.getElementById("tstplayercolor").value);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}
*/

function updateOrientation()
{
	var orientation=window.orientation;
	switch(orientation)
	{
	case 0:
	case 180:
		document.body.setAttribute("class","portrait");
//		document.getElementById("viewport").content = "user-scalable=no,  width = 323"; //323
//		document.getElementById("viewport").setAttribute("content","maximum-scale=0.6667,width=480", false);
//		window.innerWidth = 323;
//		window.resizeTo(320);
		break;
	
	case 90:
	case -90:
		document.body.setAttribute("class","landscape");
//		document.getElementById("viewport").content = "user-scalable=no,  width = 450";
//		document.getElementById("viewport").setAttribute("content","maximum-scale=0.6667,width=480", false);
//		window.innerWidth = 480;
//		window.resizeTo(480);
		break;
	}
	//if(refresh == 1)document.location.href = document.location.href;
//document.getElementById("viewport").content = "width=device-width, user-scalable=no, initial-scale=1";
	document.getElementById("viewport").setAttribute("content","user-scalable=no,  width = 480", false);
}
function updateOrientationHandler()
{
	updateOrientation();
	if(window.pageYOffset < 300)
		window.scrollTo(0, 1);
}
function StartUpGame()
{
	var div = document.getElementById("divJoinGame");
	div.style.visibility  = "visible";
	div = document.getElementById("divJoinGameBack");
	div.style.visibility  = "visible";
	GetGameStats();

	playcomp = 0;

	// choose the imageset that best fits the devides screen size
	if(screen.width > 500)
		GameImgPath="img.full";
	else
		GameImgPath="img.iphone"

	for (var i = 0; i < 24; i++)
	{
		var img = document.getElementById("piece" + i);
		img.src = GameImgPath + "/peiceu" + i + ".jpg";

		var img = document.getElementById("board" + i);
		img.src = GameImgPath + "/board" + i + ".jpg";
	}

	// iphone specific actions
	if(screen.width == 320)
	{
		window.onorientationchange=updateOrientationHandler;
		updateOrientation();
		setTimeout(function(){window.scrollTo(0, 1);}, 1000);
	}

	savepieceunder = null;
}

function mouseOverPiece(evt)
{
	evt = (evt) ? evt : ((window.event) ? window.event : null);
	var targ = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	var piecenum = targ.id.substring(5);
	savepieceunder = targ.src;
	targ.src = GameImgPath + "/peices" + piecenum + ".jpg";
}

function mouseOutPiece(evt)
{
	evt = (evt) ? evt : ((window.event) ? window.event : null);
	var targ = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	var piecenum = targ.id.substring(5);
	if(savepieceunder)
		targ.src = savepieceunder;//GameImgPath + "/peiceu" + piecenum + ".jpg";

	savepieceunder = null;
}

function mouseClickPiece(evt)
{
	evt = (evt) ? evt : ((window.event) ? window.event : null);
	var targ = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	var piecenum = targ.id.substring(5);
	targ.src = GameImgPath + "/peices" + piecenum + ".jpg";
	GameMove(piecenum);
}

// handle onreadystatechange event of req object
function processReqChange()
{
    // only if req shows "loaded"
    if (req.readyState == 4)
    {
        // only if "OK"
        if (req.status == 200)
	{
		var div = document.getElementById("divJoinGame");
			// reset the scroll on your iphone if the game has just started.
			if(div.style.visibility == "visible" && screen.width == 320)
				setTimeout(function(){window.scrollTo(0, 1);}, 1000);
		div.style.visibility  = "hidden";
		div = document.getElementById("divJoinGameBack");
		div.style.visibility  = "hidden";
		
		//document.getElementById("messagediv").innerHTML = "";
		var msgelem = req.responseXML.getElementsByTagName("message");
		if(msgelem.length > 0 && msgelem[0].firstChild != null)
		{
//		alert(msgelem.hasChildNodes);
			div=document.getElementById("messagediv");
			div.innerHTML = msgelem[0].firstChild.nodeValue;
		}

		gamenum        = req.responseXML.getElementsByTagName("gamenum")[0].firstChild.nodeValue;
		if(gamenum > -1)
			gametoken        = req.responseXML.getElementsByTagName("gametoken")[0].firstChild.nodeValue;
		playercolor    = req.responseXML.getElementsByTagName("playercolor")[0].firstChild.nodeValue;
		pieceselected = -1;
		if(req.responseXML.getElementsByTagName("pieceselected").length)
		  pieceselected  = req.responseXML.getElementsByTagName("pieceselected")[0].firstChild.nodeValue;

		var piecesleft = req.responseXML.getElementsByTagName("piecesleft")[0].firstChild.nodeValue;
		
		if(playercolor == "white")
			var piecenam = GameImgPath + "/peicewht.jpg"
		else
			var piecenam = GameImgPath + "/peiceblk.jpg"

		document.getElementById("playercolorim").src = piecenam;

		if(req.responseXML.getElementsByTagName("opinitials").length)
		{
			var opinitials  = req.responseXML.getElementsByTagName("opinitials")[0].firstChild.nodeValue;
			div = document.getElementById("divVrs");
			div.innerHTML = playerinitials + "<br>vs<br>" + opinitials;
		}
		else
			var opinitials = "";

		var extrapcdiv = document.getElementById("extrapiecedisplay");
		extrapcdiv.innerHTML = "";
		for(var i=0; i<piecesleft; i++)
		{
			if(i > 0 && i % 3 == 0) extrapcdiv.innerHTML += "<br>";
			extrapcdiv.innerHTML += "<img class='extrapeiceim' id='extrapeiceim' src='" + piecenam + "'>";
		}

		var gmpieces = req.responseXML.getElementsByTagName("piece");
		for (var i = 0; i < gmpieces.length; i++)
       		{
			var piecenum = gmpieces[i].getElementsByTagName("piecenum")[0].firstChild.nodeValue;
			var posstate = gmpieces[i].getElementsByTagName("posstate")[0].firstChild.nodeValue;
			var pselect = gmpieces[i].getElementsByTagName("select")[0].firstChild.nodeValue;

			var img = document.getElementById("piece" + piecenum);
			if(/*pieceselected == piecenum || */pselect == "yes" || (pselect == "selectable" && posstate != playercolor && posstate != "open"))
				img.src = GameImgPath + "/peices" + piecenum + ".jpg";
			else if(posstate == "white")
				img.src = GameImgPath + "/peicew" + piecenum + ".jpg";
			else if(posstate == "black")
				img.src = GameImgPath + "/peiceb" + piecenum + ".jpg";
			else
				img.src = GameImgPath + "/peiceu" + piecenum + ".jpg";

			if(pselect == "selectable")
			{
				img.onclick = mouseClickPiece;
				img.onmouseover = mouseOverPiece;
				img.onmouseout  = mouseOutPiece;
			}
			else
			{
				img.onclick = null;
				img.onmouseover = null;
				img.onmouseout  = null;
			}
		}

		var waitjoin = req.responseXML.getElementsByTagName("waitjoin");
		if(waitjoin.length > 0 && waitjoin[0].firstChild != null)
		{
			div=document.getElementById("divJoinCounter");

			if(waitjoin[0].firstChild.nodeValue > 0) 
			{
				div.innerHTML = "<EM>" + waitjoin[0].firstChild.nodeValue + "</EM>";
				playcomp = 0;
			}
			else
				div.innerHTML = "There does not appear to be a player available. To play against the computer click the button or wait for an oponent.  <input type=button id=\"playcompbutton\" value=\"Play Computer\" onClick=\"playcomp=1;\">";
		}

		savepieceunder = null;	// reset since the image might have changed
		tHeartBeat = null;
		// continue to wait for your turn
		if(req.responseXML.getElementsByTagName("yourmove")[0].firstChild.nodeValue != "yes" && gamenum > -1)
		   setTimeout("GetGameState()",500);
		else if(gamenum < 0)
		{
			var div = document.getElementById("divJoinGame");
			div.style.visibility  = "visible";
			div = document.getElementById("divJoinGameBack");
			div.style.visibility  = "visible";

			GetGameStats();
		}
		else if(gamenum > -1)
		   tHeartBeat = setTimeout("GetGameState()",15000); // transmit a heart beat so we can tell if where disconnected

		if(opinitials.length)
		{
			div = document.getElementById("divJoinCounter");
			div.style.visibility  = "hidden";
			div = document.getElementById("divJoinCounterBack");
			div.style.visibility  = "hidden";
		}
         } else 
	 {
//            alert("There was a problem retrieving the XML data:\n" + req.statusText);
		setTimeout("GetGameState()",1500);
         }
    }
}

function JoinTimer(count)
{
	var div = document.getElementById("divJoinCounter");
	div.innerHTML = count;
	count --;
	if(count > 0)
		setTimeout("JoinTimer(" + count + ");", 1000);
}

// handle windows vrs everyone else
function GetXMLHttpRqObject()
{
	if (window.XMLHttpRequest) 
		return new XMLHttpRequest();
	else if (window.ActiveXObject)
		return  new ActiveXObject("Microsoft.XMLHTTP");
}

function JoinGame()
{
	playerinitials = document.getElementById("joininitials").value;
	if(playerinitials.length < 1 || playerinitials.length > 4)
	{
		div=document.getElementById("messagediv");
		div.innerHTML = "Players initials are required";
		document.getElementById("joininitials").value = "ANON"
	}
	else
	{
        	req = GetXMLHttpRqObject();
        	req.onreadystatechange = processReqChange;
        	req.open("POST", "game.php", true);
        	req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
         //     req.setRequestHeader("Content-length", 9+lastInc.length);
      		//req.setRequestHeader("Connection", "close");
        	req.send("joingame=1&joininitials=" + playerinitials);

		var div = document.getElementById("divJoinCounter");
		div.style.visibility  = "visible";
		div = document.getElementById("divJoinCounterBack");
		div.style.visibility  = "visible";
//		JoinTimer(10);
	}

	div = document.getElementById("divVrs");
	div.innerHTML = "";
}

function ExitGame()
{
	if(tHeartBeat)
		clearTimeout(tHeartBeat);
	tHeartBeat = null;
	if(gamenum > -1)
	{
        	req = GetXMLHttpRqObject();
//        	req.onreadystatechange = processReqChange;
        	req.open("POST", "game.php", false);
        	req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
         //     req.setRequestHeader("Content-length", 9+lastInc.length);
      		//req.setRequestHeader("Connection", "close");
        	req.send("gamenum=" + gamenum + "&exitgame=1&gametoken=" + gametoken + "&playercolor=" + playercolor);
	}
	playcomp = 0;
}

function GameMove(piecenum)
{
	if(tHeartBeat)
		clearTimeout(tHeartBeat);
	tHeartBeat = null;
	req = GetXMLHttpRqObject();
	req.onreadystatechange = processReqChange;
	req.open("POST", "game.php", true);
	req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	//     req.setRequestHeader("Content-length", 9+lastInc.length);
	//req.setRequestHeader("Connection", "close");
	req.send("gamenum=" + gamenum + "&gametoken=" + gametoken + "&playercolor=" + playercolor + "&piecemove=" + piecenum + "&pieceselected=" + pieceselected);

}

function GetGameState()
{
	if(tHeartBeat)
		clearTimeout(tHeartBeat);
	tHeartBeat = null;
	req = GetXMLHttpRqObject();
	req.onreadystatechange = processReqChange;
	req.open("POST", "game.php", true);
	req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	//     req.setRequestHeader("Content-length", 9+lastInc.length);
	//req.setRequestHeader("Connection", "close");
	var rqstring = "gamenum=" + gamenum + "&gametoken=" + gametoken + "&playercolor=" + playercolor;
	if(playcomp == 1)
		rqstring += "&playcomp=1";
	req.send(rqstring);
}

function processGameStatsReqChange()
{
    // only if req shows "loaded"
    if (gsreq.readyState == 4)
    {
        // only if "OK"
        if (gsreq.status == 200)
	{

		//document.getElementById("messagediv").innerHTML = "";
		var msgelem = gsreq.responseXML.getElementsByTagName("gamecount");
		if(msgelem.length > 0 && msgelem[0].firstChild != null)
		{
			var gamecount = msgelem[0].firstChild.nodeValue;
			var div=document.getElementById("gamecountdiv");
			div.innerHTML = "Currently " + gamecount + " active games being played";

			var jb = document.getElementById("joinbutton");
			if(gamecount == 0)
				jb.value = "Start Game";
			else
				jb.value = "Join Game";
		}

		setTimeout("GetGameStats()",1500);
         } else 
	 {
//            alert("There was a problem retrieving the XML data:\n" + req.statusText);
		setTimeout("GetGameStats()",1500);
         }
    }
}

function GetGameStats()
{
	var div = document.getElementById("divJoinGame");
	if(div.style.visibility  == "visible")
	{
			gsreq = GetXMLHttpRqObject();
			gsreq.onreadystatechange = processGameStatsReqChange;
			gsreq.open("POST", "gamescan.php", true);
//			gsreq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			gsreq.send("");// + "&pieceselected=" + pieceselected);
	}
}

