var SearchHints = {
	s : null,
	h : null,
	l : null,
	li : null,
	url : "/search_hints.asp?type=KB",
	IsEmpty : true,
	Init : function(searchBoxID, searchHintsID) {
		SearchHints.s = document.getElementById(searchBoxID);
		SearchHints.h = document.getElementById(searchHintsID);
		SearchHints.h.onmouseover = SearchHints.Highlight;
		SearchHints.AttachEvent(SearchHints.h, "click", SearchHints.Select);
		SearchHints.AttachEvent(document, "click", function(event) {
				var target = (window.event) ? window.event.srcElement : event.target;
				if (target != SearchHints.s) {
					SearchHints.Hide();
				}
			}
		);
		SearchHints.AttachEvent(SearchHints.s, "keyup", SearchHints.Get);
		SearchHints.AttachEvent(SearchHints.s, "focus", SearchHints.Show);
		SearchHints.AttachEvent(SearchHints.s.form, "submit", function(event) {
				if (SearchHints.l) {
					SearchHints.Select(event, SearchHints.l);
				}
			}
		);
		this.s.style['display'] = "block";
		this.h.style['position'] = "absolute";
	},
Get : function(event) {
	var event = (window.event) ? window.event : event;
	var keyCode = event.keyCode;
	switch (keyCode) {
	case 38:
		SearchHints.Highlight(event, SearchHints.li - 1);
		break;
	case 40:
		SearchHints.Highlight(event, SearchHints.li + 1);
		break;
	default:
		sendAjax("GET", SearchHints.url + "&search=" + SearchHints.s.value, "", SearchHints.Fill, throwAjaxError, false);
		SearchHints.l = null;
		SearchHints.li = null;
	}
},
Fill : function(html) {
	if (html) {
		SearchHints.IsEmpty = false;
		SearchHints.Show();
	}
	else {
		SearchHints.IsEmpty = true;
		SearchHints.Hide();
	}
	SearchHints.h.innerHTML = html;
},
Show : function() {
	if (!SearchHints.IsEmpty) {
		SearchHints.h.style["display"] = "block";
	}
},
Hide : function() {
	SearchHints.h.style["display"] = "none";
},
Clear : function() {
	SearchHints.Hide();
	SearchHints.h.innerHTML = "";
},
Highlight : function (event, id) {
	var event = (window.event) ? window.event : event;
	var target = (event.srcElement) ? event.srcElement : event.target;
	if (id || id == 0) {
		if (id > SearchHints.h.childNodes.length) {
			id = 1
		}
		else if (id < 1) {
			id = SearchHints.h.childNodes.length;
		}
		target = document.getElementById("__SH" + id);
	}
	while (!target.id) {
		target = target.parentNode;
	}
	if (target) {
		if (target.nodeName == "DIV" && target != SearchHints.h) {
			if (SearchHints.l) {
				SearchHints.l.style["backgroundColor"] = '';
			}
			target.style["backgroundColor"] = '#BEDFFF';
			SearchHints.l = target;
			SearchHints.li = parseInt(target.id.replace(/[^0-9]*/ig, ''));
		}
	}
},
Select : function(event, element) {
	var event = (window.event) ? window.event : event;
	var target = (event.srcElement) ? event.srcElement : event.target;
	if (element) {
		target = element;
	}
	while (!target.id) {
		target = target.parentNode;
	}
	target = target.getElementsByTagName("DIV")[0];
	SearchHints.s.value = target.innerHTML;
	SearchHints.s.form.submit();
},
AttachEvent : function(o, e, f) {
	if (o && e && f) {
		e = e.toLowerCase();
		if (window.attachEvent) {
			o.attachEvent("on" + e.toLowerCase(), f);
		}
		else {
			o.addEventListener(e, f, false);
		}
	}
}
};


var SearchHintArray = new Array();
var activeId;
function SearchHintObject(SearchBox, type, inputId, fields, width) {
	var e = document.createElement("div");
	e.style.marginTop = "-1px";
	e.style.clear="none";
	e.style.backgroundColor = "#DFEFFF";
	e.style.zIndex = "1000";
	e.style.display = "none";
	e.style.border = "1px solid #BEDFFF";
	e.style.padding = "2px";
	if (width) e.style.width = width;
	
	if (SearchBox.nextSibling) this.h = SearchBox.parentNode.insertBefore(e,SearchBox.nextSibling);
	else this.h = SearchBox.parentNode.appendChild(e);
	
	this.fields = fields;
	this.s = SearchBox;
	this.l = null;
	this.li = null;
	this.id = inputId;
	this.url = "/search_hints.asp?type=" +  type;
	this.IsEmpty = true;
	this.h.onmouseover = this.Highlight;
	this.s.style['display'] = "block";
	this.h.style['position'] = "absolute";
}
SearchHintObject.prototype.Get = function(event) {
	var event = (window.event) ? window.event : event;
	var target = (window.event) ? window.event.srcElement : event.target;
	var id = target.getAttribute("id");
	if (activeId && id != activeId)
		SearchHintArray[activeId].Hide(activeId);
	activeId = id;
	var keyCode = event.keyCode;
	switch (keyCode) {
	case 38:
		SearchHintArray[id].Highlight(event, this.li - 1);
		break;
	case 40:
		SearchHintArray[id].Highlight(event, this.li + 1);
		break;
	default:
		sendAjax("GET", SearchHintArray[id].url + "&search=" + SearchHintArray[id].s.value, "", SearchHintArray[id].Fill, throwAjaxError, false);
		SearchHintArray[id].l = null;
		SearchHintArray[id].li = null;
	}
}

SearchHintObject.prototype.Fill = function(html) {
	if (html) {
		SearchHintArray[activeId].IsEmpty = false;
		SearchHintArray[activeId].Show();
	}
	else {
		SearchHintArray[activeId].IsEmpty = true;
		SearchHintArray[activeId].Hide(activeId);
	}
	SearchHintArray[activeId].h.innerHTML = html;
}
SearchHintObject.prototype.Show = function(event) {
	var event = (window.event) ? window.event : event;
	var target;
	if (event)
		target = (event.srcElement) ? event.srcElement : event.target;
		
	if (target && target.getAttribute) {
		if (activeId && activeId != target.getAttribute("id"))
			SearchHintArray[activeId].Hide();
		activeId = target.getAttribute("id");
	}	
	if (SearchHintArray[activeId] && !SearchHintArray[activeId].IsEmpty) {
		SearchHintArray[activeId].h.style["display"] = "block";
	}	
}
SearchHintObject.prototype.Hide = function(id) {
	SearchHintArray[activeId].h.style["display"] = "none";
}
SearchHintObject.prototype.Clear = function() {
	this.Hide(this.id);
	this.h.innerHTML = "";
}
SearchHintObject.prototype.Highlight = function(event, id) {
	var event = (window.event) ? window.event : event;
	var target = (event.srcElement) ? event.srcElement : event.target;
	if (target.parentNode.parentNode.previousSibling)
		searchBox = target.parentNode.parentNode.previousSibling;		
	else if (target.parentNode.previousSibling)
		searchBox = target.parentNode.previousSibling;
	if (!searchBox.getAttribute)
		return;
	searchBox = searchBox.getAttribute("id");
	if (id || id == 0) {
		if (id > this.h.childNodes.length) {
			id = 1
		}
		else if (id < 1) {
			id = this.h.childNodes.length;
		}
		target = document.getElementById("__SH" + id);
	}
	while (target && !target.id) {
		target = target.parentNode;
	}
	if (target) {
	//1402 2010-06-25
		if (SearchHintArray[searchBox] && target.nodeName == "DIV" && (target != SearchHintArray[searchBox].h)) {
			if (SearchHintArray[searchBox].l) {
				SearchHintArray[searchBox].l.style["backgroundColor"] = '';
			}
			target.style["backgroundColor"] = '#BEDFFF';
			SearchHintArray[searchBox].l = target;
			SearchHintArray[searchBox].li = parseInt(target.id.replace(/[^0-9]*/ig, ''));
		}
	}

}
SearchHintObject.prototype.Select = function(event, element) {
	var event = (window.event) ? window.event : event;
	var target = (event.srcElement) ? event.srcElement : event.target;
	if (element) {
		target = element;
	}
	while (!target.id) {
		target = target.parentNode;
	}
	target = target.getElementsByTagName("DIV")[0];
	if (SearchHintArray[activeId].fields) {
		var list = getFields(target);
		for (var i in list) {
			for (var j in SearchHintArray[activeId].fields) {
				if (i.toUpperCase() == j.toUpperCase())
					document.getElementById(SearchHintArray[activeId].fields[j]).value = list[i];
			}			
		}		
	}		
	else
		target.parentNode.parentNode.previousSibling.value = target.innerHTML;
}
SearchHintObject.prototype.AttachEvent = function(o, e, f) {
	if (o && e && f) {
		e = e.toLowerCase();
		if (window.attachEvent) {
			o.attachEvent("on" + e.toLowerCase(), f);
		}
		else {
			o.addEventListener(e, f, false);
		}
	}
}
function AddSearchHints(element,type, fields, width) {
	element.onfocus = null;
	var id = element.getAttribute("id");
	
	if (SearchHintArray && SearchHintArray[activeId]) SearchHintArray[activeId].Hide();
	
	SearchHintArray[id] = new SearchHintObject(element,type,id, fields, width);
	SearchHintArray[id].AttachEvent(element.nextSibling, "click", SearchHintArray[id].Select);
	SearchHintArray[id].AttachEvent(document, "click", function(event) {
			var target = (window.event) ? window.event.srcElement : event.target;
			if (SearchHintArray[activeId] && target != SearchHintArray[activeId].s) {
				SearchHintArray[activeId].Hide();
			}
		}
	);
	SearchHintArray[id].AttachEvent(element, "keyup", SearchHintArray[id].Get);
	SearchHintArray[id].AttachEvent(element, "focus", SearchHintArray[id].Show);
}
function SearchHint_unescape(text) {
	text = text.replace("%25","%");
	text = text.replace("%5B","[");
	text = text.replace("%5D","]");
	return text;
}
function getFields(element) {
	var fields = element.parentNode.nextSibling.getElementsByTagName("DIV")[0];
	var list = new Object();
	fields = fields.innerHTML;
	fields = fields.substring(1,fields.length-1);
	fields = fields.split("][");
	for (var i in fields) {
		if (i.toString().length > 0)
			list[fields[i].substring(0,fields[i].indexOf(":"))] = SearchHint_unescape(fields[i].substring(fields[i].indexOf(":")+1,fields[i].length));
	}
	return list;
	
}
