var grid;

function fill_table(grid){
	var str=grid.toString();
	str=str.replace(/\n/g," ");
	var ar_grid=str.split(" ");
	var c=0;
	for(var i = 0; i < 81; i++)
	{	
		c=i+1;
		ar_grid[i]=ar_grid[i].replace(/0/gi,"");
		document.getElementById('cell_'+c).value=ar_grid[i];
	}
}
function lock_specific_inputs()
{
	var cell=0;
	for(var i = 1; i <= 81; i++)
	{
		cell=document.getElementById('cell_'+i);
		if(cell.value!='' && cell.value!=' ')
		{
			cell.readOnly=true;
			cell.style.background='#cfc4eb';
		}
	}
}
function check_all_fields(grid)
{
	var cell=0;
	var conflict = false;
	var empty = false;
	var c = 0;
	var fill=document.getElementById('hint');
	for(var i = 0; i < 81; i++)
	{
		c = i+1;
		cell=document.getElementById('cell_'+c);
		var row = Math.floor(i / 9);
		var col = i - (row * 9);
		if (grid.cellConflicts(col, row))
		{
			conflict = true;
			break;
		}
		if(cell.value=='' || cell.value==' ')
		{
			empty=true;
		}
	}
	if(empty)
	{
		fill.innerHTML='Todavia hay celdas vacias';
		fill.style.color='#fff';
		fill.style.background='#54127e';
		return;
	}
	if(conflict)
	{
		fill.innerHTML='mmm... Tal vez no seas lo suficientemente listo para resolverlo?';
		fill.style.background='#990000';
		fill.style.color='#fff';
		return;
	}
	else
	{
		fill.innerHTML='Felicitaciones... No quieres intentar un nivel mas dificil? ;)';
		fill.style.background='#29803f';
		fill.style.color='#fff';
	}
	return;
}
function check_set_grid_value(obj,grid)
{
	obj.value;
	obj.style.background='#dbd2f3';
	var reg_isAlpha = /^[a-z]+$/i
	var reg_isinteger = /^\d+$/
	var fill=document.getElementById('hint');
	fill.innerHTML='';
	if(reg_isAlpha.test(obj.value) || obj.value==0)
	{
		obj.value='';
	}
	else
	{
		var col=get_col(obj);
		var row=get_row(obj);
		grid.setValue(col, row, obj.value);
	}
	return;
}
function get_col(obj)
{
	var i = obj.id.split("_")[1]-1;
	var col = i - (Math.floor(i / 9) * 9);
	return col;
}
function get_row(obj)
{
	var i = obj.id.split("_")[1]-1;
	var row = Math.floor(i / 9);
	return row;
}
function give_random_hint(grid)
{
	var cell=0;
	var conflict = false;
	var empty = false;
	var c = 0;
	var fill=document.getElementById('hint');
	fill.innerHTML='';
	fill.style.background='#dbd2f3';
	var errors = [];
	for(var i = 0; i < 81; i++)
	{
		c = i+1;
		cell=document.getElementById('cell_'+c);
		var row = Math.floor(i / 9);
		var col = i - (row * 9);
		if (grid.cellConflicts(col, row) && !cell.readOnly && cell.value!='' && cell.value!=' ')
		{
			errors.push('cell_'+c);
		}
		if(cell.value=='' || cell.value==' ')
		{
			empty=true;
		}
	}
	if(empty && errors.length==0)
	{
		fill.innerHTML='Por ahora vas bien! Deberias continuar llenando los vacios';
		fill.style.background='#54127e';
		fill.style.color='#fff';
		return;
	}
	if(errors.length!=0)
	{
		var r = Math.floor(Math.random()*errors.length);
		document.getElementById(errors[r]).style.background='#FFFF99';
		return;	
	}
	fill.innerHTML='Nada que mostrar... Tal vez resolviste el juego, click en verificar tablero para averiguarlo!';
	fill.style.background='#54127e';
	fill.style.color='#fff';
	errors.length = 0;
}
function remove_spaces(obj)
{
	obj.value;
	var reg_isAlpha = /^[a-z]+$/i
	var reg_isinteger = /^\d+$/
	if(reg_isAlpha.test(obj.value) || obj.value==' ')
	{
		obj.value='';
	}
	return;
}
function clear_game()
{
	var cell=0;
	for(var i = 1; i <= 81; i++)
	{
		cell=document.getElementById('cell_'+i);
		cell.value ='';
		cell.readOnly=false;
		cell.style.background='#dbd2f3';		
	}
}
function completar() {	
	clear_game();
	grid = CU.Sudoku.generate();
	var sel = document.getElementById("selector-sudo");
	var valorsudo = sel.options[sel.selectedIndex].value;
	CU.Sudoku.cull(grid, valorsudo);
	fill_table(grid);
	lock_specific_inputs();	
}
