// // 1.0 // // // window.onload = function(){ //document.getElementById('blocksdisplay').innerHTML = ""+blocks+""; //doSend(); loadSol(); if (isChallenge == true) { challengeLoad(); } } var isChallenge = false; var solution = new Array(); var blocks = new Array(); var count = new Array(); var mapdata = new Array(); var mapjson = new Array(); var htmlscores = ''; function loadSol(sol) { if (sol == null) if (document.getElementById('mapsol') != undefined) sol = document.getElementById('mapsol').innerHTML; if (sol) { tmp = sol.split(':'); position = tmp[1].split('.'); mapid = tmp[0]; clearwalls(mapid); for(var i in position) { if (document.getElementById(mapid+','+position[i]) != undefined) { object = document.getElementById(mapid+','+position[i]); grid_click(object); } } } } function grid_click(obj) { //Prepare data tmp = obj.id.split(','); mapid = tmp[0] - 0; y = tmp[1]; x = tmp[2]; //The users solution - prepare it if it's not started if (solution[mapid] == undefined) { getmapdata(mapid); } //Is this placing a wall, or removing one? if (obj.cv) { //Removing a wall obj.cv = false; //obj.style.backgroundColor = '#ffffff'; obj.setAttribute("class", "grid_td"); //IE 7 obj.style.backgroundColor = ''; blocks[mapid]++; //Remove wall solution[mapid] = solution[mapid].replace('.'+y+','+x+'.', '.'); } else { //Placing a wall if (blocks[mapid] < 1) { updateDsp(mapid, 'dspWalls', "OUT!"); //document.getElementById(mapid+',dspWalls').innerHTML = "OUT!"; return; } obj.cv = true; //obj.style.backgroundColor = '#ff0000'; obj.setAttribute("class", "grid_td_walls"); //IE 7: obj.style.backgroundColor = '#666666'; //Add Wall solution[mapid] += y+','+x+'.'; blocks[mapid]--; } //document.getElementById('blocksdisplay').innerHTML = ""+blocks[mapid]+""; if (isChallenge == true) { challengeWall(mapid); } updateDsp(mapid, 'dspWalls', blocks[mapid]+" walls"); //document.getElementById(mapid+',dspWalls').innerHTML = " "+blocks[mapid]+" walls"; } function updateDsp(mapid, element, data) { if (mapdata[mapid] == undefined) return; if (mapdata[mapid].example != true) { if (document.getElementById(mapid+','+element) != undefined) { handle = document.getElementById(mapid+','+element); handle.innerHTML = data; } } } function getmapdata(mapid) { if (typeof(JSON) == 'undefined') { text = document.getElementById(mapid+',mapdata').innerHTML; mapdata[mapid] = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')'); //mapdata[mapid] = eval(document.getElementById(mapid+',mapdata').innerHTML); } else { mapdata[mapid] = JSON.parse(document.getElementById(mapid+',mapdata').innerHTML); } blocks[mapid] = mapdata[mapid].walls; solution[mapid] = '.'; updateDsp(mapid, 'dspWalls', blocks[mapid]+" walls"); //document.getElementById(mapid+',dspWalls').innerHTML = " "+blocks[mapid]+" walls"; //document.getElementById(mapid+',dspWalls').innerHTML = blocks[mapid]; } function doSend(mapid) { if (solution[mapid] == undefined) { getmapdata(mapid); } reqstr = "&mapcode="+mapdata[mapid].code; reqstr += "&mapid="+mapid; reqstr += "&solution="+solution[mapid]; //document.getElementById('dispdo').innerHTML = "http://mazetd.4xg.net/do.php?r=getpath"+reqstr ajax.requestFile = "do.php?r=getpath"+reqstr; //prepare strdata ajax.onCompletion = request_path_done; // specify function to be executed on response ajax.runAJAX(); var speedbox = document.getElementById(mapid+',speed'), speed = speedbox.options[speedbox.selectedIndex].text, mute = !checkSound(mapid); mpq.track('click go', { 'speed': speed, 'mute': mute, 'mapid': mapid }); } function requestSol(solid) { ajax.requestFile = "do.php?r=getsol&solutionid="+solid; //prepare strdata ajax.onCompletion = requestSolDone; // specify function to be executed on response ajax.runAJAX(); } function requestSolDone() { if (typeof(JSON) == 'undefined') { text = ajax.response; var JO = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')'); //mapdata[mapid] = eval(document.getElementById(mapid+',mapdata').innerHTML); } else { var JO = JSON.parse(ajax.response); } clearwalls(JO.mapid); loadSol(JO.mapid + ":" + JO.solution); } function clearwalls(mapid) { if (solution[mapid] == undefined) return; walls = solution[mapid].split('.'); for(var i in walls) { tmp = walls[i].split(','); eid = mapid+','+tmp[0]+','+tmp[1]; if (document.getElementById(eid) != undefined) { obj = document.getElementById(eid); obj.setAttribute("class", "grid_td"); obj.style.backgroundColor = ''; obj.cv = false; } } solution[mapid] = undefined; getmapdata(mapid); } function resetwalls(mapid) { answer = confirm("Remove walls and start fresh?"); if (answer) { clearwalls(mapid); } } function request_path_done() { //document.getElementById('mapdisplay').innerHTML = ajax.response; //if (ajax.response == undefined) return; if (typeof(JSON) == 'undefined') { text = ajax.response; var JO = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')'); //mapdata[mapid] = eval(document.getElementById(mapid+',mapdata').innerHTML); } else { var JO = JSON.parse(ajax.response); } mapjson[JO.mapid] = JO; // if (typeof(JSON) == undefined) { // var JO = eval(ajax.response); // } else { // var JO = JSON.parse(ajax.response); // } if (JO.scores) { updateDsp(JO.mapid, 'dspScore', JO.scores); } for(var i in JO.error) { console.error('\n JO error ' + JO.error[i]); } //document.getElementById('disp').innerHTML = JO.map; if (JO.blocked) { alert("The path is blocked!"); return; } //document.write(JO.map); //document.getElementById('disppath').innerHTML = JO.path; //document.getElementById('disptotalmoves').innerHTML = JO.moves; var disptext = "Record: "+JO.best+" by "+JO.bestby; updateDsp(JO.mapid, 'dspID', disptext); //document.getElementById(JO.mapid+',dspID').innerHTML = JO.best; animatePath(JO.path, JO.mapid, JO.start); //Get score update. ajax.requestFile = "do.php?r=getscores&mapid="+JO.mapid; //prepare strdata ajax.onCompletion = request_scores_done; // Specify function to be executed on response. ajax.runAJAX();// Do it! } function animatePath(path, mapid, start) { tmp = start.split(','); y = tmp[0]; x = tmp[1]; p = path; //t = p.length; t = ''; //count[mapid] = 0; document.getElementById(mapid+',btn').disabled = true; doanimate(x, y, p, t, mapid); //setTimeout("doanimate("+x+","+y+",'"+p+"',"+t+")",500); } function animatePathDone(mapid) { document.getElementById(mapid+',btn').disabled = false; if (htmlscores) { updateDsp(mapid, 'dspScore', htmlscores); htmlscores = ''; } if (isChallenge == true) { challengeGo(mapid); } } function request_scores_done() { //Get scores. if (typeof(JSON) == 'undefined') { text = ajax.response; var JO = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')'); //mapdata[mapid] = eval(document.getElementById(mapid+',mapdata').innerHTML); } else { var JO = JSON.parse(ajax.response); } htmlscores = JO.scores; } function checkSound(mapid) { if (document.getElementById(mapid+',mute').checked) { return false; } if (typeof(soundManager) != 'object') { return false; } return true; } var snake = new Array(); var snakeeffected = new Array(); function doanimate(x, y, p, c, mapid) { //x, y position //p path string being trunicated. //c current target code. //t next target code. t = p.substring(0, 1); //Animate current square, and move to next one. if (count[mapid] == undefined) { count[mapid] = 0; } if (snake[mapid] == undefined) { snake[mapid] = new Array(); snake[mapid]['color'] = '#4444bb'; } //Display movecount updateDsp(mapid, 'dspCount', count[mapid]+ " moves"); //document.getElementById(mapid+',dspCount').innerHTML = count[mapid]+ " moves"; //Get a handle on the element. eid = mapid+','+x+','+y; //Verify. if (document.getElementById(eid) == undefined) { console.error("Path exited field...?"); animatePathDone(mapid); return; } handle = document.getElementById(eid); //Maintain our original classname, no matter the cost! origclass = handle.className; if ( origclass == 'grid_td_path1' || origclass == 'grid_td_path2' || origclass == 'grid_td_path3' || origclass == 'grid_td_path4' ) { // if (origclass == 'grid_td_animate' || origclass == 'grid_td_animate_pre' ) { origclass = handle.classOrigName; //setTimeout(handle.setAttribute('class', origclass), 850); } //handle.style.backgroundColor = snake[mapid]['color']; handle.classOrigName = origclass; //Animate. switch(c) { case '1': //1 - Up case '2': //2 - Right case '3': //3 - Down case '4': //4 - Left count[mapid]++; switch(count[mapid]) { case mapjson[mapid].best: flashelement(mapid+',dspCount', 4, "#FF0000"); break; case 500: case 400: case 350: case 300: case 250: case 200: case 150: case 100: case 50: if (checkSound(mapid)) { soundManager.play('charm'); } //Flash flashelement(mapid+',dspCount', 4); break; } //if (checkSound(mapid)) { //soundManager.play('bling'); //soundManager.play('sc'); //soundManager.setVolume('click', 50); //soundManager.play('click'); //soundManager.play('charm'); //soundManager.play('ufoblip'); //} handle.setAttribute('class', 'grid_td_path'+c); handle.className = 'grid_td_path'+c; handle.style.backgroundColor = snake[mapid]['color']; string = "if (document.getElementById('"+eid+"').className == 'grid_td_path"+c+"') "; string += "document.getElementById('"+eid+"').className = '"+origclass+"';"; setTimeout(string, 855); //And incase that didn't work... //setTimeout("document.getElementById('"+eid+"').className = '"+origclass+"'", 7500); //setTimeout("document.getElementById('"+eid+"').setAttribute('class', '"+origclass+"')", 855); if (handle.pressed == true) { setTimeout("document.getElementById('"+eid+"').style.backgroundColor = '#dddddd';", 865); } else { setTimeout("document.getElementById('"+eid+"').style.backgroundColor = '';", 865); } break; //Teleports case 't': //case 'u': case 'm': case 'g': case 'i': case 'k': //case 'n': // if (t == "u" || t == "n") { //alert("teleport"); //if (checkSound(mapid)) { //soundManager.play('bling'); //soundManager.play('sc'); //soundManager.play('ufoblip'); //soundManager.play('002'); //soundManager.play('003'); //soundManager.setVolume('click', 50); //soundManager.play('click'); //soundManager.play('charm'); //} //flashelement(eid, 4); // } else { // break; // } //Targets case 'q': //Teleport out; case 'b': case 'c': case 'd': case 'e': //break case 'r': //handle.setAttribute('class', 'grid_td_pressed'); //handle.classOrigName = 'grid_td_pressed'; snakeeffected.push("document.getElementById('"+eid+"').style.backgroundColor = '';"); snakeeffected.push("document.getElementById('"+eid+"').pressed = false;"); handle.style.backgroundColor = '#dddddd'; setTimeout("document.getElementById('"+eid+"').style.backgroundColor = '#dddddd';", 865); handle.pressed = true; break; } //Sound effects if (c == 'r') { if (checkSound(mapid)) { soundManager.play('bling'); //soundManager.play('blip'); //soundManager.play('charm'); } } //Done messing with current target //Now take pre-action regarding the next tile. //Speaking of the next tile - does it exist? //End of the line? if (t == '') { //Did we beat or tie any records? //Saw someone do this, thought it was clever. //Switch for range result. var disptext = "" switch (true) { case (count[mapid] > mapjson[mapid].best): disptext = "Beat "+mapjson[mapid].bestby+"'s record of "+mapjson[mapid].best+" with "+count[mapid]+"!"; break; case (count[mapid] == mapjson[mapid].best): disptext = "Tied "+mapjson[mapid].bestby+"'s record of "+mapjson[mapid].best; break; case (count[mapid] > mapjson[mapid].mybest): disptext = "Improved score "+mapjson[mapid].mybest+ " to "+count[mapid]; break; case (count[mapid] == mapjson[mapid].mybest): disptext = "Tied personal best of "+count[mapid]; break; } //if anything worth mentioning happend let them know. if (disptext != "") { if (checkSound(mapid)) { soundManager.play('charm'); soundManager.play('bling'); soundManager.play('sc'); } updateDsp(mapid, 'dspID', disptext); flashelement(mapid+',dspID', 8, "#FF3377"); } //This is the end, lets reset stuff to defaults. count[mapid] = 0; snake[mapid]['color'] = '#4444bb'; //Bring the color back to our checkpoints/teleports. for(var i in snakeeffected) { //eval(snakeeffected[i]); setTimeout((snakeeffected[i]), 2000); } //Clear snakeeffected = new Array(); //We're done, animatePathDone(mapid); return; } //The next tile exists, how fast should we get there? rs = 85; //How fast should we be going? selectbox = document.getElementById(mapid+',speed'); selected = selectbox.options[selectbox.selectedIndex].value; switch (selected) { case '1': rs =310; break; case '2': rs =85; break; case '3': rs =45; break; case '4': rs =23; break; } //The next path code. switch(t) { //Are we just moving someplace? case '1': x--; break; //1 - Up case '2': y++; break; //2 - Right case '3': x++; break; //3 - Down case '4': y--; break; //4 - Left //Special codes within the path. //Did we aquire a target? //Checkpoint targets: case 'a': // rs = rs * 9; snake[mapid]['color'] = '#F777FF'; break; case 'b': rs = rs + 500; snake[mapid]['color'] = '#FFFF11'; //handle.style.backgroundColor = "#000000"; break; case 'c': rs = rs + 500; snake[mapid]['color'] = '#FF4466'; break; case 'd': rs = rs + 500; snake[mapid]['color'] = '#ff9911'; break; case 'e': rs = rs + 500; snake[mapid]['color'] = '#00FFFF'; break; //Finish target case 'f': rs = rs + 500; snake[mapid]['color'] = '#4444bb'; break; //Hey, we've ran into a teleport. case 'u': //tp1 case 'n': //tp2 case 'h': //tp3 case 'j': //tp4 case 'l': //tp5 //Get teleport coords tmp = p.split(t); loc = tmp[1].split(','); y = loc[0]; x = loc[1]; //Flash teleport-out //Teleport Element ID tpEid = mapid+','+x+','+y; if (checkSound(mapid)) { soundManager.play('ufoblip'); //soundManager.play('002'); //soundManager.play('003'); } document.getElementById(eid).style.backgroundColor='#CCCCCC'; document.getElementById(tpEid).style.backgroundColor='#CCCCCC'; //flashelement(eid, 7); flashelement(tpEid, 8, snake[mapid]['color']); //The path once teleported - and an r to indicate to gray the teleport-out too. p = 'q'+tmp[2]; //Slow down rs = rs + 1500; setTimeout("doanimate("+x+","+y+",'"+p+"','"+t+"',"+mapid+")",rs); return; break; } //Remove move from p p = p.substring(1); //rs = (10 * p.length) + 40; setTimeout("doanimate("+x+","+y+",'"+p+"','"+t+"','"+mapid+"')",rs); } function flashelement(eid, times, color, speed) { if (document.getElementById(eid) == undefined) return; if (!color) { color = "#FFFF44"; } if (!speed) { speed = 220; } speedon = speed * .5; //document.getElementById(eid).setAttribute('class', 'no_transition'); var currentclass = document.getElementById(eid).className; if (document.getElementById(eid).classOrigName != undefined) currentclass = document.getElementById(eid).classOrigName; var currentColor = document.getElementById(eid).style.backgroundColor; document.getElementById(eid).className='no_transition '+currentclass; document.getElementById(eid).style.backgroundColor = '#000000'; for (var i=0; i