// 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';
 var StyleImage = 'InputImage';
 
 for (i=0; i<frm.elements.length; i++)
 {
   lang = frm.elements[i].lang.split(';');
   frm.elements[i].style.backgroundColor="";
   frm.elements[i].className = Replace (frm.elements[i].className, " "+StyleImage, "")

if (isVisible(frm.elements[i])) 
{

	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";
				frm.elements[i].className = frm.elements[i].className + " " + StyleImage;
		   }
		 }     
	
	// 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";
				frm.elements[i].className = frm.elements[i].className + " " + StyleImage;
		   }
		 }     
	 
	 
	// 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";
				frm.elements[i].className = frm.elements[i].className + " " + StyleImage;
		   }
		 }     
	 
	// 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";
				frm.elements[i].className = frm.elements[i].className + " " + StyleImage;
		   }
		 }     
	  
	// 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";
				frm.elements[i].className = frm.elements[i].className + " " + StyleImage;
		   }
		 } 
		 
	// Valida campos CUIT/CUIL con 11 digitos
	   if (lang[1]=='cuitcuil')
		 {
	
			if(!isCUITCUIL(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";
				frm.elements[i].className = frm.elements[i].className + " " + StyleImage;
		   }
		 } 
		 
	   if (lang[1]=='expte')
		 {
	
			if(!isNroExpediente(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";
				frm.elements[i].className = frm.elements[i].className + " " + StyleImage;
		   }
		 } 
	 
	   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";
				frm.elements[i].className = frm.elements[i].className + " " + StyleImage;
		   }
		 } 
		 
		 
	 }
	 
	 
	// Validar si el campo esta completo o no     
	   if (lang[0]=='required' || lang[0]=='true' && ( Trim(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";
				frm.elements[i].className = frm.elements[i].className + " " + StyleImage;
	   }
}
	   
 }
 
 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;	
	}
}


//Valida el Campo de CUIT / CUIL y el digito verificador
function isCUITCUIL(varCUIT)
{
	if ((varCUIT.length=11)&&(!isNaN(varCUIT)))
	{
		var StrCuit=varCUIT;
		var a = 0;
		var x=1 ;
		var n=0;
		var m=0;
		var blnResultado=false;
		for(x = 0; x < 11; x++) 
		{    
			n = parseInt(StrCuit.substr(x,1));
			n = n + 48;
			switch(x+1)
				{
					case 1:
						m = 5;
						break;
					case 2:
						m = 4;
						break;
					case 3:
						m = 3;
						break;
					case 4:
						m = 2;
						break;
					case 5:
						m = 7;
						break;
					case 6:
						m = 6;
						break;
					case 7:
						m = 5;
						break;
					case 8:
						m = 4;
						break;
					case 9:
						m = 3;
						break;
					case 10:
						m = 2;
						break;
					case 11:
						m = 1;
						break;
				}					
			a = a + n * m;
		}
		a = a % 11;
		if (a == 3)
		{
		    blnResultado = true;
		}    
		else
		{
		    blnResultado = false;
		}
	}
	else
	{
		blnResultado = false;
	}
return blnResultado;
}

function isNroExpediente(Nro)
{
	var fecha = new Date();
	var patt1= new RegExp(/^(\d{1,5})(\/)(\d{2})?$/);
	if (patt1.test(Nro))
	{
		var anio = 	RegExp.$3; //tomo el año
		if ((anio == 96)||(anio == 97)||(anio == 98)||(anio == 99)||(eval(anio) + 2000 <= fecha.getYear()))
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}
//**************************************************************
function isNroIngreso(Nro)
{
	var fecha = new Date();
	var patt1= new RegExp(/^(\d{1,5})(\/)(\d{4})(\-\d{1,2})?$/);
	if (patt1.test(Nro))
	{
		var anio = 	RegExp.$3; //tomo el año
		if ((anio == 1996)||(anio == 1997)||(anio == 1998)||(anio == 1999)||(eval(anio) <= fecha.getYear()))
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	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);
}

function isVisible (elem)
{
    var Visible = true;
    ElemPar = elem.parentNode;

    while (ElemPar) {
    if ((ElemPar.tagName == "BODY") || (ElemPar.tagName == "HTML")) {
    break;
    }

    if ((ElemPar.style.display == "none") || (ElemPar.style.visibility == "hidden")) {
    Visible = false;
    break;
    }

    ElemPar = ElemPar.parentNode;
    }

    return Visible;

}
