// función para checkear el Código Postal
function ChkZipCode()
{
    var i, campo, nombre, errors;
    errors = ChkZipCode.arguments[ChkZipCode.arguments.length - 1];
    for ( i = 0; i < (ChkZipCode.arguments.length - 1); i += 2)
    {
        campo = ChkZipCode.arguments[i];
        nombre = ChkZipCode.arguments[i+1];
        if (campo.value)
        {
            chrsValidos = "abcdefghijklmnopqrstuvwxyz0123456789";
            aux = campo.value.toLowerCase();
            flg = false
            for ( j = 0; j < chrsValidos.length; j++)
            	if ( aux.charAt(0) == chrsValidos.charAt(j) )
                    flg = true;
            if (!flg)
				errors += '- '+ nombre +': es inválido.\n';
        }
    }
    return errors;
}

// Función que chequea que el primer caracter del campo sea letra
// Utilizada para nombres de usuario y/o passwords
function ChkBeginChr()
{
    var i, campo, nombre, errors;
    errors = ChkBeginChr.arguments[ChkBeginChr.arguments.length - 1];
    for ( i = 0; i < (ChkBeginChr.arguments.length - 1); i += 2)
    {
        campo = ChkBeginChr.arguments[i];
        nombre = ChkBeginChr.arguments[i+1];
        if (campo.value)
        {
            chrsValidos = "abcdefghijklmnopqrstuvwxyz";
            aux = campo.value.toLowerCase();
            flg = false
            for ( j = 0; j < chrsValidos.length; j++)
            	if ( aux.charAt(0) == chrsValidos.charAt(j) )
                    flg = true;
            if (!flg)
				errors += '- '+ nombre +': el primer caracter debe ser una letra entre (a-z) o (A-Z).\n';
        }
    }
    return errors;
}

// Funcion que checkea que este seleccionada una opcion del combo 
function ChkCboNotNull()
{
    var i, campo, nombre, errors;
    errors = ChkCboNotNull.arguments[ChkCboNotNull.arguments.length - 1];
    for (i=0; i< ChkCboNotNull.arguments.length - 1; i += 2)
    {    	
        campo = ChkCboNotNull.arguments[i];
        nombre = ChkCboNotNull.arguments[i+1];
        if ( (campo.options[campo.selectedIndex].value == null) || 
            (campo.options[campo.selectedIndex].value == '') )
                errors += '- '+ nombre +': debe seleccionar una opción.\n';
    }
    return errors;
}

// función para checkear una fecha
// (debe usarse con CheckDay)
function ChkDate()
{
    var i, campo, p, nombre, errors, not_date;    
    not_date = 0;
    errors = ChkDate.arguments[ChkDate.arguments.length - 1];
    for ( i = 0; i < ChkDate.arguments.length - 1; i += 2)
    {
        campo = ChkDate.arguments[i];
        nombre = ChkDate.arguments[i+1];
        if (campo.value)
        {
            isplit = campo.value.indexOf('/');
            if (isplit == -1 || isplit == campo.value.length)
            not_date = 1;
            sDay = campo.value.substring(0, isplit);
            isplit = campo.value.indexOf('/', isplit + 1);
            if (isplit == -1 ||  (isplit + 1 )  == campo.value.length)
                not_date = 1;
            sMonth = campo.value.substring((sDay.length + 1), isplit);
            sYear = campo.value.substring(isplit + 1);
			if (isNaN(sYear) && (sYear.length != 2) && (sYear.length != 4)){
				not_date = 1;
			}else{
				if (sYear.length == 2){
					if (sYear < 35)
						sYear += 1900;
					else
						sYear += 2000;
				}else{
					if ((sYear <= 1890) || (sYear >= 2000))
						not_date = 1;
				}
			}
            if ( isNaN(sMonth) )
                not_date = 1;
            else if ( isNaN(sMonth, 1, 12) )
                not_date = 1;
            else if ( !CheckRange(sYear, 0, null) )
                not_date = 1;
            else if ( isNaN(sDay) )
                not_date = 1; 
            else if ( !CheckDay(sYear, sMonth, sDay) )
                not_date = 1;
            if (not_date)
                errors += '- '+ nombre + ': debe contener una fecha válida.\n';
        }
    }
    return errors;
}

// Funcion que checkea que el dia de una fecha sea valido
function CheckDay(checkYear, checkMonth, checkDay)
{
    maxDay = 31;
    if (checkMonth == 4 || checkMonth == 6 ||
        checkMonth == 9 || checkMonth == 11)
            maxDay = 30;
    else if (checkMonth == 2)
    {
        if (checkYear % 4 > 0)
            maxDay =28;
        else if (checkYear % 100 == 0 && checkYear % 400 > 0 )
            maxDay = 28;
        else
            maxDay = 29;
    }
    return CheckRange(checkDay, 1, maxDay);
}

// Comprueba que el campo sea un numero y este entre un determinado rango
function NumberRange(object_value, min_value, max_value)
{
    if (min_value != null)
        if (object_value < min_value)
            return false;
    if (max_value != null)
        if (object_value > max_value)
            return false;
    return true;
}

// Comprueba el rango de un campo
// (debe usarse con NumberRange)
function CheckRange(object_value, min_value, max_value)
{
    if (object_value.length == 0)
        return true;
    if (!CheckNumber(object_value))
        return false;
    else
        return (NumberRange((eval(object_value)), min_value, max_value));
    return true;
}

// Checkea que un numero sea valido
function CheckNumber(object_value)
{
    var start_format = " .+-0123456789";
    var number_format = " .0123456789";
    var check_char;
    var decimal = false;
    var trailing_blank = false;
    var digits = false;

    if (object_value.length == 0)
        return true;

    check_char = start_format.indexOf(object_value.charAt(0))
    if (check_char == 1)
        decimal = true;
    else if (check_char < 1)
        return false;
    for (var i = 1; i < object_value.length; i++)
    {
        check_char = number_format.indexOf(object_value.charAt(i))
        if (check_char < 0)
            return false;
	else if (check_char == 1)
	{
            if (decimal)
                return false;
            else
                decimal = true;
        }
        else if (check_char == 0)
        {
            if (decimal || digits)	
            trailing_blank = true;
        }
        else if (trailing_blank)
            return false;
        else
            digits = true;
    }	
    return true
}

// Funcion para checkear email
function ChkEmail()
{
    var i, nombre, campo, errors;
    errors = ChkEmail.arguments[ChkEmail.arguments.length - 1];
    for ( i = 0; i < ChkEmail.arguments.length - 1; i += 2)
    {
        campo = ChkEmail.arguments[i];
        nombre = ChkEmail.arguments[i+1];
        
        
        if (campo.value)
        {
            var tevaloresults = true;
            var valor = campo.value;
            var index = 0;
            var filter=/^.+@.+\..{2,3}$/
            var filter2=/\.\./            
            var rejected = false;
            var rejectedDomain=new Array();
            rejectedDomain[index]="";
            if (filter.test(valor))
            {
                var tempstring = valor.split("@");
                tempstring = tempstring[1].split(".")
                for ( i = 0; i < rejectedDomain.length; i++) 
                    if (tempstring[0]==rejectedDomain[i])
                        rejected=true
                if (rejected)
                {
                    errors +=  "Las siguientes direciones de email no son válidas:\n"
                    for ( i = 0; i < rejectedDomain.length; i++) 
                        errors += "\t" + rejectedDomain[i] + "\n";
                }
                if ( filter2.test(valor) )
                    errors += '- '+ nombre + ': debe contener un e-mail válido.\n';	
            }
            else
                errors += '- '+ nombre +' debe contener una dirección de e-mail válida.\n';
        }
    }
    return errors;
}

// Checkea que el campo sea de una determinada longitud
function ChkLength()
{ var i,field,message,errors,minLen;
	errors = ChkLength.arguments[ChkLength.arguments.length - 1];
		  for (i=0; i<(ChkLength.arguments.length - 1); i+=3)
		  {
			field = ChkLength.arguments[i];
			minLen = ChkLength.arguments[i+1];
			message = ChkLength.arguments[i+2];
					if (field.value)
					{ 	if (field.value.length < minLen)
						{
							errors += '- '+ message +': no debe tener menos que '+minLen+' caracteres.\n';
						}
					}
			}
	return errors;
} 

// Checkea que el campo sea de una determinada longitud máxima
function ChkLengthMax()
{ 
  var i,field,message,errors,maxLen;
	errors = ChkLengthMax.arguments[ChkLengthMax.arguments.length - 1];
		  for (i=0; i<(ChkLengthMax.arguments.length - 1); i+=3)
		  {
			field = ChkLengthMax.arguments[i];
			maxLen = ChkLengthMax.arguments[i+1];
			message = ChkLengthMax.arguments[i+2];
					if (field.value)
					{ 	if (field.value.length > maxLen)
						{
							errors += '- '+ message +' no debe tener más que '+maxLen+' caracteres.\n';
						}
					}
			}
	return errors;
} 

// Checkea que el campo no sea nulo
function ChkNotNull()
{
    var i, campo, nombre, errors;
    errors = ChkNotNull.arguments[ChkNotNull.arguments.length - 1];
    for (i = 0; i < ChkNotNull.arguments.length - 1; i += 2)
    {
        campo = ChkNotNull.arguments[i];
        nombre = ChkNotNull.arguments[i+1];
        if ( !campo.value )
            errors += '- '+ nombre +': no debe estar vacío.\n';
    }
    return errors;
}

// Checkea que el campo sea un numero
function ChkNumber()
{
    var i, campo, nombre, numero, errors;
    errors = ChkNumber.arguments[ChkNumber.arguments.length - 1];
    for ( i = 0; i < ChkNumber.arguments.length - 1; i += 2)
    {
        campo = ChkNumber.arguments[i];
        nombre = ChkNumber.arguments[i+1];
        if (campo.value)
        {
            numero = parseFloat( campo.value );
            if ( campo.value != '' + numero) 
                errors += '- '+ nombre +': debe ser numérico.\n';
        }
    }
    return errors;
}

// checkea los caracteres posibles para un password
function ChkPassword()
{
    var i, campo, nombre, errors;
    errors = ChkPassword.arguments[ChkPassword.arguments.length - 1];
    for ( i = 0; i < ChkPassword.arguments.length - 1; i += 2)
    {
        campo = ChkPassword.arguments[i];
        nombre = ChkPassword.arguments[i+1];
        chrsValidos = "_abcdefghijklmnopqrstuvwxyz0123456789";
        if (campo.value)
        {
            aux = campo.value.toLowerCase();
            for ( j = 0, flg = false; j < aux.length; j++, flg = false)
            {
            	for ( k = 0; k < chrsValidos.length; k++)
            	    if ( aux.charAt(j) == chrsValidos.charAt(k) )
            	    	flg = true;
            	if (!flg)
                {
                    errors += '- '+ nombre +': deberá contener sólo caracteres (a-z), (A-Z), (0-9) o underscore (_).\n';
                    break;
	        }
            }
        }
    }
    return errors;
}

// Checkea que los radio buttons esten seleccionados
function chkRadio(form) 
{
    var i, campo, nombre, errors, flag, x;
    
    errors = chkRadio.arguments[chkRadio.arguments.length - 1];
    for ( i = 0; i < chkRadio.arguments.length - 1; i += 2)
    {
        campo = chkRadio.arguments[i];
        nombre = chkRadio.arguments[i+1];
		flag = false;
		for (x = 0; x < campo.length; x++) 
			if (campo[x].checked)
				flag = true;
		if (!flag)
			 errors += '- '+ nombre +': debe seleccionar una opción.\n';
    }
    return errors;
}

// Checkea los caracteres posibles para el nombre de usuario
function ChkUserName()
{
    var i, campo, nombre, errors;
    errors = ChkUserName.arguments[ChkUserName.arguments.length - 1];
    for ( i = 0; i < ChkUserName.arguments.length - 1; i += 2)
    {
        campo = ChkUserName.arguments[i];
        nombre = ChkUserName.arguments[i+1];
        chrsValidos = "_abcdefghijklmnopqrstuvwxyz0123456789";
        if (campo.value)
        {            
            aux = campo.value.toLowerCase();
            for ( j = 0, flg = false; j < aux.length; j++, flg = false)
            {
            	for ( k = 0; k < chrsValidos.length; k++)
            	    if ( aux.charAt(j) == chrsValidos.charAt(k) )
            	    	flg = true;
            	if (!flg)
                {
                    errors += '- '+ nombre +': deberá contener sólo caracteres (a-z), (A-Z), (0-9) o underscore (_).\n';
                    break;
	        }
            }
        }
    }
    return errors;
}

// Checkea que el campo sea de texto conteniendo solamente letras
function ChkText()
{
    var i, campo, nombre, errors;
    errors = ChkText.arguments[ChkText.arguments.length - 1];
    for ( i = 0; i < ChkText.arguments.length - 1; i += 2)
    {
        campo = ChkText.arguments[i];
        nombre = ChkText.arguments[i+1];
        chrsValidos = "_abcdefghijklmnopqrstuvwxyz";
        if (campo.value)
        {            
            aux = campo.value.toLowerCase();
			aux=aux.split(' ').join('');
            for ( j=0,flg=false;j<aux.length;j++,flg=false)
            {
            	for (k=0;k<chrsValidos.length;k++)
            	    if (aux.charAt(j)==chrsValidos.charAt(k))
            	    	flg = true;
            	if (!flg)
                {
                    errors += '- '+ nombre +': deberá contener sólo caracteres (a-z), (A-Z).\n';
                    break;
	        }
            }
        }
    }
    return errors;
}

// Checkea que el campo sea de una determinada longitud
function ChkLengthRange()
{  var errors, err='', err2='',nada='';
   errors = ChkLengthRange.arguments[ChkLengthRange.arguments.length - 1];
   for ( i = 0; i < ChkLengthRange.arguments.length - 1; i += 4)
   { err += ChkLength( ChkLengthRange.arguments[i], ChkLengthRange.arguments[i+1], ChkLengthRange.arguments[i+3],nada);
     err2 += ChkLengthMax( ChkLengthRange.arguments[i], ChkLengthRange.arguments[i+2], ChkLengthRange.arguments[i+3],nada);
   }
   errors += err+err2;
   return errors;
}

// Checkea numeros de telefono
function ChkTel()
{
    var i, campo, nombre, errors;
    errors = ChkTel.arguments[ChkTel.arguments.length - 1];
    for ( i = 0; i < ChkTel.arguments.length - 1; i += 2)
    {
        campo = ChkTel.arguments[i];
        nombre = ChkTel.arguments[i+1];
        chrsValidos = "-0123456789";
		aux = campo.value.toLowerCase();
        if (campo.value)
        {            

            for ( j = 0, flg = false; j < aux.length; j++, flg = false)
            {
            	for ( k = 0; k < chrsValidos.length; k++)
            	    if ( aux.charAt(j) == chrsValidos.charAt(k) )
            	    	flg = true;
            	if (!flg)
                {
                    errors += '- '+ nombre +': deberá contener sólo números (0-9) + guión (-).\n';
                    break;
	        }
            }
        }
    }
    return errors;
}