/* para compatibilidades con firefox, ie, chrome y opera */
function getEventCodes(evento) {
   var keyCode = evento.keyCode;
   var charCode = typeof evento.charCode == "undefined" ? 0 : evento.charCode;

   if(typeof evento.charCode != "undefined") { /* firefox y chrome */
        if(evento.keyCode == evento.charCode) {
                keyCode = 0;
        }
   } else if(typeof evento.which == "undefined") { /* ie */
            charCode = evento.keyCode;
            keyCode = 0;
   } else { /* opera */
            charCode = evento.which && isCaracterEspecial(keyCode) ? 0 : keyCode;
            keyCode = charCode ? 0 : keyCode;
        }

   return {'charCode': charCode, 'keyCode': keyCode};
}

function isTeclaControl(keyCode) {
   return [0, 8, 9, 13, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46].indexOf(keyCode) != -1;
}

function isCaracterTelefono(charCode){
   return (charCode >= 48 && charCode <= 57) || charCode==40
        || charCode==41 || charCode==43 || charCode==45 || charCode == 0 || typeof charCode == "undefined";
}

function validarSoloNumerosTelefono(evento) {
  var c = getEventCodes(evento);

  return isTeclaControl(c.keyCode) && isCaracterTelefono(c.charCode);
}

/* valida una direccion de email */
function validarCorreo(direccion) {
   var nombre = '\\w([-_\\.]?\\w)*';
   var dominio = '\\w([-_\\.]?\\w)*';
   var extension = '\\.\\w{2,3}';
   var correo = nombre + '@' + dominio + extension;

   var expresionRegular = new RegExp ('^' + correo + '$');

   return expresionRegular.test (direccion);
}

var _efectoCampoObligatorio1 = null;
var _efectoCampoObligatorio2 = null;
function avisarCampoObligatorio(campo, msj) {
   var padre = $(campo.parentNode);
   campo = $(campo);
   if(msj) {
      alert(msj);
   }
   if(_efectoCampoObligatorio1) {
      _efectoCampoObligatorio1.cancel();
   }
   if(_efectoCampoObligatorio2) {
      _efectoCampoObligatorio2.cancel();
   }
   _efectoCampoObligatorio1 = new Effect.Highlight(padre, {
      afterFinish: function() {
        try {
            padre.setStyle({backgroundColor: ''});
            padre.style.backgroundColor = '';
        } catch(e) {}
        }
   });
   _efectoCampoObligatorio2 = new Effect.Pulsate(campo, {
     afterFinish: function() {
        campo.setOpacity(1);
     }
   });
   try {
     campo.focus();
     campo.scrollTo();
   } catch(e) {}
}

function cambiarPaisForm(f) {
   var cPais = $(f['pais']);
   var f1 = $('formcomboProvincia');
   f1.pais_id.value = cPais.value;

   var onError = function() {
       setCargando(false);
       mostrarMensaje('<span class="error">'+JS_ERROR_PETICION_AJAX+'</span>');
   }

   var onSuccess = function(r) {
     try {
       setCargando(false);
       if (r == 'error'){
         $('provinciaEsp').disabled = true;
         $('provinciaEsp').hide();
         $('provinciaExt').disabled = false;
         $('provinciaExt').show();
       }else{
         $('provinciaExt').disabled = true;
         $('provinciaExt').hide();
         $('provinciaEsp').disabled = false;
         $('provinciaEsp').show();
         $('provinciaEsp').update(r);
      }
    } catch(e) {
        onError();
    }
  }

  setMensajeVisible(false);
  setCargando(true, JS_CARGANDO_DATOS_PETICION_AJAX);

  var peticion = new JMLib.Ajax.Sender();
  peticion.setOnError(onError);
  peticion.setOnSuccess(onSuccess);
  peticion.setForm(f1);
  peticion.send();
}

function getProvinciaForm(f) {
  var c = f['provincia'];
  if(c) {
     return $(c[0]).visible() ? c[0].value : c[1].value;
  } else {
     return null;
  }
}

function validarCamposFormulario(f){
    var campos = ['nombre', 'apellidos', 'telefono', 'movil', 'email',
        'direccion', 'ciudad', 'pais', 'cp',
        'password', 'password2'];

    var msjsError = [];
    campos.each(function(c, i) {
            if(f[c]) {
                msjsError[i] = JS_FORM_RELLENE_CAMPO + f[c].title;
            } else {
                msjsError[i] = null;
            }
     });

     if(!comprobarCampos(f, campos, msjsError)) {
         return false;
     }
    return true;
}

