//funciones javascript asociadas

//al localizador de oficinas

//&Aacute;lvaro P&eacute;rez Rodr&iacute;guez



var Oficinas_encontradas = asignar("Centros Destacados:");

var Oficinas_provincia =  asignar("Centros de la Provincia de ");

var Oficinas_capital =  asignar("Su c&oacute;digo postal pertenece a la capital de ");

var Centros_Mostrados = null;

var valor_cp = null; //Valor del c&oacute;digo postal que le pasamos a trav&eacute;s de centros.htm

var mensa_codpos1 = asignar("Introduzca un código postal para poder realizar la búsqueda");
var mensa_codpos2 = asignar("El código postal introducido no existe");
var mensa_nocent = asignar("No hay centros de FREMAP en la provincia de ");
var centro = asignar("CENTRO");
var telefono = asignar("TELÉFONO");
var fax = asignar("FAX");

function asignar(texto)
{
   return texto;
}		



//Algoritmo de Ordenaci&oacute;n QuickSort

function Quicksort(vec, loBound, hiBound)

{

	var pivot, loSwap, hiSwap, temp;

	

	pivot = new ListaHija(0,"","","","","");



	// 2 items para ordenar

	if (hiBound - loBound == 1)

	{

		if (vec[loBound].codpostal > vec[hiBound].codpostal)

		{

			temp = vec[loBound];

			vec[loBound] = vec[hiBound];

			vec[hiBound] = temp;

		}

		return;

	}

	// 3 o m&aacute;s items para ordenar

	pivot = vec[parseInt((loBound + hiBound) / 2)];

	vec[parseInt((loBound + hiBound) / 2)] = vec[loBound];

	vec[loBound] = pivot;

	loSwap = loBound + 1;

	hiSwap = hiBound;

	do {

		// Encuentra el pivote derecho menor

		while (loSwap <= hiSwap && vec[loSwap].codpostal <= pivot.codpostal)

			loSwap++;



		// pivote derecho mayor

		while (vec[hiSwap].codpostal > pivot.codpostal)

			hiSwap--;



		// intercambia los valores 

		if (loSwap < hiSwap)

		{

			temp = vec[loSwap];

			vec[loSwap] = vec[hiSwap];

			vec[hiSwap] = temp;

		}

	} while (loSwap < hiSwap);



	vec[loBound] = vec[hiSwap];

	vec[hiSwap] = pivot;



	// llamada recursiva

	if (loBound < hiSwap - 1)

		Quicksort(vec, loBound, hiSwap - 1);



	if (hiSwap + 1 < hiBound)

		Quicksort(vec, hiSwap + 1, hiBound);

}



//lista de provincias espa&ntilde;olas	

var Lista = new InicializaArray(52)  // Designamos el tama&ntilde;o



//da valores a la lista

Dar_Valores()



//funci&oacute;n asociada a la pulsaci&oacute;n de tecla dentro de la caja de texto

//asociada con el c&oacute;digo postal

function Pulsa(event)

{

	// Backspace = 8, Enter = 13, '0' = 48, '9' = 57

	var key = nav4 ? event.which : event.keyCode;



	var key = nav4 ? event.which : event.keyCode;



	 if (event.keyCode)

	 {

         iAscii = event.keyCode;

	 }

     else

	 {

	  	if (event.which)

	  	{

         	iAscii = event.which;

		}

	    else

		{

         	return false;

		}

	 }

    if (iAscii == 13)

	 {

		 validacp();

	 }

	  if(iAscii >= 48 && iAscii <= 57)

	 {

//	 	 document.getElementById("provincia").value = " ";

		 document.getElementById("provincia").options[0].selected = true;	

		 document.getElementById("resultado").innerHTML = "";		

		 return true;

	 }
	 
	  if(iAscii == 8)

	 {

		 return true;

	 }
	 
	  if(iAscii == 37)

	 {

		 return true;

	 }
	 
	 if(iAscii == 39)

	 {

		 return true;

	 }
	 
	 if(iAscii == 46)

	 {

		 return true;

	 }
	 

	 else

	 {

 	 	return false;

	 }

}



//funci&oacute;n asociada a la pulsaci&oacute;n de tecla dentro de la caja de texto

//asociada con el c&oacute;digo postal que se encuentra en centros.htm

function Pulsa_Centros(event)

{

	// Backspace = 8, Enter = 13, '0' = 48, '9' = 57

	var key = nav4 ? event.which : event.keyCode;



	var key = nav4 ? event.which : event.keyCode;

	

	var cpostal = document.getElementById('cpostal').value; 



	 if (event.keyCode)

	 {

         iAscii = event.keyCode;

	 }

     else

	 {

	  	if (event.which)

	  	{

         	iAscii = event.which;

		}

	    else

		{

         	return false;

		}

	 }

    if (iAscii == 13)

	 {

	   if(cpostal.length == 5)

	   {

	      window.location.href='../accitrab/locaofi.htm?cp='+ cpostal;

      }

      else

      {

        return false;

      }

	 }

	  if(iAscii >= 48 && iAscii <= 57)

	 {

		 return true;

	 }

	 else

	 {

 	 	return false;

	 }

}





//funci&oacute;n que obtiene el valor que se pasa mediante la url

function obtener_valor(variable) 

{

   //Coge la direcci&oacute;n url

   var remplaza = /\+/gi; 

   var url = window.location.href;

   url = unescape(url);

   url = url.replace(remplaza, " ");

   url = url.toUpperCase();

   

   //Al tener la direcci&oacute;n url ahora extraemos de ella s&oacute;lo los 5 d&iacute;gitos que son los que nos hacen falta para hacer

   //la b&uacute;squeda.

   var separador = variable.toUpperCase(); //Separador para saber a partir de d&oacute;nde hay que obtener el c&oacute;digo postal

   var longitud_url = url.indexOf(separador);//Longitud de la url sin lo a&ntilde;adido, es decir, sin cp + c&oacute;digo postal



   if (longitud_url != -1) 

   {

      var separa = url.indexOf("&", longitud_url);

      if (separa != -1) 

      {

         return url.substring(longitud_url + separador.length + 1, separa);

      }

      else

      {

         return url.substring(longitud_url + separador.length + 1, url.length);

      }

    }

    else

    {

      return "N";

    }

}





//Pasa el valor del c&oacute;digo postal que introducimos en la p&aacute;gina de centros, a la p&aacute;gina donde mostramos 

//los resultados para que se muestren los centros de este c&oacute;digo.

function pasar_valor()

{

   //Si est&aacute; vac&iacute;a la casilla del c&oacute;digo postal y de la provincia de la p&aacute;gina donde se muestran los

   //formularios quiere decir que se carga desde la p&aacute;gina de centros, con lo cual, tiene que obtener el

   //valor que se quiere buscar.

   if (document.getElementById("cpostal").value == "" && document.getElementById("provincia").value == " ")

   {

      var valor_cp = obtener_valor("cp");

      if (valor_cp!= "" && valor_cp!="N")

      {

         document.getElementById("cpostal").value = valor_cp;

         validacp();

      }

    }

   //Si alguno de los campos tiene datos quiere decir que hemos actualizado la p&aacute;gina con lo cual, no necesitamos

   //el valor que queremos buscar ya que autom&aacute;ticamente este coge el valor que hay en las casillas.

   else

   {

      validacp();

   }      

}


//valida que el usuario haya introducido un c&oacute;digo postal

//para realizar la b&uacute;squeda.

//Si la validaci&oacute;n es correcta llama al m&eacute;todo de b&uacute;squeda

//y al de impresi&oacute;n de resultados.

function validacp()

{

   var codigo = document.getElementById("cpostal").value;

   var provincia = document.getElementById("provincia").value;

	

	//si el c&oacute;digo postal est&aacute; vacio pero hay una provincia seleccionada

	if(codigo == "" && provincia != " ")

	{

		document.getElementById("resultado").innerHTML = "";

		busca_combo();

	}

	else

	{


		if(codigo == "" || codigo.length < 5)

		{

			alert(mensa_codpos1);

			document.getElementById("cpostal").focus();

			document.getElementById("resultado").innerHTML = "";

			ofi_cercanas = null;

			Centros_Mostrados = null;

	

		}

		else

		{

			if(codigo < "01000" || codigo > "52999")

			{

				alert(mensa_codpos2);

				document.getElementById("cpostal").focus();

				document.getElementById("resultado").innerHTML = "";

				ofi_cercanas = null;

				Centros_Mostrados = null;

			}

			else

			{

				document.getElementById("resultado").innerHTML = "";

				ofi_cercanas = null;		

				Centros_Mostrados = null;		

				Centros_Mostrados = new Array();

				busca();

			}

		}

	}

}



//Se utiliza para que al darle al bot&oacute;n buscar de la p&aacute;gina de centros

//nos redireccione a la otra p&aacute;gina y compruebe que hemos insertado los 5 d&iacute;gitos

//del c&oacute;digo postal

function busca_Centros()

{

   var codigo = document.getElementById("cpostal").value;

   	

	//si el c&oacute;digo postal est&aacute; vacio

	if(codigo == "" || codigo.length < 5)

	{

		alert(mensa_codpos1);

		document.getElementById("cpostal").focus();

	}

	else

	{

		if(codigo < "01000" || codigo > "52999")

		{

			alert(mensa_codpos2);

			document.getElementById("cpostal").focus();

		}

		else

		{

			window.location.href='../accitrab/locaofi.htm?cp='+ cpostal.value

		}

	}

}



//evento asociado al bot&oacute;n borrar del formulario. Limpia

//el campo de texto del c&oacute;digo postal.

function borrar()

{


	var cadena = window.location.toString();

	sub_cadenas =new Array(2); 

	sub_cadenas = cadena.split("?");

		

	document.getElementById("cpostal").value = "";

	document.getElementById("cpostal").focus();	

	
	document.getElementById("provincia").options[0].selected = true;

	document.getElementById("resultado").innerHTML = "";

	window.location.href=sub_cadenas[0];

	
	ofi_cercanas = null;

}



//retorna los centros de la capital de una provincia

function CentrosCapital(centros, provincia)

{



	var centros_capital = new Array();

	var j = 0;

	var i = 0;



	for(i=0; i<centros.length; i++)

	{

		if(centros[i].codpostal.charAt(0) == '0')

		{

			centros_capital[j++] = centros[i];

		}

	}



	return centros_capital;



}



//evento asociado al cambio de valor de la combo de provincia

function limpia_resultados()

{

	document.getElementById("cpostal").value = "";

	document.getElementById("resultado").innerHTML = "";

	ofi_cercanas = null;

	busca_combo();

}



//busca con el valor de la combo de la provincia

function busca_combo()

{

	var provin = document.getElementById("provincia").value;



	if(provin >= 1)

	{

		Centros_Mostrados = null;

		Centros_Mostrados = new Array();



		var etiqueta_prov = Oficinas_provincia + Lista[provin].nomprovin + ":";



		pinta_centros(Lista[provin].oficinas, provin, etiqueta_prov);

	}



}



//Realiza la b&uacute;squeda de los c&oacute;digos postales.

function busca()

{

	var capa = document.getElementById("resultado")

	capa.style.display = "block";

	

   var codigo = document.getElementById("cpostal").value;

   var cpostal = codigo.toString();	

	var subcpostal = cpostal.charAt(2) + cpostal.charAt(3) + cpostal.charAt(4); 

		

	var nomprovin = "";

	var nomofi ="";

	var encontrado = false;

	var ofi_cercanas = new Array(); 

	var es_capital = cpostal.charAt(2) == '0' ? true : false;

	var etiqueta_prov = "";

	

	var provin = cpostal.charAt(0); 

	

	if(provin != '0')

	{

		provin += cpostal.charAt(1);

	}

	else

	{

		provin = cpostal.charAt(1);

	}

	

	nomprovin = Lista[provin].nomprovin



	//se comprueba si la provincia tiene alg&uacute;n centro

	if(Lista[provin].oficinas.length == 0)

	{

		document.getElementById("resultado").innerHTML = "no hay centros";

		pinta_mensaje(mensa_nocent+ Lista[provin].nomprovin)

	}

	else

	{

		//se realiza la b&uacute;squeda directa por clave

		var j = 0;

		var i = 0;

		

		for(i=0; i<Lista[provin].oficinas.length; i++)

		{

			if(Lista[provin].oficinas[i].codpostal == subcpostal)

			{

				encontrado = true;

				

				ofi_cercanas[j++] = new ListaHija(Lista[provin].oficinas[i].codpostal,

											Lista[provin].oficinas[i].direccion,

											Lista[provin].oficinas[i].localidad,

											Lista[provin].oficinas[i].enlacemap,

											Lista[provin].oficinas[i].telefono,

											Lista[provin].oficinas[i].fax,

											Lista[provin].oficinas[i].horario);	

			}

		}

	

		if(!encontrado)

		{

		

			//copia auxiliar de las oficinas de la provincia seleccionada

			OfiCerca = new Array();

			OfiCerca = Lista[provin].oficinas;

		

			//se ordenan por c&oacute;digo postal

			Quicksort(OfiCerca, 0, (OfiCerca.length-1));

	

			//si el c&oacute;digo postal es de una capital, se muestran los c&oacute;digos postales de la capital

			if(es_capital)

			{

				var centros_capital = new Array();

	

				centros_capital = CentrosCapital(OfiCerca, provin);

				

				var etiqueta =  Oficinas_capital + Lista[provin].nomprovin + ":";

				

				pinta_centros(centros_capital, provin, etiqueta);

				

				etiqueta_prov = Oficinas_provincia + Lista[provin].nomprovin + ":";

	

				pinta_centros(Lista[provin].oficinas, provin, etiqueta_prov);

				

				return;

		

			}

			else

			{

				//cercana por arriba

				for(i=0; i<OfiCerca.length; i++)

				{

					if(OfiCerca[i].codpostal > subcpostal)

					{

						ofi_cercanas[0] = OfiCerca[i];

						i = OfiCerca.length;

					}

				}

				//cercana por abajo

				for(i=OfiCerca.length-1; i>=0; i--)

				{

					if(OfiCerca[i].codpostal < subcpostal)

					{

						ofi_cercanas[1] = OfiCerca[i];					

						i = -1;

					}

				}

				

				//si s&oacute;lo ha encontrado una oficina mayor o s&oacute;lo una menor

				if(ofi_cercanas[0] == null)

				{

					ofi_cercanas[0] = "";

				}

				if(ofi_cercanas[1] == null)

				{

					ofi_cercanas[1] = "";

				}

				

				//primero muestra la oficina cuyo cpostal se acerque m&aacute;s

				if((ofi_cercanas[0] != "") && (ofi_cercanas[1] != ""))

				{

					if(eval(ofi_cercanas[0].codpostal - subcpostal) > eval(subcpostal - ofi_cercanas[1].codpostal))

					{

						var ofi_aux = new Array();

						ofi_aux[0] = ofi_cercanas[1];

						ofi_cercanas[1] = ofi_cercanas[0];

						ofi_cercanas[0] = ofi_aux[0];

					}

				}

			}

		}

		

		pinta_centros(ofi_cercanas, provin, Oficinas_encontradas);

	

		var etiqueta_prov = Oficinas_provincia + Lista[provin].nomprovin + ":";

	

		pinta_centros(Lista[provin].oficinas, provin, etiqueta_prov);

	}

}



//comprueba si el centro ha sido pintado

function esta_pintado(codigo)

{

var j = 0;



	for(j = 0; j < Centros_Mostrados.length; j++)

	{

		if(	Centros_Mostrados[j] == codigo)

		{

			j = Centros_Mostrados.length;

			return true;

		}

	}

	Centros_Mostrados[Centros_Mostrados.length] = codigo;

	return false;

}



//carga el c&oacute;digo html necesario para mostrar la tabla de centros.

function pinta_centros(Centros, provincia, etiqueta)

{

	var registros_HTML = "";

	var i = 0;

	var cabecero_HTML = '<!-- Bullet de Primer Nivel { -->'+

				'<TABLE WIDTH=98% CELLPADDING=0 CELLSPACING=6 BORDER=0>'+

	'		        <TR><!-- Usar <b>[texto]</b> para negritas y <a href="">[texto]</a> para enlaces -->'+

	'	                <TD VALIGN="BASELINE" WIDTH=7><IMG SRC="../../images/bul_rojo.gif" BORDER=0 ALT=""></TD>'+

	'	                <TD VALIGN="BASELINE" WIDTH=589 CLASS="bulnivel1"><B>'+ etiqueta +'</B></TD>'+

	'		        </TR>'+

	'			</TABLE>'+

	'			<TABLE WIDTH=98% CELLPADDING=0 CELLSPACING=6 BORDER=0>'+

	'				<TR>'+

	'					<TD VALIGN="BASELINE" WIDTH=7><IMG SRC="../../images/pixel_trans.gif" BORDER=0 ALT=""></TD>'+

	'					<TD>'+

	'						<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>'+

	'					        <TR>'+

	'			            	    <TD BGCOLOR="#999999">'+

	'			                        <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=0 BGCOLOR="#999999">'+

	'			                	        <TR HEIGHT="24">'+

	'			                           		<TD WIDTH="365" ALIGN="CENTER" CLASS="filacab">'+centro+'</TD>'+

	'			                                <TD WIDTH="100" ALIGN="CENTER" CLASS="filacab">'+telefono+'</TD>'+

	'			                                <TD WIDTH="100" ALIGN="CENTER" CLASS="filacab">'+fax+'</TD>'+

	'			                            </TR>'+

	'			                        </TABLE>'+

	'			                	</TD>'+

	'			        		</TR>'+

	'					        <TR>'+

	'			        	        <TD HEIGHT=4 STYLE="font-size:4px;"></TD>'+

	'					        </TR>';

	

	//si la provincia viene con un &uacute;nico d&iacute;gito



	for(i=0; i < Centros.length; i++)

	{

		//si el centro tiene valores y ha sido mostrado antes.

		if((Centros[i] != "") && (!esta_pintado(provincia + Centros[i].telefono)))

		{

			registros_HTML += '      <TR>'+

			'				                <TD BGCOLOR="#999999">'+

			'					                <TABLE BORDER="0" CELLSPACING=1" CELLPADDING="0" BGCOLOR="999999">'+

			'			          	            	<TR>'+

			'			                            	<TD BGCOLOR="#999999">'+

			'			                                	<TABLE BORDER="0" CELLSPACING=0 CELLPADDING="0" BGCOLOR="999999">'+

			'			                                    	<TR>'+

			'														<TD WIDTH="312"ALIGN="LEFT" CLASS="datos" VALIGN="TOP">&nbsp;'+ Centros[i].direccion ;

			

			if(provincia.length == 1)

			{

				registros_HTML += '	<BR>&nbsp;0'+ provincia + Centros[i].codpostal +'&nbsp;<B>'+ Centros[i].localidad +'</B>';

			}

			else

			{

				registros_HTML += '	<BR>&nbsp;'+ provincia + Centros[i].codpostal +'&nbsp;<B>'+ Centros[i].localidad +'</B>';			

			}

			//para el caso en que sea la capital de la provincia no se repita dos veces ej "MADRID (MADRID)"

			if(Centros[i].localidad != Lista[provincia].nomprovin)

			{

				registros_HTML += ' <B>('+ Lista[provincia].nomprovin +')</B>';

			}
												 

			registros_HTML +='									<BR>&nbsp;'+ Centros[i].horario +'</TD>'+

			'														<TD WIDTH="55" ALIGN="CENTER" CLASS="enlacePlano" VALIGN="MIDDLE">'+ Centros[i].enlacemap +'</TD>'+

			'														<TD WIDTH="100" ALIGN="CENTER" CLASS="datos" VALIGN="MIDDLE"><IMG SRC="../../images/pixel_trans.gif" WIDTH=1 HEIGHT=1 BORDER=0 ALT="'+telefono+'">'+ Centros[i].telefono +'</TD>'+

			'														<TD WIDTH="100" ALIGN="CENTER" CLASS="datos" VALIGN="MIDDLE"><IMG SRC="../../images/pixel_trans.gif" WIDTH=1 HEIGHT=1 BORDER=0 ALT="'+fax+'">'+ Centros[i].fax +'</TD>'+

			'													</TR>'+

			'												</TABLE>'+

			'											</TD>'+

			'										</TR>'+

			'									</TABLE>'+

			'								</TD>   '+

			'							</TR>'+

			'							<!-- Separaci&oacute;n centros {-->'+

			'					        <TR>'+

			'			        	        <TD HEIGHT=2 STYLE="font-size:4px;"></TD>'+

			'					        </TR>'+

			'							<!-- } Separaci&oacute;n centros -->';

		}

	}

	

	var fin_HTML = 	'			</TABLE>'+

		'					</TD>'+

		'				</TR>'+

		'			</TABLE>';

	

	var resultado_HTML = cabecero_HTML;

	resultado_HTML += registros_HTML;

	resultado_HTML += fin_HTML;

		

	//si se va a pintar alg&uacute;n centro

	if(registros_HTML != "")

	{

		document.getElementById("resultado").innerHTML += resultado_HTML;

	}

	

	ofi_cercanas = null;



}



function pinta_mensaje(msg)

{



var msg_HTML = 	"<!-- Bloque de Texto { -->"+

				"<TABLE WIDTH=98% CELLPADDING=0 CELLSPACING=6 BORDER=0>"+

				"	<TR>"+

				"		<TD class='txt'><BR><B>"+ msg +".</B></TD>"+

				"	</TR>"+

				"</TABLE>"+

				"<!-- } Bloque de Texto -->";



document.getElementById("resultado").innerHTML = msg_HTML;

}


