var Autocomplementar=function(init){

	this.idControlador="#"+init.txt
	this.idDivAyuda="#"+init.idDiv
	this.elementos=init.elementos
	var itemActual=null
	var self= this
	var enviarConsulta=false
	var btnSubmit=init.btn
	var form="#"+init.form
	var startAt=init.startAt
    var mauseOverDiv=false;

	this.busqueda=function(el){return (self.idControlador[0].value!="")?true:false}
	this.agreagarControlador=function()
	{
        var idAyuda=this.idDivAyuda
		var elmt=this.elementos
        
		$(this.idControlador).keypress(function(e)
		{		
				if(self.flechas.esEnter(e.code))
				{
					if(e.preventDefault)
						e.preventDefault();
					else return false		
				}
                if(this.value=="")
                    self.estadoAyuda("none");
        })

		//fin addevent del keyPress

		$(this.idControlador).keyup(function(e)
		{ 

			//&& (String.fromCharCode(e.keyCode)).test(/\w/)
           if(this.value.length>=startAt){
                var tecla=e.which;
                if(!self.flechas.esFlecha(tecla) && !self.flechas.esEnter(tecla) )
                    {
                        $(idAyuda)[0].innerHTML="";
                        $(idAyuda)[0].style.top="28px"
                        self.enviarConsulta=false
                    }
                    else if(self.flechas.esEnter(tecla)){
                            //(self.enviarConsulta)?$(form).submit():self.setTexto(self.itemActual)
							self.setTexto(self.itemActual)
							$(form)[0].submit()
                            return false;
                    }
                    else if(self.flechas.esFlecha(tecla)){                        
                        self.flechas.mover(tecla) 
                        return false;
                    }

                    var j=null

                    //self.agregarSeparador("Sugerencias de Búsqueda");
                    for(var k=0;k<elmt.length;k++)
                    {
                            var bus=elmt[k].toLowerCase();
                            if((this.value!="" && bus.indexOf(this.value)!=-1) && !self.flechas.esFlecha(tecla))
                            {
                                j=1;
								bus = bus.replace(this.value,"<strong>"+this.value+"</strong>")                                
                                $(self.idDivAyuda)[0].appendChild(self.agregarLink(bus))
                            }
                    }
                    self.estadoAyuda(j?"block":"none");
           }
           else{
               self.estadoAyuda("none");
           }
		})

        $(this.idControlador).blur(function(){

           if(!self.mauseOverDiv)self.estadoAyuda("none");

        })
		//Bandera para ocultar la ayuda en el onblur
        $(this.idDivAyuda).mouseover(function(){self.mauseOverDiv=true})
        $(this.idDivAyuda).mouseout(function(){self.mauseOverDiv=false})

	}

	this.agregarSeparador=function(txt){

		var divsep=document.createElement("div");

		divsep.className='separadorDrop';

		divsep.appendChild(document.createTextNode(txt))

		$(self.idDivAyuda)[0].appendChild(divsep);

	}

	this.agregarLink=function(txt){

		var a=document.createElement("a")

		a.href='javascript:void(0)';

		a.onclick=function(){self.setTexto(this);$(form)[0].submit()}

		a.onmouseover=function(){self.itemActual=this}
		/*var texto=document.createTextNode(txt);
		a.appendChild(texto)*/        
		a.innerHTML=txt;
		return a;		

	}

	this.setTexto=function(el){
		var txt = el.innerHTML.replace(/(<.*?>)/g,'')		
		$(this.idControlador)[0].value=txt
		self.estadoAyuda("none")

		self.enviarConsulta=true

	}

    this.estadoAyuda=function(display){

        $(this.idDivAyuda)[0].style.display=display

    }

	this.flechas={

		flechaArriba:38,

		flechaAbajo:40,

		enter:13,

		esFlecha:function(codigo){return (codigo==this.flechaArriba || codigo==this.flechaAbajo )? true:false},

		esEnter:function(codigo){return (codigo==this.enter)?true:false},

		moverArriba:function()

		{			
			if(self.itemActual && self.itemActual.previousSibling)

			{

				if(self.itemActual.previousSibling.className!="separadorDrop")

				{	

					this.foco(self.itemActual.previousSibling)
					self.itemActual=self.itemActual.previousSibling
				}
				else if(self.itemActual.previousSibling.previousSibling){
					this.foco(self.itemActual.previousSibling.previousSibling)
					self.itemActual=self.itemActual.previousSibling.previousSibling
				}
				else{
					this.foco($(self.idDivAyuda)[0].lastChild)
					self.itemActual=$(self.idDivAyuda)[0].lastChild
				}

			}

			else{

				this.foco($(self.idDivAyuda)[0].lastChild)
				self.itemActual=$(self.idDivAyuda)[0].lastChild
			}
		},
		moverAbajo:function()
		{
            if(typeof(self.itemActual)!="undefined" && self.itemActual.nextSibling)
			{
				if(self.itemActual.nextSibling.className!="separadorDrop")
				{
					this.foco(self.itemActual.nextSibling)
					self.itemActual=self.itemActual.nextSibling
				}
				else{

					this.foco(self.itemActual.nextSibling.nextSibling)

					self.itemActual=self.itemActual.nextSibling.nextSibling

				}		

			}

			else{

				if($(self.idDivAyuda)[0].firstChild.className!="separadorDrop")

				{                    

					this.foco($(self.idDivAyuda)[0].firstChild)

					self.itemActual=$(self.idDivAyuda)[0].firstChild

				}

				else{

					this.foco($(self.idDivAyuda)[0].childNodes[1])

					self.itemActual=$(self.idDivAyuda)[0].childNodes[1]

				}

			}

		},
		mover:function(flecha)
		{
			switch(flecha)

			{                

				case this.flechaArriba: this.moverArriba();break;

				case this.flechaAbajo: this.moverAbajo();

			}

		},
		foco:function(el)
		{            
			if(self.itemActual){self.itemActual.className="nada"}
			el.className="foco";
		}
	}
}

