﻿/// <reference name="MicrosoftAjax.js"/>
/// <reference path="../jquery-1.3.2-vsdoc.js" />

var MultiSearch = new Object();

$(window).load
(
    function()
    {
        MultiSearch.$rootElement = $('#multi-search')
            .click( MultiSearch.rootClick )
            .keydown( MultiSearch.keyPress )
            .data('mouseInside', false)
            .hover( function() { MultiSearch.$rootElement.data('mouseInside', true); }, function() { MultiSearch.$rootElement.data('mouseInside', false); } );
        MultiSearch.$toggleDisplayButton = $('#multi-search-button')
            .click( MultiSearch.toggleDisplayButtonClick )
            .keydown( MultiSearch.keyPress )
        MultiSearch.$lastItem = MultiSearch.$rootElement.find('.selected');
        window.setTimeout(MultiSearch.closeAfterStartupDelay, 10000);       
    }
);

MultiSearch.keyPress = function(e)
{
    switch (e.keyCode)
    {
        case Sys.UI.Key.esc:
            MultiSearch.close();
            break;
        case Sys.UI.Key.up:
            MultiSearch.handleNavigation('up');
            break;
        case Sys.UI.Key.down:
            MultiSearch.handleNavigation('down');
            break;
        case Sys.UI.Key.left:
            MultiSearch.handleNavigation('left');
            break;
        case Sys.UI.Key.right:
            MultiSearch.handleNavigation('right');
            break;
        default:
            return;
    }
    
    e.preventDefault();
    e.stopPropagation();
}

MultiSearch.handleNavigation = function(direction)
{
    var 
        $activeList = MultiSearch.$lastItem.parent(),
        $allItemsInActiveList = $activeList.children(),
        $allLists = MultiSearch.$rootElement.find('ol'),
        indexOfLastItem = $allItemsInActiveList.index(MultiSearch.$lastItem),
        indexOfActiveList = $allLists.index($activeList);

    switch (direction)
    {
        case 'up':
            if (indexOfLastItem > 0)
            {
                MultiSearch.setSelectedItem($allItemsInActiveList[indexOfLastItem - 1]);    
            }
            break;
        case 'down':
            if (indexOfLastItem < $allItemsInActiveList.length - 1)
            {
                MultiSearch.setSelectedItem($allItemsInActiveList[indexOfLastItem + 1]);    
            }
            break;
        case 'left':
            if (indexOfActiveList > 0)
            {
                MultiSearch.setSelectedItem($activeList.prev().children('.selected')[0]);    
            }
            break;
        case 'right':
            if (indexOfActiveList < $allLists.length - 1)
            {
                MultiSearch.setSelectedItem($activeList.next().children()[0]);    
            }
            break;
    }    
}

MultiSearch.rootClick = function(e)
{
    switch (e.target.tagName.toLowerCase())
    {
        case "a" :
            MultiSearch.setSelectedItem(e.target.parentNode);
            break;
        case "li" :
            MultiSearch.setSelectedItem(e.target);
            break;
        case "img" :
            if ($(e.target).hasClass('close')) { MultiSearch.close(); }
            break;
    }
}

MultiSearch.setSelectedItem = function(listItem)
{
    var 
        $targetItem = $(listItem),
        $currentList = $targetItem.parent(),
        ajaxOptions = new Object();
    
    $currentList.children().removeClass('selected');
    $targetItem.addClass('selected').children().focus();
    MultiSearch.$lastItem = $targetItem;
    
    switch ($currentList.attr('class'))
    {
        case "top-categories":
            $currentList.nextAll('ol').remove();
            ajaxOptions.url = $targetItem.hasClass('special') ? "/Support/MostPopularRecognitions" : String.format("/Support/Subcategories?parentCategoryId={0}", $targetItem.attr('hb:faq-entity-id'));
            ajaxOptions.success = MultiSearch.subentitiesFetched;
            break;
        case "sub-categories":
            $currentList.nextAll('ol').remove();
            ajaxOptions.url = String.format("/Support/Recognitions?parentCategoryId={0}", $targetItem.attr('hb:faq-entity-id'));
            ajaxOptions.success = MultiSearch.subentitiesFetched;
            break;
        case "recognitions":
        case "most-popular-recognitions":
            ajaxOptions.url = String.format("/Support/Faq/{0}", $targetItem.attr('hb:faq-entity-id'));
            ajaxOptions.success = MultiSearch.faqFetched;
            pageTracker._trackPageview(ajaxOptions.url);        
            break;            
    }
    
    $.ajax( ajaxOptions );
}

MultiSearch.subentitiesFetched = function(htmlContent)
{
    MultiSearch.$rootElement.children('.inner').append(htmlContent);
}

MultiSearch.faqFetched = function(htmlContent)
{
    Support.$searchResult.html(htmlContent);
    Support.normalSearchResultLoaded();
}

MultiSearch.toggleDisplayButtonClick = function(e) 
{ 
    if (MultiSearch.$rootElement.is(':visible'))
    {
        MultiSearch.close();
    }
    else
    {
        MultiSearch.open();
    }
}

MultiSearch.open = function(callback)
{
    $('#search-bar').height(36);

    MultiSearch.$rootElement.slideDown('fast', 
        function()
        {
            MultiSearch.$toggleDisplayButton
                .addClass('selected')
                .find('img').attr('src', '/Images/Support/bg-multi-search-button-hover.png');
            MultiSearch.$lastItem.children().focus();
        }
    );    
}

MultiSearch.close = function()
{
    $('#search-bar').height(38);

    MultiSearch.$rootElement.slideUp('fast', 
        function() 
        {
            MultiSearch.$toggleDisplayButton
                .removeClass('selected')
                .find('img').attr('src', '/Images/Support/bg-multi-search-button.png');
        }
    );
}

MultiSearch.closeAfterStartupDelay = function()
{
    if (!MultiSearch.$rootElement.data('mouseInside'))
    {
        MultiSearch.close();
    }
    
    $(document).unbind('mousemove', Support.mouseMove);
}
