// Validacion de Formularios
//Funcion para validar los formularios
function validarForm(frm)
{
//Valida los campos que tienen lang = "required, tipodedato" y muestra el mensaje combiando con title = "Descripcion del Campo" 
//lang = "required,date" title = "Descripcion del Campo"
 validate = true;
 frm = document.getElementById(frm);
 var mensaje = 'Por favor, verifique los siguientes errores:\t\n\t\n';

 for (i=0; i<frm.elements.length; i++)
 {
   lang = frm.elements[i].lang.split(',');
   frm.elements[i].style.backgroundColor="";

if (frm.elements[i].value != '' && lang.length > 1){
// Valida campos Email
   if (lang[1]=='email') 
     {

       if(!isEmail(frm.elements[i].value))
         {
			mensaje +=  "- Ingreso erroneo del campo: "+frm.elements[i].title+"\t\n";
			if(validate)
			{
				frm.elements [i].focus();
				validate = false; 
			}
			frm.elements[i].style.backgroundColor="#F4DFDF";
       }
     }     

// Valida campos numerico
   if (lang[1]=='numeric') 
     {
       var aux = frm.elements[i].value
	   frm.elements[i].value = aux.replace(",",".");
	   
	   if(!isNumeric(frm.elements[i].value))
         {
			 mensaje +=  "- Ingreso erroneo del campo: "+frm.elements[i].title+"\t\n";
			if(validate)
			{
				frm.elements[i].focus(); 
				validate = false; 
			}
		   frm.elements[i].style.backgroundColor="#F4DFDF";
       }
     }     
 
 
// Valida campos Alfanumericos
   if (lang[1]=='alfa') 
     {
	   if(!IsAlphanumeric(frm.elements[i].value))
         {
			 mensaje +=  "- Ingreso erroneo del campo: "+frm.elements[i].title+"\t\n";
			if(validate)
			{
				frm.elements[i].focus(); 
				validate = false; 
			}
		   frm.elements[i].style.backgroundColor="#F4DFDF";
       }
     }     
 
// Valida campos Fecha
   if (lang[1]=='date')
     {
       if(!isDate(frm.elements[i].value))
         {
			mensaje +=  "- Ingreso erroneo del campo: "+frm.elements[i].title+"\t\n";
			if(validate)
			{
				frm.elements[i].focus(); 
				validate = false; 
			}
			frm.elements[i].style.backgroundColor="#F4DFDF";
       }
     }     
  
// Valida campos Moneda con 2 decimales
   if (lang[1]=='money')
     {
       var aux = frm.elements[i].value
	   frm.elements[i].value = aux.replace(",",".");
       if(!isMoney(frm.elements[i].value))
         {
			mensaje +=  "- Ingreso erroneo del campo: "+frm.elements[i].title+"\t\n";
			if(validate)
			{
				frm.elements[i].focus(); 
				validate = false; 
			}
			frm.elements[i].style.backgroundColor="#F4DFDF";
       }
     } 
	 
   if (lang[1]=='free')
     {  
	   if(eval(lang[2]))
         {
			mensaje +=  "- Ingreso erroneo del campo: "+frm.elements[i].title+"\t\n";
			if(validate)
			{
				frm.elements[i].focus(); 
				validate = false; 
			}
			frm.elements[i].style.backgroundColor="#F4DFDF";
       }
     } 
	 
	 
 }
 
 
// Validar si el campo esta completo o no     
   if (lang[0]=='required' || lang[0]=='true' && ( frm.elements[i].value == '' || frm.elements[i].value == '0'))
     {
     mensaje +=  "- Ingrese el campo: " + frm.elements[i].title + "\t\n";
     if(validate)
         {
      frm.elements [i].focus();
      validate = false; 
     }
     frm.elements[i].style.backgroundColor="#F4DFDF";
   }
   
   
 }
 
 if (!validate)
  alert(mensaje);
 return validate;
 
} 
//--------------------------------------------------
function isNumeric(Expression)
{
	Expression = Expression.toLowerCase();
	RefString = "0123456789.-";

	if (Expression.length < 1) 
		return (false);

	for (var i = 0; i < Expression.length; i++) 
	{
		var ch = Expression.substr(i, 1)
		var a = RefString.indexOf(ch, 0)
		if (a == -1)
			return (false);
	}
	return(true);
}

function IsAlphanumeric(Expression)
{
	Expression = Expression.toLowerCase();
	RefString = "abcdefghijklmnopqrstuvwxyz0123456789áéíóúñ /()-_$*ü.,;:";

	if (Expression.length < 1) 
		return (false);

	for (var i = 0; i < Expression.length; i++) 
	{
		var ch = Expression.substr(i, 1)
		var a = RefString.indexOf(ch, 0)
		if (a == -1)
			return (false);
	}
	return(true);
}


function isEmail(emailStr) 
{
    var emailPat=/^(.+)@(.+)$/
    var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
    var validChars="\[^\\s" + specialChars + "\]" 
    var quotedUser="(\"[^\"]*\")"
    var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
    var atom=validChars + '+'
    var word="(" + atom + "|" + quotedUser + ")" 
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
    var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
    var matchArray=emailStr.match (emailPat)
    if (matchArray==null)     
        return false
    
    var user=matchArray[1]
    var domain=matchArray[2]
    
    if (user.match(userPat)==null) 
            return false
    
    var IPArray=domain.match(ipDomainPat)
    if (IPArray!=null) 
    {
        for (var i=1;i<=4;i++) 
            if (IPArray[i]>255) 
                return false
        return true
    } 
    
    var domainArray=domain.match(domainPat)
    if (domainArray==null)
            return false
    
    var atomPat=new RegExp(atom,"g")
    var domArr=domain.match(atomPat)
    var len= domArr.length
    if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) 
        return false
    
    if (len<2)
        return false
    
    return true;
}

//---VALIDA LA FECHA
function isDate(dateStr) {

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?
	if (matchArray == null) {
		return false;
	}
	month = matchArray[3]; // p@rse date into variables
	day = matchArray[1];
	year = matchArray[5];
	
	if (month < 1 || month > 12) { // check month range
		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) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) {
			return false;
		}
	}
	return true; // date is valid
}


//Valida que sea Numerico y que tenga como mucho 2 decimales
function isMoney (moneyStr) 
{
	if (isNumeric(moneyStr))
	{
		var moneyPat = /^\d+(\.\d{1,2})?$/;
		var matchArray = moneyStr.match(moneyPat); // is the format ok?
		if (matchArray == null) 
		{
			return false;
		}
		else
		{
			return true;
		}
		
	}
	else
	{
		return false;	
	}
}

//----Saca Espacion en blanco--
 function Trim(sText)
{
   
  return LTrim(RTrim(sText));
}

function LTrim(sText)
{
  var iLen = sText.length;
  var iPos = 0;
  for (var iIndex = 0; iIndex < iLen; iIndex++)
    if (sText.charAt(iIndex) == " ")
      iPos = iIndex + 1;
    else
      break;
  return sText.substring(iPos, iLen);
}

function RTrim(sText)
{
  var iEnd = sText.length;
  var iPos = iEnd;
  for (var iIndex = iEnd - 1; iIndex >= 0; iIndex--)
    if (sText.charAt(iIndex) == " ")
      iPos = iIndex;
    else
      break;
  return sText.substring(0, iPos);
}