/* ---------------------------------------------------------------------------------------------------- */
var c;
var z;
var elementoSeleccionado;
var ultimoIdentificador;

function nuevoAjax()
{ 
	/* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
	lo que se puede copiar tal como esta aqui */
	var xmlhttp=false; 
	try 
	{ 
		// Creacion del objeto AJAX para navegadores no IE
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
	}
	catch(e)
	{ 
		try
		{ 
			// Creacion del objet AJAX para IE 
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
		catch(E) { xmlhttp=false; }
	}
	if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); } 

	return xmlhttp; 
}

/* ---------------------------------------------------------------------------------------------------- */
function asignaVariables(var1,var2,var3,var4)
{
	// Funcion que asigna variables que se usan a lo largo de las funciones	
	//v=1; nuevaBusqueda=1; busqueda=null; ultimaBusquedaNula=null;
	nuevaBusqueda=1; busqueda=null; ultimaBusquedaNula=null;
	divLista=document.getElementById(var1);
	divLista.value=""
	inputLista=document.getElementById(var2);
	
	if (inputLista.id=='calle')
	{
		 c=1;
	}
	else
	{
		 z=1;
	}
	inputCmb=document.getElementById(var3);
	inputForm = document.getElementById(var4);
	elementoSeleccionado=0;
	ultimoIdentificador=0;
}

/* ---------------------------------------------------------------------------------------------------- */
function eliminaEspacios(cadena)
{
	// Funcion para eliminar espacios delante y detras de cada cadena
	while(cadena.charAt(cadena.length-1)==" ") cadena=cadena.substr(0, cadena.length-1);
	while(cadena.charAt(0)==" ") cadena=cadena.substr(1, cadena.length-1);
	return cadena;
}

/* ---------------------------------------------------------------------------------------------------- */
function formateaLista(valor)
{
	// Funcion encargada de ir colocando en negrita las palabras y asignarle un ID a los elementos
	
	var x=0, verificaExpresion=new RegExp("^("+valor+")", "i");
	while(divLista.childNodes[x]!=null)
	{
		// Asigo el ID para reconocerlo cuando se navega con el teclado
		divLista.childNodes[x].id=x+1;
		// Coloco en cada elemento de la lista en negrita lo que se haya ingresado en el input
		divLista.childNodes[x].innerHTML=divLista.childNodes[x].innerHTML.replace(verificaExpresion, "<b>$1</b>");
		x++;
	}
}

/* ---------------------------------------------------------------------------------------------------- */
function limpiaPalabra(palabra)
{
	// Funcion encargada de sacarle el codigo HTML de la negrita a las palabras
	palabra=palabra.replace(/<b>/i, "");
	palabra=palabra.replace(/<\/b>/i, "");
	return palabra;
}

/* ---------------------------------------------------------------------------------------------------- */
function reempespacios(cadena,caracter)
{
	// Funcion para reemplazar de cada cadena

	var nuevacadena;
	var largo = cadena.length;
	nuevacadena = "";
	for (i = 0; i < largo ; i++)
	{
		if (cadena.substr(i,1)==" "){
			nuevacadena = nuevacadena + caracter;
		} else {
			nuevacadena = nuevacadena + cadena.substr(i,1);
		}
	}
	cadena = nuevacadena;	
	return cadena;
}

/* ---------------------------------------------------------------------------------------------------- */
function cuentacaracteres(cadena,caracter)
{
	// Funcion para reemplazar de cada cadena

	var largo = cadena.length;
	var cant=0;
	
	for (i = 0; i < largo ; i++)
	{
		if (cadena.substr(i,1)==caracter){
			cant = cant + 1;
		}
	}
	return cant;
}

/* ---------------------------------------------------------------------------------------------------- */
function coincideBusqueda(palabraEntera, primerasLetras)
{
	/* Funcion para verificar que las primeras letras de busquedaActual sean iguales al
	contenido de busquedaAnterior. Se devuelve 1 si la verificacion es afirmativa */
	if(primerasLetras==null) return 0;
	var verificaExpresion=new RegExp("^("+primerasLetras+")", "i");
	if(verificaExpresion.test(palabraEntera)) return 1;
	else return 0;
}

/* ---------------------------------------------------------------------------------------------------- */
function nuevaCadenaNula(valor)
{
	/* Seteo cual fue la ultima busqueda que no arrojo resultados siempre y cuando la cadena
	nueva no comience con las letras de la ultima cadena que no arrojo resultados */
	if(coincideBusqueda(valor, ultimaBusquedaNula)==0) ultimaBusquedaNula=valor;
}

/* ---------------------------------------------------------------------------------------------------- */
function busquedaEnBD()
{
	/* Funcion encargada de verificar si hay que buscar el nuevo valor ingresado en la base
	de datos en funcion de los resultados obtenidos en la ultima busqueda y en base a que
	la cadena bsucada anteriormente este dentro de la nueva cadena */
	var valor=inputLista.value;
	
	if((coincideBusqueda(valor, busqueda)==1 && nuevaBusqueda==0) || coincideBusqueda(valor, ultimaBusquedaNula)==1) return 0;
	else return 1;
}

/* ---------------------------------------------------------------------------------------------------- */
function filtraLista(valor)
{
	// Funcion encargada de modificar la lista de nombres en base a la nueva busqueda
	var x=0;
	while(divLista.childNodes[x]!=null)
	{
		// Saco la negrita a los elementos del listado
		divLista.childNodes[x].innerHTML=limpiaPalabra(divLista.childNodes[x].innerHTML);
		if(coincideBusqueda(limpiaPalabra(divLista.childNodes[x].innerHTML), valor)==0)
		{
			/* Si remuevo el elemento x, el elemento posterior pasa a ocupar la posicion de
			x, entonces quedaria sin revisar. Por eso disminuyo 1 valor a x */
			divLista.removeChild(divLista.childNodes[x]);
			x--;
		}
		x++;
	}
}

/* ---------------------------------------------------------------------------------------------------- */
function reiniciaSeleccion()
{
	mouseFuera(); 
	elementoSeleccionado=0;
}

/* ---------------------------------------------------------------------------------------------------- */
function navegaTeclado(evento,sObj)
{
	var teclaPresionada=(document.all) ? evento.keyCode : evento.which;
	switch(teclaPresionada)
	{
		case 40:
		if(elementoSeleccionado < divLista.childNodes.length)
		{
			mouseDentroKey(parseInt(elementoSeleccionado) + 1);
		}
		return 0;
		
		case 38:
		if(elementoSeleccionado>1)
		{
			mouseDentroKey(parseInt(elementoSeleccionado)-1);
		}
		return 0;
		
		case 13:
		    if(divLista.style.display=="block" && elementoSeleccionado!=0)
		    {
			    clickLista(document.getElementById(elementoSeleccionado),sObj);
		    }
		return 0;
		default: return 1;
	}
	
}	

/* ---------------------------------------------------------------------------------------------------- */
function rellenaLista(var1,var2,accion)
{
	if (var2=="")
		{
		return 0;
		}

	
	if (accion == 'calle' ) 
		{
		accion="buscacalle";
		} 
	else 
		{
		accion="x";
		}

	var valor1 = var1;
	var valor2 = var2;
	var valor_1=reempespacios(valor1,"@");
	var valor_2=reempespacios(valor2,"@");
	
	// Valido con una expresion regular el contenido de lo que el usuario ingresa
	var reg=/(^[a-zA-Z0-9.@ ]{1,40}$)/;
	if(!reg.test(valor1)) 
		divLista.style.display="none";
	else
	{
		if(busquedaEnBD()==0)
		{	
			// Si no hay que buscar el valor en la BD
			busqueda=valor1;
	
			// Hago el filtrado de la nueva cadena ingresada
			filtraLista(valor1);
			// Si no quedan elementos para mostrar en la lista
			if(divLista.childNodes[0]==null) { divLista.style.display="none"; nuevaCadenaNula(valor1); }
			else { reiniciaSeleccion(); formateaLista(valor1); }
		}
		else
		{	
			/* Si se necesita verificar la base de datos, guardo el patron de busqueda con el que se
			busco y luego recibo en una variable si existen mas resultados de los que se van a mostrar */
			busqueda=valor1;

			var ajax=nuevoAjax();
			ajax.open("POST", "../api/getDireccionComuna.asp?", true);
			ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			ajax.send("calle=" + valor_1 + "&comuna=" + valor_2 + "&accion=" + accion);

			
			ajax.onreadystatechange=function()
			{					
				if (ajax.readyState==4)
				{
					if (ajax.status == 200)
					{
						if (!ajax.responseText){ divLista.style.display="none"; }
						else
						{
							var respuesta=new Array(2);
							respuesta=ajax.responseText.split("&");
							
							/* Obtengo un valor que representa si tengo que ir a BD en las proximas 
							busquedas con cadena similar */
							nuevaBusqueda=respuesta[0];
							
							// Si se obtuvieron datos los muestro
							if(respuesta[1]!="vacio") 
							{ 
								divLista.innerHTML=respuesta[1];
								divLista.style.display="block";
								divLista.style.top=findPosY(inputLista)+17;
								divLista.style.left=findPosX(inputLista);
								divLista.style.width=inputLista.style.width;
								
								if (accion=='buscacalle'){
									inputForm.idcalle1.value = respuesta[2]
									inputForm.idcalle2.value = respuesta[3]
									inputForm.idcalle3.value = respuesta[4]
									inputForm.idcalle4.value = respuesta[5]
									inputForm.idcalle5.value = respuesta[6]
									inputForm.idcalle6.value = respuesta[7]
									inputForm.idcalle7.value = respuesta[8]
								}
								//inputLista.value = respuesta[1]
								// Coloco en negrita las palabras
								reiniciaSeleccion();
								formateaLista(valor1); 
							}
							// En caso contrario seteo la busqueda actual como una busqueda sin resultados
							else { 
								nuevaCadenaNula(valor1);
								if (accion=='buscacalle'){
									inputForm.idcalle1.value = ''
									inputForm.idcalle2.value = ''
									inputForm.idcalle3.value = ''
									inputForm.idcalle4.value = ''
									inputForm.idcalle5.value = ''
									inputForm.idcalle6.value = ''
									inputForm.idcalle7.value = ''
								}
							}
						}	
					}
				}
			}
		}
	}
}

/* ---------------------------------------------------------------------------------------------------- */
function rellenaListaCalle(var1,var2,accion)
{
	if (var2=="")
		{
		return 0;
		}
	
	if (accion == 'calle' ) 
		{
		accion="buscacalle";
		} 
	else 
		{
		accion="x";
		}

    
	arr2=var2.split('|')	
    var2=arr2[1]
	var valor1 = var1;
	var valor2 = var2;
	var valor_1=reempespacios(valor1,"@");
	var valor_2=reempespacios(valor2,"@");
	
	// Valido con una expresion regular el contenido de lo que el usuario ingresa
	var reg=/(^[a-zA-Z0-9.@ ]{1,40}$)/;
	if(!reg.test(valor1)) 
		divLista.style.display="none";
	else
	{
		if(busquedaEnBD()==0)
		{	
			// Si no hay que buscar el valor en la BD
			busqueda=valor1;
	
			// Hago el filtrado de la nueva cadena ingresada
			filtraLista(valor1);
			// Si no quedan elementos para mostrar en la lista
			if(divLista.childNodes[0]==null) { divLista.style.display="none"; nuevaCadenaNula(valor1); }
			else { reiniciaSeleccion(); formateaLista(valor1); }
		}
		else
		{	
			/* Si se necesita verificar la base de datos, guardo el patron de busqueda con el que se
			busco y luego recibo en una variable si existen mas resultados de los que se van a mostrar */
			busqueda=valor1;
			var ajax=nuevoAjax();
			////dmapas/CORP/lib/
			ajax.open("POST", "/LIB/API/getDireccionComunaCalle.asp?", true);
			ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			ajax.send("calle=" + valor_1 + "&comuna=" + valor_2 + "&accion=" + accion);
			
			ajax.onreadystatechange=function()
			{					
				if (ajax.readyState==4)
				{
					if (ajax.status == 200)
					{
						if (!ajax.responseText)
						{ 
							divLista.style.display="none"; 
						}
						else
						{
							var resultado = ajax.responseText;
							var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
							xmlDoc.loadXML(resultado);
							/* Obtengo un valor que representa si tengo que ir a BD en las proximas 
							busquedas con cadena similar */
							//nuevaBusqueda=respuesta[0];
							nuevaBusqueda=1;
							//document.frmFormulario.cmdGrabar.disabled = false;
							// Si se obtuvieron datos los muestro
							inputForm.idcalle.value = ''
							if (xmlDoc.getElementsByTagName("lst_calles_x_nomcomuna")[0].attributes.getNamedItem("status").value == "00")
							{
								if (xmlDoc.getElementsByTagName("reg_calles_x_nomcomuna")[0].attributes.getNamedItem("nro_error").value == 0)
								{
									inputLista = document.getElementById('txtDireccion');
									strINNER = ''

									for (i=0;i <= xmlDoc.getElementsByTagName("reg_calles_x_nomcomuna").length -1 ;i++)
										{
										strCalle = xmlDoc.getElementsByTagName("reg_calles_x_nomcomuna")[i].attributes.getNamedItem("nombre_calle").value
										strINNER = strINNER + "<div class='normal' onClick='clickLista(this);' onMouseOver='mouseDentro(this);'>" + strCalle + "</div>"
										j = i + 1
										if (j <= 8)
											{
											inputForm.all['idcalle' + j].value = xmlDoc.getElementsByTagName("reg_calles_x_nomcomuna")[i].attributes.getNamedItem("id_nombre_calle").value
											}
										}
									divLista.innerHTML = strINNER;
									divLista.style.display="block";
									divLista.style.top=findPosY(inputLista)+17;
									divLista.style.left=findPosX(inputLista);
									divLista.style.width=inputLista.style.width;
									reiniciaSeleccion();
									formateaLista(valor1); 
								}
							}
							// En caso contrario seteo la busqueda actual como una busqueda sin resultados
							else { 
								nuevaCadenaNula(valor1);
								if (accion=='buscacalle')
								{
									//inputForm.idcalle.value = ''
									inputForm.idcalle1.value = ''
									inputForm.idcalle2.value = ''
									inputForm.idcalle3.value = ''
									inputForm.idcalle4.value = ''
									inputForm.idcalle5.value = ''
									inputForm.idcalle6.value = ''
									inputForm.idcalle7.value = ''
								}
							}
						}	
					}
				}
			}
		}
	}
}


/* ---------------------------------------------------------------------------------------------------- */
function rellenaListaNumero(var1,var2,accion)
{
	if (var2=="")
		{
		return 0;
		}

	
	if (accion == 'calle' ) 
		{
		accion="buscacalle";
		} 
	else 
		{
		accion="x";
		}

	var valor1 = var1;
	var valor2 = var2;
	var valor_1=reempespacios(valor1,"@");
	var valor_2=reempespacios(valor2,"@");
	
	// Valido con una expresion regular el contenido de lo que el usuario ingresa
	var reg=/(^[a-zA-Z0-9.@ ]{1,40}$)/;
	if(!reg.test(valor1)) 
		divLista.style.display="none";
	else
	{
		if(busquedaEnBD()==0)
		{	
			// Si no hay que buscar el valor en la BD
			busqueda=valor1;
	
			// Hago el filtrado de la nueva cadena ingresada
			filtraLista(valor1);
			// Si no quedan elementos para mostrar en la lista
			if(divLista.childNodes[0]==null) { divLista.style.display="none"; nuevaCadenaNula(valor1); }
			else { reiniciaSeleccion(); formateaLista(valor1); }
		}
		else
		{	
			/* Si se necesita verificar la base de datos, guardo el patron de busqueda con el que se
			busco y luego recibo en una variable si existen mas resultados de los que se van a mostrar */
			busqueda=valor1;
			//document.frmFormulario.cmdGrabar.disabled = false;
			var ajax=nuevoAjax();
			////dmapas/CORP/lib/
			ajax.open("POST", "/LIB/api/getDireccionComunaNumero.asp?", true);
			ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			ajax.send("calle=" + valor_1 + "&comuna=" + valor_2 + "&accion=" + accion);
			
			ajax.onreadystatechange=function()
			{					
				if (ajax.readyState==4)
				{
					if (ajax.status == 200)
					{
						if (!ajax.responseText)
						{ 
							divLista.style.display="none"; 
						}
						else
						{
							var resultado = ajax.responseText;
							var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
							xmlDoc.loadXML(resultado);
							/* Obtengo un valor que representa si tengo que ir a BD en las proximas 
							busquedas con cadena similar */
							//nuevaBusqueda=respuesta[0];
							nuevaBusqueda=1;
							// Si se obtuvieron datos los muestro
							if (xmlDoc.getElementsByTagName("lst_numeracion_coindidente")[0].attributes.getNamedItem("status").value == "00")
							{
								if (xmlDoc.getElementsByTagName("reg_numeracion_coindidente")[0].attributes.getNamedItem("nro_error").value == 0)
								{
									inputLista = document.getElementById('inpnumeracion');
									strINNER = ''

									for (i=0;i <= xmlDoc.getElementsByTagName("reg_numeracion_coindidente").length -1 ;i++)
										{
										j = i +1
										strCan = xmlDoc.getElementsByTagName("reg_numeracion_coindidente")[i].attributes.getNamedItem("can").value
										strNumero = xmlDoc.getElementsByTagName("reg_numeracion_coindidente")[i].attributes.getNamedItem("numero_municipal").value
										strCpn = xmlDoc.getElementsByTagName("reg_numeracion_coindidente")[i].attributes.getNamedItem("cpn").value
										strINNER = strINNER + "<div class='normal' onClick='clickLista(this);' onMouseOver='mouseDentroKey(" + j + ");'>" + strCan + "-" + strNumero + "-" + strCpn +  "</div>"
										}

									inputLista = document.getElementById('inpnumeracion');
									divLista.innerHTML = strINNER;
									divLista.style.display="block";
									divLista.style.top=findPosY(inputLista)+17;
									divLista.style.left=findPosX(inputLista);
									divLista.style.width=inputLista.style.width;
									reiniciaSeleccion();
									formateaLista(valor1); 
								}
							}
							// En caso contrario seteo la busqueda actual como una busqueda sin resultados
							else { 
								nuevaCadenaNula(valor1);
							}
						}	
					}
				}
			}
		}
	}
}

/* ---------------------------------------------------------------------------------------------------- */
function clickLista(elemento,sObjeto)

{
	/* Se ejecuta cuando se hace clic en algun elemento de la lista. Se coloca en el input el
	valor del elemento clickeado */
	//v=1;
	if (inputLista.id=='calle')
		 c=1;
	else
		 z=1

	valor=limpiaPalabra(elemento.innerHTML); 
	busqueda=valor; 
	
	if (inputLista.id=='calle'){
		Obj = document.getElementById('idcalle' + elemento.id);
		inputForm.idcalle.value = Obj.value;
		document.getElementById('numero').select();
	} else {
	    if (inputLista.id=='numero'){
            document.getElementById('complemento').select();        
		}
	}
	divLista.style.display="none"; elemento.className="normal";
}

/* ---------------------------------------------------------------------------------------------------- */
function mouseFuera()
{
	// Des-selecciono el elemento actualmente seleccionado, si es que hay alguno
	if(elementoSeleccionado!=0 && document.getElementById(elementoSeleccionado)) {
		document.getElementById(elementoSeleccionado).className="normal";
	} 
}

/* ---------------------------------------------------------------------------------------------------- */
function mouseDentro(elemento)
{
	mouseFuera();
	elemento.className="resaltado";
	// Establezco el nuevo elemento seleccionado
	elementoSeleccionado=elemento.id;
	valor=limpiaPalabra(elemento.innerHTML); 
	busqueda=valor; 
	inputLista.value=valor;
	
	if (inputLista.id=='calle'){
		Obj = document.getElementById('idcalle' + elemento.id);
		inputForm.idcalle.value = Obj.value;
	}
	
}

/* ---------------------------------------------------------------------------------------------------- */
function mouseDentroKey(ele)
{
	mouseFuerakey();
	ele = ele - 1
	divLista.childNodes[ele].className="resaltado";
	// Establezco el nuevo elemento seleccionado
	elementoSeleccionado=divLista.childNodes[ele].id;


	if (inputLista.id=='calle'){
		valor=limpiaPalabra(divLista.childNodes[ele].innerHTML); 
		busqueda=valor; 
		inputLista.value=valor;
	} else {	

		valor=limpiaPalabra(divLista.childNodes[ele].innerHTML);
//		valor=reempespacios(valor,"-");
		pos= 2 - cuentacaracteres(valor,"-");

		inputForm.inpcarant.value='';
		inputLista.value = '';
		inputForm.inpcarpos.value='';
		
		var largo = valor.length;
		nuevacadena = "";
		for (i = 0; i < largo ; i++)
		{
			if (valor.substr(i,1)=="-"){
				pos= pos + 1;
			} else {
				if (pos==0){ inputForm.inpcarant.value = inputForm.inpcarant.value + String(valor.substr(i,1));
				} else {
					if (pos==1){ inputLista.value = inputLista.value + String(valor.substr(i,1));
					} else {
						if (pos==2){ inputForm.inpcarpos.value = inputForm.inpcarpos.value + String(valor.substr(i,1));
						}
					}
				}
			}
		}

	}
	
	if (inputLista.id=='calle'){
		Obj = document.getElementById('idcalle' + divLista.childNodes[ele].id);
		inputForm.idcalle.value = Obj.value;
	}
}

/* ---------------------------------------------------------------------------------------------------- */
function mouseFuerakey()
{

	ele = elementoSeleccionado - 1

	// Des-selecciono el elemento actualmente seleccionado, si es que hay alguno
	if(elementoSeleccionado!=0 && divLista.childNodes[ele]) {
		divLista.childNodes[ele].className="normal";
	} 

}

/* ---------------------------------------------------------------------------------------------------- */
function IsNumeric(sText)
{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
}

/* ---------------------------------------------------------------------------------------------------- */
function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

/* ---------------------------------------------------------------------------------------------------- */
function findPosY(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }
