//Cach&eacute; de candidatos
var dataCache = { };
var candidatoSeleccionado;

//Control de listado de localidades
var localidades;

//Nombre del patr&oacute;n de opciones de candidatos de cobertura
var patronText;
var patronTextSinCandidatos;

//Elementos del formulario

//a)Campos del formulario
 var numeroTelefonoInput;
 var dispongoLineaCheck;
 var provinciaIdInput;
 var poblacionInput;
 var codigoPostalInput;
 var nombreViaInput;
 var tipoViaInput;
 var numeroInput;
 var zonaCobertura;
 var captchaTextInput;

//b)Elementos seleccionados de la consulta de cobertura
 var provinciaSelec;
 var poblacionSelec;
 var codigoPostalSelec;
 var nombreViaSelec;

//Control ambiüedad de v&iacute;as
 var viasControl;

/*
 **GetInitObjects**
	Entrada:
 	Salida:
	Resultado: Recoge los objetos del formulario
	***Hay que llamar a esta funci&oacute;n antes que a cualquier otra!***
*/

String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,'') }

function GetInitObjects(){

	//a)Campos del formulario
	numeroTelefonoInput = document.getElementById('cobNumeroTelefono');
	provinciaIdInput = document.getElementById('cobIdProvincias');
	poblacionInput = document.getElementById('cobPoblacion');
	codigoPostalInput = document.getElementById('cobCodigoPostal');
	nombreViaInput = document.getElementById('cobNombreVia');
	tipoViaInput = document.getElementById('cobTipoVia');
	numeroInput = document.getElementById('cobNumero');
	zonaCobertura = document.getElementById('zonaCobertura');
	captchaTextInput = document.getElementById('cobCaptchaText');
	if (document.getElementById('dispongoLinea')!=null){
		dispongoLineaCheck = document.getElementById('dispongoLinea');
	}else if (document.getElementById('dispongoLinea1')!=null){
		dispongoLineaCheck = document.getElementById('dispongoLinea1');
	}

	//b)Elementos seleccionados de la consulta de cobertura
	provinciaSelec = document.getElementById('cobSelectProvincia');
	poblacionSelec = document.getElementById('cobSelectMunicipio');
	codigoPostalSelec = document.getElementById('cobSelectCodigoPostal');
	nombreViaSelec = document.getElementById('cobSelectDescripcionVia');

	//Control de ambigüedad de v&iacute;as
	viasControl = document.getElementById('cobViasControl');

	//Otros
	patronText = 'pattern';
	patronTextSinCandidatos = 'patternSinCandidatos';
	localidades = false;
	candidatoSeleccionado = -1;
}




/*
 **getCandidatos**
	Entrada:
 	Salida:
	Resultado: Obtiene el listado de candidatos seg&uacute;n los elementos recogidos del formulario
	y seg&uacute;n la selecci&oacute;n de candidatos (por localidad y descripci&oacute;n de v&iacute;a)
	Nota: Uso para consulta de cobertura dinámica (en única página). Hasta 20/11/2009. A partir de esta fecha se usa GetCandidatosFromLocalidad
	se usa dinámicamente para obtener candidatos a partir de una localidad seleccionada en la página nueva de candidatos.
*/

function GetCandidatos(){

	var textProvincia;
	var textPoblacion;
	var textCodigoPostal;

	document.getElementById("loadingImg").src = 'img/loading16.gif';
	document.getElementById("btnConsultar").className = 'floatRight textBtnPurple';
	document.getElementById("btnConsultar").href = '#';
	if (localidades){
		//Se ha realizado la seleccion de un candidato para la localidad

		textProvincia = provinciaSelec.value;
		textPoblacion = poblacionSelec.value;
		textCodigoPostal = codigoPostalSelec.value;

	}else{

		//Se ha realizado la seleccion de un candidato para la calle

		if (provinciaSelec.value==""){ //Ha salido directamente un listado de calles, si no, &eacute;ste estar&iacute;a rellenado
			textProvincia = provinciaIdInput[provinciaIdInput.selectedIndex].text;
		}else{
			textProvincia = provinciaSelec.value; //Por si acaso.
		}

		textPoblacion = poblacionInput.value;
		textCodigoPostal = codigoPostalInput.value;

	}

	var textNombreVia = nombreViaInput.value;
	var textTipoVia = tipoViaInput[tipoViaInput.selectedIndex].text;
	var textNumVia = numeroInput.value;
	var textNumTelf = numeroTelefonoInput.value;
	var textCaptcha = captchaTextInput.value;
	var booleanDispongoLinea = dispongoLineaCheck.checked;
	CandidatoCoberturaJS.getCandidatoCobertura(textTipoVia, textNombreVia, textNumVia, textNumTelf, textProvincia, textPoblacion, textCodigoPostal, {

		callback:function(data){

			/* DECLARACIONES */

			//Patron de opciones del listado de cobertura
			var patron = document.getElementById(patronText);

			//Muestra o Oculta Divs
			var mostrar = '';
			var ocultar = 'none';

			//Zona de Cobertura
			var resultadoCobertura = document.getElementById('resultadosConsultaCobertura');

			//El mensaje devuelto por consulta que no reconoce la localidad comienza por '2'
			var msgIniLocalidadesErr = '2';
			var msgIniViasErr = '3';
			var candidato;
			var token = ', ';

			//Chimo y  bot&oacute;n de consulta
			var imagenEspera = document.getElementById("loadingImg");
      		var botonConsultar = document.getElementById("btnConsultar");

			/* FIN DECLARACIONES */

			localidades = false;

			if(data!=null){
				//El formulario ha sido validado
				if(data.length>0){
					//La consulta devuelve candidatos

					for (var i = 0; i < data.length; i++) {
						//Se rellena el listado de candidatos

		      			candidato = data[i];
		      			id = i+1;

						//En la primera iteraci&oacute;n determinamos si se trata de ambiüedad de v&iacute;as.
						//Para tal caso el tipo de v&iacute;a ha de ir vac&iacute;o

		      			if(i==0){
		      				if (candidato.mensaje.substring(0,1) == msgIniViasErr){
								//Listado de v&iacute;as ambigüas / error
									viasControl.value="1";

							}else if(candidato.tipoRetorno=="0"){
								viasControl.value="2";
							}else{
								viasControl.value="";
							}
		      			}

						var optn = patron.cloneNode(true);

						if (candidato.mensaje.substring(0,1) !== msgIniLocalidadesErr){
							//Listado de v&iacute;as
							optn.text = candidato.descripcionVia + token + candidato.codigoPostal + token + candidato.provincia + token + candidato.municipio;

						}else{
							//Listado de localidades
							optn.text = candidato.codigoPostal + token + candidato.provincia + token + candidato.municipio;
							localidades = true;
						}

						optn.value = patronText + id;
						optn.id = patronText + id;
						zonaCobertura.appendChild(optn);
		      			dataCache[id] = candidato;

		    		}

						//Se a&ntilde;ade opci&oacute;n "Ninguna de las anteriores"
		    			var optn = patron.cloneNode(true);
		    			zonaCobertura.appendChild(optn);

						//Se han obtenido candidatos. Se muestran.
		      			resultadoCobertura.style.display = mostrar;
		      			cambiarCaptcha();
		      			imagenEspera.src = 'img/spacer.gif';
      					botonConsultar.className = 'floatRight textBtnRed';
      					botonConsultar.href = 'javascript:ConsultarCobertura()';
						location.href="#divCandidatos";

		      	}

	      		else{

					//No se han obtenido candidatos. Se avisa y se muestra resultadoCobertura con "No hemos encontrado...".

		      		resultadoCobertura.style.display = mostrar;
		      		//Se a&ntilde;ade opci&oacute;n "No hemos encontrado..."
		    		var optn = document.getElementById(patronTextSinCandidatos).cloneNode(true);
		    		zonaCobertura.appendChild(optn);
					cambiarCaptcha();
		      		imagenEspera.src = 'img/spacer.gif';
      				botonConsultar.className = 'floatRight textBtnRed';
      				botonConsultar.href = 'javascript:ConsultarCobertura()';


	      		}

	      }else{
					cambiarCaptcha();
	      	   		imagenEspera.src = 'img/spacer.gif';
   	   				botonConsultar.className = 'floatRight textBtnRed';
   	   				botonConsultar.href = 'javascript:ConsultarCobertura()';
	      }
	},

	errorHandler:function(){document.forms['coberturaForm'].submit();}
	});
}

/*
 **getCandidatosFromLocalidad**
	Entrada:
 	Salida: Listado de posibles candidatos
	Resultado: Obtiene el listado de candidatos seg&uacute;n los elementos recogidos del formulario
	y seg&uacute;n la selecci&oacute;n de candidatos (por localidad)
	Nota: Uso a partir del 20/11/2009 tras dividir el proceso de consulta de cobertura.
*/

function GetCandidatosFromLocalidad(provincia,poblacion,cp,nombreVia,tipoVia,numVia,numTelf){

	var textProvincia = provincia;
	var textPoblacion = poblacion;
	var textCodigoPostal = cp;

	//**** Necesitamos del formulario: ****

	var textNombreVia = nombreVia;
	var textTipoVia = tipoVia;
	var textNumVia = numVia;
	var textNumTelf = numTelf;

	//Chimo y  bot&oacute;n de consulta
	var imagenEspera = document.getElementById("loadingImg");
	imagenEspera.src = 'img/loading16.gif';

	//*************************************

	CandidatoCoberturaJS.getCandidatoCobertura(textTipoVia, textNombreVia, textNumVia, textNumTelf, textProvincia, textPoblacion, textCodigoPostal, {

		callback:function(data){

			/* DECLARACIONES */

			//Codigo a inyectar
			var code = '';

			//Muestra o Oculta Divs
			var mostrar = '';
			var ocultar = 'none';

			//Zona de listado de candidatos tras consulta de localidad
			var resultadoCobertura = document.getElementById('resultadoConsultaLocalidad');

			//Zona de listado de candidatos previa  a la consulta de localidad
			var resultadoPrevio = document.getElementById('resultadoPrevio');
			//El mensaje devuelto por consulta que no reconoce la localidad comienza por '2'
			var msgIniLocalidadesErr = '2';
			var msgIniViasErr = '3';
			var candidato;
			var token = ', ';

			//Chimo y  bot&oacute;n de consulta
			var imagenEspera = document.getElementById("loadingImg");
      		var opcionNinguna = document.getElementById("opcionNinguna").value;
			var opcionNingunaPropuestas = document.getElementById("opcionNingunaPropuestas").value;


			/* FIN DECLARACIONES */

			if(data!=null){
				code = code + '<ul>';
				if(data.length>0){
					//La consulta devuelve candidatos

					for (var i = 0; i < data.length; i++) {
						//Se rellena el listado de candidatos

		      			candidato = data[i];
		      			id = i+1;

						//En la primera iteraci&oacute;n determinamos si se trata de ambiüedad de v&iacute;as.
						//Para tal caso el tipo de v&iacute;a ha de ir vac&iacute;o

		      			if(i==0){
		      				if (candidato.mensaje.substring(0,1) == msgIniViasErr){
								//Listado de v&iacute;as ambigüas / error
									viasControl.value="1";

							}else if(candidato.tipoRetorno=="0"){
								viasControl.value="2";
							}else{
								viasControl.value="X";
							}
		      			}

						if (candidato.mensaje.substring(0,1) !== msgIniLocalidadesErr){
							//Listado de v&iacute;as

							code = code + '<li><a href=\'javascript:seleccionCandidato("';
							code = code + candidato.descripcionVia + '","';
							code = code + candidato.codigoPostal + '","';
							code = code + candidato.provincia + '","';
							code = code + candidato.municipio + '");\'>';
							code = code + candidato.descripcionVia + "," + candidato.codigoPostal + "," + candidato.provincia + "," + candidato.municipio + "</a></li>";
						}else{
							//Listado de localidades

							code = code + '<li><a href="javascript:seleccionCandidato("' + candidato.codigoPostal + '","' + candidato.provincia+'","'+candidato.municipio+'");">';
							code = code + candidato.codigoPostal + "," + candidato.provincia + "," + candidato.municipio + "</a></li>";
							localidades = true;
						}

		    		}

						//Se a&ntilde;ade opci&oacute;n "Ninguna de las anteriores"
		    			code = code + '<br />';
		    			code = code + "<li class='continIdem'>";
		    			code = code + '<strong>' + opcionNingunaPropuestas + '</strong>' + '<br />';
						code = code + '<a href="javascript:seleccionCandidato(\'\',\'\',\'\',\'\');">Deseo continuar con los datos introducidos.</a></li></ul>';
						code = code + "<button name='btnC' class='btnGrey' type='button' value='nConsulta' title='Nueva Consulta' onclick=\"location.href=\'consultaCoberturaAdsl.do\'\"><span><span><span>Nueva Consulta</span></span></span></button>"
						resultadoCobertura.innerHTML=code;

						//Se han obtenido candidatos. Se muestran.
						resultadoPrevio.style.display = ocultar;
		      			resultadoCobertura.style.display = mostrar;
		      			imagenEspera.src = 'img/spacer.gif';

		      	}

	      		else{

					//No se han obtenido candidatos. Se avisa y se muestra resultadoCobertura con "No hemos encontrado...".

		      		imagenEspera.src = 'img/spacer.gif';
		      		code = code + '<br />';
		      		code = code + "<li class='continIdem'>";
		    		code = code + '<strong>' + opcionNinguna + '</strong><br />';
					code = code + '<a href="javascript:seleccionCandidato(\'\',\'\',\'\',\'\')">Deseo continuar con los datos introducidos.</a></li></ul>';
					code = code + "<button name='btnC' class='btnGrey' type='button' value='nConsulta' title='Nueva Consulta' onclick=\"location.href=\'consultaCoberturaAdsl.do\'\"><span><span><span>Nueva Consulta</span></span></span></button>"
					resultadoCobertura.innerHTML=code;
					resultadoPrevio.style.display = ocultar;
		      		resultadoCobertura.style.display = mostrar;
					imagenEspera.src = 'img/spacer.gif';
	      		}

	      }else{
	      	   		imagenEspera.src = 'img/spacer.gif';
	      	   		document.forms['coberturaCandidatoForm'].submit();
	      }
	},

	errorHandler:function(){document.forms['coberturaCandidatoForm'].submit();}
	});

}


/*
 ** RemoveOptions **
	Entrada: Objeto select
	Salida:
	Resultado: Vac&iacute;a un select
*/

function RemoveOptionsZonaCobertura(){
	zonaCobertura.options.length = 0;
}


/*
 ** GuardarCandidato **
	Entrada: candidato
	Salida:
	Resultado: Guarda el candidato seleccionado
*/

function GuardarCandidato(candidato){

	var patternlength = patronText.length;
	var posCoincide = 0;
	candidatoSeleccionado = candidato.substring(patternlength);

	if (candidato!==patronText && candidato!==patronTextSinCandidatos){

		//Se ha seleccionado un valor del listado correspondiente a un candidato
		//devuelto por la consulta de cobertura

		codigoPostalSelec.value=dataCache[candidatoSeleccionado].codigoPostal;
		provinciaSelec.value=dataCache[candidatoSeleccionado].provincia;
		poblacionSelec.value=dataCache[candidatoSeleccionado].municipio;
		nombreViaSelec.value=dataCache[candidatoSeleccionado].descripcionVia;


			//Se modifica el formulario con los valores seleccionados.
			codigoPostalInput.value = codigoPostalSelec.value;
			poblacionInput.value = poblacionSelec.value;

			if(nombreViaSelec.value.trim()!=""){
				//Se devuelve nombre --> Listado de calles.
				nombreViaInput.value = nombreViaSelec.value;
			}

			for(i=0;i<provinciaIdInput.length;i++){

				if(provinciaIdInput[i].text.trim()==dataCache[candidatoSeleccionado].provincia.trim()){
					//La provincia devuelta existe en el combo que listamos, actualizamos el combo.
					provinciaIdInput.selectedIndex = i;
					break;
				}
			}

		}
	else{
		//Se ha seleccionado "Ninguna de las anteriores..." --> Se contin&uacute;a con los valores rellenados en el formulario
		localidades = false;

		//Vaciamos datos de los valores seleccionados para continuar con lo que tenemos rellenado.
		provinciaSelec.value="";
		poblacionSelec.value="";
		nombreViaSelec.value="";
		codigoPostalSelec.value="";
	}
}

/*
 ** ValidarFormularioCobertura **
	Entrada: 	formulario --> Objeto form

				*Necesario declarado ValidationHelper.js en la p&aacute;gina
				que llama a esta funci&oacute;n
	Salida:
	Resultado: Valida el formulario
*/

function ValidarFormularioCobertura(formularioCobertura){

	//En la p&aacute;gina principal tiene que estar incluido el script ValidationHelper.js y validation.js

	validateFormInputField(provinciaIdInput,formularioCobertura);
	validateFormInputField(poblacionInput,formularioCobertura);
	validateFormInputField(codigoPostalInput,formularioCobertura);
	validateFormInputField(tipoViaInput,formularioCobertura);
	validateFormInputField(nombreViaInput,formularioCobertura);
	validateFormInputField(numeroInput,formularioCobertura);
	if (!dispongoLineaCheck.checked){
		validateFormInputField(numeroTelefonoInput,formularioCobertura);
	}
	validateFormInputField(captchaTextInput,formularioCobertura);
}



/*
 ** OcultarZonaCobertura **
	Entrada:
	Salida:
	Resultado: Oculta la caja de candidatos
*/

function OcultarZonaCobertura(){
	document.getElementById('resultadosConsultaCobertura').style.display='none';
}

/*
 ** ClearSpanAjaxErrors **
	Entrada:
	Salida:
	Resultado: Limpia los span usados para mostrar los errores de validaci&oacute;n en Ajax
*/

function ClearSpanAjaxErrors(){
	document.getElementById('cobIdProvinciasError').innerHTML="";
	document.getElementById('cobPoblacionError').innerHTML="";
	document.getElementById('cobCodigoPostalError').innerHTML="";
	document.getElementById('cobTipoViaError').innerHTML="";
	document.getElementById('cobNombreViaError').innerHTML="";
	document.getElementById('cobNumeroError').innerHTML="";
	document.getElementById('cobNumeroTelefonoError').innerHTML="";
	document.getElementById('cobCaptchaTextError').innerHTML="";
}