n = 0;

h = 0;

m = 0;

s = 0;



t = 0;

moves = 0;



var timerId = 0;



var p = 0;

var pv = 0;

var errcount = 0;



var demo = "";

var bdemo = false;

var playid = 0;



g = 0;



function keydown(e) {



    if(p>0) {



        c = e.keyCode;



        d=p%9;



        if(d==0) d = 9;



        if(c==37) {

            //left

            for(i=p-1;i>p-d;i--) {

                n = document.getElementById("p"+i);

                if(n.className!="disabled") {

                    n.select();

                    return;

                }

            }

        }

        else if(c==38) {

            //up

            for(i=p-9;i>0;i-=9) {

                n = document.getElementById("p"+i);

                if(n.className!="disabled") {

                    n.select();

                    return;

                }

            }

        }

        else if(c==39) {

            //right

            for(i=p+1;i<p+(9-d)+1;i++) {

                n = document.getElementById("p"+i);

                if(n.className!="disabled") {

                    n.select();

                    return;

                }

            }

        }

        else if(c==40) {

            //down

            for(i=p+9;i<9*9+1;i+=9) {

                n = document.getElementById("p"+i);

                if(n.className!="disabled") {

                    n.select();

                    return;

                }

            }

        }



    }



}



function pfocus($id) {

    p = $id;

}



function xmlhttpChange() {

    if (xmlHttp.readyState==4) {

        e = xmlHttp.responseText;

        //alert(e);

        if(e=="0") {

            stop();

            location.href = "win.php?id="+puzzleid;

        }

        else if(e=="00") {

            stop();

            location.href = "win.php?varient=1&id="+puzzleid;

        }

        else {

            hideerrors();

            showerrors(e);

        }

    }

}



function hideerrors() {



    for(i=1;i<=9*9;i++) {

        if(document.getElementById("p"+i).className!="disabled")

            document.getElementById("p"+i).className = "enabled";

    }



}



function showcorrect() {

    for(i=1;i<=9*9;i++) {

        if(document.getElementById("p"+i).className=="enabled")

            document.getElementById("p"+i).className = "enabledcorrect";

    }

}



function showerrors(e) {



    var n = e.split(",");



    for(i=0,b=false;i<9*9;i++) {

        if(n[i]=="") {

            errcount = 30;

            showcorrect();

            exit();

        }

        else

            document.getElementById("p"+n[i]).className = "enablederror";

    }



}



function checkvalue() {

    if(p>0) {

        d = document.getElementById("p"+p).value;

        if(pv!=d) {

            if(d>0 && d<=9) {

                pv = d;

                if(d!="")

                    domove(d);

            }

            else if (d!="") {

                document.getElementById("p"+p).value = pv;

            }

        }

    }

}



function doevents() {

    if(g==0 && s==0 && m==0)

        clearall();

    if(t==1) {

        g++;

        if(g==10) {

            g = 0;

            clock();

        }

        checkvalue();

        timerId = window.setTimeout("doevents();", 100);

    }

    if(errcount>0) {

        errcount--;

        if(errcount==0) {

            hideerrors();

        }

    }

}



function domove(d) {

    if(!bdemo) {

        if(p<10)

            pp = "0"+p;

        else

            pp = p;

        demo = demo + pp + d;

        moves++;

        document.getElementById("movecount").innerHTML  = "Attempts: "+moves;

        checkgame();

    }

}



function puzzle() {

    b = "";

    for(i=1;i<=9*9;i++) {

        b = "" + b + document.getElementById("p"+i).value;

    }

    return b;

}



function gameboard() {

    b = "";

    for(i=1;i<=9*9;i++) {

        if(document.getElementById("p"+i).className=="disabled")

            b = "" + b + document.getElementById("p"+i).value;

    }

    return b;

}



function checkgame() {

    for(i=1;i<=9*9;i++) {

        if(document.getElementById("p"+i).value == "") {

            return false;

        }

    }

    o = m*60+s;

    d = gameboard();

    h = ""+o+moves+puzzleid+puzzle()+d;

    //alert("h="+h);

    url = "checkgame.php?t="+o+"&m="+moves+"&id="+puzzleid+"&b="+d+"&p="+puzzle()+"&h="+hex_md5(h)+"&demo="+demo;

    //alert(url);

    request(url);

    //alert(d);

    /*

    if(d==0)

        return true;

    else

        return false;

    */

}



function stopmove(id) {

    if(p==id) {

        checkvalue();

        p = 0;

    }

}



function startmove(id) {

    p = id;

    pv = document.getElementById("p"+p).value;

/*

    if(t==0) {

        t = 1;

        //windowlinks();

        doevents();

    }

*/

    start();

}



function clock() {



    if(t==1) {



        s++;



        if(s>59) {

            s=0;

            m++;

        }



        if(s<=9)

            ds = "0" + s;

        else

            ds = s;



        document.getElementById("playtime").innerHTML = "Temps: " + m + ":" + ds;



    }



}



function stop() {

    t = 2;

    //window.cleartimeout(timerId);

}



function generatenextgame() {

    url = "drawpuzzle.php?generate=1";

    //alert(url);

    //b =

    asyncrequest(url);

    //alert(b);

}



function clearall() {

    //alert("!");

    //alert(document.getElementById("p2").className);\

    for(i=1;i<=9*9;i++) {

        d = document.getElementById("p"+i);

        if(d.className=="enabled")

            d.value = "";

    }

    /*

    document.getElementById("playtime").innerHTML = "Time: 0:00";

    document.getElementById("movecount").innerHTML  = "Attempts: 0";

    */

}



function windowlinks() {

   var where = "_blank";

   for (var i=0; i<=(document.links.length-1); i++) {

   document.links[i].target = where;

   }

}



function start() {

    if(t!=1) {

        t = 1;

        if(demobuffer!="") {

            bdemo = true;

            play();

        }

        else {

            doevents();

        }

    }

}



function play() {

    loadplay(demobuffer.substr(playid,2),demobuffer.substr(playid+2,1));

    playid+=3;

    if(playid>=demobuffer.length)

        alert("Reprise vidéo terminée");

    else

        timerId = window.setTimeout("play();", 300);

}

function loadplay(p, b) {

    if(p.substr(0,1)=="0")

        p = p.substr(1,1);

    if(document.getElementById("p"+p).className=="disabled")

        document.getElementById("p"+p).className = "enablederror";

    else if(document.getElementById("p"+p).className!="enablederror")

        document.getElementById("p"+p).className = "enabledcorrect";

    document.getElementById("p"+p).value = b;

}



generatenextgame();



document.onkeydown = keydown;