//VALIDACION AJAX AUTOMATICA POR MEDIO DE BASE DE DATOS

//Función para lanzar un formulario por ajax y así validarlo al vuelo
//Nos obliga a meter los controles en un fieldset que tenga como id algo_nombre de tabla a la que pertenecen los campos
//Nos obliga a que los nombres de los controles del formulario sean los del campo en base de datos
//Construye la cadena de url con todos los parámetros del formulario sin hacer submit
//Lanza por ajax el action del formulario y le pasa la cadena construída por post
//Cambia el nombre de los parámetros y les antepone el nombre de la tabla a la que pertenecen (tabla_campo)
//Cambia el valor de los checkbox activos de on a 1
//Si en el id del fieldset viene "noval" significa que los campos que están dentro no se validan
//El callback envia un resultado en xml a setValidacion

function Form2Post(form)
{
	var arr = form.elements;
	var lArr = arr.length;
	var prefijo = '';
	var out = '';
	
	for (var i=0;i<lArr;i++)
	{
		if (arr[i].tagName == 'FIELDSET')
		{
			//Recuperamos el nombre de la tabla del fieldset padre de los elementos.
			prefijo = arr[i].id;
			var t = prefijo.split('_');
			prefijo = t[1];
		}
		else
		{
			//Ponemos valor 1 a los checkbox  activados
			
			
			if (arr[i].tagName == 'INPUT' && arr[i].type == 'checkbox' && arr[i].value == 'on')
			{
				arr[i].value = 1;
				
			}
			if (arr[i].tagName == 'INPUT' && arr[i].type == 'checkbox' && arr[i].value != 'on' && arr[i].value != 1)
			{
				arr[i].value = 0;
				
			}
			
			//Construímos la cadena a pasar por post
			out += '&'+prefijo+'_'+arr[i].name+'='+arr[i].value;
		}
	}
	
	alert(out);
	
	doAjax(form.action, out, 'setValidacion', 'post', 1);
	return false;
}


//CallBack de Form2Post
//recibimos un xml como string y lo parseamos según su tipo 
//Posibles xml's:
//<f><tipo>error</tipo><errores><item><descripcion>ERROR número</descripcion><campo>posicion</campo></item></errores></f>
//<f><tipo>ok</tipo><location>contenido.php?id=X</location></f>
//Si es de error se recorre todos los errores y llama a la funcion PrintError para que los pinte

function setValidacion(xml)
{
	var erroresxml;
	var lErr;
	var param1;
	var param2;
	
	
	//Buscamos el tipo del xml
	var tipoxml = xml.getElementsByTagName('tipo');
	var type = tipoxml[0].firstChild.nodeValue;
	
	//Borramos los errores antiguos si los hay
	cleanErrors();
	
	if (type == 'error')
	{
		//Buscamos todos los errores para recorrerlos
		erroresxml = xml.getElementsByTagName('item');
		lErr = erroresxml.length;
		for (var i=0;i<lErr;i++)
		{
			var lIt = erroresxml[i].childNodes.length;
			
			for (var j=0;j<lIt;j++)
			{
				//Establecemos el nombre del campo que ha dado error
				if (erroresxml[i].childNodes[j].nodeName == 'campo')
				{
					param1 = erroresxml[i].childNodes[j].firstChild.nodeValue;
				}
				//Establecemos la descripción del error
				if (erroresxml[i].childNodes[j].nodeName == 'descripcion')
				{
					param2 = erroresxml[i].childNodes[j].firstChild.nodeValue;
				}
			}
			//Pintamos los errores en pantallas
			printError(param1,param2);
		}
	}
	else if(type == 'ok')
	{
		//Buscamos el tag location para dirigir allí
		var col = xml.getElementsByTagName('location');
		var location = col[0].firstChild.nodeValue;
		document.location.href = location
	}
}

//Función para pintar en pantalla los errores de validación, así como encargada de dirigir a una determinada página en caso
//de que la validación haya resultado satisfactoria.
//Crea un span con la class "errorval" donde se pintará el mensaje de error devuelto
function printError(campo,descripcion)
{
	var c = campo.split('_');
	var id = c[1];
	//Control del formulario
	var element = document.getElementById(id);
	//<p> Contenedor del control
	var container = element.parentNode;
	var span = '';
	
	//colección de span del parrafo
	var sCol = container.getElementsByTagName('span');
	var lScol = sCol.length;
	
	for (var i=0;i<lScol;i++)
	{
		if (sCol[i].className == 'errorval')
		{
			span = sCol[i];
		}
	}
	if (span != '')
	{
		span.innerHTML = descripcion;
	}
	else
	{
		var Errspan = document.createElement('span');
		Errspan.className = 'errorval';
		Errspan.innerHTML = descripcion;
		container.appendChild(Errspan);
	}
}

//Limpia todos los mensajes de error que haya en pantalla
function cleanErrors()
{
	//Colección de span
	var sCol = document.getElementsByTagName('span');
	var lScol = sCol.length;
	
	for (var i=0;i<lScol;i++)
	{
		if (sCol[i].className == 'errorval')
		{
			sCol[i].innerHTML = '';
			sCol[i].className = '';
		}
	}
}

function ValidaFrmUsuarios()
{
	var tmp = true;
	
	if (document.getElementById('pwd').value != document.getElementById('pwd2').value)
	{
		tmp = false;
		alert("Las contraseñas han de ser iguales");
	}
	
	return tmp;
}


function validarbusqueda()
{
	var out = true;
	
	if (document.getElementById('buscar').value == 'búsqueda')
	{
		alert('Escriba un contenido a buscar en la caja de texto');
		out = false;
	}
		
	if (document.getElementById('buscar').value.length < 3 && out == true)
	{
		alert('Debe de buscar un contenido superior de al menos 3 caracteres');
		out = false;
	}
	
	//alert('validado = ' + out);
	
	return out;
}


function validaContacto(form)
{
	var msg = '';
	
	if (form.nombre.value == '')
		msg += "El nombre no puede ser vacío.\n"
		
	if (form.mail.value == '')
		msg += "la dirección de correo electrónico no puede ser vacío.\n"
	
	if (form.comentarios.value  == '')
		msg += "Debe escribir contenido para su consulta.\n"
		
	if (msg == '')
		return true;
	else
	{
		alert(msg);
		return false;
	}
		

}
