var doload=false;
var clock_help_td_id=null;
var clock_help_array=new Object();
var solution=new Object();
var puzzle=new Object();
var tds=document.getElementsByTagName("td");
var normal_bgcolor='transparent';

function examine(){
   var test=true;
   for(i in solution){
      if(document.getElementsByName("input"+i)[0].value!=solution[i]){
         test=false;
      }
   }
   if(test){
      alert("Die Lösung ist richtig.");
   }else{
      alert("Die Lösung ist falsch.");
   }
}

function dosolve(){
   for(i in solution){
      document.getElementsByName("input"+i)[0].style.color="#000000";
      document.getElementsByName("input"+i)[0].value=solution[i];
      clock_help_show_none("cell"+i);
   }
}

function solver(name){
   var wert=document.getElementsByName(name)[0].value;
   if(wert!=" "&&wert!=""){
      id=name.substr(5);
      if(document.getElementById(id+""+1)){
         id="cell"+id;clock_help_show_none(id);
      }
      if(document.getElementsByName("suhelp")[0].checked){
         suhelp(name);
      }
      if(document.getElementsByName("sushowsolve")[0].checked){
         sushowsolve(name);
      }
   }
   else{
      id=name.substr(5);
      if(document.getElementById(id+""+1)){
         clock_help_td_id="cell"+id;clock_help_show_pics();
      }
   }
}

function make_clear(name,keycode){
   keycode=parseInt(keycode);
   if(keycode!=9&&keycode!=13&&!document.getElementsByName(name)[0].readOnly){
      document.getElementsByName(name)[0].value="";
   }
}

function restart(){
   clock_help_reset();
   for(i in solution){
      document.getElementsByName("input"+i)[0].value="";
      clock_help_show_none("cell"+i);
   }
}

function su_error(){
   alert("Konnte Spieldaten nicht laden.");
}

function make_game(ajaxreponse){
   restart();
   for(var i=0;i<9;i++){
      for(var j=0;j<9;j++){
         document.getElementsByName("input"+i+j)[0].value="";
         document.getElementsByName("input"+i+j)[0].style.color="#000000";
         document.getElementsByName("input"+i+j)[0].readOnly=false;
      }
   }
   var sud0ku=eval('('+ajaxreponse+')');
   puzzle=sud0ku['sud0ku_puzzle'];
   solution=sud0ku['sud0ku_solution'];
   for(i in puzzle){
      document.getElementsByName("input"+i)[0].value=puzzle[i];
      document.getElementsByName("input"+i)[0].readOnly=true;
      document.getElementsByName("input"+i)[0].style.color="#666666";
   }
   doload=false;
   loader_hide();
}

function loader_show(){
   if(document.getElementById("loader")){
      var div=document.getElementById("loader");
      var obj=document.getElementById("cell44");
      var x=y=0;
      do{
         x+=obj.offsetLeft;y+=obj.offsetTop;
      }while(obj=obj.offsetParent);
      x+=-58;y+=-4;
      div.style.left=x+"px";
      div.style.top=y+"px";
      div.style.display="block";
   }
   else{
      var newdiv=document.createElement("div");
      newdiv.id="loader";
      var pic=new Image();
      pic.src="http://s.sudoku-space.de/extern/sudoku-extern.gif";
      newdiv.appendChild(pic);
      var obj=document.getElementById("cell44");
      var x=y=0;
      do{
         x+=obj.offsetLeft;y+=obj.offsetTop;
      }while(obj=obj.offsetParent);
      x+=-58;y+=-4;newdiv.style.position="absolute";
      newdiv.style.left=x+"px";
      newdiv.style.top=y+"px";
      newdiv.style.opacity=newdiv.style.MozOpacity=newdiv.style.KhtmlOpacity=90/100;
      newdiv.style.filter='alpha(opacity='+90+')';
      document.body.appendChild(newdiv);
   }
}

function loader_hide(){
   if(document.getElementById("loader")){
      var div=document.getElementById("loader");
      div.style.display="none";
   }
}

function new_game(){
   if(!doload){
      loader_show();
      doload=true;
      var level=document.getElementsByName("level")[0].value;AjaxRequest.get({'url':'get_sudoku_extern.php?level='+level,'onSuccess':function(req){make_game(req.responseText);},'onError':function(req){su_error();}});
   }
}

function clock_help_reset(){
   clock_help_td_id=null;
   clock_help_array=new Object();
}

function clock_help_show_pics(){
   id=clock_help_td_id.substr(4);
   if(!document.getElementById(id+""+1)){
      create_background(clock_help_td_id);
   }
   for(var i=1;i<10;i++){
      if(clock_help_array[id][i]){
         document.getElementById(id+""+i).style.backgroundImage="url(http://s.sudoku-space.de/images/clock_help"+i+".gif)";
      }
      else{
         document.getElementById(id+""+i).style.backgroundImage="";
      }
   }
}

function clock_help_show_none(cellid){
   var id=cellid.substr(4);
   if(document.getElementById(id+""+1)){
      for(var i=1;i<10;i++){
         document.getElementById(id+""+i).style.backgroundImage="";
      }
   }
}

function clock_help_add_graynums(cellid){
   var thecell=document.getElementById(cellid);
   var id=thecell.id.substr(4);
   var Knoten=thecell.firstChild;
   var newdiv=document.createElement("div");
   newdiv.style.backgroundPosition="center";
   newdiv.style.backgroundRepeat="no-repeat";
   newdiv.style.position="relative";
   newdiv.style.padding="0px";
   newdiv.style.margin="0px";
   var div1=newdiv.cloneNode(true);
   var div2=newdiv.cloneNode(true);
   var div3=newdiv.cloneNode(true);
   var div4=newdiv.cloneNode(true);
   var div5=newdiv.cloneNode(true);
   var div6=newdiv.cloneNode(true);
   var div7=newdiv.cloneNode(true);
   var div8=newdiv.cloneNode(true);
   var div9=newdiv.cloneNode(true);
   div1.id=id+"1";
   div2.id=id+"2";
   div3.id=id+"3";
   div4.id=id+"4";
   div5.id=id+"5";
   div6.id=id+"6";
   div7.id=id+"7";
   div8.id=id+"8";
   div9.id=id+"9";
   div1.appendChild(div2);
   div2.appendChild(div3);
   div3.appendChild(div4);
   div4.appendChild(div5);
   div5.appendChild(div6);
   div6.appendChild(div7);
   div7.appendChild(div8);
   div8.appendChild(div9);
   var oldchilds=newdiv.cloneNode(true);
   while(thecell.hasChildNodes()){
      child=thecell.firstChild;thecell.removeChild(child);
      oldchilds.appendChild(child);
   }
   div9.appendChild(oldchilds);
   thecell.appendChild(div1);
   for(var i=1;i<10;i++){
      document.getElementById(id+""+i).style.backgroundImage="url(http://s.sudoku-space.de/images/clock_help"+i+"_light.gif)";
   }
}

function clockhelp_click(cellid, event){
   var id=cellid.substr(4);
   if(document.getElementsByName("input"+id)[0].value==""){
   if(clock_help_array[id]){
      var x=0,y=0,num;
      if (typeof event.offsetX != "undefined"){
        x = Math.ceil(event.offsetX/12);
        y = Math.ceil(event.offsetY/12);
      }
      else if (typeof event.layerX != "undefined"){
        x = Math.ceil(event.layerX/12);
        y = Math.ceil(event.layerY/12);
      }
      if(x != 0 && y !=0){
         if(y==1){
            if(x==1){
               num=1;
            }
            else if(x==2){
               num=2;
            }
            else if(x==3){
               num=3;
            }
         }
         else if(y==2){
            if(x==1){
               num=4;
            }
            else if(x==2){
               num=5;
            }
            else if(x==3){
               num=6;
            }
         }
         else if(y==3){
            if(x==1){
               num=7;
            }
            else if(x==2){
               num=8;
            }
            else if(x==3){
               num=9;
            }
         }
         if(num){
         if(clock_help_array[id][num]){
            clock_help_array[id][num]=false;
            document.getElementById(id+""+num).style.backgroundImage="url(http://s.sudoku-space.de/images/clock_help"+num+"_light.gif)";
         }
         else{
            clock_help_array[id][num]=true;
            document.getElementById(id+""+num).style.backgroundImage="url(http://s.sudoku-space.de/images/clock_help"+num+".gif)";
         }
         }
      }
   }
   }
}
function clockhelp_dblclick(cellid,event){
   var id=cellid.substr(4);
   clock_help_td_id=cellid;
   if(document.getElementsByName("input"+id)[0].value==""){
      if(!clock_help_array[id]){
         clock_help_array[id]=new Array();
         clock_help_add_graynums(cellid);
      }
      else{
         var x=0,y=0,num;
         if (typeof event.offsetX != "undefined"){
            x = Math.ceil(event.offsetX/12);
            y = Math.ceil(event.offsetY/12);
         }
         else if (typeof event.layerX != "undefined"){
           x = Math.ceil(event.layerX/12);
           y = Math.ceil(event.layerY/12);
         }
         if(x != 0 && y !=0){
            if(y==1){
               if(x==1){
                  num=1;
               }
               else if(x==2){
                  num=2;
               }
               else if(x==3){
                  num=3;
               }
            }
            else if(y==2){
               if(x==1){
                  num=4;
               }
               else if(x==2){
                  num=5;
               }
               else if(x==3){
                  num=6;
               }
            }
            else if(y==3){
               if(x==1){
                  num=7;
               }
               else if(x==2){
                  num=8;
               }
               else if(x==3){
                  num=9;
               }
            }
            if(num){
            var name="input"+id;
            document.getElementsByName(name)[0].value=num;
            solver(name);
            }
         }
      }
   }
   else if(!document.getElementsByName("input"+id)[0].readOnly){
      document.getElementsByName("input"+id)[0].value=""
      for(var i=1;i<10;i++){
         if(clock_help_array[id][i]){
            document.getElementById(id+""+i).style.backgroundImage="url(http://s.sudoku-space.de/images/clock_help"+i+".gif)";
         }
         else{
            document.getElementById(id+""+i).style.backgroundImage="url(http://s.sudoku-space.de/images/clock_help"+i+"_light.gif)";
         }
      }
   }
}
function init(){
  new_game();
}