// JavaScript Document

var SuggestBox = {
	
	Apply: function(obj) {
		obj.onfocus = SuggestBox.Prepare;
		obj.onblur = SuggestBox.HideBox;
		obj.onkeyup = SuggestBox.ShowSuggestions;
	},
	
	AddLine: function(obj, text) {
		var num = (obj.getAttribute("suggestnum") != null) ? Number(obj.getAttribute("suggestnum")) : 0;
		var s = document.createElement("div");
		s.id = obj.id + "__suggestboxdiv_" + num.toString();
		s.innerHTML = text;
		$(obj.id + "__suggestbox").appendChild(s);
		num++;
		obj.setAttribute("suggestnum", num);
		$(obj.id + "__suggestbox").Show();
	},
	
	Prepare: function() {
		//var sdiv = document.createElement("div");
		//sdiv.id = this.id + "__suggestbox";
		//this.parentNode.appendChild(sdiv);
		var sdiv = UI.Document.AddToBody("div", this.id + "__suggestbox");
		sdiv.style.position = "absolute";
		sdiv.style.textAlign = "left";
		sdiv.style.left = UI.FindPosX(this);
		sdiv.style.top = UI.FindPosY(this) + this.offsetHeight;
		sdiv.style.width = this.offsetWidth;
		sdiv.style.backgroundColor = "#FFFFFF";
		sdiv.style.border = "1px solid #000000";
		$(sdiv).Hide();
		//alert(UI.FindPosX(this) + ", " + UI.FindPosY(this));
		//sdiv.style.left = UI.FindPosX(this);
	},
	
	HideBox: function() {
		var id = this.id + "__suggestbox";
		$(id).parentNode.removeChild($(id));
	},
	
	ShowSuggestions: function(event) {
		if(window.event) {
			event = window.event;
		}
		if(event.keyCode == 40 || event.keyCode == 38) {
			var action = (event.keyCode == 40) ? "down" : "up";
			SuggestBox.Roll(this, action);
		} else if(event.keyCode == 13) {
			if(Number(this.getAttribute("suggestcurrnum")>=0)) {
				SuggestBox.SelectCurrent(this);
				$(this.id + "__suggestbox").Hide();
			}
		} else {
			SuggestBox.Reset(this);
			var f = eval(this.getAttribute("suggestFunction"));
			f(this);
		}
	},
	
	Reset: function(obj) {
		var id = obj.id + "__suggestbox";
		var children = $(id).childNodes;
		for(var i=0; i<children.length; i++) {
			$(id).removeChild(children[i]);
		}
		$(id).innerHTML = "";
		obj.setAttribute("suggestnum", 0);
		obj.setAttribute("suggestcurrnum", -1);
		$(obj.id + "__suggestbox").Hide();
	},
	
	Roll: function(obj, action) {
		if(Number(obj.getAttribute("suggestnum"))>0) {
			var currnum = Number(obj.getAttribute("suggestcurrnum"));
			var newnum;
			try {
				if(action == "up") {
					newnum = currnum - 1;
				} else {
					newnum = currnum + 1;
				}
				this.Select(obj, newnum, currnum);
			} catch(e) {
				newnum = currnum;
				this.Select(obj, newnum, currnum);
			}
		}
	},
	
	Select: function(obj, num, currnum) {
		var mainid = obj.id + "__suggestboxdiv_";
		if(currnum != -1) {
			$(mainid + currnum).style.background = "";
		}
		$(mainid + num).style.background = "#EEEEEE";
		obj.setAttribute("suggestcurrnum", num)
	},
	
	SelectCurrent: function(obj) {
		//alert(obj.id + "__suggestboxdiv_" + obj.getAttribute("suggestcurrnum"));
		obj.value = $(obj.id + "__suggestboxdiv_" + obj.getAttribute("suggestcurrnum")).innerHTML;
	}
	
}