/*
Funcion Dinamica para validar formularios creada por Alejo Roman Daraio www.ard-design.com.ar
la sintaxys de la funcion es validarForm(campos,tipo de campos,muestreo de errores)
Tanto los campos como tipo de campos se separan por "," (comas)

los tipos de datos que hay por el momento para validar son:

text  - (si un campo es alfanumerico)
num   - (si un campo es solo numerico)
email - (valida que el email sea escrito correctamente)
date  - (valida que la fecha sea correcta, formato dd-mm-yyyy)

En caso de que sea nun checkbox, radio, o select el campo a validar poner como type "null".

Para que se puedan visualizar los errores es necesario tenes una div con el id llamado: msjError, y tener un display:none en el style.

msjStatus (para mostrar Errores ponerlo en "ON", sino en "OFF"

*/

function efecto()
{
	new Effect.Appear($('msjError'), { duration: 0.5 });
}
function validarForm(formulario,camposReq,typeReq,msjStatus)
{
   //Inicio Configuracion
   //Imagen a mostrar como Icono de Error.
    var imgError   = '';
	var colorInputErrorOn  = "input_error"; //Color de fondo del input al producirce un error
	var colorInputErrorOff = "input"; //Color de fondo del input al estar todo ok
   //Fin de la Configuracion 
	
	var msjError   = "";
	var errorMail  = 0;
	var check      = 1;
	var radioCheck = 1;
	var verificado = 0;
	var arrCampos  = new Array();
	var arrType	   = new Array();	
	var camposReq  = camposReq.split(",");
	var typeReq    = typeReq.split(",");	
	var totalCampos = 0;
	
	for(values in camposReq)
	{	
		arrCampos[totalCampos]=camposReq[values];
		totalCampos++;
	}
	
	var totalCampos = 0;
	for(values in typeReq)
	{
		arrType[totalCampos]=typeReq[values];
		totalCampos++;
	}
	
	if(document.getElementsByTagName('input').length-1 > 0)
	{
		for(var i=0; i <= document.getElementsByTagName('input').length-1;i++)
		{

			element = document.getElementsByTagName('input')[i];
			
			for(var campos in arrCampos)
			{	
				
			   if(element.type == "text")
			   {
					 if(arrCampos[campos] == element.name)
					 {
					 
							if(arrType[campos] == "text")	
							{	
								if(element.value == "")
								{									
									msjError += imgError+ Reemplazar(element.id,'_',' ')+", ";
									element.className = colorInputErrorOn;		
								}
								else
								{
									element.className = colorInputErrorOff;
								}
							}
							else if(arrType[campos] == "num")
							{
							
								if(isNaN(element.value) || element.value == "")
								{
								
									msjError +=imgError+" El campo "+Reemplazar(element.id,'_',' ')+" debe ser Numerico, ";
									element.className = colorInputErrorOn;
								
								}
								else
								{
									element.className = colorInputErrorOff;
								}
							
							}
							else if(arrType[campos] == "email")
							{
							
								if (element.length < 5) {
									errorMail = 1;
								}

								at_location = element.value.indexOf("@")
								dot_location = element.value.lastIndexOf(".")
							   
								if (at_location == -1 || dot_location == -1 || at_location > dot_location) {
									errorMail = 1;
								}

								if (at_location == 0) {
									errorMail = 1;
								}

								if (dot_location - at_location <= 1 ) {
									errorMail = 1;
								}

								if (element.length - dot_location <= 1) {
									errorMail = 1;
								}
								
								if(errorMail == 1)
								{
									msjError +=imgError+" Email incorrecto!, ";
									element.className = colorInputErrorOn;
								}
								else
								{
									element.className = colorInputErrorOff;
								}
							
							}
							else if(arrType[campos] == "date")
							{
								var fechaError = 0;
								var Fecha = new String(element.value)	
								var Ano   = new String(Fecha.substring(Fecha.lastIndexOf("-")+1,Fecha.length))
								var Mes   = new String(Fecha.substring(Fecha.indexOf("-")+1,Fecha.lastIndexOf("-")))
								var Dia   = new String(Fecha.substring(0,Fecha.indexOf("-")))
							
								// Valido el aņo
								if (isNaN(Ano) || Ano.length!=4 || parseFloat(Ano)<1900){
										fechaError = 1;	
								}
								// Valido el Mes
								if (isNaN(Mes) || parseFloat(Mes)<1 || parseFloat(Mes)>12){
									fechaError = 1;
								}
								// Valido el Dia
								if (isNaN(Dia) || parseInt(Dia, 10)<1 || parseInt(Dia, 10)>31){
									fechaError = 1;
								}
								if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) {
									if (Mes==2 && Dia > 28 || Dia>30) {
										fechaError = 1;
									}
								}
								if(fechaError == 1)
								{
									msjError +=imgError+" La Fecha es incorrecta!, ";
									element.className = colorInputErrorOn;
								}
								else
								{
									element.className = colorInputErrorOff;
								}
							}
							/*else
							{
								alert("error: No se definio el tipo de dato para el campo "+element.name);
								return false;
							}*/
					 }	
				 }
				 
			     if(element.type == "checkbox")
				 {
				    
				 	if(arrCampos[campos] == element.name)
					{
						
					 	if(element.checked == true)
					 	{
							check = 1;
						}					
					}
				 }	
				 
				 if(element.type == "radio")
				 {
				    
				 	if(arrCampos[campos] == element.name)
					{
						
					 	if(element.checked == true)
					 	{
							radioCheck = 1;
						}					
					}
				 }	
			}			
		}
	}
	
	if(document.getElementsByTagName('textarea').length > 0)
	{
		for(var i=0; i <= document.getElementsByTagName('textarea').length-1;i++)
		{
			
			//Busca los textarea
			element = document.getElementsByTagName('textarea')[i];
			
			for(var campos in arrCampos)
			{	
				 if(arrCampos[campos] == element.name)
				 {
					if(element.value == "")
					{
						msjError +=imgError+Reemplazar(element.id,'_',' ')+", ";
						element.className = colorInputErrorOn;
					}
					else
					{
						element.className = colorInputErrorOff;
					}
				 }		
			}			
		}
	}
	
	if(document.getElementsByTagName('select').length > 0)
	{
		for(var i=0; i <= document.getElementsByTagName('select').length-1;i++)
		{
			
			//Busca los select
			element = document.getElementsByTagName('select')[i];
			
			for(var campos in arrCampos)
			{	
				 if(arrCampos[campos] == element.name)
				 {
					if(element.value == "" || element.value == 0)
					{
						msjError +=imgError+Reemplazar(element.id,'_',' ')+", ";
						element.className = colorInputErrorOn;
					}
					else
					{
						element.className = colorInputErrorOff;
					}
				 }		
			}			
		}
	}
	
	if(check == 0)
	{
		msjError +=imgError+" Debe tildar por lo menos un checkbox, ";
	}
	if(radioCheck == 0)
	{
		msjError +=imgError+" Debe tildar por lo menos un radio boton, ";
	}
	
	if(msjStatus == "ON")
	{
		if(msjError != "")
		{
			document.documentElement.scrollTop = 0;
			document.getElementById('msjError').innerHTML='Los siguientes campos son requeridos: '+msjError.substr(0,(msjError.length)-2);
			return efecto();
			return false;
		}
		else
		{
			document.getElementById('msjError').style.display = 'none';
				
				if(document.getElementsByTagName('form').length > 0)
				{
					for(var i=0; i <= document.getElementsByTagName('form').length-1;i++)
					{
						element = document.getElementsByTagName('form')[i];
						
						for(var campos in arrCampos)
						{	
					
							 if(formulario == element.name)
							 {
								return true;
							 }		
						}			
					}
				}
		}
	}
}