﻿/**
* 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'><a href='/search?q=";
var fullsearch = null;
var results = null;
var results2 = null;
var resultstmp = null;
var input = null;
var lastInput = null;
var forceSearch = false;


jQuery.fn.liveSearch = function(conf) {
    input = jQuery(this);
    fullsearch = true;
    var config = jQuery.extend({
        ajaxURL: conf.ajaxURL
    }, conf);



    jQuery(document.body).click(function(event) {
        var clicked = jQuery(event.target);
        if (!(clicked.is(' .livesearch') || clicked.parents(' .livesearch').length || clicked.is('input'))) {

            $(' .livesearch').slideUp(slidespeed);
        }
    });



    return this.each(function() {        
        resultstmp = jQuery('<ul class="livesearch live-search-results"></ul>').appendTo($('#sokboks_masterpage')).hide().slideUp(0); //appendTo(document.body).hide().slideUp(0);
        results = resultstmp;


        var loadSearch = function() {
            if (fullstop) return false;
            results = resultstmp;

            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: "/api/ProductSearch.asmx/search",
                        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 + "'>Vis alle resultatene</a></li>";

                                results.html(data.d);
                                results.append(searchFooter2);

                                var li = results.find("li:not([class*=cat])");

                                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");
                                });

                                li.click(function() {
                                    var url = $(this).find("a").attr("href");


                                    //
                                });

                                if (input.val().length < 1) {
                                    //hjemmer resultatene om lengden er 0
                                    results.slideUp(slidespeed);
                                } else {
                                    //vis resultater
                                    results.slideDown(slidespeed);
                                }

                            }
                            else {
                                results.html("<li class='cat first'>Fant ingen resultater</li>");

                                var searchFooter2 = searchFooter + q + "'>Prøv avansert søk</a></li>";
                                results.append(searchFooter2);

                                if (results.is(":hidden")) {
                                    results.slideDown(slidespeed);
                                } else {
                                }
                            }

                            //                            if (data.d.length) {
                            //                                var searchFooter2 = searchFooter + q + "'>Se alle resultatene</a></li>";
                            //                                results.html(data.d);
                            //                                results.append(searchFooter2);

                            //                                var li = results.find("li:not([class*=cat])");
                            //                                li.hover(function() {
                            //                                    $(this).addClass("hoverLi");
                            //                                },
                            //                                function() {
                            //                                    $(this).removeClass("hoverLi");
                            //                                });

                            //                                li.click(function() {
                            //                                    var url = $(this).find("a").attr("href");
                            //                                    //addSearchHistory(q, url);
                            //                                });
                            //                                if (input.val().length < 1) {
                            //                                    //hjemmer resultatene om lengden er 0
                            //                                    results.slideUp(slidespeed);
                            //                                } else {
                            //                                    //vis resultater
                            //                                    results.slideDown(slidespeed);
                            //                                }
                            //                            }
                            //                            else {
                            //                                results.html("<li>Fant ingen resultater</li>");
                            //                                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();
            }
        }


        //        input.bind('keyup', function(btn) {
        //            fullstop = false;
        //            input = $(this);
        //            fullsearch = input.hasClass("sokboks");

        //            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");
        //                    if (url != null && url != 'undefined' && url != "" && url.indexOf("/produkt") != -1) {
        //                        location.href = url;
        //                        return false;
        //                    } else {
        //                        hovered = results.find("li.hoverLi");
        //                        if (hovered.length) {
        //                            hovered.click();
        //                            input.val("");
        //                            fullstop = true
        //                            return false;
        //                        }
        //                        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.bind('keyup', function(btn) {
            fullstop = false;
            input = $(this);
            fullsearch = input.hasClass("searchbox");


            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");
                    if (url != null && url != 'undefined' && url != "" && url.indexOf("/produkt") != -1) {
                        location.href = url;
                        return false;
                    } else {
                        hovered = results.find("li.hoverLi");
                        if (hovered.length) {
                            hovered.click();
                            input.val("");
                            fullstop = true
                            return false;
                        }

                        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);
                }
            }
        });
    });
};
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;
 