﻿/*===============================================================
 * Constantes Globales
 *==============================================================*/
var ALFANUMERICOSINESPACIOS = /(^([a-z]|[A-Z]|[0-9])+)$/;
var ALFANUMERICO_ESPANIOL   = /^([a-z]|[A-Z]|\xD1|\xDC|\xF1|\xFC|\s|\.|-|[0-9])+$/;
var NOMBRE                  = /^([a-z]|[A-Z]|\xD1|\xDC|\xF1|\xFC|\s|\.|-)+|^$/;
var NUMERICO                = /[1234567890]/;
var NUMERICO_PUNTO          = /(^([0-9]|\.|\xD|\xA)+)$/;     
var NUMERICO_DOSPUNTOS      = /(^([0-9]|\:|\xD|\xA)+)$/;     
var NUMERICO_DECIMAL        = /^(|([0-9]{0,}(\\.([0-9]{0,})?)?))$/;  
var NUMERICO_FECHA          = /(^([0-9]|\/)+)$/;
var NUMERICO_MONEDA			= /(^\d*\.?\d*[0-9]+\d*$)|(^[0-9]+\d*\.\d*$)/;
var EMAIL                   = /(^[0-9a-zA-Z]+(?:[._][0-9a-zA-Z]+)*)@([0-9a-zA-Z]+(?:[._-][0-9a-zA-Z]+)*\.[0-9a-zA-Z]{2,3})$/;
                              ///^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(( [a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
var EMAIL_CAPTURA           = /(^([a-z]|[A-Z]|[0-9]|[._-]|@)+)/;
var EMAILS_CAPTURA          = /(^([a-z]|[A-Z]|[0-9]|[._-]|@|;)+)/;
var RFC                     = /^[A-Za-z]{4}\d{6}(?:\[A-Za-z\d]{3})?$;///^[a-zA-Z]{3,4}(\d{6})((\D|\d){3})?$/;
                             // /^([A-Z]{4})(\d\d)(0[1-9]|1[012])(0[1-9]|[12]\d|30|31)$/;
var HORA                    = /^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/;
var CONTRASENIASEGURA       = /(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$/;
var NUMTARJETACREDITO       = /^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$/;
var CP                      = /^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$/;
var NUMERICO_MONEDA         = /^(([0-9]+)|(([0-9]+)\.([0-9]{1,2})))$/;
var TARIFA_ANUAL            = /^(([0-9]+)|(([0-9]+)\.([0-9]{1,6})))$/;
var TECLA_NUMERO_DEC        = /[0-9]|\./;
var TECLA_NUMERO_DEC_NEG    = /[0-9]|\.|-/;
var aMAYUSCULAS = 0;
var aMINUSCULAS = 1;
var prefijo = "";

/*===============================================================
 * Determina el Browser que se utiliza.
 *==============================================================*/
function validaIEBrowser(){
	if (!(navigator.appName == 'Netscape')  && !(navigator.appName == 'Opera') && !(navigator.appName == 'Safari'))
		return true;
	else
		return false;
}

/**
*	Aï¿½adimos al onLoad del BODY la funcion eventosAutomaticos(), que se encargara de aï¿½adir a cada input los eventos correspondientes segun sus atributos.
*
* 	La variable cargaEventosAutomaticos se pondra a true cuando se ejecute por primera vez, de modo que evitamos cargar varias veces el mismo evento.
*/

var cargaEventosAutomaticos;
if (cargaEventosAutomaticos!=true){
	addEvento(window,'load',eventosAutomaticos, true);
	cargaEventosAutomaticos = true;	
}

/*===============================================================
 * Convierte un caracter a Mayusculas o Minusculas.
 * Constantes Globales Auxiliares:
 *	    aMAYUSCULAS = 0;
 *      aMINUSCULAS = 1;
 *==============================================================*/
function Convert(Evento, Convertir){
	if (validaIEBrowser())
		ConvertIE(Evento, Convertir); // evento onKeyPress
	else
		ConvertMZ(Evento, Convertir); // evento onKeyUp
}

function ConvertMayusculas(control){
	
	if (validaIEBrowser())
		ConvertIE(event, aMAYUSCULAS); // evento onKeyPress
	else
		ConvertMZ(control, aMAYUSCULAS); // evento onKeyUp
}

function ConvertMinusculas(control){
	
	if (validaIEBrowser())
		ConvertIE(event, aMINUSCULAS); // evento onKeyPress
	else
		ConvertMZ(control, aMINUSCULAS); // evento onKeyUp
}

/*===============================================================
 * Convierte un caracter a Mayusculas o Minusculas en IE
 * Constantes Globales Auxiliares:
 *	    aMAYUSCULAS = 0;
 *      aMINUSCULAS = 1;
 *==============================================================*/
function ConvertIE(evento, convertir){
    var newKey;
    var bCambio = false;
    if (evento.keyCode)
        newKey = evento.keyCode;
    else
        newKey = evento.which;
    if ((convertir == aMAYUSCULAS) && ((newKey > 96) && (newKey < 123)) || (newKey == 225) || (newKey == 233) || (newKey == 237) ||  (newKey == 241) || (newKey == 243) || (newKey == 250) || (newKey == 252))
    {
		newKey -= 32;  //Convierte un caracter a Mayusculas.
		bCambio = true;
    }
	else if ((convertir == aMINUSCULAS) && ((newKey > 64) && (newKey < 91)) || (newKey == 193) || (newKey == 201) || (newKey == 205) || (newKey == 209) || (newKey == 211) || (newKey == 218) || (newKey == 220))
	{
		newKey += 32;  //Convierte un caracter a Minusculas.
		bCambio = true;
	}
    if(bCambio)
    {
	    if (evento.keyCode)
	        evento.keyCode = newKey;
	    else
	        evento.which = newKey;
    }
}

/*===============================================================
 * Convierte un caracter a Mayusculas o Minusculas en Mozilla
 * Constantes Globales Auxiliares:
 *	    aMAYUSCULAS = 0;
*       aMINUSCULAS = 1;
 *==============================================================*/
function ConvertMZ(control, convertir){
    if (control != null && control.value != null){
        if (convertir == aMAYUSCULAS)
            control.value = control.value.toUpperCase();
        else if (convertir == aMINUSCULAS)
            control.value = control.value.toLowerCase();
    }
}

/*===============================================================
* Valida la entrada de caracteres
* Constantes Globales Auxiliares:
*           ALFANUMERICOSINESPACIOS 		
*           ALFANUMERICO_ESPANIOL   		
*           NOMBRE                  		
*           NUMERICO                		
*           NUMERICO_PUNTO              	
*           NUMERICO_FECHAS         		
*==============================================================*/
function ValidaCaptura(aEvent, ExpReg){
    var newKey;
    var valida = true;
    // El "event.srcElement.id" de IE es equivalente a "event.target.id" de NS.
    // obtiene el numero de la tecla dependiendo del tipo de navegador (keycode o which)
    if (aEvent.keyCode)
    {
        newKey = aEvent.keyCode;
    }
    else
    {
        newKey = aEvent.which;
    }
    // Valida el caracter que se esta ingresando 
    if (validaIEBrowser())
        valida = validaCapturaIE(newKey, ExpReg);
    else
        valida = validaCapturaMZ(newKey, ExpReg);
    

    // Si no es valido, cancela el evento
    if(!valida){
        // sentencias para cancelar el evento dependiendo del tipo de navegador
        if (aEvent.preventDefault){
	        aEvent.stopPropagation();
            aEvent.preventDefault();
        }
        else{
            aEvent.cancelBubble = true;
            aEvent.returnValue = false;
        }
    }
    return valida;
}

/*===============================================================
* Valida que unca cadena cumpla con la expresión regular.
*==============================================================*/
function ValidaCadenaExpresion(cadena, ExpReg){
    return ExpReg.test(cadena);
}

/*===============================================================
* Valida la entrada de caracteres en IE
*==============================================================*/
function validaCapturaIE(newKey, ExpReg){
    if(newKey != 13){
        var teclaReal = String.fromCharCode(newKey);
        if (!(ExpReg.test(teclaReal)))
            return false;
	}
	return true;
}

/*===============================================================
* Valida la entrada de caracteres en Mozilla
*==============================================================*/
function validaCapturaMZ(newKey, ExpReg){
    // Se ignoran las teclas de Enter, Izquierda, Derecha, Suprimir, Tabulador y BackSpace
    if(newKey != 13 && newKey != 39 && newKey != 9 && newKey != 8){
        var teclaReal = String.fromCharCode(newKey);
	    if (!(ExpReg.test(teclaReal)))
	        return false;
    }
    return true;
}

/*===============================================================
 * Habilita o Deshabilita Validadores de .Net
 *==============================================================*/
function validatorOnOff(validatorId, activar){
    var validator = document.getElementById(validatorId);
    if (validator != null)
        ValidatorEnable(validator, activar);
}

/***********************************************************/
//////////////////////////////////////////////////////////////////
///// CLASE PARA ACCEDER A LAS PROPIEDADES DE CONTROLES      /////
//////////////////////////////////////////////////////////////////
/***********************************************************/
function clsControl(control){
    // variables privadas
    var m_valor = "";
    var m_texto = "";
    var m_habilitado = true;
    var m_visible = true;
    var m_display = true;
    var m_checked = true;
    var m_indice = 0;

    // metodos publicos
    this.valor = function (asignar){
        switch(control.type){
            case undefined:
            case "undefined":
                if(control.tagName == "SPAN"){
                    if(asignar != undefined){
                        if(typeof(asignar) != "string" && typeof(asignar) != "number")
                            return alert("El tipo de dato no es vï¿½lido");                        
                        if (document.all)
                            control.innerText = asignar;                            
                        else
                            control.textContent = asignar;
                    }
                    if (document.all)
                        m_valor = control.innerText;
                    else
                        m_valor = control.textContent;
                }
                break;
            case "select-one":
                if(asignar != undefined){
                    if(typeof(asignar) != "string" && typeof(asignar) != "number")
                        return alert("El tipo de dato no es vï¿½lido");
                    for(i=0; i<control.options.length; i++){
                        if (control.options[i].value == asignar){
                            control.options[i].selected = true;
                            return;
                        }
                    }
                }
                m_valor = control.options[control.selectedIndex].value;
                break;
            default:
                if(asignar != undefined){
                    if(typeof(asignar) != "string" && typeof(asignar) != "number")
                        return alert("El tipo de dato no es vï¿½lido");
                    control.value = asignar;
                }
                m_valor = control.value;
                break;
        }
        return m_valor;
    }    
    this.texto = function (asignar){
        switch(control.type){
            case undefined:
            case "":
                if(control.tagName == "SPAN" || control.tagName == "A"){
                    if(asignar != undefined){
                        if(typeof(asignar) != "string" && typeof(asignar) != "number")
                            return alert("El tipo de dato no es vï¿½lido");
                        for(var j=0; j<control.childNodes.length; j++)
                            control.removeChild(control.childNodes[j]);
                        control.appendChild(document.createTextNode(asignar));
                    }
                    m_texto = "";
	                for(var i=0; i<control.childNodes.length; i++){
		                if(control.childNodes[i].nodeName == "#text")
			                m_texto += control.childNodes[i].nodeValue;
		                else m_texto += control.childNodes[i].firstChild.nodeValue;
	                }
                }
                break;
            case "select-one":
                if(asignar != undefined){
                    if(typeof(asignar) != "string" && typeof(asignar) != "number")
                        return alert("El tipo de dato no es vï¿½lido");
                    for(i=0; i<control.options.length; i++){
                        if (control.options[i].text == asignar){
                            control.options[i].selected = true;
                            return;
                        }
                    }
                }
                m_texto = control.options[control.selectedIndex].text;
                break;
            case "checkbox":
                if(asignar != undefined){
                    if(typeof(asignar) != "string" && typeof(asignar) != "number")
                        return alert("El tipo de dato no es vï¿½lido");
                    m_texto = control.textContent = asignar;
                }
                m_texto = control.innerText;
                break;
            default:
                if(asignar != undefined){
                    if(typeof(asignar) != "string" && typeof(asignar) != "number")
                        return alert("El tipo de dato no es vï¿½lido");
                    control.value = asignar;
                }
                m_texto = control.value;
                break;
        }
        return m_texto;
    }    
    this.selValor = function (posicion){
        switch(control.type){
            case "select-one":
                m_valor = this.valor();
                if(posicion != undefined){
                    if(isNaN(parseInt(posicion)))
                        return alert("El tipo de dato no es vï¿½lido");
                    var arrValor = new Array();
                    arrValor = m_valor.split(",");
                    m_valor = arrValor[posicion];
                }
                break;
            default:
                return alert("El control '" + control.id + "' no puede acceder a esta propiedad");
            break;
        }
        return m_valor;
    }
    this.selIndice = function (indice){
        switch(control.type){
            case "select-one":
                if(indice != undefined){
                    if(typeof(indice) != "number")
                        return alert("El tipo de dato no es vï¿½lido");
                    control.selectedIndex = indice;
                }
                m_indice = control.selectedIndex;
                break;
            default:
                return alert("El control '" + control.id + "' no puede acceder a esta propiedad");
            break;
        }
        return m_indice;
    }    
    this.habilitar = function (asignar){
        if(asignar != undefined){
            if(typeof(asignar) != "boolean")
                return alert("El tipo de dato no es vï¿½lido");
            control.disabled = !asignar;
        }
        m_habilitado = !control.disabled;
        return m_habilitado;
    }    
    this.visible = function (asignar){
        if(asignar != undefined){
            var mostrar = "";
            if(asignar == true)
                mostrar = "visible";
            else if(asignar == false)
                mostrar = "hidden";
            else return alert("El tipo de dato no es vï¿½lido");
            control.style.visibility = mostrar;
        }
        if(control.style.visibility == "hidden")
            m_visible = false;
        else m_visible = true;
        return m_visible;
    }    
    this.display = function (asignar){
        if(asignar != undefined){
            var mostrar = "";
            if(asignar == true)
                mostrar = "inline";
            else if(asignar == false)
                mostrar = "none";
            else return alert("El tipo de dato no es vï¿½lido");
            control.style.display = mostrar;
        }
        if(control.style.display == "none")
            m_display = false;
        else m_display = true;
        return m_display;
    }    
    this.checked = function (asignar){
        if(control.type == "checkbox" || control.type == "radio"){
            if(asignar != undefined){
                if(typeof(asignar) != "boolean")
                    return alert("El tipo de dato no es vï¿½lido");
                control.checked = asignar;
            }
            m_checked = control.checked;
        }
        else return alert("El control '" + control.id + "' no puede acceder a esta propiedad");
        return m_checked;
    }    
    this.focus = function (){
        if(control.focus != undefined)
            control.focus();
    }
}

/*===============================================================
 * Buscar un control por su id
 *==============================================================*/
function buscarCtrl(id){
    if (document.all != undefined){
        for(var j = 0; j< document.all.length ; j++){
            var elm = document.all[j];
            if (elm != null && elm != undefined){
                var ubicacion = elm.id.indexOf(id);
                if (ubicacion != -1 ){
                    if ((ubicacion + id.length) == elm.id.length){
                        var strId=elm.id;
                        return(strId);
                    }
                }
            }
        }
    }else{
        var documento = document.getElementsByTagName('*');
        for(var j = 0; j< documento.length ; j++){
            var elm = documento[j];
            if (elm != null && elm != undefined){
                var ubicacion = elm.id.indexOf(id);
                if (ubicacion != -1 ){
                    if ((ubicacion + id.length) == elm.id.length){
                        var strId=elm.id;
                        return(strId);
                    }
                }
            }        
        }    
    }
}

///////////////////////////////////////////////////////////
///// FUCNIONES PARA MODIFICAR LAS PROPIEDADES       //////
///////////////////////////////////////////////////////////

/*===============================================================
 * Obtiene y asigna el valor a un control
 *==============================================================*/
function valorCtrl(nombreCtrl, valor){
    var control = document.getElementById(buscarCtrl(nombreCtrl));
    if(control != null){
        try{
            var objControl = new clsControl(control);
            if(valor == undefined){
                var mascara = control.getAttribute('Masked');
                if (mascara != null && mascara != undefined && objControl.valor() == mascara)
                    return null;
                else
                    return objControl.valor();
            }else
                objControl.valor(valor);
        }catch(ex){
            alert(ex.name + " valorCtrl(): " + ex.description);
        }
    }
}

/*===============================================================
 * Obtiene y asigna el texto a un control
 *==============================================================*/
function textoCtrl(nombreCtrl, valor){
    var control = document.getElementById(buscarCtrl(nombreCtrl));
    if(control != null){
        try{
            var objControl = new clsControl(control);
            if(valor == undefined)
                return objControl.texto();
            else objControl.texto(valor);
        }catch(ex){
            alert(ex.name + " textoCtrl(): " + ex.description);
        }
    }
}

/*===============================================================
 * Obtiene uno de los valores de un combo mediante un indice
 *==============================================================*/
function selValorCtrl(nombreCtrl, valor){
    var control = document.getElementById(buscarCtrl(nombreCtrl));
    if(control != null){
        try{
            var objControl = new clsControl(control);
            return objControl.selValor(valor);
        }catch(ex){
            alert(ex.name + " selValorCtrl(): " + ex.description);
        }
    }
}

/*===============================================================
 * 
 *==============================================================*/
function selIndiceCtrl(nombreCtrl, indice){
    var control = document.getElementById(buscarCtrl(nombreCtrl));
    if(control != null){
        try{
            var objControl = new clsControl(control);
            if(indice == undefined)
                return objControl.selIndice();
            else objControl.selIndice(indice);
        }catch(ex){
            alert(ex.name + " selIndiceCtrl(): " + ex.description);
        }
    }
}

/*===============================================================
 * Habilita o inhabilita un control
 *==============================================================*/
function habilitarCtrl(nombreCtrl, valor){
    var control = document.getElementById(buscarCtrl(nombreCtrl));
    if(control != null){
        try{
            var objControl = new clsControl(control);
            if(valor == undefined)
                return objControl.habilitar();
            else objControl.habilitar(valor);
        }catch(ex){
            alert(ex.name + " habilitarCtrl(): " + ex.description);
        }
    }
}

/*===============================================================
 * Hace visible o invisible un control
 *==============================================================*/
function visibleCtrl(nombreCtrl, valor){
    var control = document.getElementById(buscarCtrl(nombreCtrl));
    if(control != null){
        try{
            var objControl = new clsControl(control);
            if(valor == undefined)
                return objControl.visible();
            else objControl.visible(valor);
        }catch(ex){
            alert(ex.name + " visibleCtrl(): " + ex.description);
        }
    }
}

/*===============================================================
 * Muestra u oculta un control
 *==============================================================*/
function displayCtrl(nombreCtrl, valor){
    var control = document.getElementById(buscarCtrl(nombreCtrl));
    if(control != null){
        try{
            var objControl = new clsControl(control);
            if(valor == undefined)
                return objControl.display();
            else objControl.display(valor);
        }catch(ex){
            alert(ex.name + " displayCtrl(): " + ex.description);
        }
    }
}

/*===============================================================
 * Selecciona o un checkbox o un radio
 *==============================================================*/
function checkCtrl(nombreCtrl, valor){
    var control = document.getElementById(buscarCtrl(nombreCtrl));
    if(control != null){
        try{
            var objControl = new clsControl(control);
            if(valor == undefined)
                return objControl.checked();
            else objControl.checked(valor);
        }catch(ex){
            alert(ex.name + " checkCtrl(): " + ex.description);
        }
    }
}

/*===============================================================
 * Manda el foco al control
 *==============================================================*/
function focusCtrl(nombreCtrl){
    setTimeout("window.document.getElementById(buscarCtrl('"+nombreCtrl+"')).focus();",0) //se usa el setTimeout para que lo reconozca Firefox
}
/////////////////////////////////////////////////////////////////////////////

/*===============================================================
 * Valida un Rango
 *==============================================================*/
function validaRango(nombreCtrl, valmin, valmax){
    var valor = parseInt(valorCtrl(nombreCtrl));
    if (valor != NaN){        
        if (valmax != null && valmin != null && (valor >= parseInt(valmin) && valor <= parseInt(valmax))){
                return true;
        }else{
            if (valmax != null && valmin == null && (valor <= parseInt(valmax)))
                    return true;               
            else if (valor >= parseInt(valmin))
                    return true;                           
        }
    }    
    return false;
}

/*===============================================================
 * Valida una Expresion Regular
 *==============================================================*/
function validaExpReg(nombrectrl, expreg){
    var valor = valorCtrl(nombrectrl.id);
    if (valor != null && valor != "" && valor != undefined){
        if (!(expreg.test(valor))){            
            alert("Valor No Valido");
            focusCtrl(nombrectrl.id);
            return false;            
        }
    }
}

/*===============================================================
 * Agrega un comportamiento a un elemento de la pantalla.
 *
 *  @param poElemento {object} Referencia al objeto al que se le aplicarï¿½ el comportamiento.
 *  @param psEvento {string} Evento a escuchar.(load,click,unload,change)
 *  @param poManejador {object} funciï¿½n que va manejar el evento(se puede declarar en lï¿½nea una funciï¿½n anï¿½nima)
 *  @param psBubble {string} Solo para W3C, poner true para IE 
 *
 *==============================================================*/
function addEvento(poElemento,psEvento,poManejador,psBubble){
    if (poManejador != undefined){
	    if(poElemento.addEventListener) //W3C
	 	    poElemento.addEventListener(psEvento,poManejador,psBubble);
	    else if(poElemento.attachEvent) //IE
		    poElemento.attachEvent( "on" + psEvento,poManejador);	    
	}
}

/*===============================================================
 * Elimina espacios de principio y final de una cadena.
 *==============================================================*/
function trim(poCadena){
  for(var x=0;x<poCadena.length;){
    if(poCadena.charAt(x) == " ")
      poCadena = poCadena.substring(x+1,poCadena.length);
    else
      break;    
  }    
  for(var x=poCadena.length-1;x>=0;x=poCadena.length-1){
    if(poCadena.charAt(x) == " ")
      poCadena = poCadena.substring(0,x);
    else
      break;
  }
  return(poCadena);
}

/*===============================================================
 * Obtiene la tecla presionada
 *==============================================================*/
function getKeyCode(E){
	if(window.event)
    	var cKeyCodeRecibido = window.event.keyCode;           
  	else if(E.which)
		var cKeyCodeRecibido = E.which;          
  	return cKeyCodeRecibido
}

/*===============================================================
 * Valida la captura de datos por tecla
 *==============================================================*/
function ValidaCapturaGral(e){
    var oSource = getSource(e);
	validarKeyGral(oSource,e);    
}

/*===============================================================
 * Valida la captura de datos 
 *==============================================================*/
function ValidaCapturaGralB(e){
    var oSource = getSource(e);
	validarGral(oSource,e);    
}

/*===============================================================
 * Valida la tecla
 *==============================================================*/
function validarKeyGral(campo,e){
    var expglobal;
    var type = campo.getAttribute('DataType');
    if (type != null && type != undefined){			       			        
        if (type == "NUMBER")
	        expglobal =  NUMERICO;
        else if (type == "DECIMAL")
            expglobal =  NUMERICO_PUNTO;
        else if (type == "ALPHANUMERIC")
            expglobal =  ALFANUMERICOSINESPACIOS;
        else if (type == "HOUR")
            expglobal =  NUMERICO_DOSPUNTOS;
        else if (type == "DATE")
            expglobal =  NUMERICO_FECHA;            
        else if (type == "ALPHABETICAL")
            expglobal =  NOMBRE;
    }
	var evtObj = window.event? event : e;
	var charEntrada = getKeyCode(evtObj);
	if (expglobal != null && expglobal != undefined){
        if(charEntrada != 13 && charEntrada != 39  && charEntrada != 9 && charEntrada != 8 && charEntrada != undefined){		
            if ((expglobal.test(String.fromCharCode(charEntrada)))){
	            return true;
	        }else{
                if (e.preventDefault){
	                e.stopPropagation();
                    e.preventDefault();
                }else{
                    e.cancelBubble = true;
                    e.returnValue = false;
                }	
            }	
        }
    }
}

/*===============================================================
 * Valida el dato del campo
 *==============================================================*/
function validarGral(campo,e){
    var typeReg = new RegExp(campo.getAttribute('ExpReg'));
	if (typeReg != null && typeReg != undefined){		
	    var valor = valorCtrl(campo.getAttribute('id'));
	    var mascara = campo.getAttribute('Masked');     
        var flagindicador = false;
        if (mascara != null && mascara != undefined && valor == mascara)
            flagindicador = true;		    
	    if (valor != undefined && valor != "" && valor != null && !flagindicador){
            if (!typeReg.test(valor)){            
                alert('El Formato es Incorrecto');
                valorCtrl(campo.getAttribute('id'),"");
                focusCtrl(campo.getAttribute('id'));      
           }
       }
       return true;
    }
}

/*===============================================================
 * Recorre la pagina aï¿½adiendo a cada campo los eventos correspondientes en funcion de sus atributos.
 *
 *	NOTA:
 *		Solo se ejecuta si el BODY tiene el atributo autoEventos="true".
 *
 *==============================================================*/
function eventosAutomaticos(){
    var eventogral;
	var vBody = window.document.getElementsByTagName('body');
	var vAutoEventos = vBody[0].getAttribute('eventos');
	var arrayInputs = window.document.getElementsByTagName('input');
    if (vAutoEventos == 'true'){
	    for (var i=0; i<arrayInputs.length; i++){
		    if (arrayInputs[i].type == 'text'){
			    var mays = arrayInputs[i].getAttribute('ToUpper');			    
			    if (mays){
			        if (validaIEBrowser())
 			            addEvento(arrayInputs[i],'keypress', function(){ Convert(event,aMAYUSCULAS); }, true);
				    else
				        addEvento(arrayInputs[i],'keyup', function(){ Convert(this,aMAYUSCULAS); }, false);
			    }
			    var minus = arrayInputs[i].getAttribute('ToLower');			    
			    if (minus){
			        if (validaIEBrowser())
 			            addEvento(arrayInputs[i],'keypress', function(){ Convert(event,aMINUSCULAS); }, true);
				    else
				        addEvento(arrayInputs[i],'keyup', function(){ Convert(this,aMINUSCULAS); }, false);
			    }			    
                var type = arrayInputs[i].getAttribute('DataType');
                var flag = false;
                if (type != null && type != undefined){			       			        
                    if (type == "NUMBER"){
	                    eventogral =  'keypress';
                    }else if (type == "DECIMAL"){
                        eventogral =  'keypress';
                    }else if (type == "ALPHANUMERIC"){
                        eventogral =  'keypress';
                    }else if (type == "DATE"){                        
                        addEvento(arrayInputs[i],'blur', ValidaFecha , validaIEBrowser()? true: false);
                        eventogral =  'keypress';                        
                    }else if (type == "HOUR"){
                        addEvento(arrayInputs[i],'blur', ValidaFecha , validaIEBrowser()? true: false);
                        eventogral =  'keypress';
                    }else if (type == "ALPHABETICAL"){
                        eventogral =  'keypress';
                    }
  	                addEvento(arrayInputs[i],eventogral, ValidaCapturaGral , validaIEBrowser()? true: false);  	                
			    }			    
			    var typeReg = arrayInputs[i].getAttribute('ExpReg');
			    if (typeReg != null && typeReg != undefined){	
			        eventogral = arrayInputs[i].getAttribute('Event');
			        addEvento(arrayInputs[i],eventogral, ValidaCapturaGralB , validaIEBrowser()? true: false);
			    }			    
                var valmin = arrayInputs[i].getAttribute('RangeMin');			    
	            var valmax = arrayInputs[i].getAttribute('RangeMax');	    			    
			    if ((valmin != null && valmin != undefined) || (valmax != null && valmax != undefined))
 			        addEvento(arrayInputs[i],'blur', ValidaRangoGral , validaIEBrowser()? true: false);			    
                var limpiar = arrayInputs[i].getAttribute('Clean');
                if (limpiar != null && limpiar != undefined)	                
                   addEvento(arrayInputs[i],'blur', LimpiarCampos , validaIEBrowser()? true: false);			    
                var lonmin = arrayInputs[i].getAttribute('SizeMin');
                if (lonmin != null && lonmin != undefined)	                
                   addEvento(arrayInputs[i],'blur', validaLongitudMin , validaIEBrowser()? true: false);			                                          
                var lonmax = arrayInputs[i].getAttribute('SizeMax');
                if (lonmax != null && lonmax != undefined)	                
                   addEvento(arrayInputs[i],'blur', validaLongitudMax , validaIEBrowser()? true: false);			    
                var mascara = arrayInputs[i].getAttribute('Masked');
                if (mascara != null && mascara != undefined){	                      
                    if (arrayInputs[i].value == null || arrayInputs[i].value == undefined || arrayInputs[i].value == '')
                        arrayInputs[i].value = mascara;
                    addEvento(arrayInputs[i],'blur', MostrarMascara , validaIEBrowser()? true: false);			       
                    addEvento(arrayInputs[i],'focus', OcultaMascara , validaIEBrowser()? true: false);			       
                }
		    }
	    }
    }
}

/*===============================================================
 * Oculta la mascara del Input
 *==============================================================*/
function OcultaMascara(e){
    var oSource = getSource(e);
    if (oSource.value != null && oSource.value != undefined && oSource.value != ''){
      if (oSource.value == oSource.getAttribute('Masked'))
            oSource.value = "";
   }
}

/*===============================================================
 * Muestra la mascara del Input
 *==============================================================*/
function MostrarMascara(e){
    var oSource = getSource(e);
    if (oSource.value == null  || oSource.value == undefined || oSource.value == '')
        oSource.value = oSource.getAttribute('Masked');
}

/*===============================================================
 * Valida el formato de la fecha
 *==============================================================*/
function ValidaFecha(e){
    var oSource = getSource(e);
    var formato = oSource.getAttribute('Format');
    if (oSource.value != null && oSource.value != undefined && oSource.value != '' && !TieneMascara(oSource)){
        if (!isDate(oSource.value,formato)){
            alert("El Formato de la Fecha/Hora No es Valido " + formato);
            focusCtrl(oSource.id);
        }
    }
}

/*===============================================================
 * Valida la longitud minima del Campo
 *==============================================================*/
function validaLongitudMin(e){
  var oSource = getSource(e);
  if(oSource.value.length < oSource.getAttribute('SizeMin') && oSource.value !='' && !TieneMascara(oSource)){    
     alert("La Longitud Minima para este Campo es "+ oSource.getAttribute('SizeMin'));
     oSource.value = "";
  }	
}

/*===============================================================
 * Valida la longitud maxima del Campo
 *==============================================================*/
function validaLongitudMax(e){
  var oSource = getSource(e);
  if(oSource.value.length > oSource.getAttribute('SizeMax') && oSource.value !='' && !TieneMascara(oSource)){    
     alert("La Longitud Maxima para este Campo es "+ oSource.getAttribute('SizeMax'));
     oSource.value = oSource.value.substring(0,oSource.getAttribute('SizeMax'));
  }	
}

/*===============================================================
 * Valida la longitud maxima del Campo
 *==============================================================*/
function valLongitudMaxCtr(control, size){
  var oSource = control;
  var lonmax = size;
  if (lonmax != null && lonmax != undefined)	
  {
	  if(oSource.value.length > size && oSource.value !=''){    
	     //alert("La Longitud Maxima para este Campo es "+ oSource.getAttribute('SizeMax'));
	     oSource.value = oSource.value.substring(0,size);
	  }	
  }
}


/*===============================================================
 * Limpia los Campos asociados
 *==============================================================*/
function LimpiarCampos(e){
    var oSource = getSource(e);
    var limpiar = oSource.getAttribute('Clean');
    var Campos = limpiar.split(',');
	for (var i=0; i<Campos.length; i++){
	   var Id = trim(Campos[i]);
	   //Aqui se valida que si tiene mascara, se usa la mascara en lugar de vacio	   
	   window.document.getElementById(Id).value = '';
	}                       
}

/*===============================================================
 * Obtiene el origen del evento
 *==============================================================*/
function getSource(E){
	var oSource;
	if (window.event)
		oSource = window.event.srcElement;
	else
		oSource = E.target;
	return oSource;
}

/*===============================================================
 * Valida el rango de un input 
 *==============================================================*/
function ValidaRangoGral(e){
    var oSource = getSource(e);
	var valmin = oSource.getAttribute('RangeMin');			    
	var valmax = oSource.getAttribute('RangeMax');	    
    if (valmin == undefined) valmin = null;
    if (valmax == undefined) valmax = null;
    if (valmin != null && valmax != null){    
        if (!validaRango(oSource.getAttribute('id'),valmin,valmax)){
            alert("El Valor No se encuentra dentro del Rango Permitido [" +  valmin + "-" + valmax +"]");
            textoCtrl(oSource.getAttribute('id'), valmin);
            focusCtrl(oSource.getAttribute('id'));             
        }
    }else if (valmax == null && valmin != null){
        if (!validaRango(oSource.getAttribute('id'),valmin)){
            alert("El Valor No se encuentra dentro del Valor Minimo Permitido [" +valmin +"]");
            textoCtrl(oSource.getAttribute('id'), valmin);
        }
    }else if (valmax != null && valmin == null){
        if (!validaRango(oSource.getAttribute('id'),valmin,valmax)){	
            alert("El Valor Excede del Valor Maximo Permitido ["+ valmax +"]");
            textoCtrl(oSource.getAttribute('id'), valmax);
        }
    }
}

/*===============================================================
 * Valida el formulario Completo - Datos Obligatorios
 *==============================================================*/
function validarFormulario(pFormulario){
    var obligatorio;    
    var flagoblig = false;    
    var sDataArray=MultiDimensionalArray(15,4);     
    for(var i = 0; i < pFormulario.length;i++){
				obligatorio = pFormulario[i].getAttribute('required');				
        var valor  = valorCtrl(pFormulario[i].id);
        //Se Valida lo de la Mascara
        var mascara = pFormulario[i].getAttribute('Masked');                
        if (mascara != null && mascara != undefined && valor == mascara)
            valor = null;
        if ((obligatorio == "true" || obligatorio == true) && (valor == null ||  valor == undefined || valor == '' || valor == ' ' )){
              pFormulario[i].style.backgroundColor = "#FFFF99";
              flagoblig = true;
        }else{
            if ((obligatorio == "true" || obligatorio == true) && (valor != null ||  valor != undefined || valor != '' || valor != ' ' ))
                pFormulario[i].style.backgroundColor = "#FFFFFF";
        }
        var grupo = pFormulario[i].getAttribute('Group');
        var indexgroup = 0;
        if (grupo != null && grupo != undefined){
            var newgroup = true;
            for(var ind = 0;ind < 15;ind++){
                if (sDataArray[ind][0] == grupo){
                    var num = pFormulario[i].getAttribute('N');
                    if (num != null && num != undefined)
                        sDataArray[ind][1] = num;
                    if (valor != null && valor != undefined)
                        sDataArray[ind][2] = sDataArray[ind][2] + 1;
                    var msg = pFormulario[i].getAttribute('MsgError');
                    if (msg != null && msg != undefined)
                        sDataArray[ind][3] = msg;
                    newgroup = false;
                    break;
                }
            }
            if (newgroup){
                sDataArray[indexgroup][0] = grupo;
                var num = pFormulario[i].getAttribute('N');
                if (num != null && num != undefined)
                    sDataArray[indexgroup][1] = num;
                if (valor != null && valor != undefined)
                    sDataArray[indexgroup][2] = sDataArray[indexgroup][2] + 1;
                var msg = pFormulario[i].getAttribute('MsgError');
                if (msg != null && msg != undefined)
                    sDataArray[indexgroup][3] = msg;
                indexgroup++; 
            }                    
        }
    }
    //Se validan los grupos Formados
    for(var ind = 0;ind < 15;ind++){
        if (sDataArray[ind][0] != 0 && sDataArray[ind][1] != null && sDataArray[ind][2] != null){
            if (parseInt(sDataArray[ind][1]) > parseInt(sDataArray[ind][2])){
                if (sDataArray[ind][3] != null && sDataArray[ind][3] != 0)
                    alert(sDataArray[ind][3]);
                else
                    alert('Debe de llenar al menos ' + sDataArray[ind][1] + ' de los campos obligatorios del Grupo ' + sDataArray[ind][0]);
                return false;
            }
        }
    }
    if (flagoblig){
        alert('Debe de llenar todos los campos obligatorios');
        return false;
    }
    return true;
}

/*===============================================================
 * Genera un Arreglo Multidimensional
 *==============================================================*/
function MultiDimensionalArray(iRows,iCols){ 
    var a = new Array(iRows); 
    for (var i=0; i < iRows; i++){ 
       a[i] = new Array(iCols); 
       for (var j=0; j < iCols; j++) 
           a[i][j] = 0; 
   } 
   return(a); 
}

/*===============================================================
 * Verifica si el campo tiene mascara
 *==============================================================*/
function TieneMascara(campo){
    var mascara = campo.getAttribute('Masked');                
    var flagindicador = false;
    if (mascara != null && mascara != undefined && campo.value == mascara)
        flagindicador = true;
    return flagindicador;
}

////////////////////////////////////////////////////////
//// PRUEBA
////////////////////////////////////////////////////////
function limitText(limitField, limitNum)
{
    if (limitField.value.length >= limitNum)
        limitField.value = limitField.value.substring(0, limitNum-1);
}

function valCaptura(ExpReg, evento)
{
	
	var evento;
	if(validaIEBrowser())
		evt = event;
	else
		evt = evento;
	
	//if(evento == null || evento == undefined) evento = event;
	ValidaCaptura(evt, eval(ExpReg));
}

var refreshGridsArr = new Array();
setTimeout(refreshGrids, 5000);
function agregarRefreshGrid(control)
{
	var encontrado = false;
    for(var i = 0; i < refreshGridsArr.length ; i++)
	  {
	  	if(refreshGridsArr[i] == control)
	  	{
	  		encontrado = true;
	  		break;
	  	}
	  }
	  if(!encontrado)
    		refreshGridsArr.push(control);
    alert('agregado : ' + encontrado);
}

function refreshGrids()
{
	for(var i = 0; i  < refreshGridsArr.length ; i++)
	{
		bb.command.fireEvent(bb.document.getElementById('btnRefreshGrids'), 'click', true, false);
		//bb.bjsf.sync(refreshGridsArr[i],'custom');
		//alert('hola' + i);
	}
	setTimeout(refreshGrids, 5000);
}

/*===============================================================
 * Función que manda por Post los parametros y te redirecciona.
 *==============================================================*/  
function relocate(page,params)
{
	  var body = document.body;
	  form=document.createElement('form'); 
	  form.method = 'POST'; 
	  form.action = page;
	  form.name = 'JavaScriptForm';
	  for (index in params)
	  {
			var input = document.createElement('input');
			input.type='hidden';
			input.name=index;
			input.id=index;
			input.value=params[index];
			form.appendChild(input);
	  }	  		  			  
	  body.appendChild(form);
	  form.submit();
}

function cambiaColor(ctrl1,color){
    if (document.getElementById(ctrl1) != null && document.getElementById(ctrl1) != undefined)
        document.getElementById(ctrl1).style.backgroundColor = color;   
}

function validaControl(valor){
    if (valor != undefined && valor != null && valor != "" && trim(valor) != ""){
        return true;        
    }
    return false;
}

function MM_ValidaNum(objCampo){
  if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode!= 32) && (event.keyCode != 45)) { event.returnValue = false; }
}
function MM_ValidaDec(objCampo){
  if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode!= 46)) { event.returnValue = false; }
}	
function tieneNumero(obj)
{
    if(obj.value.length>0){
  cad = obj.value.toString();
  var tieneNum=false;
  for (var i=0; i<cad.length; i++) 
  {
    var caracter = cad.charAt(i);
	if (caracter>="0" && caracter<="9")
	{ 
	    tieneNum=true;
	    break;
	}
	
   }
   if(tieneNum==false)
   {
       alert("El campo debe contener algún número.");
	   obj.valueOf="";
   }
   }
}

function ValidaCorreo(obj)
{
    if(obj.value.length>0){
    if(!ValidaCadenaExpresion(obj.value,EMAIL))
    {
       alert("No es un formato de correo electrónico válido.");
	   obj.value="";
   }
   }
}

function formatDate(obj){
   var cad = obj.value.toString();
   if(cad.length==2)
      obj.value = obj.value + "/";
   else if(cad.length==5)
      obj.value = obj.value + "/";

}

function ValidaFecha(fecha)
{
    if(fecha.value.length>0){
    var numDias;
    if (fecha != undefined && fecha.value != "" ){
        if (!/^\d{2}\/\d{2}\/\d{4}$/.test(fecha.value)){
            alert("El formato de fecha no es válido. (dd/mm/aaaa)");
            fecha.focus();
        }
        var dia  =  parseInt(fecha.value.substring(0,2),10);
        var mes  =  parseInt(fecha.value.substring(3,5),10);
        var anio =  parseInt(fecha.value.substring(6),10);
 
    switch(mes){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8: 
        case 10:
        case 12:
            numDias=31;
            break;
        case 4: case 6: case 9: case 11:
            numDias=30;
            break;
        case 2:
            if (comprobarSiBisisesto(anio)){ numDias=29 }else{ numDias=28};
            break;
        default:
            alert("El formato de fecha no es válido. (dd/mm/aaaa)");
            fecha.value="";
    }
 
        if (dia>numDias || dia==0){
            alert("El formato de fecha no es válido. (dd/mm/aaaa)");
            fecha.value="";
        }
        return true;
    }
}
}

function comprobarSiBisisesto(anio){
if ( ( anio % 100 != 0) && ((anio % 4 == 0) || (anio % 400 == 0))) {
    return true;
    }
else {
    return false;
    }
} 

function ValidaRFC(obj)
{
    if(obj.value.length>0)
    {
    var rfcVal = obj.value;
     if(rfcVal.length >= 10)
    {
    /*var añoNac = parseInt(rfcVal.substring(4,6),10);
    var mesNac = parseInt(rfcVal.substring(6,8),10);
    var diaNac = parseInt(rfcVal.substring(8,10),10);
   
    var act = new Date();
    var nac;
    var añoAct = parseInt(act.getFullYear().toString().substring(2,4),10);
    if(añoNac < añoAct)
    {
        añoNac = "20" + añoNac;
    }
    else
    {
        añoNac = "19" + añoNac;
    }

    nac = new Date(añoNac, mesNac, diaNac);
     var ONE_YEAR = 1000 * 60 * 60 * 24 * 365;
    if(((act - nac)/ONE_YEAR) > 18)
        return true;
    else
    {
        alert("Debes ser mayor de edad para continuar.");
        obj.value="";
    }*/
    }
    else
    {
        alert("Formato de RFC no válido.");
        obj.value="";
    }
    }
}

function minCarac(obj, min)
{
    if(obj.value.length< min)
    {
       alert("Se requieren al menos " + min + " caracteres.");
	   obj.value="";
   }
}

function ValidaRFC_Nac_Edad(objRFC,idNac, idEdad)
{
    
    var rfc = objRFC.value;
    var nac = document.getElementById(idNac).value;
    var edad = document.getElementById(idEdad).value;
    
    var añoRFC = rfc.substring(4,6);
    var mesRFC = rfc.substring(6,8);
    var diaRFC = rfc.substring(8,10);
    var añoNac = nac.substring(8,10);
    var mesNac = nac.substring(3,5);
    
    var diaNac = nac.substring(0,2);
    if(añoRFC!=añoNac || mesRFC!=mesNac || diaRFC!=diaNac)
    {
        alert("La fecha de nacimiento y el RFC no concuerdan.");
        objRFC.value="";
        
        var obj = document.getElementById(idNac);
        obj.value="";
        obj.focus();
        return false;
    }
    if(edad != "")
    {
    var act = new Date();
     var añoAct = parseInt(act.getFullYear().toString().substring(2,4),10);
     
    if(añoNac < añoAct)
    {
        añoNac = "20" + añoNac;
    }
    else
    {
        añoNac = "19" + añoNac;
    }
    
    var fechaNac = new Date(parseFloat(añoNac), parseFloat(mesNac)-1, parseFloat(diaNac));
    
   
    var ONE_YEAR = 1000 * 60 * 60 * 24 * 365;
   
    var edadC = parseInt((act - fechaNac)/ONE_YEAR);
    
    
    if(edadC==edad)
        return true;
    else
    {
         alert("El RFC y la edad cotizada no concuerdan.");
        objRFC.value="";
    }
    return false;
    }
    else return true;
}
 

