Messing with Qwebchess
[progcomp2013.git] / web / qwebchess / js.js
1 //progcomp.ucc.asn.au/cgi-bin/qchess.cgi?r=start\r
2 //progcomp.ucc.asn.au/cgi-bin/qchess.cgi?r=quit\r
3 //progcomp.ucc.asn.au/cgi-bin/qchess.cgi?x=X&y=Y (0 indexed)\r
4 \r
5 pieceSelected = ""; // currently selected piece\r
6 piece = "";\r
7 colour = "W"; // colour of this player\r
8 \r
9 // Unicode representations of chess pieces\r
10 pieceChar = {"W" : { "p" : "\u2659", "h" : "\u2658", "b" : "\u2657", "r" : "\u2656", "q" : "\u2655", "k" : "\u2654", "?" : "?"},\r
11              "B" : { "p" : "\u265F", "h" : "\u265E", "b" : "\u265D", "r" : "\u265C", "q" : "\u265B", "k" : "\u265A", "?" : "?"}};\r
12 \r
13 // Select (or move) a piece\r
14 function selectPiece(loc) {\r
15         x = (""+loc).charAt(1);\r
16         y = (""+loc).charAt(0);\r
17         //alert(loc);\r
18 \r
19         // work out whether to select or move based on the comment tag for the clicked location\r
20         // It is either "<!--W-->" (white; select) or <!--B-->" (black) or "<!--0-->" (empty)\r
21         if (pieceSelected == "") {\r
22                 if (document.getElementById(loc).innerHTML.charAt(4) == colour) {\r
23                         console.log("Piece Selected: " + loc);\r
24                         pieceSelected = loc;\r
25                         ajaxUpdate("x=" + x + "&y=" + y);\r
26                 }\r
27         }\r
28         else {\r
29                 //alert("pieceMoved");\r
30                 if (validMove(pieceSelected, piece, loc)) {\r
31                         doMove(pieceSelected, loc);\r
32                         ajaxUpdate("x=" + x + "&y=" + y);\r
33                         pieceSelected = "";\r
34                 }\r
35                 else {\r
36                         console.log("Invalid Move");\r
37                 }\r
38         }\r
39 }\r
40 \r
41 function validMove(start, piece, end) {\r
42         return true;\r
43 }\r
44 \r
45 function doMove(start, end) {\r
46         begin = document.getElementById(start);\r
47         end = document.getElementById(end);\r
48         htmlToMove = begin.innerHTML;\r
49         end.innerHTML = htmlToMove;\r
50         begin.innerHTML = "<!--0--> <p>&nbsp;</p>";\r
51 \r
52         if (end[end.length-1] % 2 == 0)\r
53                 end.innerHTML.replace(/<big>.*<\/big>/i, "<big>?</big>");\r
54         //console.log("Piece Moved");\r
55 }\r
56 \r
57 function boardLoad() {\r
58         ajaxUpdate("r=force_quit");\r
59         \r
60         \r
61         \r
62         for (i = 0; i < 8; i++) {\r
63                 for (j = 0; j < 8; j++) {\r
64                         e = i + "" + j;\r
65                         elem = document.getElementById(e)\r
66                         if ((i + j) % 2 == 0)\r
67                                 elem.style.background="#FFF";\r
68                         else\r
69                                 elem.style.background="#DDD";\r
70                 }\r
71         }\r
72         \r
73         //Place pieces on the board\r
74         for (i = 0; i < 8; i++) {\r
75                 black = document.getElementById("1" + i);\r
76                 white = document.getElementById("6" + i);\r
77                 //pawns\r
78                 black.innerHTML = "<!--B--> " + pieceChar["B"]["p"] + " <big> <bold>?</bold> </big> ?";\r
79                 white.innerHTML = "<!--W--> " + pieceChar["W"]["p"] + " <big> <bold>?</bold> </big> ?";\r
80                 \r
81                 black = document.getElementById("0" + i);\r
82                 white = document.getElementById("7" + i);\r
83                 piece = "p";\r
84                 if (i == 0 || i == 7)\r
85                         piece = "r";\r
86                 if (i == 1 || i == 6)\r
87                         piece = "h";\r
88                 if (i == 2 || i == 5)\r
89                         piece = "b";\r
90                 if (i == 3)\r
91                         piece = "k";\r
92                 if (i == 4)\r
93                         piece = "q";\r
94                 //major pieces\r
95                 black.innerHTML = "<!--B--> " + pieceChar["B"][piece] + "<big> <bold>?</bold> </big> ?";\r
96                 white.innerHTML = "<!--W--> " + pieceChar["W"][piece] + "<big> <bold>?</bold> </big> ?";\r
97 \r
98                 // empty squares\r
99                 for (j = 2; j < 6; j++)\r
100                 {\r
101                         square = document.getElementById(""+j + i);\r
102                         square.innerHTML = "<!--0--> <p>&nbsp;</p>";\r
103                 }\r
104         }\r
105         \r
106         setTimeout(function(){ajaxUpdate("r=start");}, 1000);\r
107 }\r
108 \r
109 //AJAX Stuff\r
110 function ajaxUpdate(queryString) {\r
111         var ajaxRequest;  // The variable that makes Ajax possible!\r
112 \r
113         try {\r
114                 // Opera 8.0+, Firefox, Safari\r
115                 ajaxRequest = new XMLHttpRequest();\r
116         } catch (e) {\r
117                 // Internet Explorer Browsers\r
118                 try {\r
119                         ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");\r
120                 } catch (e) {\r
121                         try {\r
122                                 ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");\r
123                         } catch (e) {\r
124                                 // Something went wrong\r
125                                 alert("Your Browser is not Ajax Compatible, Please Upgrade to Google Chrome.");\r
126                                 return false;\r
127                         }\r
128                 }\r
129         }\r
130         \r
131         //alert(queryString);\r
132         \r
133         // Create a function that will receive data sent from the server\r
134         ajaxRequest.onreadystatechange = function () \r
135         {\r
136                 //alert("RS" + ajaxRequest.readyState);\r
137                 if (ajaxRequest.readyState == 4) {\r
138                         console.log("AJAX Response: " + ajaxRequest.responseText);\r
139                         lines = ajaxRequest.responseText.split("\n");\r
140 \r
141                         for (var i = 0; i < lines.length; ++i)\r
142                         {\r
143                                 tokens = lines[i].split(" ")\r
144 \r
145                                 if (isNaN(tokens[0]) || isNaN(tokens[1]))\r
146                                         continue;\r
147 \r
148                                 pieceSelected = ""+tokens[1]+""+tokens[0];\r
149                                 square = document.getElementById(pieceSelected);\r
150                                 html = square.innerHTML;\r
151                                 c = html.charAt(4);\r
152                                 if (tokens[2] == "->" && document.getElementById(""+tokens[4] + "" + tokens[3]).innerHTML.charAt(4) != colour)\r
153                                 {\r
154                                         doMove(""+tokens[1] + "" + tokens[0], ""+tokens[4] + "" + tokens[3]);\r
155                                 }\r
156                                 else if (tokens.length == 4 && !isNaN(tokens[0]) && !isNaN(tokens[1]) && !isNaN(tokens[2]) && isNaN(tokens[3]))\r
157                                 {\r
158                                         piece = tokens[3];\r
159                                         if (piece == "knight") //HACK\r
160                                                 piece = "h";    \r
161                                         else\r
162                                                 piece = ""+piece.charAt(0);\r
163                                         if (tokens[2] == "1")\r
164                                                 html[html.length-1] = pieceChar[c][piece];\r
165 \r
166                                         square.innerHTML = html.replace(/<big> <bold>.*<\/bold> <\/big>/i, "<big> <bold>"+pieceChar[c][piece]+"</bold> </big>");        \r
167                                         console.log("innerHTML = " + square.innerHTML);\r
168                                 }\r
169                         }\r
170 \r
171                         /*\r
172                         if (ret.charAt(4) == "-" && ret.charAt(5) == ">") {\r
173                                 //Piece has been moved\r
174                                 //console.log("Moving other piece");\r
175                                 lines = ret.split("\n");\r
176                                 //if (lines[3] != "SELECT?") {\r
177                                 if (lines[2] != "SELECT?") {\r
178                                         x1 = lines[2].charAt(0);\r
179                                         y1 = lines[2].charAt(2);\r
180                                         x2 = lines[2].charAt(7);\r
181                                         y2 = lines[2].charAt(9);\r
182                                         console.log("Black Move: " + x1 + "" + y1 + " -> " + x2 + "" + y2);\r
183                                         doMove(y1 + "" + x1, y2 + "" + x2);\r
184                                 }\r
185                                 else {\r
186                                         console.log("Black Unable to move");\r
187                                 }\r
188                         }\r
189                         else {\r
190                                 lines = ret.split("\n");\r
191                                 if (lines[1] == "MOVE?") {\r
192                                         //We selected a piece\r
193                                         //console.log("choose where to move our piece");\r
194                                         piece = lines[0].charAt(6);\r
195                                         //console.log("Piece: " + piece);\r
196                                         content = document.getElementById(pieceSelected);\r
197                                         contentHTML = content.innerHTML;\r
198                                         //contentHTML = contentHTML.replace("?", piece);\r
199                                         //"W<br /><small>p</small> <bold>?</bold> <small>?</small></span>";\r
200                                         if (lines[0].charAt(4) == "1") {\r
201                                                 //console.log("changing quantum piece");\r
202                                                 contentHTML = replaceAt(contentHTML, 44, piece);\r
203                                         }\r
204                                         contentHTML = replaceAt(contentHTML, 28, piece);\r
205                                         //console.log(contentHTML);\r
206                                         //contentHTML = "CHANGED" + contentHTML;\r
207                                         content.innerHTML = contentHTML;\r
208                                 }\r
209                         }\r
210                         */\r
211                         //alert(ret);\r
212                 }\r
213         }\r
214         \r
215         //ar = "http://progcomp.ucc.asn.au/cgi-bin/qchess.cgi?" + queryString;\r
216         ar = "/../../../cgi-bin/qchess.cgi?" + queryString;\r
217         \r
218         console.log("AJAX Request: " + ar);\r
219         \r
220         ajaxRequest.open("GET", ar, true);\r
221         ajaxRequest.send();\r
222 }\r
223 \r
224 \r
225 \r
226 \r
227 \r
228 \r
229 function replaceAt(s, n, t) {\r
230         //console.log(s.substring(0, n) + "\n" + t + "\n" + s.substring(n + 1) + "\n");\r
231         return (s.substring(0, n) + t + s.substring(n + 1));\r
232 }\r

UCC git Repository :: git.ucc.asn.au