jQuery(document).ready(function () {
    if (jQuery(".suggest").length != 0) {
	    initSearch();
    }
});

function initSearch() {
    /* **************************************************
    * Load suggestions
    * ************************************************** */
    var suggestionvalue = '';
    jQuery("#container input.searchinput").attr("autocomplete", "off");
    jQuery("#container input.searchinput").keyup(function (event) {
        if (event.keyCode != '38' && event.keyCode != '40' && event.keyCode != '27') {
            var search;
            search = jQuery(this).val();

            if (search.length > 2) {
                // Trigger AJAX request 
                jQuery.ajax(
				{
				    type: "GET",
				    url: suggestionservicepath + "/Ctac/CMSService.svc/GetSuggestions",
				    dataType: 'json',
				    data: "searchString=" + search,
				    success: function (data) {
				        suggestionvalue = search;

				        if (data.d.length != 0) {

				            var html = "";
				            jQuery.each(data.d, function (key, value) {
				                html += "<tr><td>" + value + "</td></tr>";
				            });

				            jQuery(".suggesttable tbody").empty();
				            jQuery(".suggesttable tbody").html(html);
				            var pos = jQuery("#container input.searchinput").position();

				            jQuery(".suggest").css({
				                left: pos.left,
				                top: pos.top + jQuery("#container input.searchinput").outerHeight() - 1
				            });

				            jQuery(".suggest").show();
				        } else {
                            //Hide suggestionlist when no results
				            jQuery(".suggest").hide();
				        }
				    }
				});

            } else {
                // Hide suggestion list when not enough letters
                jQuery(".suggest").hide();
            }
        }

        //Close suggestion box, if user click anywhere else
        jQuery(document).click(function (e) {
            jQuery(".suggest").hide();
        });

    });

    /* **************************************************
    * handle selecting a suggestion with the mouse
    * ************************************************** */
    jQuery(".suggesttable > tbody > tr").live("mouseenter", function () {
        jQuery(this).addClass("active");
    }).live("mouseleave", function () {
        jQuery(this).removeClass("active");
    }).live("click", function () {
        var html = jQuery(this).children(":first").html();
        //strip html tags
        var html_stripped = html.replace(/(<.*?>)/ig, "");
        //put value in form
        jQuery("#container input.searchinput").val(html_stripped.trim());
        //hide suggestions
        jQuery(".suggest").show();
        //post form
        var buttonID = jQuery("#container input.searchbutton").attr("name");
        __doPostBack(buttonID, 'OnClick'); // call postback of linkbutton
    });

    /* **************************************************
    * handle selecting a suggestion with keys
    * ************************************************** */
    jQuery("#container input.searchinput").keydown(function (event) {
        if (event.keyCode == '38' || event.keyCode == '40') {
            //38: Arrow Up 
            //40: Arrow Down
            //find tr with class==active
            var elem = jQuery(".suggesttable tr.active");
            if (elem.length == 0) {
                //select first or last element of the list
                if (event.keyCode == '38')
                    elem = jQuery(".suggesttable tr:last");
                if (event.keyCode == '40')
                    elem = jQuery(".suggesttable tr:first");
            } else {
                //clear selection
                elem.removeClass("active");
                //select next or previous
                if (event.keyCode == '38')
                    elem = elem.prev();
                if (event.keyCode == '40')
                    elem = elem.next();
            }

            if (elem.length == 0) {
                //No previous or next found (selection was at end or beginning of list)
                jQuery("#container input.searchinput").val(suggestionvalue);
            } else {
                elem.addClass("active");
                //Copy data to input
                var html = elem.children(":first").html();
                //strip html tags
                var html_stripped = html.replace(/(<.*?>)/ig, "");
                //put value in form
                jQuery("#container input.searchinput").val(html_stripped.trim());
            }
        } else if (event.keyCode == '27') {
            //Hide suggestions on ESC key
            jQuery(".suggest").hide();
        }
    });

}
