﻿$(document).ready(function() {
    window.request = Array();//Keep ajax request instance
    window.$select = {
        main:           $('#main_content')[0],
        left:           $('#left_content')[0],
        del:            $('#delete')[0],
        useful_cat:     $('#useful_categories')[0],
        blue_banner:    $('#left_top_topic')[0],
        pathname:       $(window).attr('location').pathname,
        page_title:     $(document).attr('title'), //$('title') doesn't work on IE
        base_path:      (BaseUrl.split('/')[3])?'/'+BaseUrl.split('/')[3] : ''
    };

    $($select.del).click( function() {
        $("#instant_search").val('');
        $(this).hide();
        return false;
    });

    // code to show/hide x (clear form button)
    $(".form-body").each(function(){
        var $this = $(this);
        if($this.find(".button-small-clear").length == 0) return;
        var $clear = $this.find(".button-small-clear:first");
        $this.find(".input-search:first").keyup(function(){
            if($(this).val().length > 0) {
                $clear.fadeIn();
            } else {
                $clear.fadeOut();
            }
        });
        $clear.click(function(){
            $clear.hide(); // no effect, just clear
            onEmptyQ();
        })
    });

    if ( match = $(document).attr('location').hash.match(/q=(.*)/i) ) {
        $('#instant_search').val( match[1] ).keyup();
    }

});

jQuery.fn.liveSearch = function ( conf ) {
    var config = jQuery.extend({
        id:             'searchform',
        duration:       400,
        typeDelay:      200,
        adsDelay:       2000,
        loadingClass:   'loading',
        onSlideUp:      function () {},
        uptadePosition: false
    }, conf);

    var liveSearch = jQuery('#' + config.id);

    return this.each( function () {
        var input = jQuery(this).attr( 'autocomplete', 'off' );
        input.keyup(function () {
            input.addClass(config.loadingClass);
            var q  = this.value;
            if ( this.timer ) { clearTimeout(this.timer); }
            if ( this.adstimer ) { clearTimeout(this.adstimer); }

            if ( q === '' ) {
                while(request.length) {
                    request.shift().abort();
                }
                onEmptyQ();
                //return false;
            }

            this.adstimer = setTimeout( function () {
                    var instant_search = $('#instant_search'); // Search
                    var _l = location;
                    var q  = instant_search.val();
                    if ( q != '' ) {
                        changeHistoryState( q, _l.pathname + '#' ); //tricky
                        changeHistoryState( q, $select.base_path + '/#/?q=' + q );
                    }
            }, config.adsDelay);

            if ( q != '' ) {
                this.timer  = setTimeout( function () {
                            request.push(request_for_entities( config.url, { 'q':q } ));
                       }, config.typeDelay );
            }
        });
    });
};

function onEmptyQ() {
    changeHistoryState( '', $select.pathname );
    $($select.del).hide();
    $('#bransjer_panel').hide();
    $('#result').show();
    $('#sub_category2').empty();
    $('ol#search_result').empty();
    $('ol#search_result_cate').show();
    $("ul#bransjer_gen").empty();
    $('#useful_categories').show();
    $('#sub_category li').show();
    $("div.filterblock").show();
    $('#fp_cont').show();
    $('#left_top_topic').html($('ul.breadcrumbs li.last a').text());
    $('.google_ads.top').hide();
    if (location.pathname == '/' || location.pathname == '/nettguide/') {
        $('#left_top_topic').html('Nettguide');
        $('#faktasok_google_ads').hide();
        $('.google_ads').hide();
    }
    $(document).attr('title', $select.page_title);
    if($('#sub_category2 li').length == 0 && $('#sub_category li').length == 0){
        $('#left_header').hide();
        $('.left_body').hide();
     } else {
        $('#left_header').show();
        $('.left_body').show();
    }

    $('#left_top_topic').html($('#left_top_topic').attr('rel'));
    $('li.search').remove();
    $('ul.breadcrumbs li:gt(1)').show();
    $('#result').show();
    $('#right_content .job-newsfeed-box').show();
    repositionFooter();
}

function onSuccess( q, links, categories, bransjer ) {
    // Clear
    $($select.del).show();
    $('#tab_wrapper').hide();
    $('#faktasok_google_ads').show();
    $("#sub_category2").empty();
    $("ul#sub_category2").empty();
    $("ul#bransjer_gen").empty();
    $('ol#search_result').empty();
    $('ol#search_result_cate').hide();
    $("div.filterblock").hide();
    $('#fp_cont').hide();
    $('#result').hide();
    $('#sub_category li').hide();
    $('#right_content .job-newsfeed-box').hide();


    var search_title = [$('#instant_search').val(), '-', 'Startsiden søk'].join(' ');
    $(document).attr('title', search_title); //$('title') doesn't work on IE
    $('#left_top_topic').html('Treff i kategorier');
    $('ul.breadcrumbs li:gt(1)').hide();
    $('li.search').remove();
    $('<li class="last search">Søk: '+$('#instant_search').val()+'</li>').insertAfter('ul.breadcrumbs li:eq(1)');

    ////no link's message
    if ( links.length == 0 ){
        var no_result = [ { header : "Vi fant dessverre ingen resultater for s&oslash;ket ditt i Nettguiden. Kan du ha stavet feil?",
                            notice : "Nettguiden er en redaksjonell katalog over informasjons- og bedriftsnettsider. Hvis du ikke finner det du letter etter i Nettguiden kan du pr&oslash;ve ",
                            keyword: q } ];
        $("ol#search_result").prepend("#no_result_item", no_result);

        $('#left_header').hide();
        $('.left_body').hide();

    }
    else{
        //// Forward arguments to jquery-tmpl
        $("ol.search_result").prepend("#search_result_items", links);
        $("ul#sub_category2").prepend("#search_result_sub_category2", categories);
        $("ul#bransjer_gen").prepend("#search_result_bransjer", bransjer);

        $('#left_header').show();
        $('.left_body').show();
    }

    if ( bransjer && bransjer.length > 0 ) { $('#bransjer_panel').show() } else { $('#bransjer_panel').hide() }
    //
    // // When in a catagory
    // // $('#result').hide();
    $('#useful_categories', $select.left).hide();
    repositionFooter();
}


function changeHistoryState( query, pathname ) {
    var _h  = history;
    if ( _h.pushState ) { //solely for clients that support pushState, not for others.
        _h.pushState( {'q': query} ,query , pathname );
    } else {
        $.address.queryString( $.param( {'q': query} ) ).update(); //deal with old or unsupport pushState browsers.
    }
}

function request_for_entities( url, params ) {
    return $.ajax( {  type    : "GET",
                      url     : url,
                      data    : params,
                      cache   : true,
                      dataType: "json",
                      success : function( data ) {
                        if ( data === null || !data.result ) { return; }
                        var links       = data.result[0].links;
                        var categories  = data.result[1].categories;
                        var bransjer    = data.result[2].categories_sub;
                        onSuccess( params.q, links, categories, bransjer );
                      }
                   } );
}

