/****************************************FUNCIONES DE VALIDACION DE TEMPLATES DE JAVASCRIPT*****************************************/

/*
Variable global de sufijo para el id del container del mensaje de error.
La idea es que si tengo un elemento que tiene un id="hola", el container del mensaje de error sea del tipo:
id="hola<sufijo>" donde <sufijo> es la siguiente variable
*/
var suffix= 'message';

/*Variable de mensaje de error*/
var errMess= '<font style="color:red" size="0"><em>El formato de campo es inv&aacute;lido</em></font>';



var nbsp = 160;		// non-breaking space char
var node_text = 3;	// DOM text node-type
var emptyString = /^\s*$/ ;
var global_valfield;	// retain valfield for timer thread
var alertColor=  '#FFF0F0';//'#FF9966';//'#FFE0DF'; color con el que se pintan los inputs cuando hay un problema.




/*******************************************************FUNCION validate()**********************************************************/
/*
la funcion chequea que no haya ningun campo con un error, para esto agarra todos los input y se fija si tienen un color diferente de vacio

EJEMPLO DE USO:

<form onSubmit="validate()"/>
*/


function validate() {
	
	var errors= false;
	var elem= document.getElementsByTagName('input');
	
	for(var i= 0 ; i < elem.length && !errors ; i++) {
		if(elem[i].type != "hidden") {
			
			//simulo el comportamiento del ingreso al campo para que 
			//se active la validacion. Solo funciona en opera y firefox, que raro!.
			elem[i].style.backgroundColor= 'white';
			elem[i].focus();
			elem[i].blur();
			
			if(elem[i].style.backgroundColor != 'white') {
				errors= true;
			}
		}
	}
	if(errors== true) {
		alert('Por favor complete en primer lugar los campos que lo requieren de la forma valida');
		return false;
	}
	return true;
}





/*******************************************************FUNCION renew(id)**********************************************************/
/*
Restaura los valores iniciales de estilo de un INPUT (es decir, cuando hubo un error anteriormente se cambio el estilo del input
cuando vuelvo se restauran los parametros visuales a normal

EJEMPLO DE USO:

<input type=text id="hola" onFocus="renew(this.id);"/>
*/


function renew(ide) {
	var elem= document.getElementById(ide);
	 
	//diferencia el caso de si llama un elemento cualquier y si llama alguno que es hora o minutos.
	if(document.getElementById(ide+suffix))
	{
		var divElem= document.getElementById(ide+suffix);
	//eso ocurre porque en el generador de ABMS si tengo un datetime entonces tengo tres campos con id, idhh y idmm y un solo div de mensaje
	} else {
		var len= ide.length - 2;
		var divId= ide.substring(0,len);
		var divElem= document.getElementById(divId+suffix);
	}//if-else
	
	elem.style.backgroundColor= '';
	divElem.style.display= 'none';
}


/*******************************************************FUNCION isNull(id)**********************************************************/

/*
funcion que a partir de un id devuelve en un container el mensaje de error si el campo es vacio

EJEMPLO DE USO:

<input type=text id="hola" onBlur="isNull(this.id)"/>
<div id="holamessage"/>
*/

function isNull(ide) {
	
	var elem;
	var messElem;
	if((elem= document.getElementById(ide))) {
		if( (messElem= document.getElementById(ide+suffix)) && (validatePresent(elem) == false)) {
			mess='<font style="color:red" size="0"><em>Campo Requerido</em></font>';
			messElem.style.display= '';
			messElem.innerHTML= mess;
			elem.style.backgroundColor= alertColor;
		} else {
			messElem.style.display= 'none';
		}//if-else
		
	}//if
		
		return;
}

/*******************************************************FUNCION isNumeric(id)********************************************************/
/*
funcion que a partir de un id devuelve en un container el mensaje de error si el campo no es numerico

EJEMPLO DE USO:

<input type=text id="hola" onBlur="isNumeric(this.id)"/>
<div id="holamessage"/>
*/

function isNumeric(ide) {
	
	var elem;
	var messElem;
	
	if((elem= document.getElementById(ide))) {
		if( (messElem= document.getElementById(ide+suffix)) && (validateNumber(elem) == false)) {
			messElem.style.display= '';
			messElem.innerHTML= errMess;
			elem.style.backgroundColor= alertColor;
		} else {
				messElem.style.display= 'none';
		}//if-else
		
	}//if
		
		return;
}


/*******************************************************FUNCION isDecimal(id)********************************************************/
/*
funcion que a partir de un id devuelve en un container el mensaje de error si el campo no es decimal

EJEMPLO DE USO:

<input type=text id="hola" onBlur="isDecimal(this.id)"/>
<div id="holamessage"/>
*/

function isDecimal(ide) {
	
	var elem;
	var messElem;
	
	if((elem= document.getElementById(ide))) {
		if( (messElem= document.getElementById(ide+suffix)) && (validateDecimal(elem) == false)) {
			messElem.style.display= '';
			messElem.innerHTML= errMess;
			elem.style.backgroundColor= alertColor;
		} else {
				messElem.style.display= 'none';
		}//if-else
		
	}//if
		
		return;
}


/*******************************************************FUNCION isIP(id)********************************************************/
/*
funcion que a partir de un id devuelve en un container el mensaje de error si el campo no es un ip valido

EJEMPLO DE USO:

<input type=text id="hola" onBlur="isIP(this.id)"/>
<div id="holamessage"/>
*/

function isIP(ide) {
	
	var elem;
	var messElem;
	
	if((elem= document.getElementById(ide))) {
		if( (messElem= document.getElementById(ide+suffix)) && (validateIp(elem) == false)) {
			messElem.style.display= '';
			messElem.innerHTML= errMess;
			elem.style.backgroundColor= alertColor;
		} else {
				messElem.style.display= 'none';
		}//if-else
		
	}//if
		
		return;
}

/*******************************************************FUNCION isURL(id)********************************************************/
/*
funcion que a partir de un id devuelve en un container el mensaje de error si el campo no es un URL valido

EJEMPLO DE USO:

<input type=text id="hola" onBlur="isURL(this.id)"/>
<div id="holamessage"/>
*/

function isURL(ide) {
	
	var elem;
	var messElem;
	
	if((elem= document.getElementById(ide))) {
		if( (messElem= document.getElementById(ide+suffix)) && (validateUrl(elem) == false)) {
			messElem.style.display= '';
			messElem.innerHTML= errMess;
			elem.style.backgroundColor= alertColor;
		} else {
				messElem.style.display= 'none';
		}//if-else
		
	}//if
		
		return;
}

/*******************************************************FUNCION isURL(id)********************************************************/
/*
funcion que a partir de un id devuelve en un container el mensaje de error si el campo no es un mail valido

EJEMPLO DE USO:

<input type=text id="hola" onBlur="isURL(this.id)"/>
<div id="holamessage"/>
*/

function isMail(ide) {
	
	var elem;
	var messElem;
	
	if((elem= document.getElementById(ide))) {
		if( (messElem= document.getElementById(ide+suffix)) && (validateEmail(elem) == false)) {
			messElem.style.display= '';
			messElem.innerHTML= errMess;
			elem.style.backgroundColor= alertColor;
		} else {
				messElem.style.display= 'none';
		}//if-else
		
	}//if
		
		return;
}

/*******************************************************FUNCION isHour(id)********************************************************/
/*
funcion que a partir de un id devuelve en un container el mensaje de error si el campo no es hora

EJEMPLO DE USO:

<input type=text id="hola" onBlur="isHour(this.id)"/>
<div id="holamessage"/>
*/

function isHour(ide) {
	
	var elem;
	var messElem;
	var len= ide.length - 2;
	var divId= ide.substring(0,len);
	if((elem= document.getElementById(ide))) {
	
		if( (messElem= document.getElementById(divId+suffix)) && (validateHour(elem) == false)) {
			messElem.style.display= '';
			messElem.innerHTML= errMess;
			elem.style.backgroundColor= alertColor;
		} else {
				messElem.style.display= 'none';
		}//if-else
		
	}//if
		
		return;
}

/*******************************************************FUNCION isMinute(id)********************************************************/
/*
funcion que a partir de un id devuelve en un container el mensaje de error si el campo no es minuto

EJEMPLO DE USO:

<input type=text id="hola" onBlur="isNumeric(this.id)"/>
<div id="holamessage"/>
*/

function isMinute(ide) {
	
	var elem;
	var messElem;
	var len= ide.length - 2;
	var divId= ide.substring(0,len);

	if((elem= document.getElementById(ide))) {
	
		if( (messElem= document.getElementById(divId+suffix)) && (validateMinute(elem) == false)) {
			messElem.style.display= '';
			messElem.innerHTML= errMess;
			elem.style.backgroundColor= alertColor;
		} else {
				messElem.style.display= 'none';
		}//if-else
		
	}//if
		
		return;
}

/*******************************************************FUNCION isDate(id)********************************************************/
/*
funcion que a partir de un id devuelve en un container el mensaje de error si el campo no es minuto

EJEMPLO DE USO:

<input type=text id="hola" onBlur="isDate(this.id)"/>
<div id="holamessage"/>
*/

function isDate(ide) {
	
	var elem;
	var messElem;
	
	if((elem= document.getElementById(ide))) {
	
		if( (messElem= document.getElementById(ide+suffix)) && (validateDate(elem) == false)) {
			messElem.style.display= '';
			messElem.innerHTML= errMess;
			elem.style.backgroundColor= alertColor;
		} else {
				messElem.style.display= 'none';
		}//if-else
		
	}//if
		
		return;
}


/***********************************************************************************************************************************/

function trim(str) {
	return str.replace(/^\s+|\s+$/g, '');
}

function validatePresent(objectItemForm) {
	//alert(objectItemForm.value);
	objectItemForm.value;
	if(emptyString.test(objectItemForm.value)) {
		return false;
	}//if
	//alert('a'+srtAux+'a');
	return true;
}

function validateEmail(objectItemForm) {
	// Email raros (ver!!!)
	//var email = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/  ;  

	var tfld = trim(objectItemForm.value);
	var regexp = /^[^@]+@[^@.]+\.[^@]*\w\w$/  ;
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateUrl(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateTelefono(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /^\+?[0-9 ()-]+[0-9]$/
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateAge(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /^[0-9]{1,3}$/
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateDate(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /^([0-2]?[0-9]|3[01])-(0?[0-9]|1[0-2])-[0-9]{4}$/
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateTime(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /^([1-9]|1[0-2]):[0-5]\d(:[0-5]\d(\.\d{1,3})?)?$/
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateHour(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /^(([0-1]?[0-9])|(2[0-4]))$/
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateMinute(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /^[0-5]?[0-9]$/
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateNumber(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /^[0-9]+$/
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateDecimal(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /^-?[0-9]+([\.,]?[0-9]+)?$/
	if(!regexp.test(tfld)) return false;
	return true;
}

function validateIp(objectItemForm) {
	var tfld = trim(objectItemForm.value);
	var regexp = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
	if(!regexp.test(tfld)) return false;
	return true;
}
