// Detector del navegador
// Ultimate client-side JavaScript client sniff. Version 3.03
// (C) Netscape Communications 1999-2001.  Permission granted to reuse and distribute.
// Revised 17 May 99 to add is_nav5up and is_ie5up (see below).
// Revised 20 Dec 00 to add is_gecko and change is_nav5up to is_nav6up
//                      also added support for IE5.5 Opera4&5 HotJava3 AOLTV
// Revised 22 Feb 01 to correct Javascript Detection for IE 5.x, Opera 4, 
//                      correct Opera 5 detection
//                      add support for winME and win2k
//                      synch with browser-type-oo.js
// Revised 26 Mar 01 to correct Opera detection
// Revised 02 Oct 01 to add IE6 detection

// Everything you always wanted to know about your JavaScript client
// but were afraid to ask. Creates "is_" variables indicating:
// (1) browser vendor:
//     is_nav, is_ie, is_opera, is_hotjava, is_webtv, is_TVNavigator, is_AOLTV
// (2) browser version number:
//     is_major (integer indicating major version number: 2, 3, 4 ...)
//     is_minor (float   indicating full  version number: 2.02, 3.01, 4.04 ...)
// (3) browser vendor AND major version number
//     is_nav2, is_nav3, is_nav4, is_nav4up, is_nav6, is_nav6up, is_gecko, is_ie3,
//     is_ie4, is_ie4up, is_ie5, is_ie5up, is_ie5_5, is_ie5_5up, is_ie6, is_ie6up, is_hotjava3, is_hotjava3up,
//     is_opera2, is_opera3, is_opera4, is_opera5, is_opera5up
// (4) JavaScript version number:
//     is_js (float indicating full JavaScript version number: 1, 1.1, 1.2 ...)
// (5) OS platform and version:
//     is_win, is_win16, is_win32, is_win31, is_win95, is_winnt, is_win98, is_winme, is_win2k
//     is_os2
//     is_mac, is_mac68k, is_macppc
//     is_unix
//     is_sun, is_sun4, is_sun5, is_suni86
//     is_irix, is_irix5, is_irix6
//     is_hpux, is_hpux9, is_hpux10
//     is_aix, is_aix1, is_aix2, is_aix3, is_aix4
//     is_linux, is_sco, is_unixware, is_mpras, is_reliant
//     is_dec, is_sinix, is_freebsd, is_bsd
//     is_vms
//
// See http://www.it97.de/JavaScript/JS_tutorial/bstat/navobj.html and
// http://www.it97.de/JavaScript/JS_tutorial/bstat/Browseraol.html
// for detailed lists of userAgent strings.
//
// Note: you don't want your Nav4 or IE4 code to "turn off" or
// stop working when new versions of browsers are released, so
// in conditional code forks, use is_ie5up ("IE 5.0 or greater") 
// is_opera5up ("Opera 5.0 or greater") instead of is_ie5 or is_opera5
// to check version in code which you want to work on future
// versions.

    // convert all characters to lowercase to simplify testing
    var agt=navigator.userAgent.toLowerCase();

    // *** BROWSER VERSION ***
    // Note: On IE5, these return 4, so use is_ie5up to detect IE5.
    var is_major = parseInt(navigator.appVersion);
    var is_minor = parseFloat(navigator.appVersion);

    // Note: Opera and WebTV spoof Navigator.  We do strict client detection.
    // If you want to allow spoofing, take out the tests for opera and webtv.
    var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
    var is_nav2 = (is_nav && (is_major == 2));
    var is_nav3 = (is_nav && (is_major == 3));
    var is_nav4 = (is_nav && (is_major == 4));
    var is_nav4up = (is_nav && (is_major >= 4));
    var is_navonly      = (is_nav && ((agt.indexOf(";nav") != -1) ||
                          (agt.indexOf("; nav") != -1)) );
    var is_nav6 = (is_nav && (is_major == 5));
    var is_nav6up = (is_nav && (is_major >= 5));
    var is_gecko = (agt.indexOf('gecko') != -1);


    var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    var is_ie3    = (is_ie && (is_major < 4));
    var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
    var is_ie4up  = (is_ie && (is_major >= 4));
    var is_ie5    = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );
    var is_ie5_5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.5") !=-1));
    var is_ie5up  = (is_ie && !is_ie3 && !is_ie4);
    var is_ie5_5up =(is_ie && !is_ie3 && !is_ie4 && !is_ie5);
    var is_ie6    = (is_ie && (is_major == 4) && (agt.indexOf("msie 6.")!=-1) );
    var is_ie6up  = (is_ie && !is_ie3 && !is_ie4 && !is_ie5 && !is_ie5_5);

    // KNOWN BUG: On AOL4, returns false if IE3 is embedded browser
    // or if this is the first browser window opened.  Thus the
    // variables is_aol, is_aol3, and is_aol4 aren't 100% reliable.
    var is_aol   = (agt.indexOf("aol") != -1);
    var is_aol3  = (is_aol && is_ie3);
    var is_aol4  = (is_aol && is_ie4);
    var is_aol5  = (agt.indexOf("aol 5") != -1);
    var is_aol6  = (agt.indexOf("aol 6") != -1);

    var is_opera = (agt.indexOf("opera") != -1);
    var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1);
    var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1);
    var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1);
    var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1);
    var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4);

    var is_webtv = (agt.indexOf("webtv") != -1); 

    var is_TVNavigator = ((agt.indexOf("navio") != -1) || (agt.indexOf("navio_aoltv") != -1)); 
    var is_AOLTV = is_TVNavigator;

    var is_hotjava = (agt.indexOf("hotjava") != -1);
    var is_hotjava3 = (is_hotjava && (is_major == 3));
    var is_hotjava3up = (is_hotjava && (is_major >= 3));

    // *** JAVASCRIPT VERSION CHECK ***
    var is_js;
    if (is_nav2 || is_ie3) is_js = 1.0;
    else if (is_nav3) is_js = 1.1;
    else if (is_opera5up) is_js = 1.3;
    else if (is_opera) is_js = 1.1;
    else if ((is_nav4 && (is_minor <= 4.05)) || is_ie4) is_js = 1.2;
    else if ((is_nav4 && (is_minor > 4.05)) || is_ie5) is_js = 1.3;
    else if (is_hotjava3up) is_js = 1.4;
    else if (is_nav6 || is_gecko) is_js = 1.5;
    // NOTE: In the future, update this code when newer versions of JS
    // are released. For now, we try to provide some upward compatibility
    // so that future versions of Nav and IE will show they are at
    // *least* JS 1.x capable. Always check for JS version compatibility
    // with > or >=.
    else if (is_nav6up) is_js = 1.5;
    // NOTE: ie5up on mac is 1.4
    else if (is_ie5up) is_js = 1.3

    // HACK: no idea for other browsers; always check for JS version with > or >=
    else is_js = 0.0;

    // *** PLATFORM ***
    var is_win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
    // NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all
    //        Win32, so you can't distinguish between Win95 and WinNT.
    var is_win95 = ((agt.indexOf("win95")!=-1) || (agt.indexOf("windows 95")!=-1));

    // is this a 16 bit compiled version?
    var is_win16 = ((agt.indexOf("win16")!=-1) || 
               (agt.indexOf("16bit")!=-1) || (agt.indexOf("windows 3.1")!=-1) || 
               (agt.indexOf("windows 16-bit")!=-1) );  

    var is_win31 = ((agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("win16")!=-1) ||
                    (agt.indexOf("windows 16-bit")!=-1));

    var is_winme = ((agt.indexOf("win 9x 4.90")!=-1));
    var is_win2k = ((agt.indexOf("windows nt 5.0")!=-1));

    // NOTE: Reliable detection of Win98 may not be possible. It appears that:
    //       - On Nav 4.x and before you'll get plain "Windows" in userAgent.
    //       - On Mercury client, the 32-bit version will return "Win98", but
    //         the 16-bit version running on Win98 will still return "Win95".
    var is_win98 = ((agt.indexOf("win98")!=-1) || (agt.indexOf("windows 98")!=-1));
    var is_winnt = ((agt.indexOf("winnt")!=-1) || (agt.indexOf("windows nt")!=-1));
    var is_win32 = (is_win95 || is_winnt || is_win98 || 
                    ((is_major >= 4) && (navigator.platform == "Win32")) ||
                    (agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1));

    var is_os2   = ((agt.indexOf("os/2")!=-1) || 
                    (navigator.appVersion.indexOf("OS/2")!=-1) ||   
                    (agt.indexOf("ibm-webexplorer")!=-1));

    var is_mac    = (agt.indexOf("mac")!=-1);
    // hack ie5 js version for mac
    if (is_mac && is_ie5up) is_js = 1.4;
    var is_mac68k = (is_mac && ((agt.indexOf("68k")!=-1) || 
                               (agt.indexOf("68000")!=-1)));
    var is_macppc = (is_mac && ((agt.indexOf("ppc")!=-1) || 
                                (agt.indexOf("powerpc")!=-1)));

    var is_sun   = (agt.indexOf("sunos")!=-1);
    var is_sun4  = (agt.indexOf("sunos 4")!=-1);
    var is_sun5  = (agt.indexOf("sunos 5")!=-1);
    var is_suni86= (is_sun && (agt.indexOf("i86")!=-1));
    var is_irix  = (agt.indexOf("irix") !=-1);    // SGI
    var is_irix5 = (agt.indexOf("irix 5") !=-1);
    var is_irix6 = ((agt.indexOf("irix 6") !=-1) || (agt.indexOf("irix6") !=-1));
    var is_hpux  = (agt.indexOf("hp-ux")!=-1);
    var is_hpux9 = (is_hpux && (agt.indexOf("09.")!=-1));
    var is_hpux10= (is_hpux && (agt.indexOf("10.")!=-1));
    var is_aix   = (agt.indexOf("aix") !=-1);      // IBM
    var is_aix1  = (agt.indexOf("aix 1") !=-1);    
    var is_aix2  = (agt.indexOf("aix 2") !=-1);    
    var is_aix3  = (agt.indexOf("aix 3") !=-1);    
    var is_aix4  = (agt.indexOf("aix 4") !=-1);    
    var is_linux = (agt.indexOf("inux")!=-1);
    var is_sco   = (agt.indexOf("sco")!=-1) || (agt.indexOf("unix_sv")!=-1);
    var is_unixware = (agt.indexOf("unix_system_v")!=-1); 
    var is_mpras    = (agt.indexOf("ncr")!=-1); 
    var is_reliant  = (agt.indexOf("reliantunix")!=-1);
    var is_dec   = ((agt.indexOf("dec")!=-1) || (agt.indexOf("osf1")!=-1) || 
           (agt.indexOf("dec_alpha")!=-1) || (agt.indexOf("alphaserver")!=-1) || 
           (agt.indexOf("ultrix")!=-1) || (agt.indexOf("alphastation")!=-1)); 
    var is_sinix = (agt.indexOf("sinix")!=-1);
    var is_freebsd = (agt.indexOf("freebsd")!=-1);
    var is_bsd = (agt.indexOf("bsd")!=-1);
    var is_unix  = ((agt.indexOf("x11")!=-1) || is_sun || is_irix || is_hpux || 
                 is_sco ||is_unixware || is_mpras || is_reliant || 
                 is_dec || is_sinix || is_aix || is_linux || is_bsd || is_freebsd);

    var is_vms   = ((agt.indexOf("vax")!=-1) || (agt.indexOf("openvms")!=-1));


//variable para crear el foco
function tecla(e){
 var tecla;
 if(document.all){ //IE 4
  tecla = event.keyCode; 
 }else if(document.layers){ //NS 4
  tecla = e.which; 
 }else if(document.getElementById){ //NS 6
  tecla = e.which; 
 }
   if (tecla==13) return false;
                      
}
document.onkeydown = tecla
if (document.layers) document.captureEvents(Event.KEYUP)

//Variables globales

//Array de strings internacionalizados
var interStrings=new Array();
var contI=0;

//Variable de Error
var errorS="";
var errorStrings=new Array();
var contE=0;




//Variables de paises y provincias
var provincias=new Array();
var paises=new Array();
var paisesProvincias=new Array();
var codigosPostales=new Array();
var contPa=0;
var contPaa=1;
var contPr=0;

//Variables de direcciones
var cdire=1;
var direcciones=new Array();
var ddirecciones=new Array();
var dpoblacion=new Array();
var dcpostal=new Array();
var dprovincia=new Array();
var dpais=new Array();
var dcliente=new Array();
var identificativos=new Array();
var didentificativo=new Array();
var dnombre=new Array();
var dapellidos=new Array();
var dtipo=new Array();
var dtelefono1=new Array();
var dtelefono2=new Array();

//funcion que escribe el identificativo
function escIdentificativo(ide){
    document.write(identificativos[ide]);
}

//funciones que añaden las direcciones
function anadirDireccion(nombre, apellidos,codDireccion,direccion,poblacion,postal,provincia,pais,codCliente,identificativo,tdir,telefono1,telefono2){
    direcciones[cdire]=codDireccion;
    ddirecciones[codDireccion]=direccion;
    dpoblacion[codDireccion]=poblacion;
    dcpostal[codDireccion]=postal;
    dprovincia[codDireccion]=provincia;
    dpais[codDireccion]=pais;
    dcliente[codDireccion]=codCliente;
    didentificativo[codDireccion]=identificativo;
    identificativos[cdire]=identificativo;
    dnombre[codDireccion]=nombre;
    dapellidos[codDireccion]=apellidos;
    dtipo[codDireccion]=tdir;
    dtelefono1[codDireccion]=telefono1;
    dtelefono2[codDireccion]=telefono2;
    cdire++;
}

//funcion que al cambiar la direccion cambia los datos
function cambiarDir(form,dir,pais){
   if (dir>0){
   var ladir=direcciones[dir];
   seleccionarPais(form,dpais[ladir],dprovincia[ladir]);
   form.poblacion.value=dpoblacion[ladir];
   form.direccion.value=ddirecciones[ladir];
   form.cp.value=dcpostal[ladir];
   form.cod_cliente.value=dcliente[ladir];
   form.cod_direccion.value=ladir;
   form.nombre.value=dnombre[ladir];
   form.identificativo.value=didentificativo[ladir];
   form.apellidos.value=dapellidos[ladir];
   form.telefono1.value=dtelefono1[ladir];
   form.telefono2.value=dtelefono2[ladir];
   form.accion.value='cambiar';
   if (dtipo[ladir]=='P') form.tipo_dir[0].checked=true;
   else form.tipo_dir[1].checked=true;
    }
  else {
        form.paises.options.selectedIndex=0;
        cambiarProvs(form,0);
        form.poblacion.value='';
        form.direccion.value='';
        form.cp.value='';
        form.cod_cliente.value='';
        form.cod_direccion.value=0;
        form.nombre.value='';
        form.identificativo.value='';
        form.apellidos.value='';
        form.telefono1.value='';
        form.telefono2.value='';
        form.accion.value='nueva';
        seleccionarPais(form,pais,'-1');
        }
}

//funciones de las provincias y paises
//funcion que anade un pais al array de paises
function anadirPais(elpais){
    paises[contPa]=elpais;
    contPa++;
}

//funcion que anade una provincia al array de provincias y al array de mascaras
// de los codigos postales
function anadirProvincia(nprov,laprov,codPostal){
    var pr=new Option(nprov,laprov);
    provincias[contPr]=pr;
    codigosPostales[laprov]=codPostal;
    contPr++;
}
//funcion que devuelve el array de provincias
function getProvincias(){
    return provincias;
}
//funcion que incializa el array de provincias a 0
function inicializarProvincias(){
    provincias=new Array();
    contPr=0;
}
//funcion que añade las provincias y escribe el campo de pais
function anadirPaisProvincias(form,elpais,npais,provs){
    paisesProvincias[elpais]=provs;
    var pob=new Option(npais,elpais);
    form.paises.options[contPaa]=pob;
    contPaa++;
}
//funcion que carga un pais dado y las provincias asociadas
function seleccionarPais(form,elpais,laprov){
for (cont=0;cont<form.paises.options.length;cont++){
    if (form.paises.options[cont].value==elpais) paiss=cont;
 }
 form.paises.options.selectedIndex=paiss;
  if (elpais!=0){
   var pro=paisesProvincias[elpais];
   for (cont1=0;cont1<pro.length;cont1++){
    form.provincias.options[cont1]=pro[cont1];
    if (pro[cont1].value==laprov) provs=cont1;
   }
   }
 form.provincias.options.selectedIndex=provs;

}
//funcion que al cambiar el pais cambia las provincias
function cambiarProvs(form,elpais){
    var numoptions=form.provincias.options.length;
    for (optionCounter = 0; optionCounter < numoptions; optionCounter++) {
       form.provincias.options[1]=null;
    }
   if (elpais!=0){
   var pro=paisesProvincias[elpais];
   for (cont1=0;cont1<pro.length;cont1++){
    form.provincias.options[cont1]=pro[cont1];
   }
   }
   form.provincias.options.selectedIndex=0;
  
}

//funcion que añade al array de errores de javascript un error
function anadirError(ind,elError){

	errorStrings[ind]=elError;
	contE++;
    
}
//funcion que añade al array de textos un texto
function anadirTexto(elTexto){

	interStrings[contI]=elTexto;
	contI++;
    
}
//añade el texto a la opcion
function anadirTextoProv(elTexto){
    opcionP=elTexto;    
}
//funcion que devuelve los textos
function getTextos(){
	return interStrings;
}



// depende de la opcion seleccionada devuelve el estilo
function estiloEstado(estadoActual,fila){
	if (estadoActual==fila) return "id=enProceso";
	else if (estadoActual>fila) return "class=finalizado";
	else return "class=porFinalizar";

}
function estiloPaso(estadoActual,fila){
	if (estadoActual==fila) return "id=marca";
	else if (estadoActual>fila) return "class=finalizado";
	else return "";
}






////////////////////////////////////////////////////////////////////////////////
function emailCorrecto(ind,emailStr) {
////////////////////////////////////////////////////////////////////////////////

// Comprueba si el e-mail se adecua al formato usuario@dominio.
//  Tambien se usa para separar usuario de dominio.
var emailPat=/^(.+)@(.+)$/

// Cadena que representa los patrones que son caracteres especiales.
//   Son  ( ) < > @ , ; : \ " . [ ]
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]áéíóúÁÉÍÓÚâêîôû^ÂÊÎÔÛàèìòùÀÈÌÒÙÄËÏÖÜëïü¨"

// Rango de caracteres permitido en usuario o dominio.
//   Realmente afirma aquellos que no son permitido.
var validChars="\[^\\s" + specialChars + "\]"

// El siguiente patron se aplica si el "usuario" es una cadena con
// comillas (en ese caso no hay reglas sobre que caracteres se
// permiten y cuales no, todo vale). Por ejemplo, "evelio ojito"@talytal.com
// seria un e-mail legal.
var quotedUser="(\"[^\"]*\")"

// El siguiente patron aplica para dominios que son direcciones IP en
// vez de nombre simbolicos. P.ej. pepe@[123.124.233.4] es un e-mail legal
// NOTA: Se necesitan los corchetes.
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/

// La siguiente cadena representa un atomo (basicamente como una serie de
// caracteres no especiales.
var atom=validChars + '+'

// La siguiente cadena represente una palabra en el nombre de usuario
// tipico. P.ej. pepe.rodriguez@algunsitio.com, pepe y rodriguez son palabras.
// Basicamente, una palabra es un atomo o una cadena entrecomillada.
var word="(" + atom + "|" + quotedUser + ")"

// Estructura del usuario
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")

// Estructura de un dominio simbolico normal, en contraposicion a un
// patron de dominio IP, como mas arriba
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
  // Demasiados o pocas @; basicamente, esta direccion no cuadra con el
  // molde general de una direccion de email valida
        errorS=errorStrings[ind];
        return false
}
var user=matchArray[1]
var domain=matchArray[2]

// Mirar si "usuario" es valido
if (user.match(userPat)==null) {
    // usuario no es valido
    errorS=errorStrings[ind+1];
    return false
}

// si el e-mail es una direccion IP (en vez de host simbolico)
// asegurarse que la IP es valida
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
          for (var i=1;i<=4;i++) {
            if (IPArray[i]>255) {
                errorS=errorStrings[ind+2];
                return false
            }
    }
    return true
}

// Dominio es un nombre simbólico
var domainArray=domain.match(domainPat)
if (domainArray==null) {
        errorS=errorStrings[ind+3];
    return false
}

// Nombre de dominio parece valido, pero asegurarse que termina en una palabra
// de 3 letras (como com, edu, gov) o una palabra de 2 letras representando un
// pais (es, uk nl) y que hay un nombre de host precediendo al dominio o pais


// Necesitamos romper el dominio para contar cuantos atomos tiene

var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 ||
    domArr[domArr.length-1].length>3) { 
// la dirección debe terminar en una palabra de 2 o 3 letras.
   errorS=errorStrings[ind+4];
   return false;
}

// Asegurarse que hay un nombre de host precediendo al dominio
if (len<2) {
   errorS=errorStrings[ind+5];
   return false
}

// Si hemos llegado hasta aqui, todo es válido
return true;
}
// -->

//funcion que valida si un password es correcto
function passwordCorrecto(pass){
allowed =  'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890._-';
return isValid(pass,allowed);
}

//funcion que valida si un nombre es correcto
function nomCorrecto(ape){
allowed =  'abcdefghijklmnñopqrstuvwxyzáéíóú ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ,-.';
return isValid(ape,allowed);
}

//funcion que valida si una direccion es correcta
function dirCorrecto(ape){
allowed =  'abcdefghijklmnñopqrstuvwxyzáéíóú ABCDEFGHIJKLMNÑOPQRSTUVWXYZ\\:.,/ºª0123456789-ÁÉÍÓÚ-';
return isValid(ape,allowed);
}

//funcion que valida si el login (identificativo+password) es correcto

function validarLogin(ind,form,accion){
         if (form.identificativo.options[form.identificativo.selectedIndex].value==1) {
            if (form.email.value=="") errorS=errorStrings[ind+10];
            else if (!calcularNIF(form.email.value)) errorS=errorStrings[ind+11];
            }
        else{
            if (form.email.value=="") errorS=errorStrings[ind];
            else if (!emailCorrecto(ind+4,form.email.value)) errorS=errorStrings[ind+1]+errorS;
            }
        if (errorS==""){
	if (form.password.value=="") errorS=errorStrings[ind+2];
	else if (!passwordCorrecto(form.password.value)) errorS=errorStrings[ind+3];
	}
        if (errorS=="") {
		form.action="/UserLogin";
                form.accion.value=accion;
		form.submit();
	}
	else {alert(errorS);errorS="";}
}
//funcion que llama a la pagina de alta
function Alta(form,accion){
                form.accion.value=accion;
                form.action="/UserLogin";
				form.submit();
	
}
//funcion que valida que se haya seleccionado algun tipo de cliente
function validarTipo(form){
    if (form.tipo_cliente[0].checked) return 'P';
    else return 'E';
}
//funcion que valida un codigo postal, con su mascara
function validarCodigoP(form,codigo){
 
  var sProv=form.provincias[form.provincias.selectedIndex].value;
  var patronCod=codigosPostales[sProv];
  var patronJ="";
  for (pc=0;pc<patronCod.length;pc++){
    if (patronCod.charAt(pc)=='?') patronJ+="\\d{1}";
    else patronJ+=patronCod.charAt(pc);
  }
    var patronMask=new RegExp("^" + patronJ + "$")
    var maskArray=codigo.match(patronMask)
        if (maskArray==null) return false;
        else return true;
 }
//funcion que indica si un año es bisiestos
function esBisiesto(anio){
   return (((anio % 4 == 0) && (anio % 100 != 0)) || (anio % 400 == 0));

}
//funcion que indica si el mes tiene 30 dias

function esEsosMeses(mes){
    return ((mes==11)||(mes==4)||(mes==6)||(mes==9));
}

//funcion que indica si una fecha es correcta

function fechaCorrecta(ano,mes,dia){
    if (dia>31) return false;
	else if (mes>12) return false;
    else if (dia>30&&esEsosMeses(mes)) return false;
    else if ((dia>29&&(mes==2))||(dia>28&&!esBisiesto(ano)&&(mes==2))) return false;
    return true;

}
//funcion que verifica si una fecha es correcta y si ademas es menor que el dia de hoy y mayor que hace 150 años
function fechaNacCorrecta(fecha){
     var patronfecha=/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/
     var fechaArray=fecha.match(patronfecha)
     if (fechaArray==null) return false;
     else {
		
        var ano=fechaArray[3];
        var mes=fechaArray[2];
        var dia=fechaArray[1];
        hoy=new Date();
		anoSistema=hoy.getYear();
		if (anoSistema<1900) anoSistema=1900+anoSistema;
        //Comprobamos que la fecha sea correcta
        if (!fechaCorrecta(ano,mes,dia)) return false;
        //Comprobamos si la fecha es mayor que el dia de hoy
        if ((ano>anoSistema)||((anoSistema==ano)&&(mes>(hoy.getMonth()+1)))||((anoSistema==ano)&&(mes==(hoy.getMonth()+1))&&(dia>hoy.getDate()))) return false;
        //Comprobamos si la persona tiene mas de 150 años
        if (ano<(anoSistema-150)) return false;
        }
     return true;
}
//funcion que verifica si una fecha es correcta y si ademas es menor que el dia de hoy y mayor que hace 150 años
function fechaEntCorrecta(fecha){
     var patronfecha=/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/
     var fechaArray=fecha.match(patronfecha)
     if (fechaArray==null) return false;
     else {
		
        var ano=fechaArray[3];
        var mes=fechaArray[2];
        var dia=fechaArray[1];
        hoy=new Date();
		anoSistema=hoy.getYear();
		if (anoSistema<1900) anoSistema=1900+anoSistema;
        //Comprobamos que la fecha sea correcta
        if (!fechaCorrecta(ano,mes,dia)) return false;
      }
     return true;
}
//funcion que valida si una razon social es correcta
function razonSocialCorrecto(nom,tempresa){
if (nom==tempresa) return false;
else{
allowed =  'abcdefghijklmnñopqrstuvwxyzáéíóú ABCDEFGHIJKLMNÑOPQRSTUVWXYZ\\:./ºª0123456789-ÁÉÍÓÚ-';
return isValid(nom,allowed);
    }
}
//funcion que valida el formulario de recordar contraseña
function validarRecordarPwd(ind,form,accion){
        var ind2=ind;
        var errorS="";
        if (form.email.value=="") errorS=errorStrings[ind];
        else if (!emailCorrecto(ind+4,form.email.value)) errorS=errorStrings[ind+1]+errorS;
        if (errorS=="") {
            form.action=accion;
		    form.submit();
	    }
	else {alert(errorS);errorS="";}

}

//funcion que valida el formulario de los datos de facturacion
function validarDatos(ind,form,accion,tempresa){
        var tipo=validarTipo(form);
        var ind2=ind;
        if (tipo=='E')  ind2=ind+18;
        if (form.email.value=="") errorS=errorStrings[ind];
        else if (!emailCorrecto(ind+4,form.email.value)) errorS=errorStrings[ind+1]+errorS;
        else if (form.password.value=="") errorS=errorStrings[ind+2];
        else if (!passwordCorrecto(form.password.value)) errorS=errorStrings[ind+3];
        else if (!(form.password.value==form.rpassword.value)) errorS=errorStrings[ind+10];
		else if (form.password.value.length<4) errorS=errorStrings[ind+36];
        else if (form.nombre.value=="") errorS=errorStrings[ind2+14];
        else if (!razonSocialCorrecto(form.nombre.value,tempresa)) errorS=errorStrings[ind2+15];
        else if (form.apellidos.value=="") errorS=errorStrings[ind2+12];
        else if (!nomCorrecto(form.apellidos.value)) errorS=errorStrings[ind2+13];
        else if (form.dni.value=="") errorS=errorStrings[ind+16];
        else if ((tipo=='E')&&(esDNI(form.dni.value))) errorS=errorStrings[ind+38];
        else if ((tipo=='P')&&(!esDNI(form.dni.value))) errorS=errorStrings[ind+37];
        else if (!calcularNIF(form.dni.value)) errorS=errorStrings[ind+17];
        else if (form.direccion.value=="") errorS=errorStrings[ind+18];
        else if (!dirCorrecto(form.direccion.value)) errorS=errorStrings[ind+19];
        else if (form.paises[form.paises.selectedIndex].value==0) errorS=errorStrings[ind+20];
        else if (form.poblacion.value=="") errorS=errorStrings[ind+21];
        else if (!nomCorrecto(form.poblacion.value)) errorS=errorStrings[ind+22];
        else if (form.provincias[form.provincias.selectedIndex].value==-1) errorS=errorStrings[ind+24];
        else if (form.telefono1.value=="") errorS=errorStrings[ind+23];
        else if (!telefonoCorrecto(form.telefono1.value)) errorS=errorStrings[ind+25];
        else if ((form.telefono2.value!="")&&(!telefonoCorrecto(form.telefono2.value))) errorS=errorStrings[ind+26];
        else if (form.cp.value=="") errorS=errorStrings[ind+27];
        else if (!validarCodigoP(form,form.cp.value)) errorS=errorStrings[ind+28];
        else {if (form.fecha_nacimiento.value!="dd/mm/aaaa") {if (!fechaNacCorrecta(form.fecha_nacimiento.value)){ errorS=errorStrings[ind+29];}}
             else {form.fecha_nacimiento.value="";}}
        if (errorS=="") {
            if (form.recibir.checked) 
               form.mailing.value='S';
            else
               form.mailing.value='N';
            //form.accion.value=accion;
            form.action=accion;
		    form.submit();
	    }
	else {alert(errorS);errorS="";}
}
//Variables globales para el tipo
var nombreTipo=new Array();
var apellidoTipo=new Array();
var dniTipo=new Array();
var ejeTipo=new Array();
var tNnombreTipo=new Array();
//funcion que anade los textos del tipo
function anadirTipo(tipo,nom,ape,dni,eje,tnom){
    nombreTipo[tipo]=nom;
    apellidoTipo[tipo]=ape;
    dniTipo[tipo]=dni;
    ejeTipo[tipo]=eje;
    tNnombreTipo[tipo]=tnom;
}
//funcion que añade los tipos para la dir
function anadirTipoDir(tipo,nom,ape,tnom){
    nombreTipo[tipo]=nom;
    apellidoTipo[tipo]=ape;
    tNnombreTipo[tipo]=tnom;
}
//funcion que cambia los datos del tipo
function cambiarTipoDir(form,nombre){
    if(form.tipo_dir[0].checked){
        form.tnombre.value=nombreTipo[0];
        form.tapellidos.value=apellidoTipo[0];
        form.nombre.value="";
        form.apellidos.value="";
    }
    else{
        form.tnombre.value=nombreTipo[1];
        form.tapellidos.value=apellidoTipo[1];
        form.nombre.value=tNnombreTipo[1];
        form.apellidos.value="";
    }

}
//funcion que cambia los datos del tipo
function cambiarTipo(form,nombre){
    if(form.tipo_cliente[0].checked){
        form.tnombre.value=nombreTipo[0];
        form.nombre.value="";
        form.apellidos.value="";
        form.tapellidos.value=apellidoTipo[0];
        form.tdni.value=dniTipo[0];
        form.teje.value=ejeTipo[0];
    }
    else{
        form.tnombre.value=nombreTipo[1];
        form.nombre.value=tNnombreTipo[1];
        form.apellidos.value="";
        form.tapellidos.value=apellidoTipo[1];
        form.tdni.value=dniTipo[1];
        form.teje.value=ejeTipo[1];
    }

}
function inicializarTipo(form){ 
   if(form.tipo_cliente[0].checked){
        form.tnombre.value=nombreTipo[0];
        form.tapellidos.value=apellidoTipo[0];
        form.tdni.value=dniTipo[0];
        form.teje.value=ejeTipo[0];
    }
    else{
        form.tnombre.value=nombreTipo[1];
        form.tapellidos.value=apellidoTipo[1];
        form.tdni.value=dniTipo[1];
        form.teje.value=ejeTipo[1];
    }
}
//Funciones para el buscador que vamos a tener que separar
var dentro = 0;
function campobuscar_dentro(field){
    if (dentro == 0){
        field.select();
        field.focus();
        dentro=1;
    }
}
function campobuscar_fuera(field){
    if (dentro == 1){
        dentro = 0;
 field.blur();
    }
}   
function isValid(string,allowed){
    for (var i=0; i< string.length; i++){
        if (allowed.indexOf(string.charAt(i)) == -1) return false;
    }
    return true;
}
function trim(cadena){
 cadena=cadena.replace(/^[\s]+/g,"");
 cadena=cadena.replace(/[\s]+$/g, ""); 
   return cadena;
}

//funcion que abre una nueva pagina, cuyo pagina es pagina, el nombre de referencia es titulo y los parametros de apertura parametros
function popUp(pagina,titulo,parametros){
  	window.open(pagina,"",parametros);
}


/*
Utilidad que simula un tabulador automático cuando se introduce la VISA
*/
function tabAutomatico(formu,campo){
    //función que simula el tabulador automático, cuando se rellena un text con cuatro numeros este
    if((formu.nvisa1.value.length==4)&&(campo.name=="nvisa1")) formu.nvisa2.focus();
    else if((formu.nvisa2.value.length==4)&&(campo.name=="nvisa2")) formu.nvisa3.focus();
    else if((formu.nvisa3.value.length==4)&&(campo.name=="nvisa3")) formu.nvisa4.focus();
    else if((formu.nvisa4.value.length==4)&&(campo.name=="nvisa4")) formu.ExpTarMonth.focus();
}
function borrarNum(formu){
    formu.nvisa1.value="";
    formu.nvisa2.value="";
    formu.nvisa3.value="";
    formu.nvisa4.value="";
    formu.nvisa1.focus();
} 


function coolRedirect(url, msg)
{
   var TARG_ID = "DIVREDIRECT";
   var DEF_MSG = "Redireccionando...";

   if( ! msg )
   {
      msg = DEF_MSG;
   }

   if( ! url )
   {
      throw new Error('You didn\'t include the "url" parameter');
   }


   var e = document.getElementById(TARG_ID);

   if( ! e )
   {
      throw new Error('"COOL_REDIRECT" element id not found');
   }

   var cTicks = parseInt(e.innerHTML);

   var timer = setInterval(function()
   {
      if( cTicks )
      {
         e.innerHTML = --cTicks;
      }
      else
      {
         clearInterval(timer);
         document.body.innerHTML = msg;
         location = url;	  
      }

   }, 1000);
}

