var curSelIndex = 0;
var totalWords = 0;
var tid = null;
var p_key = "";
var p_s = "";

// Copyright by Dictworld.com Email: wjyong@sh163.net
// Initialize
function Initialize(s)
{
	try
	{
		req = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			req = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(oc)
		{
			req = null;
		}
	}

	if(!req && typeof XMLHttpRequest!="undefined")
	{
        try
        {
            req=new XMLHttpRequest();
        }
        catch (e)
        {
            req = null;
        }
	}
	var xy = GetTextPosition(document.getElementById("q"));
	document.getElementById("autocomplete").style.left = xy[0] + "px";
	document.getElementById("autocomplete").style.top = xy[1] + document.getElementById("q").offsetHeight + "px";
	document.getElementById("autocomplete").style.width = document.getElementById("q").offsetWidth + "px";
}

function OnSearch()
{
    window.clearTimeout(tid);
    return true;
}

// Send query
function SendQuery(evt, key, s)
{
    try
    {
        p_key = key;
        p_s = s;
        var k = evt.keyCode;
		if (document.getElementById("autocomplete").style.visibility=="visible")
		{
			switch(k)
			{
				case 38: ArrowUp(); return;
				case 40: ArrowDown(); return;
				case 32:
					if (curSelIndex>0)
					{
						ShowSelectedWord();
						return;
					}
					break;
				default:
					break;
			}
		} else {
			switch(k)
			{
				case 37:
				case 38:
				case 39:
				case 40:
					return;
				default:
					break;
			}
		}
        if (tid!=null)
        {
            window.clearTimeout(tid);
        }
        tid = window.setTimeout("GetSimilarWords()", 500);
    }
    catch (e)
    {
        alert(e);
    }
}
// Send query
function GetSimilarWords()
{
	try
	{
        key = p_key;
        s = p_s;
        window.clearTimeout(tid);
		if(key == "") {HideDiv("autocomplete");return;}
		Initialize(s);

		if(req != null)
		{
			req.onreadystatechange = Process;
			req.open("GET", "dict.php?s=" + s + "&k="+ encodeURI(key), true);
			req.send(null);
		}
	}
	catch(e)
	{
		//Exception, then skill
	}
}

// process the HTTP response
function Process()
{
	if (req.readyState == 4)
	{
		// only if "OK"
		if (req.status == 200)
		{
			if(req.responseText=="")
			{
				document.getElementById("autocomplete").innerHTML ="";
				HideDiv("autocomplete");
			} else			{
				ShowDiv("autocomplete");
				document.getElementById("autocomplete").innerHTML = req.responseText;
			}
			var AutoCompleteTable = document.getElementById("autocomplete").childNodes[0];
			if (AutoCompleteTable)
			{
				curSelIndex = 0;
				totalWords = document.getElementById("autocomplete").childNodes[0].childNodes[0].childNodes.length;
			}
		}
		else
		{
			// another status
			HideDiv("autocomplete");
		}
	}
}

// Show layer
function ShowDiv(divid)
{
   if (document.layers) document.layers[divid].visibility="show";
   else document.getElementById(divid).style.visibility="visible";
}

// Hide layer
function HideDiv(divid)
{
   if (document.layers) document.layers[divid].visibility="hide";
   else document.getElementById(divid).style.visibility="hidden";
}

function GetTextPosition(obj)
{
    var objLeft = obj.offsetLeft;
    var objTop = obj.offsetTop;
    var objParent = obj.offsetParent;
    while (objParent.tagName != "BODY")
	{
        objLeft += objParent.offsetLeft;
        objTop += objParent.offsetTop;
        objParent = objParent.offsetParent;
    }
    return([objLeft,objTop]);
}

// Check whether the word is right or not
function CheckWord(word, answer)
{
	if (word.length == answer.length)
	{
		if (word == answer)
		{
			document.f.q.disabled = true;
			NextGuess();
		}
	}
}

// Initialize
function InitGuess()
{
	try
	{
		req = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			req = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(oc)
		{
			req = null;
		}
	}

	if(!req && typeof XMLHttpRequest!="undefined")
	{
		try
        {
            req=new XMLHttpRequest();
        }
        catch (e)
        {
            req = null;
        }
	}
}
// Send query
function NextGuess()
{
	InitGuess();
	if(req != null)
	{
		req.onreadystatechange = ProcessGuess;
		req.open("GET", "dict.php?s=5", true);
        req.send(null);
	}
	return false;
}

// process the HTTP response
function ProcessGuess()
{
	if (req.readyState == 4)
	{
		// only if "OK"
		if (req.status == 200)
		{
			if(req.responseText=="")
			{
				document.getElementById("autocomplete").innerHTML ="";
				HideDiv("autocomplete");
			} else {
				ShowDiv("autocomplete");
				document.getElementById("autocomplete").innerHTML = req.responseText;
				document.f.q.value = '';
				document.f.q.disabled = false;
				document.f.q.focus();
			}
		}
		else
		{
			// another status
			HideDiv("autocomplete");
		}
	}
}

function GetAnswer()
{
	document.getElementById("TJWordSpell").innerHTML = document.ff.answer.value;
}

function ArrowUp()
{
	if (curSelIndex<=1)
	{
		return;
	}
	var AutoCompleteTable = document.getElementById("autocomplete").childNodes[0];
	if (AutoCompleteTable)
	{
		var WordDiv = AutoCompleteTable.childNodes[0].childNodes[curSelIndex-1];
		if (WordDiv) WordDiv.style.background = "#FFFFFF";
		curSelIndex --;
		WordDiv = AutoCompleteTable.childNodes[0].childNodes[curSelIndex-1];
		if (WordDiv) WordDiv.style.background = "#EEFFEE";
	}
}

function ArrowDown()
{
	if (curSelIndex>=totalWords)
	{
		return;
	}
	var AutoCompleteTable = document.getElementById("autocomplete").childNodes[0];
	if (AutoCompleteTable)
	{
		var WordDiv = AutoCompleteTable.childNodes[0].childNodes[curSelIndex-1];
		if (WordDiv) WordDiv.style.background = "#FFFFFF";
		curSelIndex ++;
		WordDiv = AutoCompleteTable.childNodes[0].childNodes[curSelIndex-1];
		if (WordDiv) WordDiv.style.background = "#EEFFEE";
	}
}

function ShowSelectedWord()
{
	if (curSelIndex<=0||curSelIndex>totalWords)
	{
		return;
	}
	var AutoCompleteTable = document.getElementById("autocomplete").childNodes[0];
	if (AutoCompleteTable)
	{
		var WordDiv = AutoCompleteTable.childNodes[0].childNodes[curSelIndex-1];
		if (WordDiv)
		{
			for(var i=0; i < WordDiv.childNodes[0].childNodes.length; i++)
			{
				if(WordDiv.childNodes[0].childNodes[i].tagName == "A")
				{
					document.f.q.value = WordDiv.childNodes[0].childNodes[i].innerText;
					document.f.q.focus();
					curSelIndex = 0;
					HideDiv("autocomplete");
				}
			}
		}
	}
}
