﻿
function EggheadSuggest() {
    var formname = "";
    var divLayername = "";
    var maxSuggestionNumber = 15;
    var pQueryInput;
    var pLayer;
    var pLastQuery;
    var paramName = "SearchTerm";
    var pCurrentSelection = 0;
    var pLayerName = 'suggestLayer';
    var hoverClass = 'EggheadSearchHover'
    var SEARCH_DEFAULT_TEXT = "Product name or item code...";

    this.init = function(form, suggestionsNumber, divLayer) {
        //alert("EggheadSuggest : " + form);
        if (formname == null) return null;
        maxSuggestionNumber = 15; //suggestionsNumber;
        formname = form;
        divLayername = divLayer;

        pLayer = document.getElementById(divLayername);
        pQueryInput = document[formname][paramName];
        pQueryInput.onkeyup = function(e) { handleKeyUp(e); };
        pQueryInput.onfocus = showLayer;
    }

    this.checkAndClear = function checkAndClear() {
        if (formname == "") formname = document.forms[0].name;
        if (pQueryInput == null) pQueryInput = document[formname][paramName];

        if (pQueryInput.value == SEARCH_DEFAULT_TEXT) {
            pQueryInput.value = '';
        }
    }

    this.checkAndClearBox = function checkAndClearBox(txtBox) {

        if (formname == "") formname = document.forms[0].name;
        if (pQueryInput == null) pQueryInput = document[formname][paramName];

        if (pQueryInput.value == SEARCH_DEFAULT_TEXT) {
            txtBox.value = '';
            pQueryInput.value = '';
        }
    }

    this.submit = function() {

        if (formname === "") formname = document.forms[0].name;

        //alert('this.submit : ' + formname);
        //alert('this.submit : ' + paramName);

        document[formname][paramName].value
			= document[formname][paramName].value.toString().replace("&quote;", "'").replace("&dquote;", "\"").replace("&", "");
        document[formname].submit();
    }

    this.doFilter = function() {

        if (formname == "") formname = document.forms[0].name;


        try {
            //Send Notification To PredictiveIntent
            //if (PI_Notification != null && PI_Notification != undefined) {
            //    PI_Notification.NotifyWithSearchKeywork(document[formname][paramName].value);
            //}
        }
        catch (e)
        { }

        var url = Egghead.application.path() + "/search.aspx?searchTerm=" + escape(document[formname][paramName].value);
        window.location = url;

        return true;

        document[formname][paramName].value
			= document[formname][paramName].value.toString().replace("&quote;", "'").replace("&dquote;", "\"").replace("&", "");
        document[formname].submit();
    }

    function handleKeyUp(evt) {
        evt = (evt) ? evt : ((event) ? event : null);
        var keyCode = evt.keyCode;

        if (keyCode == 38) {
            moveSelection('up')
        } else if (keyCode == 27) {
            hideLayer(evt);
        } else if (keyCode == 13) {

            if (getTableCell(pCurrentSelection) != null && jQuery('#' + getTableCell(pCurrentSelection).id + ' td a.searchAjaxCol1').attr('searchTerm') != undefined) {
                document.forms[0]['SearchTerm'].value = jQuery('#' + getTableCell(pCurrentSelection).id + ' td a.searchAjaxCol1').attr('searchTerm');
            }

            if (getTableCell(pCurrentSelection) != null && jQuery('#' + getTableCell(pCurrentSelection).id + ' td a.searchAjaxCol1') != undefined) {
                jQuery('#' + getTableCell(pCurrentSelection).id + ' td a.searchAjaxCol1').click();
                evt.cancelBubble = true;
                return false;
            }

            evt.cancelBubble = true;
            eggheadsearch.doFilter();
            Egghead.closing = true;
            return false;
        } else if (keyCode == 40) {
            moveSelection('down');
        } else {
            if (pQueryInput.value == '') {
                hideLayer(evt);
                if (pLayer != null) { pLayer.innerHTML = ''; }
                return null;
            }

            if (pLastQuery != pQueryInput.value) { PerformSuggesionsQuery() }
            pLastQuery = pQueryInput.value;
        }
    }

    function moveSelection(direction) {

        var pos = pCurrentSelection;
        if (direction == 'up') { pos--; }
        else { pos += 1; }

        if (pos == 0) {
            unmarkAll();
            pQueryInput.focus();
            pCurrentSelection = pos;

        } else {
            var tblCell = getTableCell(pos);
            if (tblCell != null) {
                unmarkAll();
                highlightSuggest(tblCell);
                pCurrentSelection = pos;
            }
        }



        var query = pQueryInput.value;
        pQueryInput.value = '';
        pQueryInput.focus();
        pQueryInput.value = query;
    }

    function highlightSuggest(tblCell) {
        tblCell.className = hoverClass;
    }

    function unmarkSuggest(tblCell) {
        tblCell.className = '';
    }

    function unmarkAll() {
        var tblCell;
        for (var i = 0; i < maxSuggestionNumber; i++) {
            tblCell = getTableCell(i);
            if (tblCell != null) {
                unmarkSuggest(tblCell);
            }
        }
    }

    function getTableCell(pos) {
        var tblCell;
        tblCell = document.getElementById(pLayerName + '_' + pos);
        return tblCell;
    }

    function PerformSuggesionsQuery() {
        var searchQuery = pQueryInput.value;
        try {
            $.ajax({
                type: "POST",
                url: Egghead.application.path() + '/WebService.asmx/GetSuggestions',
                data: "{'keyword':'" + searchQuery + "','maxSuggestionsCount':'"
					+ maxSuggestionNumber + "','formname':'" + formname + "','paramname':'" + paramName + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                beforeSend: function() { },
                success: function(msg) {



                    if (msg != null) {
                        $("#" + divLayername).html(msg.d);
                        showLayer();

                        $("#suggestLayer tr td").hover(
                      function() {
                          $(this.parentNode).addClass(hoverClass);
                          var parentID = jQuery(this.parentNode).attr('id');
                          var parentPosition = parentID.substring(parentID.indexOf('_') + 1);

                          var tblCell = getTableCell(parentPosition);
                          if (tblCell != null) {
                              unmarkAll();
                              highlightSuggest(tblCell);
                              pCurrentSelection = parentPosition;
                          }
                      },
                      function() {
                          $(this.parentNode).removeClass(hoverClass);
                      }
                    );
                    }
                },
                error: function(msg) { },
                complete: function() { }
            });
        }
        catch (ex) { //alert(ex); 
        }
    }


    function hideLayer(e) {
        if (e.target && pLayer != null && e.target.nodeName.toLowerCase() != 'a') {
            jQuery('#suggestLayer table').hide()
        }

        if (e.keyCode && pLayer != null) {
            jQuery('#suggestLayer table').hide()
        }
    }

    this.hideLayerOutsideCall = function(e) {
        if (pLayer != null && e.target.nodeName.toLowerCase() != 'a') {
            jQuery('#suggestLayer table').hide()
        }
    }

    function showLayer() {
        jQuery('#suggestLayer table').show()
        pLayer.style.zIndex = 1000;
    }
}

var eggheadsearch = new EggheadSuggest();

//function handleSelection(query){
//	try{
//		document[eggheadsearch.formname][eggheadsearch.paramname].value = query;// query.toString().replace("&quote;", "'").replace("&dquote;", "\"").replace("&","");
//		eggheadsearch.doFilter();
//		//document[eggheadsearch.formname].submit();
//	}
//	catch(ex){ }
//}

