/*
Function Info:
	add_val(id,value):	
			This will fill the cell to the given id with its value
	verify():
			This will check whether user completed the game and filled it correctly
	isComplete():
			This method will check whether all the fields are completed
	solve():
			This method is used to solve the puzzle by computer
	mekeNewOrder():
			Will give you a new Suduku puzzle
	getRank():
			Get a random number
	init():
			Initialize a game
	

*/
var sudoku=new Array("debfacfacbedebacdfcdfabeacdefbbfedca","aecfdbdfbaecfcdebabaecfdcdfbaeebadcf","efbacddacefbcefdbaabdcefbcafdefdebac","debfcafacdbeabdefcecfadbbfacedcdebaf");
var res="";
var isCompleted=false;
var cell_color="#707FA0";
var cell_err="RED";
var finished=0;
var started=false;
var scr=0;
var moves=0;
var timee=0;

function isComplet(){
       if(finished==0){
            if(started)
                  timer();
               
	var complete=false;
        scr=scr+1;
      	for(var i=0;i<6;i++) {
		for(var j=0;j<6;j++){
			f_id="s"+(i+1)+(j+1);
			var value=res.charAt(i*6+j);
			if(document.getElementById(f_id).value.length==0){
				complete=true;
			}
			else{}
				//document.getElementById(f_id).style.background="#707FA0";
			
		}
	}
	if(complete==false){
		if(validate()==true){
                       clearTimeout(timera);
                       finished=1;
                       moves=scr;
                       timee=document.getElementById('tim').value;
                       alert(moves+"=="+timee+"=="+"Completed")
                       testAjax(moves,timee,'<?php echo $f1; ?>');
                      // alert("You Completed the Game"+scr);
                              
                }
         }
    }
}
function solve(){
	for(var i=0;i<6;i++) {
		for(var j=0;j<6;j++){
			f_id="s"+(i+1)+(j+1);
			var value=res.charAt(i*6+j);
			add_val(f_id,value);
			c_id="c"+(i+1)+(j+1);
			document.getElementById(c_id).style.background="#707FA0";
		}
	}
}

function makeNewOrder(ran_str) {
	var alpha = " abcdefghijklmnopqrstuvwxyz";
	var new_order = "";
	//Get random numbers for all alphas - and store it in a array.
	numbers = new Array("0");
	var new_number;
	for(j=0;j<6;j++) {
		new_numbers = unique_rand(numbers,6); //Give random position for the numbers
		numbers.push(new_numbers);
	}
	//Now change all the alphas back to numbers - with new digits
	for(i=0;i<36;i++){
		var po=ran_str.charAt(i);
		new_order += numbers[alpha.indexOf(po)]
	}
	return new_order;	
}
function init(){
	clearer();
        started=true;
	var str=sudoku[(Math.random()*parseInt(sudoku.length-1)).toFixed(0)]
	res=makeNewOrder(str);
	//alert(str);
	numbers = new Array("0");
	var emt=7;
	if(level==2){
		emt=13;
	}
	else if(level==3){
		emt=18;
	}
	for(j=0;j<emt;j++) {
		new_numbers = unique_rand(numbers,36); //Give random position for the numbers
		numbers.push(new_numbers);
	}
	for(var i=0;i<6;i++) {
		for(var j=0;j<6;j++){
			f_id="s"+(i+1)+(j+1);
			c_id="c"+(i+1)+(j+1);
			document.getElementById(c_id).style.background="#707FA0";
			if(isExist(numbers,i*6+j)==false){
				document.getElementById(c_id).disabled = false;
				document.getElementById(c_id).value="";
			}
			else{
				var value=res.charAt(i*6+j);
				add_val(f_id,value);
			}

		}
	}
}
function clearer() {// Clear all the Fields
	var id = ""
	for(var i=1; i<=6; i++) {
		for(var j=1; j<=6; j++) {
			id = "s"+i+j;
			document.getElementById(id).disabled = false;
			document.getElementById(id).value="";
		}
	}
}
function validate(){
        var gg=true;
	make_default_color();
	for(var i=1;i<=6;i++){//validate  rows
		var numbers_k = new Array();
		for(var j=1;j<=6;j++){
			c_id='s'+i+j;
			if(document.getElementById(c_id).value!=''){
				numbers_k.push(document.getElementById(c_id).value);
			}
		}
		if(find_duplicates(numbers_k)==false){//Duplicate Occured
			for(var j=1;j<=6;j++){
				c_id='c'+i+j;
				document.getElementById(c_id).style.background=cell_err;
			}
                     gg=false;
		}
	}
	for(var i=1;i<=6;i++){//validate cols
		var numbers_k = new Array();
		for(var j=1;j<=6;j++){
			c_id='s'+j+i;
			if(document.getElementById(c_id).value!=''){
				numbers_k.push(document.getElementById(c_id).value);
			}
		}
		if(find_duplicates(numbers_k)==false){
			for(var j=1;j<=9;j++){
				c_id='c'+j+i;
				document.getElementById(c_id).style.background=cell_err;
			}
                     gg=false;
		}
	}
	for(var i=0;i<3;i++){//validate cells
		for(var j=0;j<2;j++){
			var numbers_k = new Array();
			for(i1=1;i1<=2;i1++){
				for(j1=1;j1<=3;j1++){
					c_id='s'+(i*2+i1)+(j*3+j1);
					if(document.getElementById(c_id).value!=''){
						//alert(document.getElementById(c_id).value+" For the cell="+c_id);
						numbers_k.push(document.getElementById(c_id).value);
					}
				}
			}
			if(find_duplicates(numbers_k)==false){
				for(var i1=1;i1<=2;i1++){
					for(var j1=1;j1<=3;j1++){
						c_id='c'+(i*2+i1)+(j*3+j1);
						document.getElementById(c_id).style.background=cell_err;
					}
				}
                            gg=false;
			}
		}
	}
	return true;
}
function make_default_color() {// Clear all the Fields
	var id = ""
	for(var i=1; i<=6; i++) {
		for(var j=1; j<=6; j++) {
			cid= "c"+i+j;
			document.getElementById(cid).style.background=cell_color;
		}
	}
}
function unique_rand(list,max) {
        var number = get_rand(max);//Get a random number from 1 to 9
        var a=0;
        for(a=0;a<list.length;a++) {
                if(list[a] == number) { //If number already Present
                        number = get_rand(max);a=-1; //Get a new Number and start it again
                         
                }
        }
        return number;
}               
function get_rand(max) {
        var number=(Math.random()*parseInt(max)).toFixed(0);
        while (number < 1 ) { //Number Should not equlas to 0
                number=(Math.random()*parseInt(max)).toFixed(0);
        }
        return (number);
}
function add_val(id,value) {
        document.getElementById(id).value = value;
        if(value)
                document.getElementById(id).disabled = true;
        else 
                document.getElementById(id).disabled = false;
}
function find_duplicates(arr) {
 var len=arr.length,
     out=[],    
     counts={};
                
 for (var i=0;i<len;i++) {
 var item = arr[i];
   var count = counts[item];
   counts[item] = counts[item] >= 1 ? counts[item] + 1 : 1;
 }   

 for (var item in counts) {
   if(counts[item] > 1){
     return false;
   break;
   }
 }
 
 return true;
}    
function isExist(arr,val){
        var an=true;
        for(var i=0;i<arr.length;i++){
                if(arr[i]==val){
                        an=false;
                        break;
                }
        }
        return an;
}

