//GetElementsByID Shorthand
function $()
{
    var elements = new Array();
    for (var i = 0; i < arguments.length; i++)
    {
        var element = arguments[i];
        if (typeof element == 'string')
            element = document.getElementById(element);
        if (arguments.length == 1)
            return element;
        elements.push(element);
    }
    return elements;
}
var responseCache;
var step;

// Crossbrowser XMLHttpRequest Object
function createXMLHttpRequest()
{
    try { return new ActiveXObject("Msxml2.XMLHTTP");    } catch(e) {}
    try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
    try { return new XMLHttpRequest();                   } catch(e) {}
    window.status = "XMLHttpRequest not supported";
    return null;
}

// Update the page with the response.
function stateListener()
{
    step = 1;
    if (window.translator.readyState == 4)
    {
        if (window.translator.status == 200)
        {
            xml = translator.responseXML;
            updateAutoCompleteField(xml);
            window.status = "";
        }
        else
        {
            window.status = "Проблемы при отправке данных.";
        }
    }
    else
    {
        window.status = "Подождите, идёт отправка данных.";
    }
}

// Change message "wait" status
function change_wait_status()
{
    if (window.translator.readyState != 4)
    {
        if (step > 3)
        {
            step = 1;
        }

        if (step == 1)
        {
            window.status = "Подождите, идёт отправка данных.";
        }
        window.status += ".";

        step++;

        window.setTimeout("change_wait_status()", 500);
    }
}

//create the XMLHttpRequest() object
window.translator = createXMLHttpRequest();

//Query the server with the data
function internalSendAutoCompleteRequest(url)
{
    try
    {
        var time = new Date();

        //create the XMLHttpRequest() object
        window.translator = createXMLHttpRequest();

        translator.onreadystatechange = stateListener;
        translator.open("GET", url + "&rand=" + time.getTime(), true);
        translator.send(null);
    }
    catch (e)
    {
        alert(e.message);
    }
}

function sendAutoCompleteRequest(url)
{
    if(window.translator.readyState == 4 || window.translator.readyState == 0)
    {
        internalSendAutoCompleteRequest(url);
    }
}

// page events
function autoCompleteKeyUp(e, elName)
{
	// skip special chars
	if (!e) e = window.event || null; 
	if (e.altKey || e.ctrlKey) return;
	var n = e.keyCode?e.keyCode:e.charCode;
	if (n == 13 || n == 11) return;
	
	hiddenAutotextBox();
	lastKeyUpEvent = (new Date().getTime());
	window.setTimeout("autoCompleteRequest('"+elName+"', '"+lastKeyUpEvent+"')", 1000);
}

function autoCompleteRequest(elName, time)
{
	if (lastKeyUpEvent == time)
	{
		text = document.getElementById(elName).value;
		if (text.length > 0)
		{
			autotext = document.getElementById("autotextbox");
			autotext.innerHTML = "поиск...";
			autotext.style.visibility = "visible";
			url = autoCompleteSite + "common/search_autocomplete.php?q=" + encodeURI(text);
			sendAutoCompleteRequest(url);
		}
	}
}

function updateAutoCompleteField(xml)
{
	goods = xml.getElementsByTagName("goods");
	
	hiddenAutotextBox();

	autotext = document.getElementById("autotextbox");
	autotext.innerHTML = "<div class='autotext_closebox'><a href='#close' onClick='hiddenAutotextBox()'>закрыть</a></div>";
	
	if (goods.length > 0)
	{
		for(i = 0; i < goods.length; i++)
		{
			gid = goods[i].attributes.getNamedItem("gid").value;
			autotext.innerHTML += "<a href='" + autoCompleteSite + "goods/" + gid + "/' target='_blank'>" + goods[i].firstChild.nodeValue + "</a>";
		}
	}
	total = xml.getElementsByTagName("total")[0].firstChild.nodeValue;
	autotext.innerHTML += "&nbsp;&nbsp;&nbsp;<b>Всего совпадений:</b> " + total + ".";
	if (total > 10)
	{
		autotext.innerHTML += " Для того чтобы увидеть остальные варианты, нажмите Enter.";
	}
	autotext.style.visibility = "visible";
}

function hiddenAutotextBox()
{
	document.getElementById("autotextbox").style.visibility = "hidden";
}
