$(document).ready(function(){

	// Obtengo el nš de columnas
	sopa._ncols = $("#sopa tr:first td").length; // muahaha
	// Obtengo las palabras
	sopa._palabras = [];
	$("#palabras p").each(function(){
		sopa._palabras.push($(this).text());
	});

	$("#sopa td").hover(
		function(event){
			$(this).addClass('hover');
			var index = $("#sopa td").index(this);		// muaha
			var row = Math.floor(index / sopa._ncols);			// muahahahaha
			var col = Math.floor(index % sopa._ncols);			// MUAHAHAHAHAHAHAHA
			$("#status2").html("x: " + row + ", y: " + col + ", i: " + index);
		},
		function(event){$(this).removeClass('hover');}
	);

	$("#sopa td").click(sopa.marcar_letra);

});

var sopa = {
	_points: [],
	_ncols: 0,
	_palabras: null
};

sopa.marcar_letra = function(event){

	var index = $("#sopa td").index(this);		// muaha
	var row = Math.floor(index / sopa._ncols);			// muahahahaha
	var col = Math.floor(index % sopa._ncols);			// MUAHAHAHAHAHAHAHA

	var np = {x: row, y: col}; // Nuevo punto
	var pd = null; // Direccion del punto
	var pa = null; // Punto anterior

	if(sopa._points.length > 0){
		sopa._points.push(np);
		for(var key in sopa._points){
			// Punto de iteracion del bucle
			var p = sopa._points[key];

			if(pa !== null && pd == null){
				pd = {x: 0, y: 0};
				if(p.x < pa.x) pd.x = -1;
				if(p.x > pa.x) pd.x = +1;
				if(p.y < pa.y) pd.y = -1;
				if(p.y > pa.y) pd.y = +1;
			}
			pa = p;
		}
		sopa._points.pop();
		pa = sopa._points[sopa._points.length - 1];

		if(pd != null && (pa.x + pd.x != np.x || pa.y + pd.y != np.y) ){
			sopa.demarcar_activas();
			sopa._points = [];
		}

	}
	sopa._points.push(np);

	var palabra = sopa.obtener_palabra();
	if( sopa.comprobar_palabra(palabra) ){
		sopa.validar_activas();
		sopa.marcar_palabra(palabra);
	}else{
		sopa.marcar_activas();
	}

	/*$("#status").html(
		'np: ' + (np == null ? 'null' : np.toSource()) + '\n' +
		'pd: ' + (pd == null ? 'null' : pd.toSource()) + '\n' +
		'pa: ' + (pa == null ? 'null' : pa.toSource()) + '\n'
	);*/


};

sopa.marcar_activas = function(){
	for(var key in sopa._points){
		var p = sopa._points[key];
		var index = p.x * sopa._ncols + p.y;
		$("#sopa td").eq(index).addClass('check');
	}
};

sopa.demarcar_activas = function(){
	for(var key in sopa._points){
		var p = sopa._points[key];
		var index = p.x * sopa._ncols + p.y;
		$("#sopa td").eq(index).removeClass('check');
	}
};

sopa.validar_activas = function(){
	for(var key in sopa._points){
		var p = sopa._points[key];
		var index = p.x * sopa._ncols + p.y;
		$("#sopa td").eq(index).removeClass('check').addClass('completo');
	}
};

sopa.obtener_palabra = function(){
	var palabra = "";
	for(var key in sopa._points){
		var p = sopa._points[key];
		var index = p.x * sopa._ncols + p.y;
		palabra += $("#sopa td").eq(index).text();
	}
	return palabra;
}

sopa.comprobar_palabra = function(palabra){
	for(var key in sopa._palabras){
		var p = sopa._palabras[key]; // palabra de iteracion
		if( p === palabra ){
			return true;
		}
	}
	return false;
};

sopa.marcar_palabra = function(palabra){
	$("#palabras p:contains('" + palabra + "')").addClass('tick');

	if( $("#palabras p.tick").length == sopa._palabras.length ) {
		$("#sopa_completada").show();
	}

};