var solr_navsearch_cookie = 'ut_solrsearch_query_memory';
var solr_navsearch_last_successfull_query = null;
var solr_navsearch_cavant_term=null;
var nav_tabs_cookie_id = 'ut_navigation_mode';
var nav_mode_last=null;


// NAVIGATION HELPERS


function getNavigationMode() {
    var ret = null;
    // Load
    var nav_menu_id = jQuery.cookie(nav_tabs_cookie_id);
    if (!nav_menu_id) ret = null;
    else ret = nav_menu_id;
    return ret;
}

function onNavigationModeChanged(current_mode,last_mode) {
    switch(current_mode) {
        case('nav-results.menu.KART'):{
            window.location = base_path + "/kart";
            //Skip the rest
            return true;
        }break;
    }
    return false;
}

function setNavigationMode(mode, fadeSpeed, hidden, save,toggle) {
    if (undefined == fadeSpeed) fadeSpeed = 250;
    if (undefined == hidden) hidden = false;
    if (undefined == save) save = true;
    if (undefined == toggle) toggle = false;
    var alternatives = [ 'nav-results.search', 'nav-results.menu.KART', 'nav-results.menu.TIPS', 'nav-results.menu.AKTIVITET', 'nav-results.menu.TUR', 'nav-results.admin.ADMIN' ];
    //if (null == mode) mode = 'sukka';
    //alert("setNavigationMode(mode:"+mode+", speed:"+fadeSpeed+", hidden:"+hidden+", save:"+save+", toogle:"+toggle+")");
    //Figure out if this is a second open for this mode. In that case close it (so that it works like a toggle button)
    var ret=onNavigationModeChanged(mode,nav_mode_last);
    if(ret)return;
    if( (toggle) && (null!=nav_mode_last) && (nav_mode_last==mode) ){
        hidden=true;
        nav_mode_last=null;
    }
    else nav_mode_last=mode;
    // Close all but selected
    var e = "if(hidden)jQuery('.'+mode).removeClass('active').slideUp(fadeSpeed); else jQuery('.'+mode).addClass('active').slideDown(fadeSpeed);"
    for ( var i in alternatives) {
        var alt = alternatives[i];
        if (mode != alt && !jQuery('.' + alt).is(":hidden")) {
            e = "jQuery('." + alt + "').removeClass('active').slideUp(fadeSpeed,function(){" + e + "});";
        }
    }
    eval(e);
    
    // Save (the new?) active item
    if (save) jQuery.cookie(nav_tabs_cookie_id, mode);
}

// NAV-SEARCH HELPERS

// Perform Sol search asynchronously using ajax + doclet. Result is passed to
// callback function "res"

function performAsyncSolSearch(url, qry, res, open) {
    qry = trim(qry);
    if (('' != qry) &&(null!= solr_navsearch_cavant_term && solr_navsearch_cavant_term !=qry)) {
        solr_navsearch_last_successfull_query = qry;
        jQuery.get(url, {
            search : "" + qry,
            searchOpenByDefault : open,
            ignore_empty : 0
        }, res);
    } else {
        res('<div id="search_tabs"><h1 class="hit">Ingen treff for tomt søkefelt</h1></div><div class="nav-results-bottom search col18 first last"><a class="nav-close-button search "></a></div>');
        setUpCloseButtons();
    }
    // Save current search-query in cookie
    if (null == qry || '' == qry) qry = ' ';
    jQuery.cookie(solr_navsearch_cookie, qry, {
        'path' : base_path + "/"
    });
}

// Callback functiopn for putting search result from asynch solrsearch into the
// correct location in the UT.no navigation
function navigationSearchResult(data) {
    jQuery(".nav-results.search").html(data);
}

// UT.no navigation search. Together with navigationSearchResult this is a UT.no
// spesific wrapper for performAsyncSolSearch()
function performNavigationSearch(open) {
    if (undefined == open) open = true;
    var qry = jQuery('#ut-search-text').val();
    // Only redo the search if the query changed avoiding unecessary HTTP
    // requests
    //alert("'" + qry + "' vs.'" + solr_navsearch_last_successfull_query + "'");
    if (qry != solr_navsearch_last_successfull_query) {
        // Display progress
        jQuery(".nav-results.search").html('<div class="spinner" style="display:block; margin:10px;">Søker...</div>');
        // Initiate ajax call
        performAsyncSolSearch(base_path + "/solrsearch/doclets/facetted_search", qry, navigationSearchResult, open);
    }
    // Open the search result pouch if requested
    if (open) setNavigationMode('nav-results.search');
    else setNavigationMode('closed');
}

/*
 * //This hides everything but the tabs in in the navigation searchresult
 * function hideNavigationSearchresult() { jQuery('.nav-results.search
 * .ui-tabs-nav li').removeClass("ui-tabs-selected");
 * jQuery('.nav-results.search .ui-tabs-panel').addClass('ui-tabs-hide'); }
 */

// Prepare close buttons
function setUpCloseButtons(){
    jQuery('.nav-close-button').click(function() {
        setNavigationMode('closed');
        return false;
    });
}

// Called from facetted_search_result.tpl on search complete
function handleNavSearchComplete(open) {
    // Set up tabs
    jQuery('#search_tabs').tabs( {
        'fxAutoHeight' : true,
        
        // The index tab to select
        'selected' : 0
    });
    setUpCloseButtons();
    // Open menu
    if (open) setNavigationMode('nav-results.search');
}


function navigationToggleAdminMenu(show) {
    if (show) {
        jQuery("#admin-menu").show();
    }
    else {
        jQuery("#admin-menu").hide();
    }
}


function navigationAddToAdminMenu(name) {
    // Show the admin menu
    navigationToggleAdminMenu(1);
    
    // TODO keep records of all admin menu items
}


function setUpNavigationSearch(vacant_search_term) {
    //remember current vacant term
    solr_navsearch_cavant_term=vacant_search_term;
    var search_text = jQuery('#ut-search-text');
    // Get initial search term from cookie
    var qry = trim(jQuery.cookie(solr_navsearch_cookie));
    // Clean search query
    if (null == qry || ' ' == qry) qry = '';
    search_text.val(qry);
    // If empty, put the vacant term
    if ('' == qry)search_text.val(vacant_search_term);
    // Perform initial search only if a term is present
    else performNavigationSearch(false);
    // Hook handler to swap vacant with '' on focus
    search_text.focus(function() {
        if (search_text.val() == vacant_search_term) search_text.val('');
        else{
            this.select();
            // Only open searchresult if a searchterm was specified
            setNavigationMode('nav-results.search');
        }
        
        // navigationSearchSetTabsVisible(true);
            return true;
        });
    // Hook handler to swap '' with vacant on blur
    search_text.blur(function() {
        if ('' == trim(search_text.val())) search_text.val(vacant_search_term);
        return true;
    });
}

function setUpSearchHints() {
    jQuery("#ut-search-text-label a").click(function() {
        jQuery('#ut-search-text').val(jQuery(this).text());
        performNavigationSearch(true);
        setNavigationMode('nav-results.search');
        return false;
    });
}

function styleAsActive(selected,toggle){
    var activeClass='active';
    selected=jQuery(selected);
    var active=true;
    if(toggle && selected.hasClass(activeClass))active=false;
    //alert("style as active ("+toggle+","+active+"):"+selected+"("+selected.attr('id')+","+selected.attr('class')+")");
    //Remove old selection highlight
    selected.siblings().removeClass(activeClass);
    //Add new selection highlight 
    if(!toggle || active)selected.addClass(activeClass);
    else selected.removeClass(activeClass);
}

// Called to init navigation just after navigation in header.tpl
function setUpNavigation() {
    // Hook click in menu part of navigation to open menu
    jQuery('#main-menu li').click(function(el) {
        setNavigationMode('nav-results.menu.' + jQuery(this).attr('id'),undefined,undefined,undefined,true);
        styleAsActive(this,true);
        return false;
    });
    // Hook click in admin part of navigation to open menu and close admin menu
    jQuery('#admin-menu li').click(function(el) {
        setNavigationMode('nav-results.admin.' + jQuery(this).attr('id'),undefined,undefined,undefined,true);
        styleAsActive(this,true);
        return false;
    });
    // Carry out search via ajax when user submits new search query
    jQuery('#ut-search-form').submit(function() {
        performNavigationSearch(true);
        styleAsActive(this,true);
        // No reload of the page on submit
       return false;
    });

    // Prepare close button for menu items (the close button for the searchresult is prepared in facetted_search_result.tpl)
    setUpCloseButtons();
    // Init nav-search
    setUpNavigationSearch('Hvor vil du på tur?');
    // Init navigation at load (but hide it)
    setNavigationMode(null, 0, true);
    // Init search hints
    setUpSearchHints();
}
