/********

CREATED BY: PAWAN TRIPATHI (pawantri@gmail.com)

*********/
var emenu = {
	textbox:null, menu:null, list:null, current:-1, mx:0, list:null, kc:0,
	initialize:function(e){
		var textboxes = document.getElementsByTagName("input");
		var tlen = textboxes.length;
		for(var i = 0; i < tlen; i++){
			if(textboxes[i].type == "text"){
				textboxes[i].onfocus = function(e){
					var ns = this.nextSibling;
					while(ns && (!ns.tagName || ns.tagName == "BR"))
						ns = ns.nextSibling;
					if(ns && ns.tagName == "UL"){
						emenu.textbox = this;
						emenu.menu = ns;
						if(!emenu.menu.style.width)
							emenu.menu.style.width = (this.offsetWidth - 2) + "px";
						emenu.show();
						this.onblur = emenu.hide;
						this.onkeydown = emenu.preventDefault;
						this.onkeyup = emenu.browse;
					}
				}
			}
		}
	},
	show:function(){
		emenu.list = emenu.menu.childNodes;
		emenu.mx = emenu.list.length;
		if(emenu.mx){
			for(i=0; i<emenu.mx; i++){
				var label = emenu.list[i].innerHTML;
				if(label){
					label = label.toLowerCase();
					var value = emenu.list[i].getAttribute('value') + "";
					var input = emenu.textbox.value.toLowerCase();
					if(label.indexOf(input) == 0 || (value && value.indexOf(input) == 0)){
							if(!emenu.list[i].onclick)
								emenu.list[i].onmouseover = function(e){ 
									emenu.textbox.value = (document.all?event.srcElement:e.target).innerHTML;
								}
							emenu.list[i].style.display = "block";
					}
					else
						emenu.list[i].style.display = "none";
				}
			}
			emenu.menu.style.display = "block";
		}
	},
	hide:function(){
		emenu.menu.style.display = "none";
		if(emenu.current >= 0)
			emenu.list[emenu.current].className = "";
		emenu.current = -1;
	},
	browse:function(e){
		 switch(emenu.kc){
			case 39:
			case 40:
				if(emenu.current < emenu.mx){
					if(emenu.current >= 0)
						emenu.list[emenu.current].className = "";
					emenu.next();
					emenu.list[emenu.current].className = "currentItem";
					emenu.fillCurrent();
				}
			break;
			case 37:
			case 38:
				if(emenu.current > 0){
					emenu.list[emenu.current].className = "";
					emenu.prev();
					emenu.list[emenu.current].className = "currentItem";
					emenu.fillCurrent();
				}
			break;
			case 13:
			case 27:
				emenu.hide();
			break;
			default:
				if(emenu.textbox.id == 'location')
					show_hint(emenu.textbox.value);
				emenu.show();
		}
	},
	next:function(){
		for(var i = (emenu.current + 1); i < emenu.mx; i++){
			if(emenu.list[i].tagName == "LI" && emenu.list[i].style.display == "block"){
				emenu.current = i;
				break;
			}
		}
	},
	prev:function(){
		for(var i = (emenu.current - 1); i >= 0; i--){
			if(emenu.list[i].tagName == "LI" && emenu.list[i].style.display == "block"){
				emenu.current = i;
				break;
			}
		}
	},
	fillCurrent:function(){
		if(emenu.menu.style.display == "block")
			emenu.textbox.value = emenu.menu.childNodes[emenu.current].innerHTML;
	},
	preventDefault:function(e){
	    if(document.all)
			emenu.kc = event.keyCode;
	   	else
			emenu.kc = e.keyCode;
		if(emenu.kc == 13 && emenu.current >= 0)
			return false;
	}
}