﻿/**
* LiveSearch (requires the dimensions plug-in)
*
* Applies "live search" to input-fields
*
* Usage: jQuery('#q').liveSearch({ajaxURL: '/ajax/search/?q='});
*
* @class liveSearch
* @param {Object} conf, custom config-object
*
* Copyright (c) 2008 Andreas Lagerkvist (andreaslagerkvist.com)
* Released under a GNU General Public License v3 (http://creativecommons.org/licenses/by/3.0/)
*/
// Hide all search-results if you click outside them

var timelimit = 350;
var slidespeed = 250;
var searchHeader = $("<li class='cat first'>Søkeresultater</li>");
var searchFooter = "<li class='cat last'><a href='/sok.aspx?q=";
var fullsearch = null;
var results = null;
var results2 = null;
var resultstmp = null;
var input = null;
var lastInput = null;
var forceSearch = false;

$(document.body).click(function(event) {
    var elem = event.target;
    //log($(elem));
    //log("livesearch: " + $(elem).parents(".livesearch").length);
    // log("emneresultater: " + $(elem).parents("#emneresultater").length);

    if (elem.id != "ctl00_cph_txtSoekEmne" && $(elem).parent().attr("class") != "livesearch") {
        if (!$(elem).parents('ul#emneresultater').length && !$(elem).parents('ul#emneresultater').length) {

            // jQuery('.livesearch').slideUp(300);
        }
    } else {

        if (results.is(":hidden") && results.children().length > 0) {
            //     results.slideDown(slidespeed);

        }
    }
});

jQuery.fn.liveSearch = function(conf) {
    input = jQuery(this);
    fullsearch = conf.ajaxURL != "emnesok";
    var config = jQuery.extend({
        ajaxURL: conf.ajaxURL
    }, conf);

    return this.each(function() {
        log("Laster fullsearch for " + fullsearch ? "hoved" : "emnesok");

        var tmpOffset = input.offset();
        var inputDim = {
            left: tmpOffset.left - (fullsearch ? 20 : 1),
            top: tmpOffset.top + (fullsearch ? 16 : 0),
            // width: input.outerWidth(),
            height: input.outerHeight()
        };


        resultstmp = jQuery('<ul class="livesearch live-search-results"></ul>').appendTo(document.body).hide().slideUp(0);
        results = resultstmp;
        if (!fullsearch)
            results2 = jQuery('<ul class="livesearch emnesok"></ul>').appendTo(document.body).hide().slideUp(0);

        inputDim.topNHeight = inputDim.top + inputDim.height;
        inputDim.widthNShit = inputDim.width - results.realWidth();
        results.css({
            position: 'absolute',
            left: inputDim.left + 'px',
            top: inputDim.topNHeight + 'px',
            width: results.width() + 'px'
        });
        if (!fullsearch)
            results2.css({
                position: 'absolute',
                left: inputDim.left + 'px',
                top: inputDim.topNHeight + 'px',
                width: results2.width() + 'px'
            });
        var loadSearch = function() {
            if (fullstop) return false;
            content_resize()

            if (fullsearch) {
                results = resultstmp;
            } else {

                results = results2;
            }
            //  search_timeout = undefined;
            log("searching.." + input.val() + " - " + lastInput + " forced? " + forceSearch);

            var q = input.val();
            if (q != lastInput || forceSearch) {
                lastInput = this.lastValue;
                input.addClass('ajax-loading');

                if (this.timer) {
                    clearTimeout(this.timer);
                }

                this.timer = setTimeout(function() {

                    $.ajax({
                        type: "POST",
                        url: "/PensumService.asmx/" + conf.ajaxURL,
                        data: "{'q':'" + q + "'}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        beforeSend: function() { showSearchWaiting(); },
                        complete: function() { hideSearchWaiting(); },
                        success: function(data) {
                            forceSearch = false;
                            input.removeClass('ajax-loading');

                            if (data.d.length) {
                                var searchFooter2 = searchFooter + q + "'>Se alle resultatene</a></li>";

                                results.html(data.d);
                                if (fullsearch) results.append(searchFooter2);

                                var li = results.find("li:not([class*=cat])");
                                log("fant " + li.size() + " list items");
                                li.hover(function() {
                                    $(this).addClass("hoverLi");
                                    //var img = $(this).children("img").find("img"); 
                                //    img.addClass("hoverDummy");
                                },
                                function() {
                                    $(this).removeClass("hoverLi");
                                    //  $(this).children().find("img").removeClass("hoverDummy");
                                });
                                if (fullsearch) {
                                    li.click(function() {
                                        var url = $(this).find("a").attr("href");

                                        addSearchHistory(q, url);
                                        //
                                    });
                                } else {
                                    //emnesøk
                                    li.click(function() {
                                        leggTilEmne($(this));
                                        toggleEmnerForsideIfNotEmpty();

                                        results.slideUp(slidespeed);
                                    });
                                }
                                if (input.val().length < 1) {
                                    //hjemmer resultatene om lengden er 0
                                    results.slideUp(slidespeed);
                                } else {
                                    //vis resultater
                                    results.slideDown(slidespeed);
                                }
                                log("search height: " + results.css("height"));
                                //   results.html( data.d  ).slideDown(300);
                            }
                            else {
                                results.html("<li>Fant ingen resultater</li>");
                                if (fullsearch) {
                                    var searchFooter2 = searchFooter + q + "'>Prøv avansert søk</a></li>";
                                    results.append(searchFooter2);
                                }
                                if (results.is(":hidden")) {
                                    results.slideDown(slidespeed);
                                } else {
                                }
                            }
                        }
                    });



                }, 200);
                this.lastValue = input.val();

                //   closeResults();
            }
        }


        input.bind('keyup', function(btn) {
            fullstop = false;
            input = $(this);
            fullsearch = input.hasClass("searchbox");

            log("fullsearch[" + fullsearch + "] key input in " + input.attr("class") + ": " + btn.keyCode + " input length: " + input.val().length);
            if (input.val().length < 1) {
                results.slideUp(slidespeed);
                lastInput = "";
            }
            else {
                if (btn.keyCode == 40) {
                    //ned-tast trykt
                    results.slideDown(slidespeed);
                    var hovered = results.find("li.hoverLi");
                    if (!hovered.length) {
                        results.find("li:first").addClass("hoverLi");
                    }
                    hovered.removeClass("hoverLi").next().addClass("hoverLi");
                    return false;
                } else if (btn.keyCode == 38) {
                    //opp-tast trykt
                    var hovered = results.find("li.hoverLi");
                    if (hovered.length) {
                        hovered.removeClass("hoverLi").prev().addClass("hoverLi");
                    }
                    return false;

                } else if (btn.keyCode == 13) {
                    //enter trykt
                    var hovered = results.find("li.hoverLi a");
                    var url = hovered.attr("href");
                    log("url: " + url);
                    if (url != null && url != 'undefined' && url != "" && url.indexOf("/produkt") != -1) {
                        location.href = url;
                        return false;
                    } else {
                        hovered = results.find("li.hoverLi");
                        if (hovered.length) {
                            log(hovered);
                            hovered.click();
                            input.val("");
                            fullstop = true
                            return false;
                        }
                        log(hovered);
                        if (!fullsearch)
                            forceSearch = true; //søker uansett ved enter trykk  på emnesøk
                        else {
                            fullstop = true;
                        }
                    }
                }
                var $this = this;
                if (!forceSearch) {

                    if (search_timeout != undefined) {
                        clearTimeout(search_timeout);
                    }
                    search_timeout = setTimeout(loadSearch, timelimit);
                } else {
                    search_timeout = setTimeout(loadSearch, 1);
                }
            }
        });

        //   input.keyup(loadSearch);


    });
};
var fullstop = false;
function hideSearchWaiting() {
    if (!fullsearch) {
        //   $("#emnekodesoekWait").hide();
    }
    else {

    }
}
function showSearchWaiting() {
    if (!fullsearch) {
        //   $("#emnekodesoekWait").show();
    }
    else {

    }
}
function soekPensum() {
    input.keyup();
    return false;
}

var search_timeout = undefined;
 