/**
* Funciones de Validacion
*
* @author  Luis E. Cruz Campos
* @version 0.1.4
*/
/*
 * Historial:
 * LCC.12022003 Corregida isSelected para soportar input tipo "option"
 * LCC.16102002 Agregada funcion isURI
 * LCC.14082002 Agregadas la funcion isMoney(valor, esFormatoIngles)
 * LCC.17042002 Agregadas las funciones isSelected, MonthAdd, Repeat, LPad.
 * LCC.28012002 Agregada funcion isTime.
 * LCC.14012002 Agregadas funciones DayAdd, Str2Date, DateCmp.
 * LCC.10012002 Agregadas funciones isDouble, isAlpha.
 * LCC.04122001 Agregadas las funciones RTrim, LTrim, Trim, isModule11 (Reemplaza a isRUT).
 * LCC.22112001 Correción funcion email, no acepta "." en el usuario.
 */
// Empty: devuelve verdadero si value es vacio
function Empty(value) {
    var pattern=new RegExp("^[ ]*$");
    return value.match(pattern) || value.length==0;
}
// isInteger: devuelve verdero si value es un entero
function isInteger(value) {
    var pattern=new RegExp("^[0-9]+$");
    return value.match(pattern);
}
// isDouble: devuelve verdero si value es un double
function isDouble(value) {
    var pattern=new RegExp("^[0-9]+(\\.[0-9]+){0,1}$");
    return value.match(pattern);
}
// isMoney: devuelve verdadero si un valor es tipo moneda
function isMoney(value, isEnglish) {
	if (isEnglish) {
	    var pattern=new RegExp("^[0-9]+(\\.[0-9]+){0,1}$");
	    return value.match(pattern);
	} else {
	    var pattern=new RegExp("^[0-9]+(,[0-9]+){0,1}$");
	    return value.match(pattern);
	}
}
// isMail: devuelve verdadero si value es una direccion de correo valida
/*
function isMail(value) {
    var pattern=new RegExp("^([a-zA-Z0-9_\\-]+\\.{0,1})+@([a-zA-Z0-9_\\-]+\\.)+[a-zA-Z0-9_\\-]+$");
    //var pattern=new RegExp("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$");
    return value.match(pattern);
}
*/
function isMail(e) {
	ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.@-_QWERTYUIOPASDFGHJKLZXCVBNM";

	for(i=0; i < e.length ;i++){
		if(ok.indexOf(e.charAt(i))<0){ 
			return (false);
		}	
	} 

	if (document.images) {
		re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
		re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$/;
		if (!e.match(re) && e.match(re_two)) {
			return (-1);		
		} 
	}
}



// isWeb: devuelve verdadero si value es una direccion de web válida
function isWeb(value) {
	var pattern=new RegExp("^([a-z]*://){0,1}([a-zA-Z0-9_\/-]+\\.)+[a-zA-Z0-9_\\_\/-]+(:[0-9]+)*$");
	return value.match(pattern);
}
// isDate: devuelve verdadero si value es una fecha valida en formato dd/mm/aaaa
function isDate(value) {
    var pattern1=new RegExp("^(0[0-9]|[1-2][0-9]|30|31)/(0[13-9]|1[0-2])/[1-9][0-9][0-9][0-9]");
    var pattern2=new RegExp("^(0[0-9]|[1-2][0-9])/(0[0-9]|1[0-2])/[1-9][0-9][0-9][0-9]");
    if (value.match(pattern1) || value.match(pattern2)) {
        if (parseInt(value.substr(6,4))%4!=0 && parseInt(value.substr(3,2))==2 && parseInt(value.substr(0,2))==29) {
            return false;
        } else return true;
    } else return false;
}
// isAlpha: devuelve verdadero si la cadena contiene solo caracteres alfabeticos o espacios
function isAlpha(value) {
	var pattern=new RegExp("^[a-zA-Z\\s]+$");
    return value.match(pattern);
}
// isModule11: devuelve verdadero si value es valido para el modulo 11
function isModule11(value) {
    var pattern=new RegExp("^(([0-9]{1,2}\\.[0-9]{3}\\.[0-9]{3})|([0-9]{7,8}))\\-([0-9K])$", "i");
    var pattern_point=new RegExp("\\.", "g");
    var pattern_dv=new RegExp("([0-9]+)\\-([0-9K])", "i");
    value=Trim(value);
    if (value.match(pattern)) {
        value=value.replace(pattern_point, "");
        if (value.match(pattern_dv)) {
            number=new String(RegExp.$1);
            dv=new String(RegExp.$2);
            sum = 0;
            mul = 2;
            for (i = number.length - 1 ; i >= 0; i--) {
                sum += number.charAt(i) * mul;
                mul == 7 ? mul = 2:mul++;
            }
            rest = sum % 11;
            if (rest == 1) dvr = 'K';
            else if (rest == 0) dvr = '0';
            else  {
                dvr = 11-rest;
            }
            return dvr==dv.toUpperCase();
        }
    }
}
// LTrim: Quita espacios en blanco a la izquerda de una cadena
function LTrim(value) {
    var pattern=new RegExp("^\\s+", "g")
    return value.replace(pattern, "");
}
// RTrim: Quita espacios en blanco a la derecha de una cadena
function RTrim(value) {
    var pattern=new RegExp("\\s+$", "g")
    return value.replace(pattern, "");
}
// Trim: Quita espacios en blanco a la derecha y a la izquierda de una cadena
function Trim(value) {
    return RTrim(LTrim(value));
}
// Str2Date: Convierte un valor string en formato dd/mm/aaaa a fecha
function Str2Date(sDate) {
	if (!isDate(sDate)) return;
	sDate = new String(sDate);
	aDate = new Array();
	aDate = sDate.split('/');
	return new Date(aDate[2], aDate[1]-1, aDate[0], 0, 0,0 );
}
// DateCmp(A, B): Compara dos fechas devuelve 0=iguales, 1=A>B, -1=B>A
function DateCmp(dDateA, dDateB) {
	if (dDateA.getTime() == dDateB.getTime()) return 0;
	if (dDateA.getTime() > dDateB.getTime()) return 1;
	else return -1;
}
// DayAdd(dDate, iDays): Suma (o resta) dias a una fecha dada
function DayAdd(dDate, iDays) {
	dDate.setTime(dDate.getTime()+iDays*24*60*60*1000);
	return dDate;
}
// isTime: devuelve verdadero si value es una hora valida en formato hh:mm:ss
function isTime(value) {
    var pattern=new RegExp("^[ 0-2][0-9]:[0-5][0-9]$");
    return value.match(pattern);
}
// isSelected: devuelve verdadero si un select tiene elementos seleccionados (multiselect) o 
// si es la opcion seleccionada no es la primera (select normal)
function isSelected (obj) {
	if (obj.multiple) {
		// Es un Select Mutliple
		for (i=0;i<obj.options.length;i++) {
			if (obj.options[i].selected) return true;
		}	
		return false;
	} else if (obj.multiple==false) {	
		// Es un Select Simple
		return obj.selectedIndex!=0;
	} else {
		// Es un Option
		var i;
        for (i=0;i<obj.length;i++) {
            if (obj[i].checked) return true;
        }       
		return false;
	}
}	
// MonthAdd: nos permite sumar meses a una fecha 
// dDat es la fecha y iMonths la cantidad de meses a sumar
function MonthAdd(dDat, iMonths) {
	var dDate=new Date(dDat);
	var month=dDate.getMonth()+iMonths;
	if (month>11) {
		dDate.setYear(dDate.getYear()+parseInt((month+1)/12));
		month=(month+1)%12-1;
	}
	dDate.setMonth(month);
	return dDate;	  						   	     			   			
}
// Repeat: devuelve la cadena sValue repetida iLenght veces.   
function Repeat(sValue, iLenght) {
	var sText='';   			
	for(i=1;i<=iLenght;i++) {
		sText=sText+sValue;
	}   			   
	return sText;
}
// LPad, rellena por la izquierda svalue con el caracter sChar hasta un largo iLenght.
function LPad(sValue, sChar, iLenght) {
	sValue=String(sValue);
	sValue=Repeat(sChar, iLenght-sValue.length)+sValue;
	return sValue;   			   			   			
}
// isURI, devuelve verdadero si value es una uri valida, falso en caso contrario
function isURI(value) {	  
	var pattern=new RegExp("^([a-z]*://){0,1}([a-zA-Z0-9_\\-]+\\.)+[a-zA-Z0-9_\\-]+(:[0-9]+)*$");
	return value.match(pattern);
}
// isCode: devuelve verdadero si la cadena contiene solo caracteres alfabeticos o underline
function isCode(value) {
	var pattern=new RegExp("^[a-zA-Z_]+$");
    return value.match(pattern);
}
// unserializeArray: deserializa el parametro param y devuelve un arreglo hash 
function unserializeArray(param) {
	var i, j, text, value, aux;
	objects = param.split("|");
	var aObjects = new Array();
	for(i = 0; i < objects.length; i++) {
		vars = objects[i].split("&");
		var object = new Array();
		for (j = 0; j < vars.length; j++) {
			aux = vars[j].split("=");
			object[aux[0]] = aux[1];
		}
		aObjects[aObjects.length] = object;
	}
	return aObjects;
}
im_message_level = 1;
function im_confirm(message, level) {
	if (level <= im_message_level) {
		return confirm(message);
	} return true;
}
function func_pasa_a_fecha(Fecha){
    var partes = Fecha.split("/");
    var d = new Date(0);
    var ano = partes[2].split(" ");
    d.setFullYear(ano[0]);
    d.setMonth(partes[1]-1,partes[0]);
	 if (ano[1])
	 {
	        var hora = ano[1].split(":");
	        d.setHours(hora[0],hora[1]);
	 }
    return d.valueOf();
}
//funcion que compara dos fechas a < b = -1; b < a 1; a=b 0;
function func_compara_fechas(Fecha_i,Fecha_f){
    var n1=func_pasa_a_fecha(Fecha_i);
    var n2=func_pasa_a_fecha(Fecha_f);
    if (n1 < n2)
    return -1;
    if (n2 < n1)
    return 1;
    return 0;
}
/********************************************/
/*CHECKEA EL LARGO DE TEXTO DE UN TEXTAREA  */
/* Param Entrada                            */
/* objAreaTexto = Control Textarea          */
/* intMax = Maximo de Caracteres            */
/* Texto = Nombre del campo                 */
/********************************************/
function fncLargoTexto(objAreaTexto,intMax,Texto)
{
    var strPaso,intLargo
    
    strPaso		= objAreaTexto.value;
    intLargo	= strPaso.length+1;
    
    if (intLargo >= intMax)
    {
        alert("!no se pueden ingresar más de "+intMax+" caracteres en el campo " + Texto + "!");
        return false;
    }
    return true;
}
/********************************************/
/*CHECKEA EL LARGO DE TEXTO DE UN TEXTAREA  */
/* Param Entrada                            */
/* objAreaTexto = Control Textarea          */
/* intMax = Maximo de Caracteres            */
/* Devuelve True si excede intMax           */
/********************************************/
function fncBooleanLargoTexto(objAreaTexto,intMax)
{
    var strPaso,intLargo
    
    strPaso		= objAreaTexto.value;
    intLargo	= strPaso.length+1;
    
    if (intLargo >= intMax)
    {
        return true;
    }
    return false;
}
function TestFileType( fileName, fileTypes )
{
	if (!fileName) return;
	dots = fileName.split(".")
	fileType = "." + dots[dots.length-1].toLowerCase();
	if (fileTypes.join(".").indexOf(fileType) != -1)
		return  true;
	else
	{
		alert("Solo suba archivos de tipo: \n\n" + (fileTypes.join(" .")) + "\n\nSeleccione un nuevo archivo y reintente.");
		return false;
	}
}
//busca un valor dentro de un combo.

function BuscaCombo (Obj,Valor)

{
    var i;    

    for (i=0;i<=Obj.options.length-1;i++)

    {    

        if (Obj.options[i].value == Valor)

        {

            Obj.selectedIndex = i;

            break;

        } 

    }        

}

/***************************************************/
/*permite el ingreso de Números y otros caracteres */
/***************************************************/
function fncFiltraCaracterBusqueda() {
    //alert(event.keyCode);
    if ((event.keyCode >= 96) && (event.keyCode <= 123)) {
        //event.keyCode = event.keyCode - 32
        event.returnValue=true
    }
    else if (   ((event.keyCode >= 65) && (event.keyCode <= 90)) || 
                ((event.keyCode >= 48) && (event.keyCode <= 57)) ||
                (event.keyCode == 32    ||  // Blanco
                 event.keyCode == 33    ||  // !
                 event.keyCode == 35    ||  // #
                 event.keyCode == 40    ||  // (
                 event.keyCode == 41    ||  // )
                 event.keyCode == 42    ||  // *
                 event.keyCode == 43    ||  // +
                 event.keyCode == 44    ||  // ,
                 event.keyCode == 45    ||  // -
                 event.keyCode == 46    ||  // .
                 event.keyCode == 58    ||  // :
                 event.keyCode == 59    ||  // ;
                 event.keyCode == 61    ||  // =
                 event.keyCode == 63    ||  // ?
                 event.keyCode == 64    ||  // @
                 event.keyCode == 91    ||  // [
                 event.keyCode == 93    ||  // ]
                 event.keyCode == 95        // _
            ))  {
            event.returnValue=true
    }
    else if (event.keyCode == 92 || event.keyCode == 13) {
        event.returnValue=true
    }
    else
        event.returnValue = false
}
