var defaultEmptyOK = false
var checkNiceness = true;
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyzáéíóúñü"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"
var whitespace = " \t\n\r";
var phoneChars = "()-+ ";
var fechaChars = "/";
var mMessage = "Error: no puede dejar este espacio vacio"
var pPrompt = "Error: ";
var pAlphanumeric = "ingrese un texto que contenga solo letras y/o numeros";
var pAlphabetic   = "ingrese un texto que contenga solo letras";
var pInteger = "Ingrese solo numeros enteros Ej: 4320";
var pNumber = "ingrese un numero";
var pPhoneNumber = "ingrese un número de teléfono";
var pFecha = "ingrese una fecha con formato dd/mm/aaaa";
var pEmail = "ingrese una dirección de correo electrónico válida";
var pName = "ingrese un texto que contenga solo letras, numeros o espacios";
var pNice = "no puede utilizar comillas simples << ' >>";
var pNicepunto = "no puede utilizar punto, debe utilizar comas para separar parte entera de decimal";
var pNice4 = "Solo puede utilizar numeros y coma para separar parte decimal, otro caracter no esta permitido ya que es un campo decimal.";
var pNice3 = "Utilice . (punto) para separar parte entera de decimal";
var pNice2 = "no puede utilizar el caracter Tongo << ^ >>";

function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}



function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        // si el caracter en que estoy no aparece en whitespace,
        // entonces retornar falso
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}


function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";

    // Buscar por el string, si el caracter no esta en "bag", 
    // agregarlo a returnString
    
    for (i = 0; i < s.length; i++)
    {   var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}


function stripCharsNotInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }

    return returnString;
}


function stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}

function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}

function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    return s.substring (i, s.length);
}

function isLetter (c)
{
    return( ( uppercaseLetters.indexOf( c ) != -1 ) ||
            ( lowercaseLetters.indexOf( c ) != -1 ) )
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if (!isDigit(c)) return false;
        } else { 
            if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}


function isNumber (s)
{   var i;
    var dotAppeared;
    dotAppeared = false;
    if (isEmpty(s)) 
       if (isNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isNumber.arguments[1] == true);
    
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if( i != 0 ) {
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c)) return false;
        } else { 
            if ( c == "." ) {
                if( !dotAppeared )
                    dotAppeared = true;
                else
                    return false;
            } else     
                if (!isDigit(c) && (c != "-") || (c == "+")) return false;
        }
    }
    return true;
}

function isAlphabetic (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    s = stripCharsInBag(s, whitespace);
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is letter.
        var c = s.charAt(i);

        if (!isLetter(c)){
	      	return false;
        } 
    }
    return true;
}

function isAlphanumeric (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }

    return true;
}


function isName (s)
{
    if (isEmpty(s)) 
       if (isName.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    
    return( isAlphanumeric( stripCharsInBag( s, whitespace ) ) );
}

function isPhoneNumber (s)
{   var modString;
    if (isEmpty(s)) 
       if (isPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isPhoneNumber.arguments[1] == true);
    modString = stripCharsInBag( s, phoneChars );
    return (isInteger(modString))
}

function isEmail (s)
{
    if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function isFechaIng (s)
{   var modString;
    if (isEmpty(s)) 
       if (isFechaIng.arguments.length == 1) return defaultEmptyOK;
       else return (isFechaIng.arguments[1] == true);
    modString = stripCharsInBag( s, fechaChars );
    return (isInteger(modString))
}

function isFecha(s){
	var Fecha= new String(s)
	var RealFecha= new Date()
	var Ano= new String(Fecha.substring(Fecha.lastIndexOf("/")+1,Fecha.length))
	var Mes= new String(Fecha.substring(Fecha.indexOf("/")+1,Fecha.lastIndexOf("/")))
	var Dia= new String(Fecha.substring(0,Fecha.indexOf("/")))
	var Resano
	
	if (isNaN(Ano) || Ano.length<4 || parseFloat(Ano)<1900){
        	alert('Año inválido')
		return false
	}
	if (isNaN(Mes) || parseFloat(Mes)<1 || parseFloat(Mes)>12){
		alert('Mes inválido')
		return false
	}
	Resano = parseFloat(Ano) % 4;
	if (isNaN(Dia) || parseInt(Dia)<1 || parseInt(Dia)>31){
		alert('Día inválido')
		return false
	}
	if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) {
		if (Resano == 0){
			if (Mes==2 && Dia > 29 || Dia>30) {
				alert('Día inválido')
				return false
			}		
		}
		else{
			if (Mes==2 && Dia > 28 || Dia>30) {
				alert('Día inválido')
				return false
			}
		}
	}
}


function isFecha2(dia1, mes1, ano1, texto2)
{
	var Dia= new String(dia1)
        var Mes= new String(mes1)
        var Ano= new String(ano1)
	var RealFecha= new Date()
	
	var Resano

	Resano = parseFloat(Ano) % 4;
	
	if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) {
		if (Resano == 0){
			if (Mes==2 && Dia > 29 || Dia>30) {
				alert("Día inválido para la Fecha de " + texto2 +"");
				return false;
			}
                        else
                         {
                         return true;
                         }
                        
		
		}
		else{
			if (Mes==2 && Dia > 28 || Dia>30) {
				alert("Día inválido para la Fecha de " + texto2 +"");
				return false;
			}
                      else
                         {
                         return true;
                         }
                        
                           
		}
            }
            else
                         {
                         return true;
                         }
             
	
  }


function isNice(s)
{
        var i = 1;
        var sLength = s.length;
        var b = 1;
        while(i<sLength) {
                if( (s.charAt(i) == "\"") || (s.charAt(i) == "'" ) ) b = 0;
                i++;
        }
        return b;
}

function statBar (s)
{   window.status = s
}

function warnEmpty (theField)
{   theField.focus()
    alert(mMessage)
    statBar(mMessage)
    return false
}

function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    statBar(pPrompt + s)
    return false
}

function comilla (theField)
{
if (!scanchar(theField.value,"'"))

       return warnInvalid(theField, pNice);
      
}

function punto(theField)
{
if (!scanchar(theField.value,"."))

       return warnInvalid(theField, pNicepunto);
      
}

function flotante (theField)
{
if (scanchar(theField.value,"1"))

       return warnInvalid(theField, pNice4);
      
}

function coma (theField)
{
if (!scanchar(theField.value,","))

       return warnInvalid(theField, pNice3);
      
}
 


function checkField (theField, theFunction, emptyOK, s)
{   
    var msg;
    if (checkField.arguments.length < 3) emptyOK = defaultEmptyOK;
    if (checkField.arguments.length == 4) {
        msg = s;
    } else {
        if( theFunction == isAlphabetic ) msg = pAlphabetic;
        if( theFunction == isAlphanumeric ) msg = pAlphanumeric;
        if( theFunction == isInteger ) msg = pInteger;
        if( theFunction == isNumber ) msg = pNumber;
        if( theFunction == isEmail ) msg = pEmail;
        if( theFunction == isPhoneNumber ) msg = pPhoneNumber;
        if( theFunction == isName ) msg = pName;
        if( theFunction == isFechaIng) msg = pFecha;
    }
    
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;

    if ((emptyOK == false) && (isEmpty(theField.value))) 
        return warnEmpty(theField);

    if ( checkNiceness && !isNice(theField.value))
        return warnInvalid(theField, pNice);

    if (theFunction(theField.value) == true) 
        return true;
    else
        return warnInvalid(theField,msg);

}

function Valida_check(theField, nulo, func ){
	if (nulo == true){
		if (isEmpty(theField.value)){
			alert("Debe Seleccionar al menos una Opción");
			
			return false;
		}
	}
}	
	
function ValRut(cRut)
{
if (cRut!="")
	{
	digi = cRut.substr(((cRut.length)-1),1);
	digi = digi.toUpperCase();
	cRut = cRut.substr(0,((cRut.length)-2));
	
	if (digi=="1" || digi=="2" || digi=="2" || digi=="3" || digi=="4" || digi=="5" || digi=="6" || digi=="7" || digi=="8" || digi=="9" || digi=="K" || digi=="0")
		{
	  	suma = 0;
  		mul  = 2;
  		dvi = 0;
  		dvr = 0;
		for (i= (cRut.length) ; i >= 0; i--)
		  	{
   			if (cRut.substr(i,1)!="")
   				{
   				suma =  suma + (cRut.substr(i,1) * mul);

				if (mul == 7)
	   				mul = 2;
   				else    
   					mul++;
				}
			}
		//-- End For
		
		res = suma % 11;
  		
  		if (res==1)
			dvr = 'K';
  		else if (res==0)
			dvr = '0';
  		else
  			{
			dvi = 11-res;
			dvr = dvi + "";
  			}

		if (digi==dvr)
			return true;
		else
			{
			alert("Rut es INVALIDO");
			}

		}	
	else
		{
		alert("El Digito Verificador es Incorrecto");
		}
	}
else
	{
	alert("No ha ingresado ningún Rut.");
	}	
return false;
}

	
function Valida(theField, nulo, func, texto ){
	if (nulo == true){
		if (isEmpty(theField.value)){
			alert("Debe Colocar " + texto + ".");
			theField.focus();
			return false;
		}
	}
	if (func == "alfa"){
		if ((nulo == false) && (isEmpty(theField.value))) 
			return true;
		else{
			if (isAlphabetic(theField.value) == false){
				alert (pAlphabetic);
				theField.focus();
				theField.select();
				return false
			}
			else
				return true
		}
	}
	if (func == "name"){
		if ((nulo == false) && (isEmpty(theField.value)))
			return true;
		else{
			if (isName(theField.value) == false){
				alert (pName);
				theField.focus();
				theField.select();
				return false;
			}
			else
				return true;
		}
	}
	if (func == "mail"){
		if ((nulo == false) && (isEmpty(theField.value))) 
			return true;
		else{
			if (isEmail(theField.value) == false){
				alert (pEmail);
				theField.focus();
				theField.select();
				return false;
			}
			else
				return true;
		}
	}
	if (func == "fono"){
		if ((nulo == false) && (isEmpty(theField.value))) 
			return true;
		else{
			if (isPhoneNumber(theField.value) == false){
				alert (pPhoneNumber);
				theField.focus();
				theField.select();
				return false;
			}
			else
				return true;
		}
	}
	if (func == "inte"){
		if ((nulo == false) && (isEmpty(theField.value))) 
			return true;
		else{
			if (isInteger(theField.value) == false){
				alert("Debe Ingresar números enteros en el campo "+texto+" ");
				theField.focus();
				theField.select();
				return false;
			}
			else
				return true;
		}
	}
	if (func == "fech"){
		if ((nulo == false) && (isEmpty(theField.value))) 
			return true;
		else{
			if (isFecha(theField.value) == false){
				theField.focus();
				theField.select();
				return false;
			}
			else
				return true;
		}
	}	
	if (func == ""){
		return true;
	}	
}

function scanchar(texto,caracter)
{

var res = texto.lastIndexOf(caracter);

if (res == "-1")
	{
	return true;
	}
}



function validacion(valor)
{
	
       cantidad = valor.value
            
       if (cantidad.length < 4000)
		{
		
	        return true;
		}
       else
		{
		alert("El Contenido excede de los 4000 Caracteres permitidos");
                return false;
		}
}