/*
===============================================================

    © carelessWriting.com

    Dieses Skript ist Eigentum von carelessWriting.com.

    Unerlaubte Vervielfältigung wird strafrechtlich verfolgt.

===============================================================
*/


function Autosuggestions(params)
{
    var query = '';
    var onblur = false;
    var timer;
    var charsKlasse = '';

    var obligatorisch =
    [
        'watch', 'suggestionsBox', 'file'
    ];

    for (var i=0; i<obligatorisch.length; i++)
    {
        if (!params[obligatorisch[i]])
        {
            alert(obligatorisch[i] + ' is not set!');
            return;
        }
    }

    if (params.query && params.query.length)
    {
        query = '&' + params.query;
    }

    var autosuggestions = new CSAjax();

    window.onclick = function()
    {
        NHO.removeChildNodes(params.suggestionsBox);
        params.suggestionsBox.style.display = 'none';
    }

	params.watch.onkeyup = function(e)
	{
		var chars = this.value;
        charsKlasse = chars;

		if (chars.length < 2)
		{
			NHO.removeChildNodes(params.suggestionsBox);
            params.suggestionsBox.style.display = 'none';
			return;
		}

        taste = e ? e.which : event.keyCode;

        if (taste != 40 && taste != 38 && taste != 13)
        {
            clearTimeout(timer);
            timer = setTimeout(sendRequest, 20);
        }
	};

    function sendRequest()
    {
        var queryString = '?' + query + 'beginnWith=' + charsKlasse;

        var request = params.file + queryString;

        autosuggestions.sendAjaxByGet(request, getSuggestions, 1);
    }

	function getSuggestions()
	{
		var result = autosuggestions.getAjaxBO().responseText;

		if (!result)
		{
			NHO.removeChildNodes(params.suggestionsBox);
            params.suggestionsBox.style.display = 'none';
            return;
		}

		result = eval('(' + result + ')');

        var length = result.length;
        var entries = [];

		for (var i=0; i<length; i++)
		{
			var div = document.createElement('div');

			div.appendChild(document.createTextNode(result[i]));

			div.onclick = function()
			{
				params.watch.value = this.firstChild.nodeValue;
                params.suggestionsBox.style.display = 'none';
			};

			entries.push(div);
		}

		NHO.removeChildNodes(params.suggestionsBox);
		NHO.appendNodes(params.suggestionsBox, entries);

        params.suggestionsBox.style.display = 'block';
	}
}
