﻿/// <reference path="../MicrosoftAjax.debug.js" />
/// <reference path="../jquery-1.3.2-vsdoc.js" />

var Support = new Object();

$(window).load
(
    function ()
    {
        // Other page handling
        Support.$searchResult = $('#search-result');
        $(document).click( Support.documentClick );
        $('#categories h3').click( Support.categoryBoxHeadingClick );
        $('#tag-cloud .tag').click( Support.tagCloudTagClick ).hover( function () { $(this).css('border-bottom-color', '#A60165').css('color', '#A60165'); }, function () { $(this).css('border-bottom-color', '').css('color', ''); } ); 
    
        // Search textbox and suggest
        Support.$searchSuggest = $('#search-suggest');
        Support.$searchTextBox = $('#search-text')
            .keyup( Support.searchTextKeyUp ).focus().focus( Support.searchTextFocus );
        
        // Important message
        Support.$importantMessage = $('#important-message');
        Support.fetchImportantMessage();

        $("#login-form input[name='msisdn']").initialText("07XXXXXXX");
    }
);

Support.fetchImportantMessage = function()
{
    $.ajax
    (
        {
            url : "/Support/ImportantMessage",
            success : Support.fetchImportantMessageCallback
        }
    );
}

Support.fetchImportantMessageCallback = function(content)
{
    if (content != null && content.length > 0)
    {
        Support.$importantMessage
            .html(content)
            .click( function () { Support.$importantMessage.slideUp('fast'); } )
            .data('mouseInside', false)
            .hover( function() { Support.$importantMessage.data('mouseInside', true); }, function() { Support.$importantMessage.data('mouseInside', false); } )
            .show();
        window.setTimeout(Support.closeImportantMessageAfterStartupDelay, 30000);            
    }
}

Support.searchFormBeginSubmit = function(e)
{
    if (Support.searchSuggestTryEnterFocusedLink())
    {
        return false;
    }
    else
    {
        pageTracker._trackEvent(GoogleAnalyticsCategories.search.name, GoogleAnalyticsCategories.search.actions.normal, Support.$searchTextBox.val());
        return true;
    }    
}

Support.tagCloudTagClick = function(e)
{
    $.ajax
    (
        {
            url : String.format("/Search/NormalSearchByParentCategory?parentCategoryId={0}&maxCount=10", this.getAttribute("hb:category-id")),
            success : Support.normalSearchByParentCategoryCallback
        }
    );
}

Support.normalSearchByParentCategoryCallback = function(htmlContent)
{
    Support.$searchResult.html(htmlContent);
    Support.normalSearchResultLoaded();
}

Support.categoryBoxHeadingClick = function(e)
{
    var categoryId = this.getAttribute('hb:category-id');
    
    MultiSearch.open();
    MultiSearch.setSelectedItem
    (
        MultiSearch.$rootElement
            .find(".top-categories li")
            .filter(function () { return this.getAttribute('hb:faq-entity-id') == categoryId; })
            .get(0)
    );
}

Support.closeImportantMessageAfterStartupDelay = function()
{
    if (!Support.$importantMessage.data('mouseInside'))
    {        
        Support.$importantMessage.slideUp('fast');
    }
}
        
Support.documentClick = function(e)
{
    var $target = $(e.target);
    
    if ($target.closest('#search-suggest, #search-text, #search-submit').length == 0)
    {
        Support.closeSuggestSearch();
    }
}

Support.searchTextFocus = function(e)
{
    if (Support.$searchSuggest.contents().length > 0)
    {
        Support.$searchSuggest.show();
    }
}

Support.searchTextKeyUp = function(e)
{
    switch (e.keyCode)
    {
        case Sys.UI.Key.esc:
            if (Support.$searchSuggest.is(':visible'))
            {
                Support.$searchSuggest
                    .find('a.focus').removeClass('focus').end()
                    .hide();
            }
            break;
        case Sys.UI.Key.up:
            Support.handleSuggestNavigation('up');
            break;
        case Sys.UI.Key.down:
            Support.handleSuggestNavigation('down');
            break;
        case Sys.UI.Key.left:
        case Sys.UI.Key.right:
            // Do nothing
            break;
        default:
            var
                validKey = e.keyCode == Sys.UI.Key.backspace || e.keyCode == Sys.UI.Key.space || e.keyCode > 31,
                validSearchString = this.value != null && this.value.length > 0;
                
            if (validKey && validSearchString)
            {
                Support.scheduleSuggestSearch(this.value);
            }
            else if (!validSearchString)
            {
                Support.abortSuggestSearch();
                Support.closeSuggestSearch();
            }
    }
}

Support.searchSuggestTryEnterFocusedLink = function()
{
    if (Support.$searchSuggest.is(':visible') && Support.$searchSuggest.find('a.focus:first').length > 0)
    {
        Support.$searchSuggest.find('a.focus:first').click();
        Support.abortSuggestSearch();
        return true;
    }
    
    return false;
}

Support.handleSuggestNavigation = function(direction)
{
    var 
        $focusedLink = Support.$searchSuggest.find('a.focus'),
        $allLinks = Support.$searchSuggest.find('a'),
        $nextLink,
        indexOfFocusedLink = $allLinks.index($focusedLink);

    if (direction == 'up' && indexOfFocusedLink > 0)
    {
        $focusedLink.removeClass('focus');
        $nextLink = $allLinks.eq(indexOfFocusedLink - 1);
        $nextLink.addClass('focus');
    }
    else if (direction == 'down' && indexOfFocusedLink < $allLinks.length - 1)
    {
        $focusedLink.removeClass('focus');        
        $nextLink = $allLinks.eq(indexOfFocusedLink + 1);
        $nextLink.addClass('focus');
    }
}

Support.scheduleSuggestSearch = function(entry)
{
    Support.suggestSearchAborted = false;
    $.scheduleMethodInvocation(Support, "Support.performSuggestSearch", 200, entry);
}

Support.abortSuggestSearch = function()
{
    Support.suggestSearchAborted = true;
    $.abortMethodInvocation(Support);
}

Support.closeSuggestSearch = function()
{
    Support.$searchSuggest
        .find('a.focus:first').removeClass('focus').end()
        .hide();
}

Support.performSuggestSearch = function(entry)
{
    if (Support.suggestSearchAborted)
    {
        return;
    }

    pageTracker._trackEvent(GoogleAnalyticsCategories.search.name, GoogleAnalyticsCategories.search.actions.suggest, entry);

    $.ajax
    ( 
        { 
            url: String.format("/Search/SuggestSearch?entry={0}", encodeURIComponent(entry)), 
            success : Support.suggestSearchSuccessful 
        } 
    );
}

Support.suggestSearchSuccessful = function(data)
{
    if (Support.suggestSearchAborted || data.length == 0)
    {
        Support.$searchSuggest.hide().empty();
    }
    else
    {
        MultiSearch.close();
        Support.$searchSuggest.html(data).show();        
    }
}

Support.normalSearchResultLoaded = function()
{
    Support.closeSuggestSearch();    
    Support.$searchResult
        .find('li.faq').click( Support.faqResultFaqClick ).end()
        .show()
        .children().fadeIn('slow');
}

Support.singleFaqResultLoaded = function()
{
    Support.closeSuggestSearch();
    Support.$searchResult
        .show()
        .children().fadeIn('slow');
}

Support.faqResultFaqClick = function(e)
{
    var $this = $(this);
    
    $this
        .children('.answer').slideToggle('normal').end()
        .toggleClass('faq-selected');

    if (typeof this.previouslyClicked === 'undefined' || !this.previouslyClicked)
    {
        Framework.notifyRecognitionClick($this.attr('hb:recognition-id'));
        pageTracker._trackPageview("/Support/Faq/" + $this.attr('hb:recognition-id'));
        this.previouslyClicked = true;
    }
}
