/*
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("cbdgehafiegfadihcbahibcfdgegiedbcfhahacefgbidfdbihagecicafgdebhbfhcaeidgdeghibcaf");
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<9;i++) {
			for(var j=0;j<9;j++){
				f_id="s"+(i+1)+(j+1);
				var value=res.charAt(i*9+j);
				if(document.getElementById(f_id).value.length==0){
					complete=true;
				}
				else{}
					//document.getElementById(f_id).style.background=cell_color;
				
			}
		}
		if(complete==false){
			if(validate()==true){
				clearTimeout(timera);
				finished=1;
                                moves=scr;
                                timee=document.getElementById('tim').value;
                                testAjax(moves,timee,'<?php echo $f1; ?>');
 				alert("You have completed the game in "+ document.getElementById("tim").value+" ms");
			}
		}
	}
}
function solve(){
	finished=1;
	for(var i=0;i<9;i++) {
		for(var j=0;j<9;j++){
			f_id="s"+(i+1)+(j+1);
			var value=res.charAt(i*9+j);
			add_val(f_id,value);
			c_id="c"+(i+1)+(j+1);
			document.getElementById(c_id).style.background=cell_color;
		}
	}
}

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<9;j++) {
		new_numbers = unique_rand(numbers,9); //Give random position for the numbers
		numbers.push(new_numbers);
	}
	//Now change all the alphas back to numbers - with new digits
	//alert(ran_str);
	for(i=0;i<81;i++){
		var po=ran_str.charAt(i);
		new_order += numbers[alpha.indexOf(po)]
	}
	return new_order;	
}
function init(){
	clearer();
	started=true;
	var ran=(Math.random()*parseInt(sudoku.length-1)).toFixed(0);
	//alert(ran);
	var str=sudoku[ran];
	res=makeNewOrder(str);
	//alert(str);
	numbers = new Array("0");
	var emt=25;
	if(level==2){
		emt=30;
	}
	else if(level==3){
		emt=40;
	}
	for(j=0;j<emt;j++) {
		new_numbers = unique_rand(numbers,81); //Give random position for the numbers
		numbers.push(new_numbers);
	}
	for(var i=0;i<9;i++) {
		for(var j=0;j<9;j++){
			f_id="s"+(i+1)+(j+1);
			c_id="c"+(i+1)+(j+1);
			document.getElementById(c_id).style.background=cell_color;
			if(isExist(numbers,i*9+j)==false){
				document.getElementById(c_id).disabled = false;
				document.getElementById(c_id).value="";
			}
			else{
				var value=res.charAt(i*9+j);
				add_val(f_id,value);
			}

		}
	}
}
function clearer() {// Clear all the Fields
	var id = ""
	for(var i=1; i<=9; i++) {
		for(var j=1; j<=9; j++) {
			id = "s"+i+j;
			cid= "c"+i+j;
			document.getElementById(cid).style.background=cell_color;
			document.getElementById(id).disabled = false;
			document.getElementById(id).value="";
		}
	}
}
function make_default_color() {// Clear all the Fields
	var id = ""
	for(var i=1; i<=9; i++) {
		for(var j=1; j<=9; j++) {
			cid= "c"+i+j;
			document.getElementById(cid).style.background=cell_color;
		}
	}
}
function validate(){
        var gg=true; 
	make_default_color();
	for(var i=1;i<=9;i++){//validate  rows
		var numbers_k = new Array();
		for(var j=1;j<=9;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<=9;j++){
				c_id='c'+i+j;
				document.getElementById(c_id).style.background=cell_err;
                                 
			}
                    gg=false;
		}
	}
	for(var i=1;i<=9;i++){//validate cols
		var numbers_k = new Array();
		for(var j=1;j<=9;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<3;j++){
			var numbers_k = new Array();
			for(i1=1;i1<=3;i1++){
				for(j1=1;j1<=3;j1++){
					c_id='s'+(i*3+i1)+(j*3+j1);
					if(document.getElementById(c_id).value!=''){
						numbers_k.push(document.getElementById(c_id).value);
					}
				}
			}
			if(find_duplicates(numbers_k)==false){
				for(var i1=1;i1<=3;i1++){
					for(var j1=1;j1<=3;j1++){
						c_id='c'+(i*3+i1)+(j*3+j1);
						document.getElementById(c_id).style.background=cell_err;
					}
				}
                            gg=false;
			}
		}
	}
	return gg;
}
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;
}


