//####################################################
//###########  RUTINAS DE VALIDACION  ################
//####################################################
//
// USO :
//  Añadir en los campos TEXT y TEXTAREA que se desean 
//  validar, la etiqueta VER con las opciones.
//  Ejemplo :
//		<INPUT TYPE=TEXT NAME=dir VER='Direccion|NB|TEXT'>
//
//  Para comprobar los campos llamar a la función ValidarFormulario
//  con el nombre del formulario o nada si se quiere tomar el primer
//  formulario de la página.
//
//  Las opciones de verificación son :
//
//		'Nombre' : Nombre del campo (Siempre primera opcion)
//		NB	 : Campo no puede estar vacío (no se aceptan espacion tabuladores, saltos de linea)
//		NUM	 : El campo debe ser un número entero
//		NUM+	 : El campo debe ser un número entero (puede tener signo).
//		FLOAT	 : El campo debe ser un número.
//		FLOAT+	 : El campo debe ser un número (puede tener signo).
//		EMAIL	 : El campo debe ser un Email válido.
//		TEXT	 : El campo debe ser alfanumérico.
//		DATE	 : El campo debe ser una fecha (Con separador / ó -).




function LTrim(str){
	if (str==null){return null;}
	for(var i=0;str.charAt(i)==" ";i++);
	return str.substring(i,str.length);
	}

function RTrim(str){
	if (str==null){return null;}
	for(var i=str.length-1;str.charAt(i)==" ";i--);
	return str.substring(0,i+1);
	}

function Trim(str){return LTrim(RTrim(str));}

function LTrimAll(str) {
	if (str==null){return str;}
	for (var i=0; str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t"; i++);
	return str.substring(i,str.length);
	}

function RTrimAll(str) {
	if (str==null){return str;}
	for (var i=str.length-1; str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t"; i--);
	return str.substring(0,i+1);
	}

function TrimAll(str) {
	return LTrimAll(RTrimAll(str));
	}

function Limpia(stuff) {             
	stuff = stuff.replace(/&/g, '')
	stuff = stuff.replace(/'/g, '')
	stuff = stuff.replace(/"/g, '')
	stuff = stuff.replace(/</g, '')
	stuff = stuff.replace(/>/g, '')
	  return(stuff)
	}

function isNull(val){return(val==null);}

function isBlank(val){
	if(val==null){return true;}
	for(var i=0;i<val.length;i++) {
		if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}
		}
	return true;
	}

//***************** NUMEROS ****************

function isInteger(s)		{ return /^\d+$/.test(s) 	} 

function isSignedInteger(s) 	{ return /^(\+|\-)?\d+$/.test(s) } 

function convertComma(s) 	{ var re = /,/gi; return s.replace(re,"."); } 

function isFloat(s) 		{ return /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/.test(convertComma(s)) } 

function isSignedFloat(s) 	{ return /^(((\+|\-)?\d+(\.\d*)?)|((\+|\-)?(\d*\.)?\d+))$/.test(convertComma(s)) } 

function isAlphanumeric(s) 	{ return /^([a-zA-Z0-9]|\xE4|\xF6|\xFC|\xC4|\xD6|\xDC|\xDF|\s|\.)+$/.test(s) } 

/*function isEmail(s)		{ return /^([A-Za-z_]|\d)([A-Za-z_]|\d|\-|\.)+([A-Za-z_]|\d)\@([A-Za-z]|\d)([A-Za-z]|\d|\-)+([A-Za-z]|\d)\.([A-Za-z]){2,}$/.test(s) } */

function isEmail(s){   
    if (s.search(/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/) == -1){
     return false;
    }
    else{
     return true;
    }
}




function isDate(dateStr) 
	{
        var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{1,4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?

	if (matchArray == null) 
                return false;

	day = matchArray[1];
	month = matchArray[3];
	year = matchArray[5];

	if (month < 1 || month > 12) 
		{ 
		return false;
		}

	if (day < 1 || day > 31) 
		{
		return false;
		}

	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
		{
		return false;
		}

	if (month == 2) 
		{ 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) 
			{
			return false;
			}
		}
	return true;
	}


function ValidarFormulario(FormName) 
	{
	var Re;
	var par;
	var k=0;
	var xform = document.getElementById(FormName);
	var Ok = true;
	var Msg =" Por favor, compruebe los datos introducidos :        \n\n";
	var w=0;
	var Valor;
	var Nombre;

	if(xform==undefined)
		{
		xform = document.forms(0);
		}

	if(xform==undefined)
		{
		alert("No hay un formulario válido en la página.");
		return false;
		}

  	for (var i=0; i<xform.elements.length; i++) 
		{
		if ((xform.elements[i].type == "text")||(xform.elements[i].type == "textarea")||(xform.elements[i].type == "select-one")) 
			{
			Re = xform.elements[i].getAttribute('VER');
		    	if (Re && Re != "undefined")
				{
				k=0;
				par = Re.split("|");
				//alert('Num '+i + '(' + Re + ') = ' + par[0] + '-'+par[1]+'-'+par[2]);
				Nombre = par[k];
				k++;
				while(par[k]!=null)
					{
					if(par[k]=='NB')
						{
						Valor = TrimAll(Limpia(xform.elements[i].value));
		      				if (isBlank(Valor))
							{
								Ok = false,Msg=Msg+ '   - ' + Nombre +' no puede estar vacío.\n';
							}
						}
					if(par[k]=='NUM')
						{
						Valor = Limpia(xform.elements[i].value);
						if(Valor=='') Valor='0';
						if(!isInteger(Valor))
							Ok = false,Msg=Msg+ '   - ' + Nombre +' debe ser un número entero sin signo.\n';
						}

					if(par[k]=='NUM+')
						{
						Valor = Limpia(xform.elements[i].value);
						if(Valor=='') Valor='0';
						if(!isSignedInteger(Valor))
							Ok = false,Msg=Msg+ '   - ' + Nombre +' debe ser un número entero.\n';
						}
					if(par[k]=='FLOAT')
						{
						Valor = Limpia(xform.elements[i].value);
						if(Valor=='') Valor='0';
						if(!isFloat(Valor))
							Ok = false,Msg=Msg+ 'Campo ' + Nombre +' debe ser un número sin signo.\n';
						}
					if(par[k]=='FLOAT+')
						{
						Valor = Limpia(xform.elements[i].value);
						if(Valor=='') Valor='0';
						if(!isSignedFloat(Valor))
							Ok = false,Msg=Msg+ '   - ' + Nombre +' debe ser un número.\n';
						}

					if(par[k]=='EMAIL')
						{
						Valor = Limpia(xform.elements[i].value);
						if(!isEmail(Valor) && Valor!='')
							Ok = false,Msg=Msg+ '   - ' + Nombre +' debe ser un Email válido.\n';
						}

					if(par[k]=='TEXT')
						{
						Valor = Limpia(xform.elements[i].value);
						if(!isAlphanumeric(Valor) && Valor!='')
							Ok = false,Msg=Msg+ '   - ' + Nombre +' debe ser un texto.\n';
						}

					if(par[k]=='DATE')
						{
						Valor = Limpia(xform.elements[i].value);
						if(!isDate(Valor) && Valor!='')
							Ok = false,Msg=Msg+ '   - ' + Nombre +' debe ser una fecha válida.\n';
						}

					k++;
					}
    				}
			}
  		}
	if(Ok==false)
		alert(Msg);
  	return Ok;
	}


