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 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.TIPS',
        'nav-results.menu.AKTIVITET',
        'nav-results.menu.TUR',
        'nav-results.admin.ADMIN'
    ];
    
    //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)

    if (toggle && 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);";
    
    alternatives.forEach(function(alt){
        if (!alt) {
            // whoaa... skip this non-existing stuff
        }
        else if (mode == alt) {
            // skip it
        }
        else if (jQuery('.' + alt).is(":hidden")) {
            // skip already hidden menues
        }
        else {
            e = "jQuery('." + alt + "').removeClass('active').slideUp(fadeSpeed,function(){" + e + "});";
        }
    });
    
    // Heh... can we avoid this?
    eval(e);
    
    // Save (the new?) active item
    if (save) {
        jQuery.cookie(nav_tabs_cookie_id, mode);
    }
}

// NAV-SEARCH HELPERS

// Save search-query in cookie
function saveSearchCookie(query) {
    if (null == query || '' == query) {
        query = ' ';
    }
    
    jQuery.cookie(
        solr_navsearch_cookie,
        query,
        {'path' : base_path + "/"}
    );
}


// Get initial search term from cookie
function getSearchTermFromCookie() {
    var query = trim(jQuery.cookie(solr_navsearch_cookie));
    
    // Cleanup search query
    if (null == query || ' ' == query) {
        query = '';
    }
    
    return query;
}


// Perform Solr search asynchronously using ajax + doclet. Result is passed to
// callback function "res"
function performAsyncSolrSearch(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;
        var data = {
            search : "" + qry,
            searchOpenByDefault : open,
            ignore_empty : 0
        };
        jQuery.get(url, data, 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();
    }
}


// UT.no navigation search
function performNavigationSearch(open) {
    if (undefined == open) {
        open = true;
    }
    
    var qry = jQuery('#ut-search-text').val();
    
    saveSearchCookie(qry);
}


/*
 * //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');
        jQuery('#main-menu li.active').removeClass('active');
        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
    });
}


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;
    
    //Carry out search via ajax when user submits new search query
    jQuery('.ut-search-form').submit(function() {
        performNavigationSearch(true);
        
        return true;
    });
    
    
    var search_text = jQuery('.ut-search-text');
    
    var qry = getSearchTermFromCookie();
    search_text.val(qry);
    
    // Perform initial search only if a term is present and not empty
    if ('' != qry) {
        performNavigationSearch(false);
    }
    else {
        search_text.val(vacant_search_term);
    }
    
    
    // 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();
        }
        
        // 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() {
        var qry = jQuery(this).text();
        saveSearchCookie(qry);
        //performNavigationSearch(true);
        //setNavigationMode('nav-results.search');
        return true; // continue with the link
    });
}

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() {
    logger.trace("setUpNavigation()");
    
    // Hook click in menu part of navigation to open menu
    jQuery('#main-menu .expandable').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 .expandable').click(function(el) {
        setNavigationMode('nav-results.admin.' + jQuery(this).attr('id'),undefined,undefined,undefined,true);
        styleAsActive(this,true);
        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('');
    
    // Init navigation at load (but hide it)
    setNavigationMode(null, 0, true);
    
    // Init search hints
    setUpSearchHints();
}

