/* Variables globales */

var itemActualListado = null;
var ghashLetras = new Array();

var arrMarcas = new Array();

/* fin variables globales */


function desactivaSeccion(form){
	nDiv=document.getElementById("desactivable");
	nDiv.className="off";
	//nLabelQueja = document.getElementById("queja");
	//nLabelQueja.className = "off";
	nLabelQueja = document.getElementById("sugerencia");
	nLabelQueja.className = "on";
	formulario = document.forms['formulario_quejas'];
	formulario.solicitud_queja.disabled=true;
	//formulario.solicitud_queja.className="deshabilitado";
	formulario.dia_queja.disabled=true;
	formulario.mes_queja.disabled=true;
	formulario.any_queja.disabled=true;
	formulario.empresa_queja.disabled=true;
	
}

function activaSeccion(form){
	nDiv=document.getElementById("desactivable");
	nDiv.className="on";
	nLabelQueja = document.getElementById("queja");
	nLabelQueja.className = "on";
	//nLabelSugerencia = document.getElementById("sugerencia");
	//nLabelSugerencia.className = "off";
	formulario = document.forms['formulario_quejas'];
	formulario.solicitud_queja.disabled=false;
	formulario.dia_queja.disabled=false;
	formulario.mes_queja.disabled=false;
	formulario.any_queja.disabled=false;
	formulario.empresa_queja.disabled=false;
}

/***** Formulario de Adhesion a ePresupuestos. *******/
function handleHiddenSections(){
	nRadio1 = document.getElementById("adhesion_si");
	nRadio2 = document.getElementById("adhesion_no");
	nSeccionSi = document.getElementById("desplegable");
	nSeccionNo = document.getElementById("inscripcion");
	if (nRadio1.value=="si" && nRadio1.checked == true){
		nSeccionSi.style.display = "block";
		nSeccionNo.style.display = "none";
		/*nRadio2.disabled= true;*/
	}else if(nRadio2.value=="no" && nRadio2.checked == true){
		nSeccionNo.style.display = "block";
		nSeccionSi.style.display = "none";
		/*nRadio1.disabled= true;*/
	}
}

function muestraSeccion(){
	nRadio = document.getElementsByName("adhesion");
	nSeccion = document.getElementById("desplegable");
	nSeccion.display = "block";
	alert("hey hey");
	alert(nSeccion.display);
}

/***** Abrir Popup *******/
function abrirPopup( url ,f_amp, f_alt, nom_finestra, scroll ){

        ancho=screen.width;                             //ample pantalla
        alto=screen.height;                             //alt pantalla
        v_top=(alto-f_alt)/2;   
        v_left=(ancho-f_amp)/2;

        if (typeof(v_fin)!="undefined"){
                v_fin.close();
        }
        v_fin=window.open(url,nom_finestra,"toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars="+(scroll?'yes':'no')+",resizable=no,width="+f_amp+",height="+f_alt+",top="+v_top+",left="+v_left);
}

function cambioPresupuesto(company,textoSeleccionada , textoSeleccionadas , textoEmpresasSeleccionadas) {

    presupuesto = document.getElementById("presupuesto_" + company);
    estado_presupuesto = document.getElementById("estadoPresupuesto_" + company);    
	linea_seleccion_actual = document.getElementById("lineaSeleccionPresupuesto_" + company);
	linea_seleccion_actual_boton = document.getElementById("lineaSeleccionBoton_" + company);
	lineaAnexa = document.getElementById("lineaAnexa_" + company);	

    if(presupuesto.checked) {
        addCompany(company,'lista');//añadimos la compañía a las cookies de compañías
    } else {
        deleteCompany(company,'lista');//borramos la compañía de las cookies de compañías    
    }    
    
    //repetimos la comprobación, ya que si se han superado las 3 empresas que se pueden marcar,
    //el presupuesto volverá a cambiar de estado
    if(presupuesto.checked) {
        estado_presupuesto.className = 'activa'; //ponemos el texto 'solicitar_presupuesto' de color naranja
        if(linea_seleccion_actual != null && linea_seleccion_actual_boton != null) {
	        linea_seleccion_actual.style.display = 'inline'; //mostramos el texto de seleccionadas
	        linea_seleccion_actual_boton.style.display = 'inline'; //mostramos el botón	 
	        lineaAnexa.style.display = 'none'; // Ocultamos el texto anexo       
	    }
    } else {
        estado_presupuesto.className = 'inactiva';//ponemos el texto 'solicitar_presupuesto' de color gris
        if(linea_seleccion_actual != null && linea_seleccion_actual_boton != null) {
  		    linea_seleccion_actual.style.display = 'none';   //ocultamos el texto de seleccionadas
	        linea_seleccion_actual_boton.style.display = 'none'; //ocultamos el botón	
	        lineaAnexa.style.display = 'inline'; // Mostramos el texto anexo            	      
  	    }
    }

	cambiarTextoEmpresasSeleccionadas(textoSeleccionada , textoSeleccionadas , textoEmpresasSeleccionadas);
    
}

function cambioPresupuestoFicha(company,textoSeleccionada , textoSeleccionadas , textoEmpresasSeleccionadas) {
    presupuesto = document.getElementById("presupuesto_1");
	estado_presupuesto = document.getElementById("estadoPresupuesto_" + company);    
	linea_seleccion_actual = document.getElementById("lineaSeleccionPresupuesto_" + company);
	linea_seleccion_actual_boton = document.getElementById("lineaSeleccionBoton_" + company);
	lineaAnexa = document.getElementById("lineaAnexa_" + company);	    
    if(presupuesto.checked) {
        addCompany(company);//añadimos la compañía a las cookies de compañías
    } else {
        deleteCompany(company,'presupuesto');//borramos la compañía de las cookies de compañías    
    }        
    
    
//repetimos la comprobación, ya que si se han superado las 3 empresas que se pueden marcar,
    //el presupuesto volverá a cambiar de estado
    if(presupuesto.checked) {
        estado_presupuesto.className = 'activa'; //ponemos el texto 'solicitar_presupuesto' de color naranja
        if(linea_seleccion_actual != null && linea_seleccion_actual_boton != null) {
	        linea_seleccion_actual.style.display = 'inline'; //mostramos el texto de seleccionadas
	        linea_seleccion_actual_boton.style.display = 'inline'; //mostramos el botón
	        lineaAnexa.style.display = 'none'; // Ocultamos el texto anexo      
	    }
    } else {
        estado_presupuesto.className = 'inactiva';//ponemos el texto 'solicitar_presupuesto' de color gris
        if(linea_seleccion_actual != null && linea_seleccion_actual_boton != null) {
  		    linea_seleccion_actual.style.display = 'none';   //ocultamos el texto de seleccionadas
	        linea_seleccion_actual_boton.style.display = 'none'; //ocultamos el botón
	        lineaAnexa.style.display = 'inline'; // Mostramos el texto anexo	          	      
  	    }
    }    
    
	cambiarTextoEmpresasSeleccionadas(textoSeleccionada , textoSeleccionadas , textoEmpresasSeleccionadas);    
}


function cambiarTextoEmpresasSeleccionadas(textoSeleccionada , textoSeleccionadas , textoEmpresasSeleccionadas) {
	contEmpresas = getCookie('contEmpresas');// contamos las empresas que hay seleccionadas para 
       										 // poner el texto en plural o en singular

	empresasSeleccionadas = getEmpresasSeleccionadas();

	for(var i in empresasSeleccionadas) {
		linea_seleccion_presupuesto = document.getElementById("lineaSeleccionPresupuesto_" + empresasSeleccionadas[i]);
		linea_seleccion_actual_boton = document.getElementById("lineaSeleccionBoton_" + empresasSeleccionadas[i]);			
		if(linea_seleccion_actual_boton != null) {
			linea_seleccion_actual_boton.style.display = 'inline';
		}
		if(linea_seleccion_presupuesto != null) {
			if(contEmpresas == 1) {
				linea_seleccion_presupuesto.innerHTML = textoSeleccionada +  ' <strong>1</strong> ' +  textoEmpresasSeleccionadas;
			} else {
				linea_seleccion_presupuesto.innerHTML = textoSeleccionadas + ' <strong>' + contEmpresas+ '</strong> ' + textoEmpresasSeleccionadas;
			}
		}
	}

}


/*
function numeroCookies() {   	
	cookieTemp = document.cookie;
	tam = cookieTemp.length;
	cont = 1;
	for(i=0;i<tam;i++) {
		letra = cookieTemp.substring(i, i+1)
		if(letra == ';') {
			cont++;
		}	
	}	
}   
*/

function getEmpresasSeleccionadas() {
	var cookies = document.cookie.split(";");
	var empresas = new Array();
	var idEmpresa;
	for( var i in cookies ){	
		if( cookies[i].indexOf("emp_") != -1 ){
			idEmpresa = cookies[i].split("=")[1];
			empresas.push( idEmpresa );			
		}
	}

	return empresas;
}


function cambioCheck(company) {

    presupuesto = document.getElementById("presupuesto_1");
    if(presupuesto.checked) {
        addCompany(company)
    } else {
        deleteCompany(company,'presupuesto'); //no comprueba el estado del check
    }
}


function addCompany(company, origen) {       
    if(origen=='lista') {
        if(getCookie("contEmpresas") != '3') {
            setCookie("contEmpresas", getCookie("contEmpresas"),null,"add",company);
            setCookie("emp_" + company, company);
        } else {
            alert("El número máximo de empresas seleccionadas es 3");
            document.getElementById("presupuesto_"+ company).checked = false;
        }
    } else {
        if(getCookie("contEmpresas") != '3') {
            setCookie("contEmpresas", getCookie("contEmpresas"),null,"add",company);
            setCookie("emp_" + company, company);
         //   document.getElementById("presupuesto_1").disabled = true;
        } else {
            alert("El número máximo de empresas seleccionadas es 3");
            document.getElementById("presupuesto_1").checked = false;
        }
    }
}

function inicio(borradas) { 
    if(borradas != null) {
        for(i in borradas) {
            deleteCompany(borradas[i], 'presupuesto');
        }        
    }
}

function deleteCompany(company,origen) {
    if(origen=='lista') {
        if(!document.getElementById("presupuesto_"+company).checked) {
            empBorrada = parseInt(getCookie("contEmpresas"));
            setCookie("contEmpresas", empBorrada);
            setCookie("emp_" + company, "",new Date(0)); 
            document.getElementById("presupuesto_"+company).checked = false;
        }
    
    } else if (origen=='presupuesto') {
            empBorrada = parseInt(getCookie("contEmpresas"));  
            setCookie("contEmpresas", empBorrada);
            setCookie("emp_" + company, "",new Date(0)); 

    } else {
        if(document.getElementById("presupuesto_1").checked) {
            empBorrada = parseInt(getCookie("contEmpresas"));
            setCookie("contEmpresas", empBorrada);
            setCookie("emp_" + company, "",new Date(0)); 
        }
     }
}

function setCookie(sName, sValue, oExpires,op) {
	
    if(sValue == null) {
        sValue= "0";
    }
    
    var sCookie = sName + "=" + encodeURIComponent(sValue);
    
    if(oExpires) {
        sCookie += "; expires =" + oExpires.toGMTString();
    }
    document.cookie = sCookie;

    if(sName=='contEmpresas') {
    	
//        nNumeroEmpresas = document.getElementById("numeroEmpresas");
//       	nNumeroEmpresas2 = document.getElementById("numeroEmpresas2");
//		nNumeroEmpresas = document.getElementsByName("numeroEmpresas");
	
		empresasCabecera = document.getElementById("numeroEmpresas");
		empresasPie = document.getElementById("numeroEmpresasPie");	
		empresasFicha = document.getElementById("numeroEmpresasFicha");

        //nNumeroEmpresasPie = document.getElementById("numeroEmpresasPie");

        if(op=='add') {
            var numEmp = parseInt(getCookie("contEmpresas"),10) + 1;
            if(numEmp > 3) {
                numEmp = 3;
            }
        } else {
            var numEmp = parseInt(getCookie("contEmpresas"),10) - 1;
            if(numEmp < 0) {
                numEmp = 0;
            }
        }

                
        empresasCabecera.innerHTML = numEmp;
        empresasPie.innerHTML = numEmp;
        //esto solo pasara cuando se entre en la ficha de empresa
        if(empresasFicha != null) {
        	empresasFicha.innerHTML = numEmp;
        }

        
        /*
        if(nNumeroEmpresas != null) {
        	if(nNumeroEmpresas[0] != null) {
	        	nNumeroEmpresas[0].innerHTML = numEmp; //cabecera
	        }
	        if(nNumeroEmpresas[1] != null) {
	        	nNumeroEmpresas[1].innerHTML = numEmp;//pie
	        }
        }
        */
  //      nNumeroEmpresas.firstChild.nodeValue = numEmp;
/*        nNumeroEmpresas2.firstChild.nodeValue = numEmp;
        if(nNumeroEmpresasPie != null) {
            nNumeroEmpresasPie.firstChild.nodeValue = numEmp;
        }*/
        
        
        
        
        sCookie = sName + "=" + encodeURIComponent(numEmp);
        document.cookie = sCookie;
    } 

}

function getCookie(sName) {
    var sRE = "(?:; )?" + sName + "=([^;]*);?";
    var oRE = new RegExp(sRE);
    if(oRE.test(document.cookie)) {
        return decodeURIComponent(RegExp["$1"]);
    } else {
        return null;
    }
}
function submitListadoEmpresas() {
    formulario = document.forms['listado_empresas'];
    formulario.submit();
}

function borrarEmpresa() {
    form = document.getElementById('formulario_quejas');
    form.action.value = 'requestForm';
    form.submit();
}

function borrarPresupuesto(empresas) {
    for(i in empresas) {
        deleteCompany(empresas[i], 'presupuesto');
    }
    form = document.getElementById('formulario_quejas');
    form.action.value = 'deleteBudget';
    form.borrar.value = '1';
    form.submit();
}

function borrarEmpresas(empresas) {
	if(getEmpresasSeleccionadas() != '') {
	    for(i in empresas) {
	        deleteCompany(empresas[i], 'presupuesto');
	    }
    } else {
        setCookie("contEmpresas", 0);    
    }
}
function borraEmpresaPresupuesto(empresa) {
	deleteCompany(empresa, 'presupuesto');
}
function verEmpresa(texto) {
    form = document.getElementById('formulario_quejas');
    form.action.value = texto;
/*    alert(form.action.value);*/
    form.submit()
}

function continuarNavegando() {
    form = document.getElementById('formulario_quejas');
    form.action.value = 'requestFormContinue';
    form.submit();
}


function enviarSolicitud(empresas) {
    
    for(i in empresas) {
        deleteCompany(empresas[i], 'presupuesto');
    }
    
    form = document.getElementById('formulario_quejas');
    form.action.value = 'requestFormPost';
    form.submit();
}


function enviarNotificacion() {
    form = document.getElementById('formulario_notificacion');
    form.submit();
}

function dcoTextCounter(field, countfield, maxlimit) {
    if (field.value.length > maxlimit) 
        field.value = field.value.substring(0, maxlimit);
    else 
        countfield.value = maxlimit - field.value.length;       
}

function dcoTextCounterSinInput(field, countfield, maxlimit){
    if (field.value.length > maxlimit) {
        field.value = field.value.substring(0, maxlimit);
	}else{
        objComptador = document.getElementById(countfield);
        objComptador.innerHTML = maxlimit - field.value.length;
    }
}

function mostrarOcultarPie() {
    var form = document.getElementById('formulario_adhesion');
    var botonPie = document.getElementById('botonPie');
    var condiciones = document.getElementById('condiciones');
    
    
    if(condiciones.checked == true) {
        botonPie.style.display = 'block';
    } else {
        botonPie.style.display = 'none';
    }

}


function enviarQuejaSugerencia() {
    
    form.submit();
}

function borrarFormularioQuejas() {
    form = document.getElementById('formulario_quejas');
    form.reset();
    
    objetoVacioSelect(form, 'tratamiento_cliente');
    objetoVacioSelect(form, 'nacionalidad_sol');
    objetoVacioSelect(form, 'tratamiento_cliente');
    objetoVacioSelect(form, 'dia_queja');
    objetoVacioSelect(form, 'mes_queja');
    objetoVacioSelect(form, 'any_queja');
}

function objetoVacioSelect(objForm, nom_camp) {
    var obj_sele = objForm.elements[nom_camp];
    obj_sele.options[0].selected = true;
    return true;
}

function borra_select(objForm,nom_camp){
    var obj_sele = objForm.elements[nom_camp];
    var num=obj_sele.length;
    for(i=0;i<num;i++){
      obj_sele.options[0]=null;
    }
    return true;
}

function aceptarSolicitud() {
    form = document.getElementById('formulario_declinar');
    form.submit();
}

function declinarSolicitud() {
    form = document.getElementById('formulario_declinar');
    form.submit();
}

/* Compañia aceptar/declinar solicitud de presupuesto */
function motivoDeclinar(){
	form = document.getElementById('formulario_declinar');
	nSelect = document.getElementById('motivo_declinar');
	cajaInput = document.getElementById('inputOculto');
	cajaInput.style.display = "none";
	nInput = document.getElementById("especificar_motivo");
	if (nSelect.options[nSelect.selectedIndex].value == "0"){
		cajaInput.style.display="block";
		//nInput.value="--Especificar--";
		nInput.focus();
		nInput.select();
	}
}


function desplegarSublista(idItemLista, idListaHija){

	var nListaHija = document.getElementById(idListaHija);
	var liContenedor = document.getElementById(idItemLista);
	nListaHija.style.display = 'none';

   if ( liContenedor.className == '' ){
		nListaHija.style.display = 'block';	
		liContenedor.className= 'desplegado';
	}else if(liContenedor.className == 'desplegado'){
		nListaHija.style.display = 'none';	
		liContenedor.className= '';
	}
	return false;
}


function cambiaHijos (oInputPadre, arrHijos){

 	// obtenemos la clave del array para saber cuales son los hijos
 	arrInputsHijos = arrHijos[oInputPadre.id];
 	
 	for (var i in arrInputsHijos){
 		input = document.getElementById(arrInputsHijos[i]);
		input.checked = oInputPadre.checked;
	}
}
 	




function desplegarSeccion(idSeccion){
	
	var nSeccion = document.getElementById(idSeccion);
	var regExp = /On$/;
	

	// Si no se encuentra la expresion regular (caja desactivada)
	if (nSeccion.className.search(regExp) == -1 ){
		
		nSeccion.className+= ' On';
	}else{
		nSeccion.className = nSeccion.className.replace(regExp, "");
		
	}
	
}

/* genera un listado de inputs correspondientes a las marcas que comienzan con la letra del abecedario 
asignada al identificador del anchor*/
function generaLista (nodoAnchor, hashLetras, idLista){

	if (itemActualListado != null){
		itemActualListado.className = "";	
	}
 
	var itemsListado = hashLetras[nodoAnchor.id];
	
	var nUl = document.getElementById(idLista);
	var numeroItem = 0;
	// el nodo activado pasa a ser el actual
	itemActualListado = nodoAnchor;

	// Al nodo actual le cambiamos la clase
	nodoAnchor.className = "selected"; 
	
	
	//borramos los elementos actuales de la lista

	while(nUl.hasChildNodes()){
		nUl.removeChild(nUl.firstChild);
	}
	

	
	for (var i in itemsListado){
		//alert (hashLetras[nodoAnchor.id][i].marcado);
		numeroItem += 1;
		var nLi = document.createElement("li");
		var nInput = document.createElement("input");
		var nLabel = document.createElement("label");
		
		nInput.type = "checkbox";
		nInput.id = "ele"+itemsListado[i].id;
		nInput.name = "marca"+numeroItem;
		nInput.value = itemsListado[i].id;
		
		nInput.onclick = function(){
			arrMarcas.push(itemsListado[i].id); 
		}
		
		if(hashLetras[nodoAnchor.id][i].marcado == true){
			nInput.checked = true;
		}else{
			nInput.checked = false;
		}
		
		var textoInLabel = document.createTextNode(itemsListado[i].nombre);	
		nLabel.appendChild(textoInLabel);
		nLi.appendChild(nInput);
		nLi.appendChild(nLabel);
		
		nUl.appendChild(nLi);
	}
	
	return false;
}

function marcarSeleccionados(arrChecked){
	
	for (var i in arrChecked){
		//alert (i);
	}
	
	
	
	for (var i in arrChecked){
		if(nodo = document.getElementById('ele'+i) != undefined){
			if(nodo.checked == false){
				nodo.checked = true;
			}
		}
	}
}

/*********************************************************/
/*********************************************************/
/*********************************************************/

/*************************/
/* Validador de formularios*/
/*************************/


function FormValidator(idFormulario){
	
	/* nodo del formulario */
	this.nForm =  document.getElementById(idFormulario);
	
	/* array de objetos campo, con expresion regular y mensaje de error */
	this.arrFields = new Array();
	
	/* ARRAY DE CAMPOS QUE CUMPLEN LA VALIDACION */
	this.fieldsValidos = new Array();
	
	
	/* ARRAY DE CAMPOS QUE NO CUMPLEN LA VALIDACION */
	this.fieldsNoValidos = new Array();

	
	/* Cadena de error */
	
	this.cadenaError = '';

	
	this.arrCheckGroups = new Array();
	
	this.arrCheckDependencies = new Array();
	
	this.arrRadioDependencies = new Array();
	
    this.arrSelectDependencies = new Array();
	
}

FormValidator.prototype.setAction = function(action){
	
	this.nForm.setAttribute("action",action );

}


FormValidator.prototype.addField = function(nomCamp,regExp,mensError){
	
	this.arrFields.push({name: nomCamp, expr: regExp, mensError: mensError});
	
}


FormValidator.prototype.addRadioDependencies = function(nameRadio, value, inputName, regExp, mensError){

	this.arrRadioDependencies.push({nameRadio: nameRadio, value: value ,name: inputName, regExp: regExp, mensError: mensError });

}

FormValidator.prototype.addCheckDependencies = function(checkName, inputName, regExp, mensError){
	
	this.arrCheckDependencies.push({nameCheck: checkName, nameInput: inputName, regExp: regExp, mensError: mensError});
	
}


FormValidator.prototype.addSelectDependencies = function(nameSelect, valueOption, inputName, regExp, regExpNegada, mensError){
// RegExpNegada se utiliza para validar campos que NO deben hacer match con la expresion regular pasada
    this.arrSelectDependencies.push({nameSelect: nameSelect, value: valueOption ,name: inputName, regExp: regExp, regExpNegada: regExpNegada, mensError: mensError });

}


FormValidator.prototype.addCheckGroup = function(arrNamesCheck ,mensError, minCheck, maxCheck){
	
	this.arrCheckGroups.push({arrNames: arrNamesCheck, mensError: mensError , minimo: minCheck, maximo: maxCheck});
	
}



FormValidator.prototype.checkForm = function(){
	var radioButtons;
	
	this.resetValidation();
	

	// Validamos las dependencias de los radio Buttons
	if(this.arrRadioDependencies.length > 0){
		
		for (var i in this.arrRadioDependencies){
			
			//seleccionamos en el formulario el nodo Radio button
			radioButtons = this.nForm[this.arrRadioDependencies[i].nameRadio];
			
			// es un radio??
			for (var j=0; j<radioButtons.length; j++ ){
			
				if (radioButtons[j].checked == true ){
					
					if (this.arrRadioDependencies[i].value == radioButtons[j].value){
						this.validateField( {name: this.arrRadioDependencies[i].name, expr:  this.arrRadioDependencies[i].regExp, mensError:  this.arrRadioDependencies[i].mensError } );
					}			
				}
			}			
		}
	}
	
	// Validamos las dependencias de Selects
    if(this.arrSelectDependencies.length > 0){
        
        for (var i in this.arrSelectDependencies){
            
			// name del select 
			selectName = this.arrSelectDependencies[i].nameSelect;

			valorSeleccionado = this.nForm[selectName].options[this.nForm[selectName].selectedIndex].value;
			
            // Si el valor del option seleccionado es el que fuerza a validar un campo
            if (valorSeleccionado == this.arrSelectDependencies[i].value){
                this.validateField( {name: this.arrSelectDependencies[i].name, expr: this.arrSelectDependencies[i].regExp, regExpNegada: this.arrSelectDependencies[i].regExpNegada ,mensError: this.arrSelectDependencies[i].mensError});
            }
                        
        }
    }
	


	// Validamos los grupos de checkboxes
	if(this.arrCheckGroups.length > 0){
		
		for (var i in this.arrCheckGroups){
			numChecked = 0;
			
			// Buscamos los items que estan checkeados
			for (var j in this.arrCheckGroups[i].arrNames){
				
			
				if (this.nForm[this.arrCheckGroups[i].arrNames[j]].checked){
					numChecked += 1; 
				}
			
			}
			
			// Si hay menos checkeados que el minimo exigido
			if (numChecked < this.arrCheckGroups[i].minimo){
				
				this.fieldsNoValidos.push({name: this.arrCheckGroups[i].arrNames[0], expr: '', mensError: this.arrCheckGroups[i].mensError} );
				
			// Si se ha fijado un máximo
			}else if(this.arrCheckGroups[i].maximo != false){
				// Si hay más checkeados que el máximo permitido
				if(numCheked > this.arrCheckGroups[i].maximo ){
					this.fieldsNoValidos.push({name: this.arrCheckGroups[i].arrNames[0], expr: '', mensError: this.arrCheckGroups[i].mensError});
				}
			}
		}
	
	}
	
	if (this.arrCheckDependencies.length > 0){
		
		for(var i in this.arrCheckDependencies){
			if(this.nForm[this.arrCheckDependencies[i].nameCheck].checked == true){
				
				this.validateField({name: this.arrCheckDependencies[i].nameInput, expr: this.arrCheckDependencies[i].regExp, mensError: this.arrCheckDependencies[i].mensError });
			}
		}
		
		
	}
	
	
	if (this.arrFields.length > 0 ){
		// Resto de campos
		for(var i in this.arrFields){

			this.validateField(this.arrFields[i]);	
		}
	}

	
	
	//alert ('campos que no han validado: '+this.fieldsNoValidos.length );
		
	// Obtenemos los mensajes de error de los campos no validos
	if (this.fieldsNoValidos.length > 0 ){
		for (var j in this.fieldsNoValidos){
			this.cadenaError += this.fieldsNoValidos[j].mensError + "\n";
		}		
		alert (this.cadenaError);
	}else{		
		this.nForm.submit();	
		
	}
	
}

FormValidator.prototype.validateField = function(oField){
		
		var valor = '';
		var valorRadio = '';
		// Si es un radio
		
		if (this.nForm[oField.name].length>0 && this.nForm[oField.name][0].type == 'radio' ){
			
			for (l=0; l<this.nForm[oField.name].length; l++){
				if(this.nForm[oField.name][l].checked == true){
					var valor = this.nForm[oField.name][l].value;
				}
			}
	
		// Si es un select, su valor es el del option seleccionado
		}else if(this.nForm[oField.name].type == 'select-one'){
		
			valor = this.nForm[oField.name].options[this.nForm[oField.name].selectedIndex].value;
		// Si es de tipo texto, su valor viene en value
		}else{
			valor = this.nForm[oField.name].value;
		}
		
		// Obtenemos la expresion regular
		var regularExp = oField.expr;
		
		
		// Si tenemos en el objeto oField el parámetro que indica que la expresión regular ha de negarse,
		if(oField.regExpNegada == true){
			if (valor.match(regularExp) != null){
				
				this.fieldsNoValidos.push(oField);
			}
		}
		else{
			// Si el valor no concuerda con el patron, este campo no se ha introducido correctamente
			if (valor.match(regularExp) == null){
			
				this.fieldsNoValidos.push(oField);
			}else{
			
			this.fieldsValidos.push(oField);
			}	
		}
		
}

FormValidator.prototype.resetValidation = function(){
	this.cadenaError = '';
	this.fieldsNoValidos = new Array();
	this.fieldsValidos = new Array();
}



 function ordenarMarcas( op1, op2 ){
     if( op1.nombre < op2.nombre ){
         return -1;
     }else if( op1.nombre > op2.nombre ){
         return 1;
     }
     return 0;
 }

/*
* Devuelve la referencia a un nodo DOM
*/
function $(sIdentificador){
	return document.getElementById(sIdentificador);
}

/*
* Despliega un nodo
* Recibe el identificador de la caja que contiene el formulario y el identificador del item que contiene el boton desplegar
*/
function desplegar(sIdentificadorCaja, sIdentificadorContenedorBoton ){
	var nodo = $(sIdentificadorCaja);
	var liBoton = $(sIdentificadorContenedorBoton);
	
	if (nodo.className.indexOf("Desplegado")== -1){
		desplegarSubmenus();	
		nodo.className = nodo.className+ "Desplegado";
		liBoton.className = liBoton.className + "Desplegado";
		
	}else{
		nodo.className = nodo.className.substr(0,nodo.className.indexOf("Desplegado"));
		liBoton.className = liBoton.className.substr(0,nodo.className.indexOf("Desplegado"));
		
	}
}
function desplegarSubmenus(){	
	var submenusArray = [
		"submenuIndustria",
		"submenuPuertos",
		"submenuNavegante",
		"submenuServicios"
	];
	var submenuArray = [
		"industriaMenu",
		"puertosMenu",
		"naveganteMenu",
		"serviciosMenu"
	];
	
	for (i=0;i<4;i++){	
		$(submenusArray[i]).className = "normal";
		$(submenuArray[i]).className = "normal";
	}	
}

function desplegarSubmenu(id, sIdentificadorContenedorBoton){	
	$(id).className = ( $(id).className == "submenuDesplegado" ? "normal" : "submenuDesplegado" );
	$(sIdentificadorContenedorBoton).className = ( $(sIdentificadorContenedorBoton).className == "submenuDesplegado" ? "normal" : "submenuDesplegado" );
	var submenusArray = [
		"submenuIndustria",
		"submenuPuertos",
		"submenuNavegante",
		"submenuServicios"
	];
	var submenuArray = [
		"industriaMenu",
		"puertosMenu",
		"naveganteMenu",
		"serviciosMenu"
	];
	
	for (i=0;i<4;i++){
		if( id != submenusArray[i] ){
			$(submenusArray[i]).className = "normal";
			$(submenuArray[i]).className = "normal";
		}
	}
	
	
}

function desplegarTab(id1, id2){	
	 if(id1== "tabsContenidoDatosOn"){
	 		if($(id1)!= null){
		 		$(id1).className = "normal" ;
		 	}
		 	if($(id2)!= null){
		 		$(id2).className = "normal" ;
		 	}
			if($("tabsContenidoMapaOn")!= null){
				$("tabsContenidoMapaOn").className="normal";
			}
			if($("tabsContenidoMapaOn")!= null){
				$("map_canvas").className="normal";
			}
			if($("marcas")!= null){
				$("marcas").className="normal";
			}
			if($("certificados")!= null){
				$("certificados").className="normal";
			}
			if($("asociados")!= null){
				$("asociados").className="normal";
			}
			
	 } else if(id1== "tabsContenidoMapaOn"){
	 	if($(id1)!= null){
	 		$(id1).className = "on" ;
	 	}
	 	if($(id2)!= null){
	 		$(id2).className = "on" ;
	 	}
	 	if($("tabsContenidoDatosOn")!= null){
	 		$("tabsContenidoDatosOn").className="off";
	 	}
		if($("tablaInfEmpres")!= null){
			$("tablaInfEmpres").className="off";
		}
		
		if($("marcas")!= null){
			$("marcas").className="off";
		}
		if($("certificados")!= null){
			$("certificados").className="off";
		}
		if($("asociados")!= null){
			$("asociados").className="off";
		}
		
		if (!mapLoaded) {
			loadMap();
			mapLoaded = true;
		}
	 }
}
/**

* Función para escribir una dirección de email.
*/
function escribeMail(nom, dom ,claseCss){
  document.write( '<a class="'+claseCss+'" hr'+'ef="mai'+'lto:'+nom+'@'+dom+'">'+nom+'@'+dom+'</a>' );
}

function escribePrincipioMail(nom, dom ,claseCss){
  document.write( '<a class="'+claseCss+'" hr'+'ef="mai'+'lto:'+nom+'@'+dom+'">' );
}

function escribeMailSinEnlace(nom, dom){
  document.write( nom+'@'+dom );
}

function montaHrefMail(nom, dom) {
	 return 'mai'+'lto:'+nom+'@'+dom;
}

function escribeHrefMail(nom, dom) {
	 document.write('mai'+'lto:'+nom+'@'+dom);
}

function montaMail(nom, dom ,claseCss){
  return '<a class="'+claseCss+'" hr'+'ef="mai'+'lto:'+nom+'@'+dom+'"><u>'+nom+'@'+dom+'</u></a>';
}


