/*
NOMBRE: validar.js
PROPÓSITO: biblioteca de funciones java script
        Contiene funciones de validación de datos, generación de ventanas...
ARGUMENTOS:
........................................................................................
NOTA DE USO :  Se carga en la cabecera de la página Web y se realizan llamadas a las funciones

HISTORIA DE CAMBIO:
19/07/2001:	Alfonso Cerro FINALIZADO.
*/
var p = new Array(1,2,4,8,5,10,9,7,3,6)

//comprueba si la cadena que se recibe esta en blanco (no se ha seleccionado ninguna opcion)
function vacio(cadena){
    //alert("CADENA: "+cadena+" selec: "+(cadena=="seleccione"));
   return ((cadena=="")||(cadena=="seleccione"));
}

//copia el valor del primer parametro en el segundo
function copiarValor(dest,orig){
    orig=dest;
}

// Valida cuentas bancarias
function DigBan(banco, oficina) {
  var digb = 0
  var digito = 0
  var b = new Array(0,0,0,0,0,0,0,0)
  var bt = banco + oficina
  for(i=0;i<8;i++)
    b[i] = bt.substr(i, 1)
  for(i=0;i<8;i++)
    digb = digb + b[i] * p[i + 2]
  digito = 11 - (digb % 11)
  if (digito == 11)
     digito = 0
  else if (digito == 10)
     digito = 1
  return digito
}

// Valida cuentas bancarias
function DigCta(cuenta) {
  var digb = 0
  var digc = 0
  var c = new Array(0,0,0,0,0,0,0,0,0,0)
  for (i=0;i<10;i++)
    c[i] = cuenta.substr(i, 1)
  for (i=0;i<10;i++)
    digb = digb + c[i]*p[i]
  digc = 11 - (digb % 11)
  if (digc == 11)
    digc = 0
  else if(digc == 10)
    digc = 1
  return digc
}

//comprueba que se halla introducido una matricula correcta
function validarCC(cadena){
  if (cadena == '') return false;
  strNumDir="^[0-9]+$";
  if (cadena.match(strNumDir)==null) return false;
  if (cadena.length != 20) return false;
  var ControlCode = DigBan(cadena.substring(0,4),cadena.substring(4,8)) + '' + DigCta(cadena.substring(10))
  return (ControlCode == cadena.substring(8,10))
}

//comprueba que se halla introducido una matricula correcta
function validarHora(cadena){
   if (cadena == '') return false
   strMatr="(^[0-9]{2}:[0-9]{2}$)";
   return (cadena.match(strMatr)!=null)
}


//comprueba que se halla introducido una matricula correcta
function validarMatr(cadena){
   if (cadena == '') return false
   strMatr="(^[a-z,A-Z]{1,2}[0-9]{4}[a-z,A-Z]{1,2}$)|(^[0-9]{4}[a-z,A-Z]{3}$)";
   return (cadena.match(strMatr)!=null)
}

//comprueba que se halla introducido un numero
function validarNum(cadena){
  if (cadena == '') return false
  strNumDir="^[0-9]+$";
  return (cadena.match(strNumDir)!=null)
}

//comprueba que se halla introducido un numero
function validarDoble(cadena){
  return !isNaN(cadena)
}

//comprueba que se halla introducido un numero
function validarTelf(cadena){
    if (cadena == '') return false
    strNumDir="^[0-9]{9,15}$";
    return (cadena.match(strNumDir)!=null)
}

//comprueba que se halla introducido un email correcto
function validarEmail(cadena){
    if (cadena == '') return false
    strNumDir="^([0-9]|[a-z,A-Z,_,\\-])+\\.*([0-9]|[a-z,A-Z,_,\\-])+@(([0-9]|[a-z,A-Z,_,\\-])+\\.[a-z,A-Z]+)+$";
    //alert(cadena.match(strNumDir)+" ES IGUAL "+(cadena.match(strNumDir)==null));
    return (cadena.match(strNumDir)!=null)
}


//comprueba que se halla introducido un codigo postal correcto
function validarCP(cadena){
    if (cadena == '') return false
    strNumDir="^[0-9]{5}$";
    return (cadena.match(strNumDir)!=null)
}

//convierte una entrada de texto a 'de solo lectura'
function noPermitirEscribir(campo){
    campo.readOnly=true;
}

//convierte una entrada de texto a 'de lectura/escritura'
function permitirEscribir(campo){
    campo.readOnly=false;
}

//desabilita un campo select
function habilitar(campo){
    campo.disabled=false;
}

//habilita un campo select
function deshabilitar(campo){
    campo.disabled=true;
}

//recarga la pagina si se recarga desde netscape
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);


//abre una ventana con las propiedades seleccionadas
function MM_openBrWindow(theURL,winName,features) { //v2.0
   win=window.open(theURL,winName,features);
   //win=window.open(theURL);
   return win;
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

//muestra u oculta las capas
function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}

//comprueba que la hora este en formato correcto
function horaCorrecta(cadena){
    // devuelve "true" si tiene un formato permitido: HH:MM, HH:M, H:MM, H:M, HH, HHMM
    // o si es nulo

    if (cadena == null)
    	return true
    else
    	if (cadena.length > 5)
            return  false

    var ok = true ;
    if (cadena != null && cadena.length >= 1 && cadena.length <= 5) {
        var hora = "" ;
        var min = "" ;
        pos = cadena.indexOf(":")
        if (cadena.indexOf(":") > 0) {
            hora = cadena.substring(0,pos) ;
            min  = cadena.substring(pos+1) ;
        } else {
            if (cadena.length == 2) {
                hora = cadena.substring(0,2) ;
                min  = "00" ;
            }
            else {
                if (cadena.length == 4) {
                    hora = cadena.substring(0,2) ;
                    min  = cadena.substring(2,4) ;
                }
                else
                    ok = false
            }
        }
        h = parseInt(hora,10) ;
        m = parseInt(min,10) ;
        if ( isNaN(h) || isNaN(m) )
            ok = false ;
        else {
            if (h > 23 || m > 59)
                ok = false ;
        }
    }
    return ok
}

//comprueba si un checkbox esta seleccionado
function validarCheck(check,datos){
    if (eval("document."+check+".checked")){
        //alert("CHECKED");
    }else{
        //alert("NO CHECKED");
        eval("document."+datos+".value=''")
    }
}

// funcion para actualizar formularios
function MM_Update(obj) {
	obj.form.MM_update.value = 'true'
	obj.form.submit()
}

/***************************************************************
* funcion de validacion general.
* Argumentos: (form,FieldArrayNotNul{'1,4,5,6'},
* booleanEval,booleanEval,booleanEval....)
* los dos primeros argumentos son obligatorios
****************************************************************/
function isFormValid() {
  var myform = arguments[0];
  var myTextFieldArray = arguments[1].split(',');
  for (var i=0; i<myTextFieldArray.length; i++) {
    if (myform.elements[parseInt(myTextFieldArray[i])].type == 'textarea' && myform.elements[parseInt(myTextFieldArray[i])].value == '') {
      alert('Campo ['+myform.elements[parseInt(myTextFieldArray[i])].name+'] no puede ser nulo.');
       myform.elements[parseInt(myTextFieldArray[i])].focus();
       return false;
    } else if (myform.elements[parseInt(myTextFieldArray[i])].type == 'text' && myform.elements[parseInt(myTextFieldArray[i])].value == '') {
      alert('Campo ['+myform.elements[parseInt(myTextFieldArray[i])].name+'] no puede ser nulo.');
       myform.elements[parseInt(myTextFieldArray[i])].focus();
       return false;
    } else if (myform.elements[parseInt(myTextFieldArray[i])].type == 'checkbox' && !myform.elements[parseInt(myTextFieldArray[i])].checked) {
      alert('Campo ['+myform.elements[parseInt(myTextFieldArray[i])].name+'] debe estar activado.');
       myform.elements[parseInt(myTextFieldArray[i])].focus();
       return false;
    } else if (myform.elements[parseInt(myTextFieldArray[i])].type == 'select-one' && myform.elements[parseInt(myTextFieldArray[i])].selectedIndex == 0) {
      alert('Campo ['+myform.elements[parseInt(myTextFieldArray[i])].name+'] debe tener una opcion seleccionada.');
       myform.elements[parseInt(myTextFieldArray[i])].focus();
       return false;
    }
  }
  if (arguments.length == 2) {
    return true;
  } else {
    for (var i=2; i<arguments.length; i++) {
      var regAt=/@/g;
      var regParam = /\[(\d+)\]/;
      var evaluator = arguments[i].replace(regAt,'myform.elements');
      if (!eval(evaluator)) {
          regParam.exec(evaluator);
          var index = parseInt(RegExp.$1);
          alert('Condicion erronea en campo ['+myform.elements[index].name+']');
          myform.elements[index].focus()
          return false;
      }
    }
  }
  return true;
}

/* funcion de pruebas */
function xisFormValid() {
  var myform = arguments[0];
  for (var i=0; i<myform.elements.length; i++) {
    if (myform.elements[i].type == 'text') {
      alert("Indice="+i+";nombre="+myform.elements[i].name+";textval="+myform.elements[i].value);
    } else if (myform.elements[i].type == 'textarea') {
      alert("Indice="+i+";nombre="+myform.elements[i].name+";textarea="+myform.elements[i].value);
    } else if (myform.elements[i].type == 'hidden') {
      alert("Indice="+i+";nombre="+myform.elements[i].name+";hiddenval="+myform.elements[i].value);
    } else if (myform.elements[i].type == 'checkbox' || myform.elements[i].type == 'radio') {
      alert("Indice="+i+";nombre="+myform.elements[i].name+";checkval="+myform.elements[i].checked);
    } else if (myform.elements[i].type == 'select-one') {
      alert("Indice="+i+";nombre="+myform.elements[i].name+";selIndex="+myform.elements[i].selectedIndex);
    }
  }
  return false;
}

