//JohnBrockwell@Hotmail.com
//www.chessServer.co.uk



	var xmlHttp; 
	
	var is_ie = (navigator.userAgent.indexOf('MSIE') >= 0) ? 1 : 0; 
	var is_ie5 = (navigator.appVersion.indexOf("MSIE 5.5")!=-1) ? 1 : 0; 
	var is_opera = ((navigator.userAgent.indexOf("Opera 6")!=-1)||(navigator.userAgent.indexOf("Opera/6")!=-1)) ? 1 : 0; 
	//netscape, safari, mozilla behave the same??? 
	var is_netscape = (navigator.userAgent.indexOf('Netscape') >= 0) ? 1 : 0; 

	// chess related stuff
	var nextMoveID = -1
	var cs_SelPiece = -1
	var cs_SelPawnPiece = -1
	var cs_Img = ""
    var gameType = "";
    var gameLive = false;
    var thisPuzzleRef = ""
	var boardDataXML = "";
	
	function accept(a)
	{
		overlib(overlibTable("Loading"), FULLHTML)// STICKY, HAUTO, VAUTO
		var today=new Date()
        var d=today.getHours()+today.getMinutes()+today.getSeconds()


	    var myXMLDocument = loadADoc(boardDataXML);// = new ActiveXObject("Microsoft.XMLDOM");
	    
        var u = myXMLDocument.getElementsByTagName('params')[0].getAttribute("u")
		
		var url = 'http://www.chessserver.co.uk/XML/getBoardXML.aspx?d='+d+'&u='+u+'&a='+a; 
          
		//Create the xmlHttp object to use in the request 
		//stateChangeHandler will fire when the state has changed, i.e. data is received back 
		// This is non-blocking (asynchronous) 
		xmlHttp = GetXmlHttpObject(stateChangeHandler); 
            
		//Send the xmlHttp get to the specified url 
		xmlHttp_Get(xmlHttp, url);     	
	
	}
	
	
	function getNewGame()
	{ 
	    gameType = "game";
	    overlib(overlibTable("Loading"), FULLHTML)// STICKY, HAUTO, VAUTO
					
		//Append the name to search for to the requestURL 
		var today=new Date()
        var d=today.getHours()+today.getMinutes()+today.getSeconds()
        
        var p1=document.getElementById("selectPlayer1")
        var p2=document.getElementById("selectPlayer2")
        var moveDuration=document.getElementById("moveDuration")
		var url = 'http://www.chessserver.co.uk/XML/getBoardXML.aspx?d='+d+'&u=-1,'+p1.options[p1.selectedIndex].value+','+p2.options[p2.selectedIndex].value +','+moveDuration.options[moveDuration.selectedIndex].value; 
            
		//Create the xmlHttp object to use in the request 
		//stateChangeHandler will fire when the state has changed, i.e. data is received back 
		// This is non-blocking (asynchronous) 
		xmlHttp = GetXmlHttpObject(stateChangeHandler); 
            
		//Send the xmlHttp get to the specified url 
		xmlHttp_Get(xmlHttp, url); 
	} 


	
    function setGameLinks(s)
    {
        //alert(s)
    	var sGameFlags = s.split(',');
	    
	    
	    if (sGameFlags[0] == "0")
			document.getElementById("lnkGameAccept").innerHTML = "";
		else
		    document.getElementById("lnkGameAccept").innerHTML = "Accept Game&nbsp;";
		    
	    if (sGameFlags[1] == "0")
			document.getElementById("lnkGameDecline").innerHTML = "";
		else
		   document.getElementById("lnkGameDecline").innerHTML = "Decline Game&nbsp;";
	        
//	    if (sGameFlags[2] == "0")
//			document.getElementById("lnkDrawOffer").innerHTML = "";
//		else
//		   document.getElementById("lnkDrawOffer").innerHTML = "Offer Draw&nbsp;";
//	        
//	    if (sGameFlags[3] == "0")
//			document.getElementById("lnkDrawAccept").innerHTML = "";
//		else
//		   document.getElementById("lnkDrawAccept").innerHTML = "Accept Draw&nbsp;";
//	        
//	    if (sGameFlags[4] == "0")
//			document.getElementById("lnkDrawDecline").innerHTML = "";
//		else
//		   document.getElementById("lnkDrawDecline").innerHTML = "Decline Draw&nbsp;";
	    
	    if (sGameFlags[5] == "0")
			document.getElementById("lnkRetire").innerHTML = "";
		else
		   document.getElementById("lnkRetire").innerHTML = "Quit&nbsp;";
	    
	    if (sGameFlags[6] == "0")
			document.getElementById("lnkDelete").innerHTML = "";
		else
		   document.getElementById("lnkDelete").innerHTML = "Delete&nbsp;";
	        
    }
    
    var varStatusNum
	    function getBoardTransform(statusNum,gameId)
    {
        varStatusNum=statusNum
        overlib(overlibTable("Loading"), FULLHTML)// STICKY, HAUTO, VAUTO
		var today=new Date()
        var d=today.getHours()+today.getMinutes()+today.getSeconds()
        

		var url = 'http://www.chessserver.co.uk/XML/getXMLTransforms.aspx?d='+d+'&u=-2,'+gameId; 
            
		//Create the xmlHttp object to use in the request 
		//stateChangeHandler will fire when the state has changed, i.e. data is received back 
		// This is non-blocking (asynchronous) 
		xmlHttp = GetXmlHttpObject(stateChangeHandlerTransform); 
            
		//Send the xmlHttp get to the specified url 
		xmlHttp_Get(xmlHttp, url); 
    }
    


	function getTheXML(u)
	{ 
		 overlib(overlibTable("Loading"), FULLHTML)// STICKY, HAUTO, VAUTO
					
		//Append the name to search for to the requestURL 
		var today=new Date()
        var d=today.getHours()+today.getMinutes()+today.getSeconds()
        

		var url = 'http://www.chessserver.co.uk/XML/getBoardXML.aspx?d='+d+'&u='+u; 
            
		//Create the xmlHttp object to use in the request 
		//stateChangeHandler will fire when the state has changed, i.e. data is received back 
		// This is non-blocking (asynchronous) 
		xmlHttp = GetXmlHttpObject(stateChangeHandler); 
            
		//Send the xmlHttp get to the specified url 
		xmlHttp_Get(xmlHttp, url); 
	} 

	function getTheXMLFromTree(node)
	{ 
	    gameType = "game";
	    
	    getTheXML(node.Value);
    } 

	function takeMove(u, p, s, t)//t=swapPieceType
	{ 
		 overlib(overlibTable("Calculating"), FULLHTML)// STICKY, HAUTO, VAUTO
					
		//Append the name to search for to the requestURL 
		var today=new Date();
        var d=today.getHours()+today.getMinutes()+today.getSeconds();
        var url = "";
        if (gameType == "game")
        {
		    url = 'http://www.chessserver.co.uk/XML/getBoardXML.aspx?d='+d+'&p='+p+'&s='+s+'&u='+u+'&t='+t; 
                
		    //Create the xmlHttp object to use in the request 
		    //stateChangeHandler will fire when the state has changed, i.e. data is received back 
		    // This is non-blocking (asynchronous) 
		    xmlHttp = GetXmlHttpObject(stateChangeHandler); 
        }
        else if (gameType == "puzzle")
        {
		    url = 'http://www.chessserver.co.uk/XML/getPuzzleXML.aspx?d='+d+'&p='+p+'&s='+s+'&u='+u+'&t='+t; 
                
		    //Create the xmlHttp object to use in the request 
		    //stateChangeHandler will fire when the state has changed, i.e. data is received back 
		    // This is non-blocking (asynchronous) 
		    xmlHttp = GetXmlHttpObject(stateChangeHandlerPuzzle); 
        
        }
            
		//Send the xmlHttp get to the specified url 
		xmlHttp_Get(xmlHttp, url); 
	} 
	
	
		
	function overlibTable(displayText)
	{
	    return "<table class='overlibTableOuter' cellpadding='0' cellspacing='0'><tr><td valign='center'><IMG id='imgID99' src='http://www.chessserver.co.uk/Pics/kalied.gif' style='WIDTH: 28px; HEIGHT: 28px' /></td><td valign='center'>" + displayText + ", Please wait...</td></tr></table>	"
	}
	
	//stateChangeHandler will fire when the state has changed, i.e. data is received back 
	// This is non-blocking (asynchronous) 
	function stateChangeHandler() 
	{ 
		//readyState of 4 or 'complete' represents that data has been returned 
		if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete'){ 
			//Gather the results from the callback 
			boardDataXML = xmlHttp.responseText; 
            overlib("<IMG id='imgID99' src='http://www.chessserver.co.uk/PlayPieces/Blank.gif' style='WIDTH: 32px; HEIGHT: 32px' />	", FULLHTML)
			//Populate the innerHTML of the div with the results 
			setBoardPeices(boardDataXML)
			setHistory(boardDataXML);
			//document.getElementById("myTransDebugDiv").innerHTML = "start '" + boardDataXML + "' end"
		} 
	} 
	
	function stateChangeHandlerTransform() 
	{ 
		if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')
		{ 
			var myVar = xmlHttp.responseText; 
			
            overlib(myVar, STICKY, HAUTO, VAUTO, CLOSECLICK, CAPTION, varStatusNum, WRAP)
		} 
	} 

	// XMLHttp send GET request 
	function xmlHttp_Get(xmlhttp, url) { 
		xmlhttp.open('GET', url, true); 
		xmlhttp.send(null); 
	} 

	function GetXmlHttpObject(handler) { 
		var objXmlHttp = null;    //Holds the local xmlHTTP object instance 

		//Depending on the browser, try to create the xmlHttp object 
		if (is_ie){ 
			//The object to create depends on version of IE 
			//If it isn't ie5, then default to the Msxml2.XMLHTTP object 
			var strObjName = (is_ie5) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP'; 
             
			//Attempt to create the object 
			try{ 
				objXmlHttp = new ActiveXObject(strObjName); 
				objXmlHttp.onreadystatechange = handler; 
			} 
			catch(e){ 
			//Object creation errored 
				alert('IE detected, but object could not be created. Verify that active scripting and activeX controls are enabled'); 
				return; 
			} 
		} 
		else if (is_opera){ 
			//Opera has some issues with xmlHttp object functionality 
			alert('Opera detected. The page may not behave as expected.'); 
			return; 
		} 
		else{ 
			// Mozilla | Netscape | Safari 
			objXmlHttp = new XMLHttpRequest(); 
			objXmlHttp.onload = handler; 
			objXmlHttp.onerror = handler; 
		} 
         
		//Return the instantiated object 
		return objXmlHttp; 
	} 

	function setBoardPeices(theBoardXML)
	{
	//alert (theBoardXML);
	    gameLive = true;
		var myXMLDocument = loadADoc(theBoardXML);// = new ActiveXObject("Microsoft.XMLDOM");
        
		for (i=0;i<=63;i++)
		{
			var pPic = "http://www.chessserver.co.uk/PlayPieces/"+myXMLDocument.getElementsByTagName('theSquare')[i].getAttribute("piecePicture")
			document.getElementById("imgID" + i).setAttribute("src", pPic)
            var myNode = document.getElementById("TCell" + i)
            myNode.className =   "square" + getOffSet(i)
				
		}
	   	if (gameType == "game")
        {
            
	        document.getElementById("Desc").innerHTML           = getNodeVal(myXMLDocument.getElementsByTagName('params')[0]);
	        document.getElementById("p1").innerHTML             = myXMLDocument.getElementsByTagName('params')[0].getAttribute("p1")
	        document.getElementById("p2").innerHTML             = myXMLDocument.getElementsByTagName('params')[0].getAttribute("p2")
	        document.getElementById("errDesc").innerHTML        = getNodeVal(myXMLDocument.getElementsByTagName('errDesc')[0])
	        document.getElementById("md").innerHTML             = myXMLDocument.getElementsByTagName('params')[0].getAttribute("nextMoveByDate")
	        var s                                               = myXMLDocument.getElementsByTagName('params')[0].getAttribute("gameFlags")
    	    
            setGameLinks(s)

    	    
	        document.getElementById("imgF1").setAttribute("src", "Pics/Flags/" + myXMLDocument.getElementsByTagName('params')[0].getAttribute("f1"))
	        document.getElementById("imgF1").setAttribute("alt", myXMLDocument.getElementsByTagName('params')[0].getAttribute("f1Name"))
	        document.getElementById("imgF2").setAttribute("src", "Pics/Flags/" + myXMLDocument.getElementsByTagName('params')[0].getAttribute("f2"))
	        document.getElementById("imgF2").setAttribute("alt", myXMLDocument.getElementsByTagName('params')[0].getAttribute("f2Name"))
	        //clear  piece move box
        }
		else if (gameType == "puzzle")
		{
	        document.getElementById("puzzleStatus").innerHTML   = getNodeVal(myXMLDocument.getElementsByTagName('puzzleParams')[0]);
	        document.getElementById("puzzleGoal").innerHTML     = getNodeVal(myXMLDocument.getElementsByTagName('puzzleGoal')[0]);
		
		}
        
        
	}


    function setHistory(theBoardXML)
    {
        var myXMLDocument = loadADoc(theBoardXML);

        var x=document.getElementById("boardHistory");
        for (i=x.length;i>=0;i--)
        {
            removeMove(i)
        }

        //populate piece move box
        var move = myXMLDocument.getElementsByTagName('move'); 

        for (var i = 0; i < move.length; i++) { 
            
            insertMove(move[i].getAttribute("m"), move[i].getAttribute("n"))
            
        }
    }
    
    
    function setPuzzleHistory(theBoardXML)
    {
        var myXMLDocument = loadADoc(theBoardXML);
        
        var x=document.getElementById("boardHistory");
        for (i=x.length;i>=0;i--)
        {
            removeMove(i)
        }


	    //populate piece move box
	    var move = myXMLDocument.getElementsByTagName('move'); 
        for (var i = 0; i < move.length; i++) { 
            
            
            insertMove(move[i].getAttribute("m"), move[i].getAttribute("n"))
            //add movetext to list
        }


        var puzzleMove = myXMLDocument.getElementsByTagName('puzzleMove'); 
        document.getElementById("puzzleMoves").innerHTML = "";
        for (var ii = 0; ii < puzzleMove.length; ii++) { 
            document.getElementById("puzzleMoves").innerHTML += (ii+1) + ") " + getNodeVal(puzzleMove[ii]) + "<br />";
        }
    }
    
    function insertMove(t, n)
    {
        var y=document.createElement('option');
        y.text=t
        y.value=n
        var x=document.getElementById("boardHistory");
        try
        {
            x.add(y,null); // standards compliant
        }
        catch(ex)
        {
            x.add(y); // IE only
        }
    }
    
    function removeMove(n)
    {
        var x=document.getElementById("boardHistory")
        x.remove(n)
    }



	//change css for selected square
	function setSelSquare(num, myClassName, cssTarClass)
	{
		if(document.getElementById)
		{
		    if (gameLive)
			    if(getMoveableSquare(num))//if piece moveable
			    {
				    var myNode = document.getElementById("TCell" + num)
				    myNode.className =   myClassName + getOffSet(num);
				    setTargets(num, cssTarClass);
			    }
		}
	}



	//change css for target square
	function setTargets(num, myClassName)
	{
		var targetSquares = getTargetSquares(num)//get test data

		for (var targetSquare in targetSquares)//loop through targets
		{
			//set the css class
			if(targetSquares[targetSquare].toString()!="")
			{
				var myNode = document.getElementById("TCell"+targetSquares[targetSquare].toString());
				myNode.className =   myClassName+getOffSet(targetSquares[targetSquare]);
				
				
			}
		}
	}

	//check if moved to a target
	function checkTargets(num)
	{
		var retVal = false
		var targetSquares = getTargetSquares(cs_SelPiece)//get test data
		for (var targetSquare in targetSquares)//loop through targets
		{
			//set the css class
			if(targetSquares[targetSquare].toString()!="")
			{
				if(num.toString() == targetSquares[targetSquare].toString())
					retVal = true
			}
		}
		return retVal
	}

	//get the square colour, black = 1 or white = 0
	function getOffSet(iSquare)
	{
		var myOffSet = parseInt( iSquare % 2);
		var rowNum = parseInt( iSquare / 8);
		var rowNumOffSet = parseInt(rowNum % 2);
		if (rowNumOffSet == 0) //change MyOffset if rowNumOffSet = dividable by 8
		{
			if (myOffSet == 0)
				myOffSet = 1;
			else
				myOffSet = 0;
		}
		return myOffSet
	}


	function getMoveableSquare(num)
	{
		var xmlPos = num
		var bRet = false
		
		if (boardDataXML!="")
		{
		    var myXMLDocument = loadADoc(boardDataXML);// = new ActiveXObject("Microsoft.XMLDOM");
		    
		    
		   
    		
		    var mySquares = myXMLDocument.getElementsByTagName('theSquare')
    		    if (getNodeVal(mySquares[xmlPos])!="")
			        bRet = true
		    
        }
		return bRet

	}

	function getTargetSquares(num)
	{
	
	
		var xmlPos = num
		var myXMLDocument = loadADoc(boardDataXML);// = new ActiveXObject("Microsoft.XMLDOM");
		var mySquares;
		
            
            
        mySquares = myXMLDocument.getElementsByTagName('theSquare');
        
        if (getNodeVal(mySquares[xmlPos])!="")
		{
		    var myVal = getNodeVal(mySquares[xmlPos]);
		    if (myVal != null)
			    var myTargets = myVal.split(",");
			else
			    myTargets = "";
			return myTargets
		}
		return ""
	}
	
	function pawnSwapInterupt(num)
	{
	    var iRet = 0
		var myXMLDocument = loadADoc(boardDataXML);
	    
	    
		var thisPieceType = myXMLDocument.getElementsByTagName('theSquare')[cs_SelPiece].getAttribute("pieceType")
		
		if (thisPieceType=="6")//tis a pawn
		{
		    var thisSetOwner = "";
		    if (num <= 7)
		    {
		        thisSetOwner = myXMLDocument.getElementsByTagName('theSquare')[cs_SelPiece].getAttribute("setOwner")
		        if (thisSetOwner == "1")
    		        iRet = 1
		    }
		    else if (num >= 56)
		    {
		        thisSetOwner = myXMLDocument.getElementsByTagName('theSquare')[cs_SelPiece].getAttribute("setOwner")
		        if (thisSetOwner == "2")
    		        iRet = 2
		    }
		}
		
		return iRet
	}	

//mouse over functions
	function jOnInit(myVal, myGameType)
	{
    	gameType = myGameType;
	    if(gameType == "game")
	    {
	        myVal+='&a=j';
	        getTheXML(myVal);
	    }
	    else
	    {
	        gameType = "puzzle";
	        getThePuzzleXML(myVal)
	    }
	}  



	function jOnClick(num)
	{
	    cs_SelPawnPiece = -1
		if(document.getElementById)
		{
			if(cs_SelPiece == -1)//if no piece selected yet
			{
			    var tmpImg = document.getElementById("imgID"+num).getAttribute("src")
				if (tmpImg.indexOf("Blank.gif") == "-1")//if player selected a blank then ignore
				{
				    cs_SelPiece = num
				    cs_Img = tmpImg
				    document.getElementById("imgID" + num).setAttribute("src", "http://www.chessserver.co.uk/PlayPieces/Blank.gif")
				    overlib("<IMG id='imgID99' src='"+cs_Img+"' style='WIDTH: 32px; HEIGHT: 32px' />	", FULLHTML)
				}
			}
			else //some thing already selected
			{
				var tmp = cs_SelPiece
				
				if (checkTargets(num) && (gameLive))//piece droped on a target square
				{
					var pswapId = pawnSwapInterupt(num)
					if (pswapId > 0)//pswapId = the set for a player requiring a swap
					{
					    cs_SelPawnPiece = num
					    
					    overlib(getPawnSwapTable(pswapId), HAUTO, VAUTO, FULLHTML, STICKY)
					}
					else
					{
					    document.getElementById("imgID" + num).setAttribute("src", cs_Img)
					    cs_Img = "http://www.chessserver.co.uk/PlayPieces/Blank.gif"
					    overlib("<IMG id='imgID99' src='"+cs_Img+"' style='WIDTH: 32px; HEIGHT: 32px' />	", FULLHTML)
    					
					    var myXMLDocument = loadADoc(boardDataXML);// = new ActiveXObject("Microsoft.XMLDOM");
		                
    		            
		                var u = "";
		                if (gameType == "game")
		                    u = myXMLDocument.getElementsByTagName('params')[0].getAttribute("u")
		                else if (gameType == "puzzle")
		                    u = myXMLDocument.getElementsByTagName('puzzleParams')[0].getAttribute("u")
		                
		                takeMove(u, cs_SelPiece, num,-1)
					    cs_SelPiece = -1					
					}

					
					
				}
				else//piece not droped on a target (or game not live), so cancel move
				{
					document.getElementById("imgID" + cs_SelPiece).setAttribute("src", cs_Img)
					cs_Img = "http://www.chessserver.co.uk/PlayPieces/Blank.gif"
					cs_SelPiece = -1
					overlib("<IMG id='imgID99' src='"+cs_Img+"' style='WIDTH: 32px; HEIGHT: 32px' />	", FULLHTML)
				}
				jMouseOut(tmp)
				jMouseOver(num)
			}
		}
	} 
	
	
    function getPawnSwapTable(pswapId)
    {
        var sRetVal = "";
        varpieceName = "";
        if (pswapId == 1)
        {
            varpieceName = "Light";
        }
        sRetVal += "<table class=\"outerBackgroundRed\"><tr>";
        sRetVal += "<td id=\"PCell2\" class=\"square1\"><img id=\"pSwap2\" class=\"playPiece\" onmouseover=\"javascript:jPawnOver(2)\" onmouseout=\"javascript:jPawnOut (2)\" onclick=\"javascript:jPawn(2,"+pswapId+")\" src=\"PlayPieces/" + varpieceName + "GreyRook.gif\" /></td>";
        sRetVal += "<td id=\"PCell1\" class=\"square1\"><img id=\"pSwap1\" class=\"playPiece\" onmouseover=\"javascript:jPawnOver(1)\" onmouseout=\"javascript:jPawnOut (1)\" onclick=\"javascript:jPawn(1,"+pswapId+")\" src=\"PlayPieces/" + varpieceName + "GreyKnight.gif\" /></td>";
        sRetVal += "<td id=\"PCell3\" class=\"square1\"><img id=\"pSwap3\" class=\"playPiece\" onmouseover=\"javascript:jPawnOver(3)\" onmouseout=\"javascript:jPawnOut (3)\" onclick=\"javascript:jPawn(3,"+pswapId+")\" src=\"PlayPieces/" + varpieceName + "GreyBishop.gif\" /></td>";
        sRetVal += "<td id=\"PCell4\" class=\"square1\"><img id=\"pSwap4\" class=\"playPiece\" onmouseover=\"javascript:jPawnOver(4)\" onmouseout=\"javascript:jPawnOut (4)\" onclick=\"javascript:jPawn(4,"+pswapId+")\" src=\"PlayPieces/" + varpieceName + "GreyQueen.gif\" /></td>";
        sRetVal += "</tr></table>";

        return sRetVal
    }

	function jPawnOver(pieceType)
	{
		document.getElementById("PCell" + pieceType).setAttribute("className","Selsquare1")

	}  

	function jPawnOut(pieceType)
	{
	    document.getElementById("PCell" + pieceType).setAttribute("className","square1")

	}  
	
	
	function jPawn(swapPieceType, pswapId)
	{
	    var imgTmpName = ""
	    if (swapPieceType == 2)
	        imgTmpName = "GreyRook.gif"
	    else if (swapPieceType == 1)
	        imgTmpName = "GreyKnight.gif"
	    else if (swapPieceType == 3)
	        imgTmpName = "GreyBishop.gif"
	    else if (swapPieceType == 4)
	        imgTmpName = "GreyQueen.gif"
        if (pswapId == 1)
        {
            imgTmpName = "Light" + imgTmpName
        }
	    imgTmpName = "http://www.chessserver.co.uk/PlayPieces/" + imgTmpName
	    
        document.getElementById("imgID" + cs_SelPawnPiece).setAttribute("src", imgTmpName)
        cs_Img = "http://www.chessserver.co.uk/PlayPieces/Blank.gif"
        overlib("<IMG id='imgID99' src='"+cs_Img+"' style='WIDTH: 32px; HEIGHT: 32px' />	", FULLHTML)

        var myXMLDocument = loadADoc(boardDataXML);
        
        
        var u = myXMLDocument.getElementsByTagName('params')[0].getAttribute("u")
		
		takeMove(u, cs_SelPiece, cs_SelPawnPiece, swapPieceType)
        cs_SelPiece = -1
        cs_SelPawnPiece = -1	
	}  
	
	//mouse over functions
	function jMouseOver(num)
	{
		if(cs_SelPiece==-1)
			setSelSquare(num, "Selsquare", "TargetSquare")
	}  

	function jMouseOut(num)
	{
		if(cs_SelPiece==-1)
			setSelSquare(num, "square", "square")
	}  
	


    function togglePanel(panelId)
    {
		    var style2 = document.getElementById(panelId).style
		    style2.display = style2.display? "":"none"
    }


	function jTestClick(num)
	{
		if (num == 2)
		{
		    document.getElementById("div3").setAttribute("className","hideDiv")
		}
		else if (num == 3)
		{
		    document.getElementById("div2").setAttribute("className","hideDiv")
		}
		document.getElementById("myDebugDiv").innerHTML = "cool " + num
		
	} 

	function getThePuzzleXMLFromTree(node)
	{ 
	    gameType = "puzzle";
	    getThePuzzleXML(node.Value)
    } 
    
	function notLoggedInAlert(node)
	{ 
	    alert("You must be logged in to play a puzzle");
    }     
	function getThePuzzleXML(puzzleRef)
	{ 
	
		document.getElementById("puzzleHint").setAttribute("className","hiddenBox")
        document.getElementById("puzzleMoves").setAttribute("className","hiddenBox")
        
		overlib(overlibTable("Loading Puzzle "), FULLHTML)// STICKY, HAUTO, VAUTO
	    
	    thisPuzzleRef = puzzleRef;
		var today=new Date()
        var d=today.getHours()+today.getMinutes()+today.getSeconds()
        

		var url = 'http://www.chessserver.co.uk/XML/getPuzzleXML.aspx?d='+d+'&pr='+puzzleRef; 
            
		//Create the xmlHttp object to use in the request 
		//stateChangeHandler will fire when the state has changed, i.e. data is received back 
		// This is non-blocking (asynchronous) 
		xmlHttp = GetXmlHttpObject(stateChangeHandlerPuzzle); 
            
		//Send the xmlHttp get to the specified url 
		xmlHttp_Get(xmlHttp, url); 
	}     

	function stateChangeHandlerPuzzle() 
	{ 
		//readyState of 4 or 'complete' represents that data has been returned 
		if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete'){ 
			//Gather the results from the callback 
			boardDataXML = xmlHttp.responseText; 
            overlib("<IMG id='imgID99' src='http://www.chessserver.co.uk/PlayPieces/Blank.gif' style='WIDTH: 32px; HEIGHT: 32px' />	", FULLHTML)
			//Populate the innerHTML of the div with the results 
			
			setPuzzlePeices(boardDataXML)
			setPuzzleHistory(boardDataXML);

		} 
	}
	
	

	

    function loadADoc(thePuzzleXML)
    {
        var myXMLDocument;
    	try //Internet Explorer
        {
            myXMLDocument=new ActiveXObject("Microsoft.XMLDOM");
            myXMLDocument.async="false";
            myXMLDocument.loadXML(thePuzzleXML);
        }
        catch(e)
        {
            try //Firefox, Mozilla, Opera, etc.
            {
                var parser=new DOMParser();
                myXMLDocument=parser.parseFromString(thePuzzleXML,"text/xml");
            }
            catch(e) {alert(e.message)
            }
        }
        return myXMLDocument;
    }
    
    function getNodeVal(thisNode)
    {
        var retVal;
        if (thisNode.firstChild!=null)
	        retVal = thisNode.firstChild.nodeValue;
	    else
	        retVal = "";
	        
	    return retVal;
    }
    
 
	
	
	function setPuzzlePeices(thePuzzleXML)
	{
	    gameLive = true;
		var myXMLDocument = loadADoc(thePuzzleXML);

		for (i=0;i<=63;i++)
		{
			var pPic = "http://www.chessserver.co.uk/PlayPieces/"+myXMLDocument.getElementsByTagName('theSquare')[i].getAttribute("piecePicture")
			document.getElementById("imgID" + i).setAttribute("src", pPic)
			document.getElementById("TCell" + i).setAttribute("className","square" + getOffSet(i))
		}
	    document.getElementById("puzzleStatus").innerHTML   = getNodeVal(myXMLDocument.getElementsByTagName('puzzleParams')[0])
	    document.getElementById("puzzleGoal").innerHTML     = getNodeVal(myXMLDocument.getElementsByTagName('puzzleGoal')[0])
	    document.getElementById("puzzleHint").innerHTML     = getNodeVal(myXMLDocument.getElementsByTagName('puzzleHint')[0])


	}


    function jPuzzleHint()
    {
        //make the div tags visible
        
				
        var myNode = document.getElementById("puzzleHint")
        var myNode2 = document.getElementById("puzzleMoves")
        
        if (myNode.className == "hiddenBox")
        {
            myNode.className = "innerBackground";
            
            myNode2.className = "innerBackground";
        }
        else{
            //var myNode = document.getElementById("puzzleHint")
            myNode.className = "hiddenBox";
            //var myNode3 = document.getElementById("puzzleMoves")
            myNode2.className = "hiddenBox";
       }
    }

    function historyClick()
    {
        var mylist=document.getElementById("boardHistory");
        var myOptionText =mylist.options[mylist.selectedIndex].text;
        var myOptionVal = mylist.options[mylist.selectedIndex].value;
        
        if (mylist.selectedIndex == 0) // clicked the top list item
        {
            gameLive = true;
            if (gameType == "game")
                setBoardPeices(boardDataXML);
            else if (gameType == "puzzle")
                setPuzzlePeices(boardDataXML);
        }
        else
        {
            gameLive = false;
            var myXMLDocument = loadADoc(boardDataXML);
            
            var squareNodes = myXMLDocument.getElementsByTagName("theSquare"); 

            var moveNodes = myXMLDocument.getElementsByTagName('move'); 

            for (var i = 0; i < moveNodes.length; i++) 
            { 
                if (parseInt(moveNodes[i].getAttribute("n")) > parseInt(myOptionVal))
                {
                    
                    if (moveNodes[i].getAttribute("m").match("oo"))         //it was a casteling move
                    {
                        if(moveNodes[i].getAttribute("p") == "1")           //player 1s piece
                        {
		                    squareNodes[56].setAttribute("pieceName",       squareNodes[59].getAttribute("pieceName"))
		                    squareNodes[56].setAttribute("piecePicture",    squareNodes[59].getAttribute("piecePicture"))
        		            
		                    squareNodes[59].setAttribute("pieceName",       "")
		                    squareNodes[59].setAttribute("piecePicture",    "Blank.gif")
                            
                        }
                        else if(moveNodes[i].getAttribute("p") == "2")           //player 2s piece
                        {
		                    squareNodes[0].setAttribute("pieceName",       squareNodes[3].getAttribute("pieceName"))
		                    squareNodes[0].setAttribute("piecePicture",    squareNodes[3].getAttribute("piecePicture"))
        		            
		                    squareNodes[3].setAttribute("pieceName",       "")
		                    squareNodes[3].setAttribute("piecePicture",    "Blank.gif")
                        
                        }
                        
                        
                    }
                    else if (moveNodes[i].getAttribute("m").match("o"))         //it was a casteling move
                    {
                        if(moveNodes[i].getAttribute("p") == "1")           //player 1s piece
                        {
		                    squareNodes[63].setAttribute("pieceName",       squareNodes[61].getAttribute("pieceName"))
		                    squareNodes[63].setAttribute("piecePicture",    squareNodes[61].getAttribute("piecePicture"))
        		            
		                    squareNodes[61].setAttribute("pieceName",       "")
		                    squareNodes[61].setAttribute("piecePicture",    "Blank.gif")
                            
                        }
                        else if(moveNodes[i].getAttribute("p") == "2")           //player 2s piece
                        {
		                    squareNodes[7].setAttribute("pieceName",       squareNodes[5].getAttribute("pieceName"))
		                    squareNodes[7].setAttribute("piecePicture",    squareNodes[5].getAttribute("piecePicture"))
        		            
		                    squareNodes[5].setAttribute("pieceName",       "")
		                    squareNodes[5].setAttribute("piecePicture",    "Blank.gif")
                        
                        }
                        
                        
                    }
                    
                    if (moveNodes[i].getAttribute("f") != "-1")
                    {
		                squareNodes[moveNodes[i].getAttribute("f")].setAttribute("pieceName",       squareNodes[moveNodes[i].getAttribute("t")].getAttribute("pieceName"))
		                squareNodes[moveNodes[i].getAttribute("f")].setAttribute("piecePicture",    squareNodes[moveNodes[i].getAttribute("t")].getAttribute("piecePicture"))

		                squareNodes[moveNodes[i].getAttribute("t")].setAttribute("pieceName",       "Blank.gif")
		                squareNodes[moveNodes[i].getAttribute("t")].setAttribute("piecePicture",    moveNodes[i].getAttribute("xp"))
		            }
                }
                else
                {
                    break;
                }
                
            }

		    for (i=0;i<=63;i++)
		    {
			    var pPic = "http://www.chessserver.co.uk/PlayPieces/"+myXMLDocument.getElementsByTagName('theSquare')[i].getAttribute("piecePicture")
			    document.getElementById("imgID" + i).setAttribute("src", pPic)
			    
			    var myNode = document.getElementById("TCell" + i)
                myNode.className =   "square" + getOffSet(i)
                
		    }
    		

        }
        
        
    }

	
//JohnBrockwell@Hotmail.com
//chessServer.js
