

function validarCampo (campoId, campoPrefijo, mensaje, campoObligatorio, caracteres) 
{
	var r 				= true;
	var campo 			= document.getElementById(campoId);	

	switch (campo.type) 
	{
		case 'select-one' :
			r = seleccionarSelect 		(campo, 	mensaje);
			break
		case 'paswword' :
			r = txtRequerido 			(campo, 	mensaje		)	&&
				sinEspacios 			(campo, 	mensaje		)	&&
				strLongitud 			(campo, 	mensaje, 5	);
			break			
		case 'radio' :
			r = seleccionarRadio 		(campo, 	mensaje);
			break				
		case 'checkbox' :
			if(campoObligatorio)
			{
				seleccionarSheck 			(campo, 	mensaje);
			}
			break	
		case ('textarea')	:
			if(campoPrefijo=='max' )
			{
				r = strMenorQue 		(campo, 	mensaje, caracteres);							
			}		
			if(r&&campoObligatorio)
			{
				r = txtRequerido 			(campo, 	mensaje);
			}				
			break
		case 'text' 	:
			if(campoPrefijo=='num' )
			{
				r = datoNumerico 		(campo, 	mensaje);							
			}
			else if(campoPrefijo=='min' )
			{					
				r = strMayorQue 		(campo, 	mensaje, caracteres);							
			}
			else if (campoPrefijo=='fecha') 
			{
					
				r = validarFecha 		(campo, 	mensaje);							
			}
			else if (campoId=='telefono') 
			{
				r = validarTelefono 	(campo, 	mensaje, 5);						
			}
			else if ((campoId.indexOf('mail')!=-1)||(campoId.indexOf('correo')!=-1 && campoId.indexOf('electronico')!=-1)) 
			{
				r = validarCorreo 		(campo, 	mensaje);								
			}				
			if (r&&campoObligatorio) 
			{
				r = txtRequerido 		(campo, 	mensaje);
			}
			break					
	}
	return r;
}
	
function validarFormulario(formulario) 
{	
	var r 		 		= true;
	var	labelArr 		= formulario.getElementsByTagName('label');
	var seccion;
	// Acepta una variable global
	var mensajePrefijo 	= ((typeof configMensajePrefijo!="undefined")? configMensajePrefijo : 'Especifique' );

	
	for(var i=0;i<labelArr.length&&r;i++) 
	{	
	
		if(labelArr[i].parentNode.getElementsByTagName('legend')[0])
		{
			seccion = labelArr[i].parentNode.getElementsByTagName('legend')[0].firstChild.nodeValue + '"';
			seccion = ' en la sección "' + seccion + '"';
		}
		else 
		{
			seccion	= '';
		}
		
		// ID del campo.
		var campoId				= obtenerCampoId(labelArr[i])
		// Campo obligatorio.
		var campoObligatorio 	= labelArr[i].firstChild.tagName.toLowerCase()=='strong';
		// Etiqueta del campo.
		var campoEtiqueta		= labelArr[i].firstChild.firstChild.nodeValue;
		// Mensaje de validacion.
		var mensaje				= mensajePrefijo + ' "' + campoEtiqueta + '"' + seccion;	
		// Prefijo, para sacar el tipo de validacion que se aplica al campo.
		var campoPrefijo 		= campoId.substring(campoId.lastIndexOf('_')+1, campoId.length);
		// Numero de caracteres que
		var caracteres			= false;			
		if(campoPrefijo.indexOf('min')!=-1||campoPrefijo.indexOf('max')!=-1)
			{	
			caracteres 			= campoPrefijo.substring(3, campoPrefijo.length)
			campoPrefijo 		= campoPrefijo.substring(0, 3);
			}		
			
		r = validarCampo(campoId, campoPrefijo, mensaje, campoObligatorio, caracteres);
	}
	return r;
}

// obtener el id del campo
function obtenerCampoId (etiqueta) {

	if(etiqueta.htmlFor){
		return etiqueta.htmlFor;
	}
	
	var campoTipo;
	if(etiqueta.getElementsByTagName('select')[0])
	{	
		campoTipo 		= 'select';
	}
	else if(etiqueta.getElementsByTagName('textarea')[0])
	{
		campoTipo 		= 'textarea';
	}
	else if(etiqueta.getElementsByTagName('input')[0])
	{
		campoTipo 		= 'input';
	}	

	return etiqueta.getElementsByTagName(campoTipo)[0].id;
}

	
	
// Inicializar.
// -------------------------------------------------------------------------- //

function prepararValidacion () 
{
	if (!document.getElementById 		|| 
		!document.getElementsByTagName)		
	{
	  return true;
	}
	var formArr = document.getElementsByTagName('form');
	for(i=0;i<formArr.length;i++)
	{
		if (formArr[i].id!='buscar-global') 
		{	
			formArr[i].onsubmit=function()
			{
				return validarFormulario(this);
				return true;
			}
		}
	}
}



// Funciones generales.
// -------------------------------------------------------------------------- //

function txtRequerido (obj, mensaje, silenciar)
{
	var s=obj.value, r=(s!='');
	if(!r&&!silenciar){ alert(mensaje); obj.focus();} return r;
}

function sinEspacios (obj, mensaje)
{
	var s=obj.value,r=(s.indexOf(' ')==-1);
	if(!r){alert(mensaje); obj.focus();} return r;
}

function strMayorQue (obj, mensaje, largo)
{
	var r=true,s=obj.value; if (s != ''){r=s.length>=largo;
	if(!r){alert(mensaje); obj.focus();}} return r;
}

function strMenorQue (obj, mensaje, largo)
{
	var r=true,s=obj.value; if (s != ''){r=s.length<=largo;
	if(!r){alert(mensaje); obj.focus();}} return r;
}

function strLongitud (obj, mensaje, largo)
{
	var r=true,s=obj.value; if (s != ''){r=(s.length==largo);
	if(!r){alert(mensaje); obj.focus();}} return r;
}

function validarCorreo (obj, mensaje)
{
	var  s=obj.value; if(s=='')return true;
	r=((s.indexOf('@')!=-1)&&(s.indexOf('@')!=0)&&(s.indexOf('@')!=s.length-1)&&(s.indexOf('.') != -1)&&(s.indexOf('.')!=0)&&(s.indexOf('.')!= s.length -1))  
	if(!r){alert(mensaje); obj.focus();} return r;
}

function validarTelefono (obj, mensaje, largo)
{	
	var s=obj.value, r=(s=='');	
	if (!r) {r=(!s.match(/[^\d\s-]/)); if(r)r=(s.length>=largo);} 	
	if(!r){alert(mensaje); obj.focus();} return r;
}

function compararCampos (obj1, obj2, mensaje)
{
	var s1=obj1.value,s2=obj2.value, r=(s1 == s2);
	if(!r){alert(mensaje); o2.focus();} return r;
}

function seleccionarSelect (obj, mensaje, silenciar)
{
	var x=obj.selectedIndex, val=obj.options[x].value; 
	r=((val!=null)&&(val!='')&&(val!=0));
	if(!r&&!silenciar){alert(mensaje); obj.focus();} return r;
	}

function datoNumerico (obj, mensaje)
{
	var s=obj.value, r=(!isNaN(s));
	if (!r) {alert(mensaje); obj.focus(); }
	return r;
}

function seleccionarRadio (mensaje)
{
	var r=false;
	for(i=0;((i<obj.length)&&(!r));i++) r=(obj[i].checked);
	if(!r){alert(mensaje); obj[0].focus(); } return r;
}

function seleccionarSheck (obj, mensaje, silenciar)
{
	var c=obj.length, r=false;
	if (obj.length) {for(i=0;((i<c)&&(!r));i++)r=o[i].checked;} else{r=obj.checked;}	
	if (!r&&!silenciar) {alert(mensaje); if(obj.length)o=o[0]; obj.focus(); } return r;	
}


function validarFecha (obj, 	mensaje)
	{	
		r = FDK_ValidateDate(obj,false,'','','4',mensaje);
		r=r=='';
		if(!r)
		{
			alert(mensaje);
		}
		return r;
	}	
	

function FDK_ValidateDate(FormElement,Required,MinDate,MaxDate,Format,ErrorMsg)
{
	
	var msg = "";
	var theString = FormElement.value;
	
	var dateVar = new Date(theString);
	var peavd = ErrorMsg;
	var d = dateVar;

	var fullYear = d.getYear();
	if (fullYear <= 10) fullYear += 2000;
	if (fullYear <= 200) fullYear += 1900;
    d.setYear(fullYear)
    dateVar.setYear(fullYear)


	var theLen = FDK_StripChars(" ",theString).length
	if (theLen == 0)
	{
		if (!Required) return "";
		else return peavd;
	}

	if (isNaN(dateVar.valueOf()) || (dateVar.valueOf() == 0))
		return peavd;

	// Check for correct range.
	if (MinDate != "")
	{
		var Today = new Date(MinDate);
		if (dateVar <= Today)
		  return peavd;
	}
	if (MaxDate != "")
	{
		var Today = new Date(MaxDate);
		if (dateVar >= Today)
		return peavd;
	}

	// We have a valid date. Reformat it and write it back to the control
	var style = Format;

	if (style == "2") {
	  var date_string = (d.getMonth()+1) + "/" + d.getDate() + "/" + fullYear;
	  }
	  else if (style == "3") {
	  var date_string = (d.getMonth()+1) + "-" + d.getDate() + "-" + fullYear;
	  }
	  else if (style == "4") {
	  var date_string = d.getDate() + "/" + (d.getMonth()+1) + "/" + fullYear;
	  }
	  else if (style == "5") {
	  var date_string = getMonthName(d) + " " + d.getDate() + ", " + fullYear;
	  }
	  else if (style == "6") {
	  var date_string = getDayName(d) + " " + getMonthName(d) + " " + d.getDate() + ", " + fullYear;
	  }
	  else if (style == "7") {
	  var date_string = d.toLocaleString();
	  }
	  else if (style == "1") {
	  var date_string = theString;
	  }
	  else {
	  var date_string = d.toGMTString();
  }

	FormElement.value=date_string;
	return msg;
}

function FDK_StripChars(theFilter,theString)
{
	var strOut,i,curChar

	strOut = ""
	for (i=0;i < theString.length; i++)
	{		
		curChar = theString.charAt(i)
		if (theFilter.indexOf(curChar) < 0)	// if it's not in the filter, send it thru
			strOut += curChar		
	}	
	return strOut
}


function addEvent(obj, evType, fn){
  
	if (obj.addEventListener)
		{
		obj.addEventListener( evType, fn, true );
		return true;			
	}else if (obj.attachEvent)
		{
		var r = obj.attachEvent( 'on' + evType, fn );
		return r;		
	}else{
		return false;
		}		
	}

// Registrar eventos de la validacion de formularios.
// -------------------------------------------------------------------------- //

addEvent(window, 'load', prepararValidacion);
