﻿var dvAjaxTerms = null;
var txtAjaxBox = null;
function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}
function ajaxTerms_Init(el, top, left, width)
{
	if (dvAjaxTerms == null)
	{
		dvAjaxTerms = document.getElementById("dvAjaxTerms");
		txtAjaxBox = el;
	}
	
	addEventSimple(el, "keyup", function(e){ajaxTerms_OnKeyUp(el, e);});
	addEventSimple(dvAjaxTerms, "click", ajaxTerms_Click);
	addEventSimple(dvAjaxTerms.getElementsByTagName("ul")[0], "mouseover", ajaxTerms_MouseIn)
	addEventSimple(dvAjaxTerms.getElementsByTagName("ul")[0], "mouseout", ajaxTerms_MouseOut)
	addEventSimple(el, "blur", function(){setTimeout(function(){dvAjaxTerms.style.display="none";}, 100);});
	
	dvAjaxTerms.style.top = top;
	dvAjaxTerms.style.left = left;
	dvAjaxTerms.style.width = width;
}
function ajaxTerms_Click(e)
{
	if (!e) var e = window.event;
	var el = e.srcElement;
	txtAjaxBox.value = el.innerText;
}
function ajaxTerms_MouseIn(e)
{
	if (!e) var e = window.event;
	var el = e.srcElement;
	if(el.tagName == "LI")
		el.className += " over";
}
function ajaxTerms_MouseOut(e)
{
	if (!e) var e = window.event;
	var el = e.srcElement;
	if(el.tagName == "LI")
		el.className = el.className.replace("over", "");
}
var oldVal;
function ajaxTerms_OnKeyUp(el, e)
{
	if (!e) var e = window.event;
	
	var keycode;
	if (e.keyCode) keycode = e.keyCode;
	else if (e) keycode = e.which;
	
	if (keycode == 38 || keycode == 40)
		ajaxTerms_Move(el, keycode);
	else if (keycode == 27)
	{
		selLi = null;
	
		var ul = dvAjaxTerms.getElementsByTagName("ul")[0];
		while (ul.childNodes.length > 0)
			ul.removeChild(ul.childNodes[0]);
			
		dvAjaxTerms.style.display = "none";
		el.value = oldVal;
	}
	else if (keycode == 13)
	{
		dvAjaxTerms.style.display = "none";
	}
	else if (oldVal != el.value)
	{
		selLi = null;
		ajaxTerms_Open(el);
		oldVal = el.value;
	}
}
var selLi;
function ajaxTerms_Move(el, keycode)
{
	var ul = dvAjaxTerms.getElementsByTagName("ul")[0];
	
	if (selLi)
		selLi.className = "";
	
	switch(keycode)
	{
		case 38: // up
			if (selLi && selLi.previousSibling)
				selLi = selLi.previousSibling;
			break;
		case 40: // down
			if (!selLi)
				selLi = ul.childNodes[0];
			else if (selLi.nextSibling)
				selLi = selLi.nextSibling;
			break;
	}
	
	if (selLi)
	{
		selLi.className = "sel";
		selLi.scrollIntoView(false);
		el.value = selLi.innerText;
	}
}
function ajaxTerms_Open(el)
{		
	var ul = dvAjaxTerms.getElementsByTagName("ul")[0];
	if (el.value.length > 0)
	{
		dvAjaxTerms.style.display = "block";
		
		while (ul.childNodes.length > 0)
			ul.removeChild(ul.childNodes[0]);
		
		var loading = document.createElement("li");
		loading.innerText = "Loading...";
		ul.appendChild(loading);
		
		ajaxTerms_Get(el, el.value);
	}
	else
	{
		dvAjaxTerms.style.display = "none";
	}
}
function ajaxTerms_Get(el, refVal)
{
	$.ajax({
		async:true,
		url:"controls/ajaxterms.ashx",
		data:"text=" + refVal,
		dataType:"text",
		success: function(data){ajaxTerms_Callback(el, refVal, data);}
		});
}
function ajaxTerms_Callback(el, refVal, response)
{
	if (el.value != refVal)
		return; // cancel if the text has changed
	
	var vals = response.split("|");
	
	var ul = dvAjaxTerms.getElementsByTagName("ul")[0];
	
	while (ul.childNodes.length > 0)
		ul.removeChild(ul.childNodes[0]);
	
	if (vals.length > 0)
		for (var i = 0; i < vals.length; i++)
		{
			var li = document.createElement("li");
			li.innerText = vals[i];
			ul.appendChild(li);
		}
	else
		ul.childNodes[0].innerText = "";
}

