﻿
var LOLSearch = new function () {

    //private variables and functions
    var searchSubmitTimer;
    var isSubmitting;

    isSubmitting = false;

    function clearSearchSubmitTimer() {
        if (searchSubmitTimer != null) {
            clearTimeout(searchSubmitTimer);
            searchSubmitTimer = null;
        }
    }



    //public variables and functions
    return {

        searchTip: "Enter recipe, ingredient, meal type, etc.",

        submitSearch: function (delay) {
            if (delay != null) {
                clearSearchSubmitTimer();
                searchSubmitTimer = setTimeout("LOLSearch.submitSearch()", delay);
                return;
            }
            else {
                if (isSubmitting == false) {
                    LOLSearch.lockSubmit();
                    if ($('#searchinput').val() != "" && $('#searchinput').val() != LOLSearch.searchTip) {
                        window.location = "/Search.aspx?query=" + escape($('#searchinput').val());
                    }
                }
            }

        },


        cancelSearch: function () {
            clearSearchSubmitTimer();
        },

        lockSubmit: function () {
            isSubmitting = true;
        },

        initSearch: function () {
            if ($('#searchinput').val() == LOLSearch.searchTip) {
                $('#searchinput').val("");
                $('#searchinput').zIndex(100);

                $('#searchinput').autocomplete({
                    delay: 300,
                    source: function (search, callback) {

                        $.getJSON("/WebServices/SearchComplete.aspx",
                            {
                                query: search.term,
                                partialkeys: "1",
                                containsall: "0",
                                limit: "10"
                            },
                            function (data, status) {
                                var result = new Array();
                                if (data == null || data.result == null || data.result.matches == null) {
                                    return;
                                }
                                for (var i = 0; i < data.result.matches.length; i++) {
                                    data.result.matches[i].url = data.result.matches[i].url;
                                    result[i] = { data: data.result.matches[i], value: data.result.matches[i].name, label: data.result.matches[i].name.replace(/&reg;/g, "<sup>&reg;</sup>") };
                                }

                                callback(result);
                            }
                        );

                    },
                    change: function (event, ui) {
                        //alert('changed');

                        return false;
                    },
                    select: function (event, ui) {
                        event.preventDefault();
                        if (ui.item.data != null && ui.item.data.url != null && ui.item.data.url != "") {
                            //googleReportEvent('search', 'view', ui.item.label);
                            window.setTimeout(function () { googleReportEvent('search', 'AutoComplete', ui.item.label); }, 50);
                            
                            LOLSearch.cancelSearch();
                            LOLSearch.lockSubmit();
                            //alert('selected ' + ui.item.label + " " + ui.item.data.url);
                            window.location = ui.item.data.url;
                            return false;
                        }
                        else {
                            return true;
                        }
                    },
                    focus: function (event, ui) {

                        return false;
                    }
                });


            }
        }



    };

};


$(document).ready(function () {
    $('#searchinput').val(LOLSearch.searchTip);
    $('#searchinput').focus(LOLSearch.initSearch);

    $('#searchinput').keypress(function (event) {
        if (event.keyCode == '13') {
            event.preventDefault();

            if ($('#searchinput').val() != "" && $('#searchinput').val() != LOLSearch.searchTip) {

                //fix to ensure autocomplete box hits first.
                LOLSearch.submitSearch(500);
               
            }
        }
    });
    $('#searchbutton').click(function (event) {
        event.preventDefault();
        LOLSearch.submitSearch();
    });
    $('#search_submit').click(function (event) {
        event.preventDefault();
        LOLSearch.submitSearch();
    });

});


