function FP_preloadImgs() {//v1.0
 var d=document,a=arguments; if(!d.FP_imgs) d.FP_imgs=new Array();
 for(var i=0; i<a.length; i++) { d.FP_imgs[i]=new Image; d.FP_imgs[i].src=a[i]; }
}

function FP_swapImg() {//v1.0
 var doc=document,args=arguments,elm,n; doc.$imgSwaps=new Array(); for(n=2; n<args.length;
 n+=2) { elm=FP_getObjectByID(args[n]); if(elm) { doc.$imgSwaps[doc.$imgSwaps.length]=elm;
 elm.$src=elm.src; elm.src=args[n+1]; } }
}

function FP_getObjectByID(id,o) {//v1.0
 var c,el,els,f,m,n; if(!o)o=document; if(o.getElementById) el=o.getElementById(id);
 else if(o.layers) c=o.layers; else if(o.all) el=o.all[id]; if(el) return el;
 if(o.id==id || o.name==id) return o; if(o.childNodes) c=o.childNodes; if(c)
 for(n=0; n<c.length; n++) { el=FP_getObjectByID(id,c[n]); if(el) return el; }
 f=o.forms; if(f) for(n=0; n<f.length; n++) { els=f[n].elements;
 for(m=0; m<els.length; m++){ el=FP_getObjectByID(id,els[n]); if(el) return el; } }
 return null;
}

var messagecount=1;


function restartgame()
{
	// --------------------------
	// initializing variables
	// --------------------------
	var rows = document.getElementById('rows').value;
	var columns= document.getElementById('columns').value;
	var obj= document.getElementById('N0_1');	

//			alert(obj.readOnly);
	
    
	for (currrow1=0; currrow1<rows; currrow1++) {
		for (currcolumn1=0; currcolumn1<columns; currcolumn1++) {

			currobj=document.getElementById('N'+currrow1+'_'+currcolumn1);
			if (currobj!=null)
			{
				if (currobj.readOnly == false)
				{
					currobj.value='';
				}
			}
		}
	}
	checkme();
	
}




function fixspace(currrow1)
{
	// alert('TEMP XXXXXXXXXXXXXXXXX');
	var currcolumn1=document.getElementById(currrow1).value;
//	var temp_r = (row  - (row % 3) ) / 3;
//	var sec;

	if(currcolumn1==" ")
	{
		document.getElementById(currrow1).value="";
	}
	else if (currcolumn1=="0")
	{
		//alert('only number between 1 to 9 can be used');
		document.getElementById(currrow1).value="";
	}
	
	if (	currcolumn1 != "1" && currcolumn1 != "2" && currcolumn1 != "3" && currcolumn1 != "4" && currcolumn1 != "5" && currcolumn1 != "6" && currcolumn1 != "7" && currcolumn1 != "8" && currcolumn1 != "9"		)
	{
		//alert('TEMP XXXXXXXXXXXXXXXXX');
		document.getElementById(currrow1).value="";
	}
	else
	{
//		 if(s_check_row(row) == "error" || s_check_col(col) == "error" || s_check_section(sec) == "error")
//		{
//		}
	//	 checkme();
		
	}


}



function s_temp_x(input_row_number)
{
	var current_cell_value = new Array(9);

	document.getElementById('msgbox_1').innerHTML='<FONT COLOR=#800000><B><U>You WIN! </U></B></FONT>';
		// temp print the line:
	for (col_i=0 ; col_i<9 ; col_i++ )
	{
		current_cell_value[col_i]=document.getElementById('N'+input_row_number+'_'+col_i).value;
//		alert('TEMP XXXXXXXXXXXXXXXXX'+col_i+'xx');
//		if(current_cell_value[col_i] != NULL)
		{
			alert('row('+input_row_number+'),col('+col_i+') = '+current_cell_value[col_i]+'  ');
			// alert('TEMP XXXXXXXXXXXXXXXXX'+col_i+'xx');
		}
//		alert('row('+input_row_number+'),col('+col_i+') = '+current_cell_value[col_i]' ');
	}


}

function s_check_row(input_row_number)
{
	var checked_numbers = new Array(10);
	var cell_value;
	var numbers_counter = 0;
	for (col_i=0 ; col_i<9 ; col_i++ )
	{
		cell_value = document.getElementById('N'+input_row_number+'_'+col_i).value;
		//alert('row('+input_row_number+'),col('+col_i+') = '+cell_value+'  ');
		
		if(checked_numbers[cell_value] == "used") // this value was already discovered
		{
//			document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>debug text - row('+input_row_number+'),col('+col_i+') - value ('+cell_value+') was already used </U></B></FONT>';
			return("error");
		}
		else // (checked_numbers[cell_value] == null) // this value wasn't discovered yet
		{
			if(cell_value != "")
			{
				checked_numbers[cell_value] = "used"; // mark this value as used
				numbers_counter++;
			}
		}
	}

	if(numbers_counter == 9)
	{
//		document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>debug text - row ('+input_row_number+') is ok </U></B></FONT>';
		return("ok");
	}
	else
	{
//		document.getElementById('msgbox_debug_1').innerHTML='<FONT COLOR=#800000><B><U>debug text - there are still unfilled cells in row ('+input_row_number+')  </U></B></FONT>';
		return("not_ok");
	}

}

function s_check_col(input_col_number)
{
	var checked_numbers = new Array(10);
	var cell_value;
	var numbers_counter = 0;
	for (row_i=0 ; row_i<9 ; row_i++ )
	{
		cell_value = document.getElementById('N'+row_i+'_'+input_col_number).value;
		//alert('row('+row_i+'),col('+input_col_number+') = '+cell_value+'  ');
		
		if(checked_numbers[cell_value] == "used")  // this value was already discovered
		{
//			document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>debug text - row('+row_i+'),col('+input_col_number+') - value ('+cell_value+') was already used </U></B></FONT>';
			return("error");
		}
		else //if(checked_numbers[cell_value] == null) // this value wasn't discovered yet
		{
			if(cell_value != "")
			{
				checked_numbers[cell_value] = "used"; // mark this value as used
				numbers_counter++;
			}
		}	
	}

	if(numbers_counter == 9)
	{
//		document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>debug text - col ('+input_col_number+') is ok </U></B></FONT>';
		return("ok");
	}
	else
	{
//		document.getElementById('msgbox_debug_1').innerHTML='<FONT COLOR=#800000><B><U>debug text - there are still unfilled cells in col ('+input_col_number+')  </U></B></FONT>';
		return("not_ok");
	}
}

function s_check_section(input_sec_number)
{
	var checked_numbers = new Array(10);
	var cell_value;
	var numbers_counter = 0;

	var row_start = 3 * ( (input_sec_number - (input_sec_number % 3)) / 3);
	var col_start = 3 * (input_sec_number % 3);

	//alert('row('+row_start+'),col('+col_start+')');
	//return(0);


	for (r_i=0 ; r_i<3 ; r_i++ )
	{
		for (c_i=0 ; c_i<3 ; c_i++ )
		{
			row_i = row_start + r_i;
			col_i = col_start + c_i;
			cell_value = document.getElementById('N'+row_i+'_'+col_i).value;
			// alert('section('+input_sec_number+'),row('+row_i+'),col('+col_i+') = '+cell_value+'  ');
			
			if(checked_numbers[cell_value] == "used") // this value was already discovered
			{
//				document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>debug text - section('+input_sec_number+'),row('+row_i+'),col('+col_i+') - value ('+cell_value+') was already used </U></B></FONT>';
				return("error");
			}
			else //if(checked_numbers[cell_value] == null) // this value wasn't discovered yet
			{
				if(cell_value != "")
				{
					checked_numbers[cell_value] = "used"; // mark this value as used
					numbers_counter++;
				}
			}
		}
	}

	if(numbers_counter == 9)
	{
//		document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>debug text - col ('+input_sec_number+') is ok </U></B></FONT>';
		return("ok");
	}
	else
	{
//		document.getElementById('msgbox_debug_1').innerHTML='<FONT COLOR=#800000><B><U>debug text - there are still unfilled cells in section ('+input_sec_number+')  </U></B></FONT>';
		return("not_ok");
	}
}

var messagecount=1;
function checkme()
{
	var count_i;
	var game_error = false;
	var check_counter=0;
//	alert('tempx');
	var puzzlenum=document.getElementById('puzzlenumstr').value; 
	var bglevel=document.getElementById('levelcolor').value;
	// var bglevel = "FF0000";

	// ---------------------------------------------
	//	re-painting all number cells with white bg
	// ---------------------------------------------
	
	for (currrow1=0; currrow1<9; currrow1++) 
	{
		for (currcolumn1=0; currcolumn1<9;currcolumn1++)
		{
			currobj=document.getElementById('tdNumber'+currrow1+'_'+currcolumn1);
			if (currobj!=null)
			{
				currobj.bgColor="#FFFFFF";
			}
		}
	}
	
//alert('temp1');
	// check all rows:
	for(count_i=0;count_i<9;count_i++)
	{
//		alert('hello');
		result = s_check_row(count_i);
		if(result == "error")
		{
//			document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>debug text - error detected , row('+count_i+') </U></B></FONT>';
			game_error = true;			
			// return(error);
			// change bg color :
			
			for (currcolumn1=0; currcolumn1<9;currcolumn1++)
			{
				currobj=document.getElementById('tdNumber'+count_i+'_'+currcolumn1);
				if (currobj!=null)
				{
					currobj.bgColor=bglevel;
				}
			}
			
		}
		else if(result == "ok")
		{
			check_counter++;
		}
	}
	// check all columns:
//alert('temp2');
	for(count_i=0;count_i<9;count_i++)
	{
		result = s_check_col(count_i);
		if(result == "error")
		{
			game_error = true;					
//			document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>debug text - table not finished , col('+count_i+') </U></B></FONT>';
			//return(error);
			// change bg color :
			
			for (currrow1=0; currrow1<9; currrow1++) 
			{
				currobj=document.getElementById('tdNumber'+currrow1+'_'+count_i);
				if (currobj!=null)
				{
					currobj.bgColor=bglevel;
				}
			}
			
		}
		else if(result == "ok")
		{
			check_counter++;
		}
	}
	// check all sections:
//alert('temp3');
	for(count_i=0;count_i<9;count_i++)
	{
		result = s_check_section(count_i);
		if(result == "error")
		{
			game_error = true;					
//			document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>debug text - table not finished , section('+count_i+') </U></B></FONT>';
			//return(error);
			// change bg color:
			start_row = count_i - (count_i%3) ;
			start_col = (count_i%3) * 3;
			for (currrow1=0; currrow1<3; currrow1++) 
			{
				for (currcolumn1=0; currcolumn1<3;currcolumn1++)
				{
					selected_row = start_row + currrow1;
					selected_col = start_col + currcolumn1;
					currobj=document.getElementById('tdNumber'+selected_row+'_'+selected_col);
					if (currobj!=null)
					{
						currobj.bgColor=bglevel;
					}
				}
			}		

		}
		else if(result == "ok")
		{
			check_counter++;
		}
	}
//	alert(game_error);
	if (game_error)
	{
//		alert('error1');	
//
			document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B>Your mistakes are marked on board  (puzzle no. '+puzzlenum+')</B></FONT>';
//
//		alert('error1end');		
	}
	else
	{
		if(check_counter == 27)
		{
			document.getElementById('msgbox').innerHTML='<FONT COLOR=#800000><B><U>You WIN! (puzzle no. '+puzzlenum+')</U></B></FONT>';
			return("ok");
		}
		else
		{
			if (messagecount==1)
			{
				document.getElementById('msgbox').innerHTML='<FONT COLOR=#000080><B>So far So good ... (puzzle no. '+puzzlenum+')</B></FONT>';	
				messagecount=2;
			}
			else if (messagecount==2)
			{
				document.getElementById('msgbox').innerHTML='<FONT COLOR=#000080><B>keep on working ... (puzzle no. '+puzzlenum+')</B></FONT>';	
				messagecount=3;
			}
			else if (messagecount==3)
			{
				document.getElementById('msgbox').innerHTML='<FONT COLOR=#000080><B>you are doing just fine ... (puzzle no. '+puzzlenum+')</B></FONT>';	
				messagecount=4;
			}
			else if (messagecount==4)
			{
				document.getElementById('msgbox').innerHTML='<FONT COLOR=#000080><B>you have a chance to win this one ... (puzzle no. '+puzzlenum+')</B></FONT>';	
				messagecount=1;
			}
		
		}
	}
}

