﻿var useAdvSrch = 0;

var autoCompleteSuggestList = new Array();

var autoCompleteCurrentlyFetchingList = '';

var significantCharacters = 2;

var redirected = false;

var selectedItem = null;

var searchTxt = '';

var targetIsAutobox = false;

$(document).ready(
    function() {
        String.prototype.trim = function() {
            return this.replace(/^\s+|\s+$/g, "");
        }
        String.prototype.ltrim = function() {
            return this.replace(/^\s+/, "");
        }
        String.prototype.rtrim = function() {
            return this.replace(/\s+$/, "");
        }
        
        if(navigator.userAgent.indexOf('Opera') != -1)
        {
            $('#hdr_srch_options').hide();
        }

        $('#hdr_srch_txt').val('Search by Artist, Venue or Team');

        $('#hdr_srch_txt').focus(
            function() {
                if ($(this).val() == 'Search by Artist, Venue or Team') {
                    $(this).val('');
                    $(this).addClass('focus');
                }
            }
        );
        $('#hdr_srch_txt').blur(
            function() {
                if ($(this).val() == '') {
                    $(this).val('Search by Artist, Venue or Team');
                    $(this).removeClass('focus');
                }
                if (!targetIsAutobox) {
                    closeAutoBox();
                }
            }
        );

        $('#hdr_adv_srch_x').click(
            function() {
                $('#hdr_adv_srch_toggle').click();
            }
        );

        $('#hdr_adv_srch_toggle').click(
            function() {
                $('#hdr_adv_srch_x').toggle();
                if (useAdvSrch) {
                    $(this).text('Advanced Search +');
                    $('#hdr_srch_area').animate({ height: "55px" }, 500);
                    $('#hdr_advSrchInputs').animate({ height: "0px" }, 500);
                    useAdvSrch = 0;
                }
                else {
                    $(this).text('Advanced Search -');
                    $('#hdr_srch_area').animate({ height: "139px" }, 500);
                    $('#hdr_advSrchInputs').animate({ height: "71px" }, 500);
                    useAdvSrch = 1;
                }
            }
        );

        // triggers every time a key is hit on the search textbox
        $('#hdr_srch_txt').keypress(
            function(e) {
                if (e.which == 13 && ($(this).val().length > 0 || useAdvSrch)) {
                    if (selectedItem != null && useAdvSrch) {
                        finalizeChoice();
                    }
                    else {
                        closeAutoBox();
                        $('#hdr_srch_btn').click();
                    }
                }
            }
        );




        $('#hdr_srch_txt').keyup(
            function(e) {
                //up arrow
                if (e.keyCode == 38 && autoCompleteSuggestList.length > 0) {
                    openAutoBox();
                    if (selectedItem == null) {
                        selectedItem = $("#hdr_srch_auto_suggest label:last");
                    }
                    else if (selectedItem.attr('text') == $("#hdr_srch_auto_suggest label:first").attr('text')) {
                        selectedItem = null;
                    }
                    else {
                        selectedItem = selectedItem.prev();
                    }
                    visualSelect(selectedItem);
                    if (!useAdvSrch) {
                        alterSearchText(selectedItem);
                    }
                }
                //down arrow
                else if (e.keyCode == 40 && autoCompleteSuggestList.length > 0) {
                    openAutoBox();
                    if (selectedItem == null) {
                        selectedItem = $("#hdr_srch_auto_suggest label:first");
                    }
                    else if (selectedItem.attr('text') == $("#hdr_srch_auto_suggest label:last").attr('text')) {
                        selectedItem = null;
                    }
                    else {
                        selectedItem = selectedItem.next();
                    }
                    visualSelect(selectedItem);
                    if (!useAdvSrch) {
                        alterSearchText(selectedItem);
                    }
                }
                else if ($(this).val() != searchTxt && e.keyCode != 38 && e.keyCode != 40) {
                    searchTxt = $(this).val();
                    if ($(this).val().length >= (significantCharacters)) {
                        selectedItem = null;
                        var curSuggestSet = null;

                        // get the current 3 letter start to the string
                        var curSearchSeed = $(this).val().substring(0, significantCharacters);
                        var curSearchText = $(this).val();

                        var curSeedIndex = -1;

                        if (autoCompleteCurrentlyFetchingList.indexOf(curSearchSeed) < 0) {

                            // first add it to the list so that if the user types again before the ajax is done, there will not be
                            //      a double entry
                            autoCompleteCurrentlyFetchingList += curSearchSeed + "||";

                            // call ajax autosuggest
                            $.get(
                                "/ajax/ajxSearchAutoComplete.aspx?srchSeed=" + escape(curSearchSeed),
                                function(data) {
                                    curSuggestSet = eval('(' + data + ')');

                                    curSeedIndex = autoCompleteSuggestList.push(curSuggestSet) - 1;

                                    var curSuggestList = NarrowDownSuggestList(autoCompleteSuggestList[curSeedIndex].relatedEntities, curSearchText);

                                    // ok now time to show the div, update it
                                    UpdateAndShowSuggestDiv(curSuggestList[0], curSuggestList[1]);
                                }
                            );
                        }
                        else {
                            try {
                                for (var i = 0; i < autoCompleteSuggestList.length; i++) {
                                    if (autoCompleteSuggestList[i].searchedLetters == curSearchSeed) {
                                        curSeedIndex = i;
                                        break;
                                    }
                                }

                                // this could fail if the ajax has not finished loading the seed index yet
                                var curSuggestList = NarrowDownSuggestList(autoCompleteSuggestList[curSeedIndex].relatedEntities, curSearchText);

                                UpdateAndShowSuggestDiv(curSuggestList[0], curSuggestList[1]);
                            }
                            catch (e) {
                            }
                        }
                    }                    
                    //if there are less than the needed letters close the box (will take care of backspace, etc.)
                    else {
                        closeAutoBox();
                    }
                }
            }
        );






        $('.hdr_srch_go').click(
            function() {

                RedirFromSearchTerm($('#hdr_srch_txt').val());
            }
        );

        var time = new Date();
        var futureTime;
        if (time.getMonth() < 9) {
            futureTime = new Date(time.getFullYear(), time.getMonth() + 4, time.getDate());
        } else {
            futureTime = new Date(time.getFullYear() + 1, (time.getMonth() + 4) % 11, time.getDate());
        }

        $('#hdr_start_datepicker').datepicker();

        $('#hdr_end_datepicker').datepicker();

        //add click to datebegin div
        $('#hdr_datebegin_btn').addClass('ui-datepicker-trigger');
        $('#hdr_start_datepicker')['after']($('#hdr_datebegin_btn'));
        $('#hdr_datebegin_btn').click(function() {
            if ($.datepicker._datepickerShowing && $.datepicker._lastInput == $('#hdr_start_datepicker')[0])
                $.datepicker._hideDatepicker();
            else
                $.datepicker._showDatepicker($('#hdr_start_datepicker')[0]);
            return false;
        });

        //add click to dateend div
        $('#hdr_dateend_btn').addClass('ui-datepicker-trigger');
        $('#hdr_end_datepicker')['after']($('#hdr_dateend_btn'));
        $('#hdr_dateend_btn').click(function() {
            if ($.datepicker._datepickerShowing && $.datepicker._lastInput == $('#hdr_end_datepicker')[0])
                $.datepicker._hideDatepicker();
            else
                $.datepicker._showDatepicker($('#hdr_end_datepicker')[0]);
            return false;
        });

    }
);



function NarrowDownSuggestList(fullList, refineVal) {

    var retList = new Array();
    var retListClean = new Array();

    var refineReg = new RegExp("(" + refineVal + ")", "gi");

    // get the matches, but only up to 15
    for (var i = 0; i < fullList.length && retList.length <= 15; i++) {
        if (fullList[i].toLowerCase().indexOf(refineVal.toLowerCase()) > -1) {

            retList.push(fullList[i].replace(refineReg, "<b>$1</b>"));
            retListClean.push(fullList[i]);
        }
    }

    return new Array(retList, retListClean);
}






function UpdateAndShowSuggestDiv(suggestList, textList) {

    var suggListHtml = '';
    for (var i = 0; i < suggestList.length; i++) {
        suggListHtml += '<label class="suggest_option" text="' + textList[i] + '">';
        suggListHtml += suggestList[i];
        suggListHtml += '</label>';
    }

    $('#hdr_srch_auto_suggest').html(suggListHtml);
    $('#hdr_srch_auto_suggest').show();

    // if there are suggestions, add the handlers to them
    if (suggListHtml.length > 0) {
        $('.suggest_option').hover(
            function() {
                selectedItem = $(this);
                visualSelect(selectedItem);
                //alterSearchText(selectedItem);
            }
        );
        $('#hdr_srch_auto_suggest').click(
            function() {
                if(useAdvSrch)
                {
                    finalizeChoice();
                    $('#hdr_srch_txt').focus();
                }
                else
                {
                    finalizeChoice();
                    $('#hdr_srch_btn').click();
                    //RedirFromSearchTerm($(this).text());
                }
            }
        );
        $('#hdr_srch_auto_suggest').mouseup(
            function()
            {
                $('#hdr_srch_txt').focus();
            }
        )
        $('#hdr_srch_auto_suggest').hover(
            function()
            {
                targetIsAutobox = true;
            },
            function()
            {
                targetIsAutobox = false;
                /*selectedItem = null;
                visualSelect(selectedItem);*/
                //alterSearchText(selectedItem);
            }
        );
    }
}





function RedirFromSearchTerm(srchTerm) {
    if (!redirected) {

        var redirLoc = "";

        if (srchTerm.trim() == "Search by Artist, Venue or Team" || srchTerm.trim() == '') {
            if (useAdvSrch && ($('#hdr_end_datepicker').val() != "" || $('#hdr_state_select').val() != "217")) {
                srchTerm = 'all';
            }
            else {
                return;
            }
        }

        redirected = true;

        $.get("/ajax/ajxSearchMapping.aspx?inTrm=" + escape(srchTerm),
            function(data) {
                redirLoc = data;

                if (useAdvSrch) {
                    redirLoc += "?startDate=" + escape($('#hdr_start_datepicker').val()) + "&endDate=" +
                    escape($('#hdr_end_datepicker').val()) + "&loc=" + escape($('#hdr_state_select').val());
                }

                location.href = redirLoc;
            }
        );
    }
}




function closeAutoBox()
{
    $('#hdr_srch_auto_suggest').hide();
    if(selectedItem != null)
    {
        searchTxt = selectedItem.attr('text');
        selectedItem.removeClass('selected');
        selectedItem = null;
    }
}

function openAutoBox()
{
    $('#hdr_srch_auto_suggest').show();
}

function visualSelect(element)
{
    $('#hdr_srch_auto_suggest .selected').removeClass('selected');
    if(element != null)
    {
        element.addClass('selected');
    }
}

function resetSearchText()
{
    $('#hdr_srch_txt').val(searchTxt);
}

function alterSearchText(element)
{
    if(element != null)
    {
        $('#hdr_srch_txt').val(element.attr('text'));
    }
    else
    {
        resetSearchText();
    }
}

function finalizeChoice()
{
    closeAutoBox();
    alterSearchText(selectedItem);
    selectedItem = null;
}