/**
 * Se almacenan todas las funciones comunes a la aplicación.
 * CTE's
 *  -   t_cli_empresa=15;
 *  -   codPostales; //tabla que almacena las mascaras de códigos postales por cada provincia
 * Funciones para campos input. Seleccionan y deseleccionan el texto.
 *  -   campo_dentro(field)
 *  -   campo_fuera(field)
 * Funciones tratamiento de strings
 *  -   isValid(string,allowed)
 *  -   trim(cadena)
 *  -   noPasarse(textarea,maxChar)
 *  -   quitaAcentos(cadena)
 * Tratamiento de errores
 *  -   anadirError(ind,elError)
 * Funciones de fecha
 *  -   esBisiesto(año)
 *  -   esEsosMeses(mes)
 *  -   fechaCorrecta(ano,mes,dia)
 *  -   fechaNacCorrecta(fecha)
 * Funciones AJAX
 *  -   makeRequestAJAX(url,accion) 
 * Funciones variadas
 *  -   emailCorrecto(ind,emailStr) 
 *  -   extensionCorrecta(file,patron)
 *  -   getFileName(path)
 *  -   maxValue(elements)
 *  -   fieldToEmpty(form,nameField,typeField)
 * Funciores relativas a capas
 *  -   showLayer(LayerName)
 *  -   hideLayer(layerName)
 *  -   showTopNav(layerName,actualizar) --Para mostrar capas de categorias
 *  -   hideTopNav(layerName,actualizar) --Para ocultar capas de categorías
 * Other functions
 *	-	openYouTube(url,width,height) -- 10/11/2009
 *	-   processCheckBox(form,action) --22-02-2010
*/
<!--
var t_cli_empresa=15;
var codPostales=new Array();
var dentro = 0;
function campo_dentro(field){
    if (dentro == 0){
        field.select();
        field.focus();
        dentro=1;
    }
}
function campo_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;
}
function quitaAcentos(cadena){
    cadena=cadena.toUpperCase();
    rex_a = new RegExp ("[Á|À|Ä]", 'gi') ;cadena=cadena.replace(rex_a, "A");
    rex_e = new RegExp ("[É|È|Ë]", 'gi') ;cadena=cadena.replace(rex_e, "E");
    rex_i = new RegExp ("[Í|Ì|Ï]", 'gi') ;cadena=cadena.replace(rex_i, "I");
    rex_o = new RegExp ("[Ó|Ò|Ö]", 'gi') ;cadena=cadena.replace(rex_o, "O");
    rex_u = new RegExp ("[Ú|Ù|Ü]", 'gi') ;cadena=cadena.replace(rex_u, "U");
    rex_other = new RegExp ("[']", 'gi') ;cadena=cadena.replace(rex_other, "");
    return cadena;
}
//tratamiento de errores
var errorS="";
var errorStrings=new Array();
var contE=0;
function anadirError(ind,elError){
    errorStrings[ind]=elError;
    contE++;
}
/**
*  No permite que escribas más de un maximo de caracteres en un objeto com text, textarea, etc.
*/
function noPasarse(textarea,maxChar){
    if (textarea.value.length > maxChar){
        textarea.value = textarea.value.substring(0,maxChar);
        //alert("Has llegado al máximo de caracteres. No puedes escibir más de: "+maxChar)
    }
}
/*
 * Funcion que valida la direccion de email. Muy completa
 */
////////////////////////////////////////////////////////////////////////////////
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 +")*$")


// Finalmente averiguamos si la direccion es valida

// Empezamos con el patron burdo para romper usuario@dominio en distintas
// parte que son facilmente analizables

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]+"\n";
        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]+"\n";
    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]+"\n";
                return false
            }
    }
    return true
}

// Dominio es un nombre simbólico
var domainArray=domain.match(domainPat)
if (domainArray==null) {
        errorS+=errorStrings[ind+3]+"\n";
    return false
}

// Nombre de dominio parece valido, pero asegurarse que termina en una palabra
// de 3 letras o 4 letras (como com, edu, gov, info) 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>4) { 
// la dirección debe terminar en una palabra de 2 o 3 o 4 letras.
   errorS+=errorStrings[ind+4]+"\n";
   return false;
}

// Asegurarse que hay un nombre de host precediendo al dominio
if (len<2) {
   errorS+=errorStrings[ind+5]+"\n";
   return false
}

// Si hemos llegado hasta aqui, todo es válido
return true;
}

/**
* Reidreccion universal para cualquier select.
* @param form desde el que se enviía el evento
* @param select_field campo select desde el que se envía el evento
* @param fieldName campos a asociar el valor de selectField
* @param ufl destino donde se envía
*/
function selectOnChange(form,select_field,fieldName,url){
    //document.getElementById(fieldName).value=select_field.options[select_field.options.selectedIndex].value;
    fieldName.value=select_field.options[select_field.options.selectedIndex].value;
    //alert("valor: "+fieldName.value);alert("nombre:"+fieldName.name);
    form.action=url;
    form.submit();
}
patronExtFotos=/.\.(gif|jpg|jpeg|png|GIF|JPG|JPEG|PNG)$/;//patron para extensión de ficheros de imagen
/*
 * @param nombre del fichero a validar la extensión.
 * @param patron en el que incluimos la validación de extensiones
 *
 */
function extensionCorrecta(file,patron){
    if (patron.test(file)) return true;
    else return false;
}
/**
 * Función que obtiene el nombre de un fichero a partir de un path
 *
 */
function getFileName(path){
    while (path.indexOf("\\") != -1) path = path.slice(path.indexOf("\\") + 1);
    return path;
}
/**
 * Devuelve el máximo valor del select en cuestión. Asi calculo el cod_foto por ejemplo o el cod_dirección
 * Si devuelve 0 es que no hay valor máximo.
 * @param campo optiones del select.
 */
function maxValue(elements){
    max=eval(0);
    for(i=0;i< elements.options.length; i++) {
        valor=eval(elements.options[i].value)
        if(valor>max) max=valor;
    }
    return max;
}

/**
 * Acutaliza todos los campos file a vacio que no se usen
 */
function fieldToEmpty(form,nameField,typeField){
for (i=0;i<form.elements.length;i++) {
	 if ((form.elements[i].type==typeField) ){
            element=form.elements[i];
            if(element.name!=nameField) document.getElementById(element.name).disabled=true;
	}//if file
    }//for
}

//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;

}
function showLayer(layerName){
    if(document.getElementById(layerName)){
        eval('document.getElementById('+ "'"+layerName+"'" +').style.display = "block"');
    }
}
function hideLayer(layerName){
    if(document.getElementById(layerName)){
        eval('document.getElementById('+"'"+layerName+"'"+').style.display = "none"');
    }
}

function showTopNav(layerName,actualizar){
        showLayer(layerName)    
        if(actualizar)layerNew=layerName;
}
function hideTopNav(layerName,actualizar){
    hideLayer(layerName)
    if(actualizar)layerOld=layerName;
}
/* Oculta capa actual y muestra capa prinicpal, actualizando variables correspondientes, valido para capas topVenta y asi */
function showMainLayer(layerName){
    hideLayer(layerName);
    layerProdOld=layerName;
    showLayer(layerProdNew);
}
/* Oculta capa principal y muestra capa actual, actualizando variables correspondientes */
function hideMainLayer(layerName){
    hideLayer(layerProdOld);
    showLayer(layerName);
    layerProdNew=layerName;
}
/* Función que genera un string, param sLength: longitud del string resultante, chars caracteres para generar el string */
function randomS(sLength, chars) {
    //var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    //var sLength = 8;
    var randomstring = '';
    for (var i=0; i<sLength; i++) {
    	var rnum = Math.floor(Math.random() * chars.length);
        randomstring += chars.substring(rnum,rnum+1);
    }
    return randomstring;
}
/*Abre una nueva pagina, con el titulo y los parametros que sean*/
function popUp(pagina,titulo,parametros){
    window.open(pagina,"",parametros);
}
/*Open html page to wath a youtube video or other similar page. upload 10-11-2009. Problemas with chrome browser */
function openYouTube(url,width,height){
	var withPop=eval(width)+eval(30);
	var heightPop=eval(height)+eval(35);
	//alert("open youtube--> width: "+width+", height: "+height+",withPop: "+withPop+",heightPop: "+heightPop);
	var toolbar='width='+withPop+',height='+heightPop+',no,scrollbars=no,location=0,statusbar=no,status=no,menubar=no,resizable=yes,left=230,top=200';
	newWindow= window.open ("", "youtubepage",toolbar);
	var yt = newWindow.document; 
	yt.write('<html><head><title>'+url+'</title>');
	yt.write('<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15?>');
	yt.write('</head><body>');
	yt.write('<object width="'+width+'" height="'+height+'">');
	yt.write('<param name="movie" value="'+url+'"></param>');
	yt.write('<param name="allowFullScreen" value="true"></param>');
	yt.write('<param name="allowscriptaccess" value="always"></param>');
	yt.write('<embed src="'+url+'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="'+width+'" height="'+height+'">');
	yt.write('</embed>');
	yt.write('</object>');
	yt.write('</body>');
	yt.write('</html>');
	yt.close();
}
/*This function check or uncheck a collect of checkbox.
 * @param check can be true or false depends on check or uncheck
 */
function processCheckbox(fmobj,action) {
    //alert("action: "+action+", fmobj: "+fmobj.name)
    for (var i=0;i<fmobj.elements.length;i++) {
        var e = fmobj.elements[i];//(e.name != 'allbox')
        if ( (e.type=='checkbox') && (!e.disabled) ) {
            if(action=='checkall') e.checked = true;
            else e.checked = false;
        }
    }
}
/*This function check or uncheck a collect of checkbox who starts by a name
 * @param check can be true or false depends on check or uncheck
 */
function procCB(fmobj,action,fieldName) {
    for (var i=0;i<fmobj.elements.length;i++) {
        var e = fmobj.elements[i];//(e.name != 'allbox')
        var pos=e.name.indexOf(fieldName);
        if ( (e.type=='checkbox'&&pos>=0) && (!e.disabled) ) {
            if(action=='checkall') e.checked = true;
            else e.checked = false;
        }
    }
}


function unescapeCharToHTML2(valor) {
  var codigos = new Array();
  codigos = ["&#035;","&#038;","&#059;","&#033;","&#034;","&#036;","&#037;","&#039;","&#040;","&#041;","&#042;","&#043;","&#044;","&#045;",
                "&#046;","&#047;","&#058;","&#061;","&#062;","&#063;","&#064;","&#091;","&#092;","&#093;","&#094;","&#095;","&#096;","&#123;",
                "&#124;","&#125;","&#126;","&#130;","&#131;","&#132;","&#133;","&#134;","&#135;","&#136;","&#137;","&#138;","&#139;","&#140;","&#142;",
                "&#145;","&#146;","&#147;","&#148;","&#149;","&#150;","&#151;","&#152;","&#153;","&#154;","&#155;","&#156;","&#158;","&#159;","&#161;",
                "&#162;","&#163;","&#164;","&#165;","&#166;","&#167;","&#168;","&#169;","&#170;","&#171;","&#172;","&#173;","&#175;","&#176;","&#177;",
                "&#178;","&#179;","&#180;","&#181;","&#182;","&#183;","&#184;","&#185;","&#186;","&#187;","&#188;","&#189;","&#190;","&#191;","&#192;",
                "&#193;","&#194;","&#195;","&#196;","&#197;","&#198;","&#199;","&#200;","&#201;","&#202;","&#203;","&#204;","&#205;","&#206;","&#207;",
                "&#208;","&#209;","&#210;","&#211;","&#212;","&#213;","&#214;","&#215;","&#216;","&#217;","&#218;","&#219;","&#220;","&#221;","&#222;",
                "&#223;","&#224;","&#225;","&#226;","&#227;","&#228;","&#229;","&#230;","&#231;","&#232;","&#233;","&#234;","&#235;","&#236;","&#237;",
                "&#238;","&#239;","&#240;","&#241;","&#242;","&#243;","&#244;","&#245;","&#246;","&#247;","&#248;","&#249;","&#250;","&#251;","&#252;",
                "&#253;","&#254;","&#255;","&#8364;"];
  var caracteres = new Array();
  caracteres = ["#","&",";","!","\"","$","%","'","(",")","*","+",",","-",".","/",":","=",">","?","@","[","\"","]","^","_","`","{","|",
                "}","~","‚","ƒ","„","…","†","‡","ˆ","‰","Š","‹","Œ","Ž","‘","’","“","”","•","–","—","˜","™","š","›","œ","ž","Ÿ","¡","¢","£","¤","¥","¦",
                "§","¨","©","ª","«","¬",",","¯","°","±","²","³","´","µ","¶","·","¸","¹","º","»","¼","½","¾","¿","À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É",
                "Ê","Ë","Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","×","Ø","Ù","Ú","Û","Ü","Ý","Þ","ß","à","á","â","ã","ä","å","æ","ç","è","é","ê","ë",
                "ì","í","î","ï","ð","ñ","ò","ó","ô","õ","ö","÷","ø","ù","ú","û","ü","ý","þ","ÿ","€"];

  valor = valor.trim();
  for(i = 0;i<codigos.length;i++){
    valor = valor.replace(codigos[i], caracteres[i]);
  }
  return valor;
}

function escapeCharToHTML2(valor) {
  var codigos = new Array();
  codigos = ["&#035;","&#038;","&#059;","&#033;","&#034;","&#036;","&#037;","&#039;","&#040;","&#041;","&#042;","&#043;","&#044;","&#045;",
                "&#046;","&#047;","&#058;","&#061;","&#062;","&#063;","&#064;","&#091;","&#092;","&#093;","&#094;","&#095;","&#096;","&#123;",
                "&#124;","&#125;","&#126;","&#130;","&#131;","&#132;","&#133;","&#134;","&#135;","&#136;","&#137;","&#138;","&#139;","&#140;","&#142;",
                "&#145;","&#146;","&#147;","&#148;","&#149;","&#150;","&#151;","&#152;","&#153;","&#154;","&#155;","&#156;","&#158;","&#159;","&#161;",
                "&#162;","&#163;","&#164;","&#165;","&#166;","&#167;","&#168;","&#169;","&#170;","&#171;","&#172;","&#173;","&#175;","&#176;","&#177;",
                "&#178;","&#179;","&#180;","&#181;","&#182;","&#183;","&#184;","&#185;","&#186;","&#187;","&#188;","&#189;","&#190;","&#191;","&#192;",
                "&#193;","&#194;","&#195;","&#196;","&#197;","&#198;","&#199;","&#200;","&#201;","&#202;","&#203;","&#204;","&#205;","&#206;","&#207;",
                "&#208;","&#209;","&#210;","&#211;","&#212;","&#213;","&#214;","&#215;","&#216;","&#217;","&#218;","&#219;","&#220;","&#221;","&#222;",
                "&#223;","&#224;","&#225;","&#226;","&#227;","&#228;","&#229;","&#230;","&#231;","&#232;","&#233;","&#234;","&#235;","&#236;","&#237;",
                "&#238;","&#239;","&#240;","&#241;","&#242;","&#243;","&#244;","&#245;","&#246;","&#247;","&#248;","&#249;","&#250;","&#251;","&#252;",
                "&#253;","&#254;","&#255;","&#8364;"];
  var caracteres = new Array();
  caracteres = ["#","&",";","!","\"","$","%","'","(",")","*","+",",","-",".","/",":","=",">","?","@","[","\"","]","^","_","`","{","|",
                "}","~","‚","ƒ","„","…","†","‡","ˆ","‰","Š","‹","Œ","Ž","‘","’","“","”","•","–","—","˜","™","š","›","œ","ž","Ÿ","¡","¢","£","¤","¥","¦",
                "§","¨","©","ª","«","¬",",","¯","°","±","²","³","´","µ","¶","·","¸","¹","º","»","¼","½","¾","¿","À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É",
                "Ê","Ë","Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","×","Ø","Ù","Ú","Û","Ü","Ý","Þ","ß","à","á","â","ã","ä","å","æ","ç","è","é","ê","ë",
                "ì","í","î","ï","ð","ñ","ò","ó","ô","õ","ö","÷","ø","ù","ú","û","ü","ý","þ","ÿ","€"];

  valor = valor.trim();
  for(i = 0;i<caracteres.length;i++){
    valor = valor.replace(caracteres[i], codigos[i]);
  }
  return valor;
}
-->
