﻿
var loggedin = false;
$(document).ready(function() {
    log("####################################### PAGE LOAD  #######################################");
    //  log("side: " + window.location.pathname);
    setupLoginLinks();

    //$('#loggInn').after("<a rel='login' href='#'>test</a>");
    if (window.location.search.indexOf("login") > -1) {
        var redir = window.location.search.replace("?login=", "");
        loggedin = false;
        LoadLoginPopup(redir);
    }
    var emnesok = $("#soekEmne .soek .boks input");
    if (emnesok.length) {
        emnesok.liveSearch({ ajaxURL: 'emnesok' }); //laster live search plugin

        log("emnesok loaded..");
    } else {
        log("emnesok failed to load!");
    }
    if (window.location.pathname != "d/") {
        //HACK: workaround så live search blir kun lastet på andre sider enn forsiden.
        jQuery("#search input.searchbox").liveSearch({ ajaxURL: 'search' }); //laster live search plugin

    }
    $(window).wresize(content_resize);

    // funmode(1, false); // for fun!
    //disco();
    toggleLesMer();
    toggleFiltreringAvSok();
    toggleLesMerPensum();

    $(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
        //var a = $.growlUI("Feil!", ("Ajax-feil inntraff på url: " + ajaxOptions.url + "<br />" + XMLHttpRequest), 3000);
    });


});
function toggleLesMerPensum() {
    //brukes på produkter. 
    var maxTextLength = 350;
    var tekster = $("#ctl00_cph_pnlResultater .lesMerTekstPensum");


    $("#ctl00_cph_pnlResultater .lesMerPensum").click(function() {
        var $this = $(this);
        if (tekster.is(":visible")) {
            tekster.slideUp('fast')
            $this.text("Les mer");
        }
        else {
            tekster.slideDown('fast')
            $this.text("Vis mindre");
        }
    });
    return false;
}

function markerSjekkbokser(elem, checked) {

    var chk = $(elem).parents("table").children().find("input:checkbox").each(function() {
        this.checked = checked;
    });
    return false;
}
function toggleFiltreringAvSok() {
    //brukes på søkesiden for å toggle kategori-filtrering
    var box = $("#sokeside #kategorier").next().next().wrap("<div style=\"clear:both; padding-top:5px\" />");
    box = box.parent().hide();
    var filtrer = $('<a href="#" class="filtrer" style="float:left; margin-top:5px">Vis kategorier for å begrense søket</a>');
    box.before(filtrer);
    filtrer.click(function() {
        var $this = $(this);
        if (box.is(":visible")) { box.slideUp(); filtrer.text("Vis kategorier for å begrense søket"); }
        else { box.slideDown(); filtrer.text("Skjul kategorier for å begrense søket"); }
        return false;
    });

}
function toggleLesMer() {
    //brukes på produkter. 
    var maxTextLength = 350;
    var tekster = $("#beskrivelse .lesMerTekst");
    tekster.each(function() {
        var $this = $(this);
        var text = $this.text();

        if (text.length > maxTextLength) {
            var lastGap = text.substring(maxTextLength - 10, maxTextLength + 10).lastIndexOf(" ") + maxTextLength - 10;
            var newText = text.substring(0, lastGap) + "...";
            $this.text(newText);
            $this.after("<a class='lesMer' href='#'>Vis mer</a>"); //legger til les mer link
            $this.after($("<span style='display:none'/>").append(text)); //legger til skjult span med hele teksten
        }
    });

    $("#beskrivelse .lesMer").click(function() {
        var $this = $(this);
        var toggledText = $this.prev().prev();
        var origText = $this.prev();
        var smalltext = toggledText.text();
        //bytter på å vise hele teksten og utsnitt av teksten hver click
        toggledText.text(origText.text());
        origText.text(smalltext);

        if ($(this).hasClass('vist')) {
            $(this).removeClass("vist").addClass("skjult");
            $this.text("Vis mer");

        } else {
            $(this).removeClass("skjult").addClass("vist");
            $this.text("Vis mindre");

        }
        return false;
    });

}
function content_resize() {

    var fullSearch = $("#aspnetForm ~ .live-search-results");
    var fullSearchInput = $("#search input.searchbox");

    var emneSok = $("#aspnetForm ~ .emnesok");
    var emnesokSearchInput = $("#soekEmne div.boks input");


    var fullSearchDim = {
        left: fullSearchInput.offset().left - 20,
        top: fullSearchInput.offset().top + fullSearchInput.height() + 19
    };
    var emneSokDim = {
        left: emnesokSearchInput.offset().left - 1,
        top: emnesokSearchInput.offset().top + emnesokSearchInput.height() + 10
    };


    fullSearch.css({ left: fullSearchDim.left, top: fullSearchDim.top });
    emneSok.css({ left: emneSokDim.left, top: emneSokDim.top });
}




function fixJS() {


    $('#ctl00_cph_txtText').autoResize({
        // On resize:
        onResize: function() {
            $(this).css({ opacity: 0.8 });
        },
        // After resize:
        animateCallback: function() {
            $(this).css({ opacity: 1 });
        },
        // Quite slow animation:
        animateDuration: 1300,
        // More extra space:
        extraSpace: 40
    });
}
function addToggler() {
    $("#ctl00_cph_visAnmeldelse").toggle(function() {
        var _this = $(this);
        $("#ctl00_cph_pnlOmtale").slideDown(function() {
            _this.val("Lukk anmeldelsevindu");
        });
    },
    function() {
        var _this = $(this);
        $("#ctl00_cph_pnlOmtale").slideUp(function() {

            _this.val("Skriv din anmeldelse!");
        });
    });
}
function addToggler2() {

    var omtale = $("#ctl00_cph_pnlOmtale");
    var anmeld = $("#ctl00_cph_visAnmeldelse");
    // if (omtale.hasClass("auth")) {
    if (omtale.is(":hidden")) {
        log("åpner omtale");
        omtale.slideDown(1300);
    } else {
        log("lukker omtale");
        omtale.slideUp(1300);
    }

}
function sendmail(user, domain, suffix) {
    document.write('<a href="' + 'mailto:' + user + '@' + domain + '.' + suffix + '">' + user + '@' + domain + '.' + suffix + '</a>');
}

//equalheight: gjør alle elementer like høye
function equalHeight(group) {
    tallest = 0;
    group.each(function() {
        thisHeight = $(this).height();
        if (thisHeight > tallest) {
            tallest = thisHeight;
        }
    });
    group.height(tallest);
}

function fixHeight() {
    equalHeight($("#navLeft, #contentWrapper, #navRight  "));
}
function log(text, obj) {
/*
    try {
        if (isBrowser("mozilla") && window.console != null) {
            if (obj != null) {
                console.log(text, obj);
            } else {
                console.log(text);
            }
            // var isJQuery = text instanceof jQuery; //do something with this..

        } else if (isBrowser("msie") && $.browser.version > 6) {

            if (this.console && typeof console.log != "undefined") {
                console.log(text);
            }

        } else if (isBrowser("opera")) {
            opera.postError(text);
        } else if (isBrowser("chrome")) {
            console.log(text);
        } else if (isBrowser("safari")) {
            console.log(text);
        }
    } catch (Error) {

    }
    */
}

function isBrowser(browserToCheckFor) {
    var correct = false;
    if (browserToCheckFor == 'chrome') {
        correct = (/chrome/.test(navigator.userAgent.toLowerCase()));
    } else {
        jQuery.each(jQuery.browser, function(i, val) {
            if (i == browserToCheckFor && val == true) {
                correct = true;
            }
        });
    }
    return correct;
}
location.querystring = (function() {

    // The return is a collection of key/value pairs

    var result = {};

    // Gets the query string with a preceeding '?'

    var querystring = location.search;

    // document.location.search is empty if a query string is absent

    if (!querystring)
        return result;

    // substring(1) to remove the '?'

    var pairs = querystring.substring(1).split("&");
    var splitPair;

    // Load the key/values of the return collection

    for (var i = 0; i < pairs.length; i++) {
        splitPair = pairs[i].split("=");
        result[splitPair[0]] = splitPair[1];
    }

    return result;
})();

function isInteger(s) {
    if (s != null && s != "") {
        var RE = /^\d*$/;
        return RE.test(s);
    }
    return false;
}

function buyBooks() {
    log("buybooks");
    $('input[@type=checkbox]:checked').each(function() { // selectors take
        var id = $(this).attr("id");
        if (validateID(id)) {
            addBookToShoppingCart(id.replace("buy_", ""))
        } else {
            //TODO
        }
    });
}

function validateID(id) {
    return id.indexOf('buy_') != -1;
}

function addBookToShoppingCart(id) {
    log("adding " + id + " to shopping cart");
    var url = "/bokliste.aspx?buy=" + id + "&rnd=" + Math.random(); //random fordi IE cacher sidene. go ie!
    toggleShoppingCart(url);
}

function removeFromShoppingCart(id) {
    var url = "/bokliste.aspx?unbuy=" + id + "&rnd=" + Math.random(); //random fordi IE cacher sidene. go ie!
    toggleShoppingCart(url);

}

function toggleShoppingCart(url) {

    var shoppingcartcontent = $("#shoppingCartContent"); //tabellen til varene i handlekurven

    $.get(url, function(htmlz) {
        var nyttInnhold = $(htmlz).find("#shoppingCartContent"); //shoppingCartContent tabellen fra ajax-GET request
        shoppingcartcontent.replaceWith(nyttInnhold); //erstatter den gamle tabellen med den nye
    });
}

function SetupTooltips(buttons) {
    if (buttons == null) buttons = $('.show-tooltip');
    if (buttons.length > 0) {
        log("Setting up " + buttons.length + " tooltips", buttons);
        //buttons.click(function() { $(this).visPopup({ text: "", classname: "show-tooltip-text", valign: "bottom", fadeInSpeed: 200, fadeOutSpeed: 500, displayTime: 1500 }) });
        buttons.unbind().click(function() { $(this).visPopup({ text: "", classname: "show-tooltip-text", valign: "bottom", fadeInSpeed: 200, fadeOutSpeed: 500, displayTime: 1500 }) });
        log("Added tooltip on buttons");
    }

}


function addSearchHistory(text, gotoURL) {
    log("logging add search history..");
    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/AddSearchHistory",
        data: "{'q':'" + text + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function() {
            log("addSearchHistory(" + text + "): = success");

            if (gotoURL != null) window.location = gotoURL;
        }

    });

}

function SaveAsWishlist(name, elem) {
    log("Legger alle items i handlekurv til ønskelisten..");

    function visHandlekurv() {
        $("#minside .updatebutton").click();
        if (elem != null) {
            $(elem).visPopup({ text: "Ønskelisten lagret", displayTime: 3000 });
        }
        $("#onskelisteLagret").fadeIn(
                    function() {
                        setTimeout(function() {
                            $("#onskelisteLagret").fadeOut();
                        }, 10000)
                    }
            );
    }
    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/SaveAsWishlist",
        data: "{'navn':'" + name + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var returverdi = response.d;
            log("SaveAsWishlist(): = " + returverdi);
            if (returverdi == 1) {
                //er logget inn, vis tekst 
                visHandlekurv();
            }
            else if (returverdi == 0) {
                //ingen varer
                if (elem != null) {
                    $(elem).visPopup({ text: "Kan ikke lagre ønskeliste fordi handlekurven er tom!", displayTime: 3000 });
                }
            } else if (returverdi == 2) {
                //er ike logget inn, vis login popup
                loggedin = false;
                LoadLoginPopup(null, visHandlekurv);
            }
        }

    });
    return false;

}

function addToWishlist(id, fn) {
    log("adding wishlist product.. " + id);
    // alert($("#wish_" + id).parent().parent().parent().html());

    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/AddToWishlist",
        data: "{'ProduktID':'" + id + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(r) {
            if (r.d == 0) {

            } else if (r.d == 1) {

            } else {
                loggedin = false;
                LoadLoginPopup(location.href);
            }
            log("AddToWishlist(" + id + "): " + r.d);

        }, complete: function() {
            if (functionToExecute != null) {
                log("AddToWishlist complete, executing function: \n" + fn);
                setTimeout(fn, 300);
            }
        }

    });
    /**/
}
var wishlist;
function removeWishlist(wishlistID) {
    log("RemoveWishlist(" + wishlistID + ")");
    // alert($("#wish_" + id).parent().parent().parent().html());
    wishlist = wishlistID;
    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/RemoveWishlist",
        data: "{'onskelisteID':'" + wishlistID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(r) {
            var wishlist = $("#onskeliste_" + wishlistID);


            if (r.d == 1) {
                //wishlist.find("tr");
                // wishlist.fadeOut();

                //  var trs = wishlist.find("table tr");
                var tr = $("#onskeliste_" + wishlistID + " table tr:first");
                log("$('#onskeliste_" + wishlistID + " table tr:first')");
                fadeSiblings(tr);



                //fjernet ønskelisten
            } else if (r.d == 0) {
                //fant ikke ønskelisten
            } else {
                log("ikke logget inn");
                loggedin = false;
                LoadLoginPopup(location.href, null);
            }


        }
    });
    /**/
    return false;
}

var time = 200;
var stop = false;
function fadeSiblings(tr) {
    log(tr);
    tr.fadeOut(function() {

        if (stop) {
            log("header faded.. stopping..");
            stop = false;
            var wl = $("#onskeliste_" + wishlist);
            wl.fadeOut()
            return false;
        }
        if (tr.next().length && tr.next().attr("tagName") == "TR") {
            tr = tr.next();
        }
        else {
            // tr = tr.parent().parent().parent().parent();
            console.log("HEADER", tr);
            stop = true;
        }
        setTimeout(
        function() {
            if (tr.length) fadeSiblings(tr);
            time += 200;
        }, time);
    });
}

function removeFromWishlist(wishlistID, produktID) {
    log("removing wishlist produkt.. " + produktID + " from wishlist id= " + wishlistID);
    // alert($("#wish_" + id).parent().parent().parent().html());

    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/RemoveFromWishlist",
        data: "{'onskelisteID':'" + wishlistID + "','ProduktID':'" + produktID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(r) {
            if (r.d == 0) {
                //ingen endringer
            } else if (r.d == 1) {
                //fjernet fra ønskelisten

                var wishDiv = $("#wish_" + wishlistID + "_" + produktID);
                log(wishDiv);
                var wishlist = $("#onskeliste_" + wishlistID);

                if (wishlist.find("tr td > div:visible").length == 2) {
                    wishlist.fadeOut();
                } else {
                    wishDiv.fadeAndSlide();
                }
                log("tr igjen:" + wishlist.find("tr td > div:visible").length);

            } else {
                log("ikke logget inn");
                loggedin = false;
                LoadLoginPopup(location.href);
            }
            log("RemoveFromWishlist(" + wishlistID + "): " + r.d);


        }
    });
    /**/
    return false;
}

var redirectTo = null;
var buttonID = null;
var functionToExecute = null;
var loginboxWidth = 350;
function LoadLoginPopup(redir, fn) {
    log("LoadLoginPopup(" + redir + "," + fn + "):");
    redirectTo = (redir == "/logg-inn.aspx" ? location.href : redir);

    if (!loggedin) {
        log("loading popup..");
        functionToExecute = fn;
        var url = "/loginPopup.aspx";
        $.get(url, function(htmlz) {
            var codez = $(htmlz).find("#loginbox").parent();
            codez.find(".lukk a ").click($.unblockUI).click(function() { return false }); ;
            (jQuery).blockUI({
                message: codez,
                css: {
                    left: ($(window).width() - loginboxWidth) / 2 + 'px',
                    width: loginboxWidth + 'px',
                    height: '205px'
                }
            });
            $(".blockOverlay").click($.unblockUI);

            enableLoginForm();
            return false;
        });
    } else {
        //bruker er logget inn. return true enabler linken
        log("bruker er logget inn"); //vil være feil om loggedin er cached
        return true;
    }
    return false;
}
function enableLoginForm() {

    $("#commentForm").validate({
        submitHandler: function(form) {
            login(form.email.value, form.passord.value);

        },
        messages: {
            passord: "Fyll inn passord",
            email: {
                required: "Fyll inn epost",
                email: "Ugyldig epost"
            }
        }
    });

}

function startLoginWait() {
    log("waiting...");
    $("#loginIndicator").show();
    $("body").css("cursor", "progress");

}
function stopLoginWait() {
    log("stopped waiting.");
    $("#loginIndicator").hide();
    $("body").css("cursor", "auto");

}
function refreshLogin() {
    $("#ctl00_logginn_btnRefresh").click();
}
function login(u, p) {
    log("logging in " + u + "...");
    var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i

    if (filter.test(u) && p.length > 0) {
        startLoginWait();
        $("#loginBeskjed").text("Logger inn...");
        $.ajax({
            type: "POST",
            url: "/PensumService.asmx/Login",
            data: "{'u':'" + u + "','p':'" + p + "'}",
            cache: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(success) {
                log("Login(" + u + "): = " + success.d);
                if (success.d) {
                    //   setTimeout(function() { $("#" + buttonID).click() }, 1200);
                    //    if (functionToExecute != null) setTimeout(functionToExecute, 500);
                    refreshLogin();
                    $("#loginBeskjed").text("Logget in!");

                    if (redirectTo != location.href && redirectTo != null && redirectTo != '') {
                        //om argumentet redirect ikke er tomt, eller samme som siden vi står på, videresend til denne urlen
                        log("redirecting to " + redirectTo);
                        setTimeout(function() {
                            startLoginWait();
                            $("#loginBeskjed").text("Logget in! Vidrekopler..");
                        }, 100);
                        setTimeout(function() {
                            //redirect 
                            location.href = redirectTo
                            // stopLoginWait();
                        }, 700);
                    } else {
                        //kun fjern popup om man ikke skal videresende brukeren
                        setTimeout($.unblockUI, 400); //fjerner popup
                    }
                    if (functionToExecute != null) {
                        //funksjonen som skal utføres etter login
                        setTimeout($.unblockUI, 400);
                        log("Executing function in 800ms: " + functionToExecute);
                        setTimeout(functionToExecute, 700);

                    }
                    loggedin = true;
                    setupLoginLinks();
                } else {
                    //login brukernavn/passord feil
                    $("#loginBeskjed").text("Greide ikke å logge inn. Feil brukernavn eller passord");
                }

            },
            complete: function() {
                stopLoginWait()
            }

        });
    }
    return false;
}

function logout() {

    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/LogOut",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(success) {
            $("#ctl00_logginn_btnRefresh").click();
            loggedin = false;
            setupLoginLinks();

        }

    });

    return false;
}
function glemtPassord(u) {
    var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i

    if (filter.test(u))
        $.ajax({
            type: "POST",
            url: "/PensumService.asmx/GlemtPassord",
            data: "{'u':'" + u + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(success) {
                log("GlemtPassord(" + u + "): = " + success.d);


            }

        });
}
function setupLoginLinks() {
    var linksThatNeedsLogin = $("a[rel=login]");
    log("loginlinker: " + linksThatNeedsLogin.size());
    var test11 = function() { return LoadLoginPopup($(this).attr("href")); };
    linksThatNeedsLogin.unbind('click').click(test11);
    log("loggut=" + $("#loggUt").length);
    $('#loggUt').unbind('click').click(function() { logout(); return false; });

    if (loggedin) {
        //fjerner href'en fra login-link, og setter på en onclick-event som laster login-popup. Clean & unobtrusive
        log("du er logget inn");

        //   $("#loggUt").removeAttr("href");
        //   linksThatNeedsLogin.click(logout);
    } else {
        log("du er IKKE logget inn");

        //   linksThatNeedsLogin.click(LoadLoginPopup);
    }
}


function funmode(mode, disableClicks) {
    //random bakgrunnsfarge/border på elementet som blir klikket på (kan toggles av og på)
    //cuz.. why not :P
    $(document.body).click(function(event) {
        var rnd = (Math.ceil(Math.random() * 1000000));
        var target = $(event.target).unbind().attr("a", "");
        if (target.attr("rel") != "bgg" && target.attr("rel") != "brdrr") {
            if (mode == 1) {
                target.css("background", ("#" + rnd));
                target.attr("rel", "bgg");
            } else {
                target.css("border", "3px solid");
                target.css("borderColor", ("#" + rnd));
                target.attr("rel", "brdrr");
            }

        } else {
            if (target.attr("rel") == "brdrr")
                target.css("border", "none");
            if (target.attr("rel") == "bgg")
                target.css("background", "none");

            target.removeAttr("rel");
        }
        return !disableClicks;
    });
}
function disco() {
    //disco! \o/
    var divs = $("div");
    $("body").css("backgroundColor", "#000000");
    setInterval(function() {
        divs.each(function() {
            var rnd = Math.floor(Math.random() * 256);
            var rnd2 = Math.floor(Math.random() * 256);
            var rnd3 = Math.floor(Math.random() * 256);
            var target = $(this);
            target.css("backgroundColor", "rgb( " + rnd + ", " + rnd2 + ", " + rnd3 + ")");
        });
    }, 20);
}
function ordrelinjeToggle() {
    $('.ordrelinje').hide().prev().toggle(
    function() {
        $(this).addClass('selected').next().show();


    },
    function() {
        $(this).removeClass('selected').next().hide();
    })
}
function onskelisteToggle() {
    $("#minOnskeliste div.header  td.toggle div span").die().live('click', function() {

        var parent = $(this).parent().parent().parent().parent().parent().parent();

        if (parent.parent().hasClass("selected")) {
            parent.parent().removeClass('selected');
            parent.next().slideUp("fast");

        } else {
            parent.parent().addClass('selected');
            parent.next().slideDown("fast");

        }
    });
    var buttons = $("#minOnskeliste .show-tooltip");
    SetupTooltips(buttons);

}
function toggleEmnerForsideIfNotEmpty() {
    //hvis det ikke finnes noen emner oppsøkt så lukk "finn pensum" boksen
    //
    if ($("#emneresultater li").length == 0) {
        //finnes ingen emner oppsøkt
        log("lukker emneresultater");
        $("#soekEmne > .resultater").slideUp();
        $("#emnesokresultater").slideUp(600, function() {
            $("#forsidePensumliste").fadeIn("fast", function() {

                removeFilter(this); //fikser skrift bug ved fadeIn, fjerner filter
            }); //.fadeAndSlide({ fadeOut: false });  //viser resten av siden; hist, dmmh
            $("#soekEmne .soek .boks input").val("");
        });


    } else {
        log("viser emneresultater");
        $("#soekEmne > .resultater").slideDown();
    }
}
var emnerLagret = new Array();
var skoleID = "NTNU";
function SaveSearchedPensum() {

    //  if (skoleID == null || skoleID < 0 || skoleID > 2) skoleID = 0;
    log("lagrer emnesøket.." + skoleID);
    var li = $("#emneresultater li");
    var emneholder = new Array();
    var emner = new Array();


    log("antall elementer i emnesøket: " + li.length);

    li.each(function() {
        var $this = $(this).find("span");

        var id = $this.attr("id");
        var kode = $($($this).get(0));
        var navn = $($($this).get(1));
        var ar = $($($this).get(2));
        var semester = $($($this).get(3));
        var skole = $($($this).get(4));
        //legg til flere her hvis man har lagt til i pensumservice emnesøk

        emner = new Array();
        emner[0] = kode.text().trim();
        emner[1] = navn.text().trim();
        emner[2] = ar.text().trim();
        emner[3] = semester.text().trim();
        emner[4] = skole.text().trim();
        //legg til flere her hvis man har lagt til i pensumservice emnesøk
        emneholder.push(emner);
        log(emner[0] + " " + emner[1] + " " + emner[2] + " " + emner[3] + " " + emner[4]);

    });

    log(emneholder);
    emnerLagret = emneholder;
    var jsonText = JSON.stringify({ emneresultat: emneholder, skoleID: skoleID });
    log(jsonText);
    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/LagreEmnesok",
        data: jsonText,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(success) {

            log("lagret emnesøk" + success.d);

        }
    });

    return false;
}
function removeEmne(id) {
    log("removing emne with id =" + id);
    var li = $("#emne_" + id);
    li.slideUp(function() {
        $(this).remove();
        toggleEmnerForsideIfNotEmpty();
        SaveSearchedPensum();
    });


    return false;
}
function finnEmner() {

    listEmner();
    return false;
}
function emneFinnes(emnekode) {
    //for å unngå å dobbbeltlagre emnesøk
    if (emnerLagret != null)
        for (var i = 0; i < emnerLagret.length; i++) {
        log(emnerLagret[i][0] + "==" + emnekode);
        if (emnerLagret[i][0] == emnekode) {
            return true;
        }
    }
    return false;
}
function leggTilEmne(emne) {
    //legger til emnet i emneresultatene
    log("legger til emne");
    var id = emne.attr("id").replace('emne_', '');
    if (!emneFinnes(id)) {
        log("emnet finnes ikke, legger det til");
        var closebutton = $("<span class='emnelukk'><a href='#'>Slett</a></span>").click(function() { return removeEmne(id) });
        $("#emneresultater").append(emne.clone().unbind().append(closebutton));
        SaveSearchedPensum();
    } else {

        log("emnet finnes, skipping..");
    }
}
function lagreMittEmne(emnekode, element) {
    //lagrer emnet til mine emner
    element = $(element);
    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/LagreMittEmne",
        data: "{'emnekode':'" + emnekode + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(r) {
            log("lagreMittEmne(" + emnekode + "): " + r.d);
            var text = null;
            if (r.d == 1) {
                text = "Lagret emnet!";

            } else if (r.d == 2) {
                log("er ikke innlogget.. laster login vindu");
                loggedin = false;
                LoadLoginPopup(null, function() { element.click(); });

            } else if (r.d == 0) {
                text = "Emnet er allerede lagret!";
            } else {
                text = "Feil intraff!";
            }
            if (text != null)
                element.visPopup({ text: text, fadeTimout: 3000 });
            return false;
        }

    });

    return false;
}
function lagreValgteEmner(element) {
    //lagrer emnene til mine emner

    var emner = $("#dlPensumfag").children().find(":checkbox:checked");
    if (emner.length == 0) {
        $(element).visPopup({ text: "Ingen emner er valgt. Velg emne(r) og prøv igjen.", displayTime: 5000 });
        return false;
    }
    var valgteEmner = [];
    emner.each(function() {
        valgteEmner.push($(this).attr("id"))
    });
    log(valgteEmner);
    var valgteEmnerText = JSON.stringify({ emnekoder: valgteEmner });
    if (valgteEmner.length > 0) {
        $.ajax({
            type: "POST",
            url: "/PensumService.asmx/LagreEmnekoder",
            data: valgteEmnerText,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(success) {

                log(success.d);

                var text = null;
                if (success.d == 2) {
                    log("er ikke innlogget.. laster login vindu");

                    loggedin = false;
                    LoadLoginPopup(null, function() { lagreValgteEmner(element); });
                }
                else if (success.d == 1) {
                    if (emner.length > 1)
                        text = "Lagret emner!";
                    else
                        text = "Lagret emnet!";
                }
                else if (success.d == 0) {
                    if (emner.length > 1)
                        text = "Emnene er allerede lagret!";
                    else
                        text = "Emnet er allerede lagret!";
                }
                else {
                    text = "Feil inntraff!";
                }
                if (text != null)
                //   $("#btnLagreEmner").visPopup("teest");
                    $(element).visPopup({ text: text, fadeTimout: 3000, displayTime: 5000 });

            }, complete: function() {

                $("#emneWait").hide();
            }
        });
    }

    return false;
}
function lagreMineEmner(element) {
    //lagrer emnene til mine emner
    $("#emneWait").text("Lagrer emner..").show();
    log("Lagrer mine emner..");

    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/LagreMineEmner",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(success) {

            log("lagreMineEmner(): " + success.d);

            var text = null;
            if (success.d == 2) {
                log("er ikke innlogget.. laster login vindu");
                loggedin = false;
                LoadLoginPopup(null, function() { lagreMineEmner(element); });
            }
            else if (success.d == 1) {
                text = "Lagret emner!";
            }
            else if (success.d == 0) {
                text = "Emnene er allerede lagret!";
            }
            else {
                text = "Feil inntraff!";
            }
            if (text != null)
            //   $("#btnLagreEmner").visPopup("teest");
                $(element).visPopup({ text: text, fadeTimout: 3000 });

        }, complete: function() {

            $("#emneWait").hide();
        }
    });


    return false;
}

function listEmner() {

    $("#emneWait").text("Henter emner...").show();
    $.get("bokliste.aspx?emnesok=" + Math.random(), function(html) {

        var innhold = $(html).find("#innholdhtml").children("div[id^=emneresultat]");

        var emneresultater = $("#emnesokresultater");
        var inner = $("<div id='emnesokresultaterInner'/>");

        emneresultater.hide();

        emneresultater.html(inner);
        innhold.each(function() {
            if ($(this).children().length <= 1) $(this).append("<div style='margin:10px 0'>Vi har ikke registrert noen bøker knyttet til dette emnet</div>");
            inner.append($(this));

        });
        //   emneresultater.height(inner.height());

        if (innhold.size() == 0) emneresultater.append("<div>Fant ingen pensumbøker</div>");

        emneresultater.fadeIn(function() {
            removeFilter(this); //fikser skrift bug ved fadeIn, fjerner filter
            var forsidePensum = $("#forsidePensumliste");
            if (forsidePensum.is(":visible")) {
                forsidePensum.wrapIt().end().fadeOut(500,
                function() {
                    $(this).parent().slideUp(function() {

                        forsidePensum.unWrapIt();
                    });
                }
            );
            }
            $("#emneWait").hide();

            SetupTooltips();
        });

    });
    return false;
}
jQuery.fn.visPopupClick = function(options) {

    return this.each(function() {
        $(this).click(function() { $(this).visPopup(options); });
    });
}
jQuery.fn.visPopup = function(options) {
    //visPopup v1.0
    // $(element").visPopup("Hello world!");
    // $(element").visPopup({ text: "Hello world!", fadeTimout: 3000, align: 'left' });
    //align er hvor popup-boksen skal dukke opp i forhold til elementet som blir trykket på.
    //displayTime er hvor lenge den skal vises før den fades

    //made by chris
    var defaults = {
        text: null,
        displayTime: 1000,
        fadeInSpeed: 1000,
        fadeOutSpeed: 1000,
        delay: 0,
        ignoreMargins: true,
        align: 'right',
        valign: 'top',
        classname: 'popupTekst',
        debug: false
    }
    log("ANTALL TO POPUP " + $(this).length);
    var $this = $(this);
    var text = null;
    if (options.length > 0) text = options;
    var options = $.extend(defaults, options);
    if (text != null) options.text = text;

    if (options.text == null) return;
    if (options.debug) log(options);
    var popup = $("<div class='" + options.classname + "'>" + options.text + "</div>").hide();

    $("body").append(popup);

    var pos = $this.position();
    var height = popup.realHeight();
    var top = pos.top;
    var left = pos.left;
    var marginTop = isNaN(parseInt($this.css('marginTop'))) ? 0 : parseInt($this.css('marginTop'), 10);
    var marginLeft = isNaN(parseInt($this.css('marginLeft'))) ? 0 : parseInt($this.css('marginLeft'), 10);

    if (options.ignoreMargins) {
        top += marginTop;
        left += marginLeft;
    }
    if (options.align == 'left') left -= popup.realWidth();
    else if (options.align == 'center') left += $this.realWidth() / 2;
    else if (options.align == 'right') left += $this.realWidth();

    setTimeout(function() {
        popup.css({
            left: left,
            top: top - (options.valign == 'top' ? height : 0)
        }).fadeIn(options.fadeInSpeed);

        return $this.each(function() {
            setTimeout(function() {
                popup.fadeOut(options.fadeOutSpeed, function() {
                    popup.remove();
                })
            }, options.displayTime);
        });

    }, options.delay);



}
jQuery.fn.reverse = function() {
    return this.pushStack(this.get().reverse(), arguments);
};


jQuery.fn.unWrapIt = function(options) {

    var e = $(this);
    var parent = e.parent();
    if (parent.hasClass("wrapper")) {
        parent.replaceWith(e);
    }
}
jQuery.fn.wrapIt = function(options) {

    var defaults = {
        floating: true,
        fixHeight: true,
        fixWidth: true,
        reverse: false
    }
    var options = $.extend(defaults, options);
    var e = $(this);
    log("wrapping up " + e.length + ": ", e);

    var wrapper = $("<div class='wrapper' />");
    if (options.floating)
        wrapper.css({ 'float': 'left' })
    if (options.fixHeight)
        wrapper.height(e.realHeight());
    if (options.fixWidth)
        wrapper.width(e.realWidth());

    if (options.reverse) {
        e = e.reverse();
    }
    e.wrapAll(wrapper);
    return e.parent();

}

jQuery.fn.realWidth = function() {
    var e = $(this);
    var width = 0;
    var border_left = (isNaN(parseInt(e.css('borderLeftWidth'), 10)) ? 0 : parseInt(e.css('borderLeftWidth'), 10));
    var border_right = (isNaN(parseInt(e.css('borderRightWidth'), 10)) ? 0 : parseInt(e.css('borderRightWidth'), 10));
    var padding_left = (isNaN(parseInt(e.css('paddingLeft'), 10)) ? 0 : parseInt(e.css('paddingLeft'), 10));
    var padding_right = (isNaN(parseInt(e.css('paddingRight'), 10)) ? 0 : parseInt(e.css('paddingRight'), 10));

    var thisWidth = e.width() + padding_left + padding_right + border_left + border_right;
    width += thisWidth;
    return width;
}
jQuery.fn.realHeight = function() {
    //returnerer den endelige ekte høyden på element(ene)

    var height = 0;
    $(this).each(function() {
        var e = $(this);
        var border_top = (isNaN(parseInt(e.css('borderTopWidth'), 10)) ? 0 : parseInt(e.css('borderTopWidth'), 10));
        var border_bottom = (isNaN(parseInt(e.css('borderBottomWidth'), 10)) ? 0 : parseInt(e.css('borderBottomWidth'), 10));
        var padding_top = (isNaN(parseInt(e.css('paddingTop'), 10)) ? 0 : parseInt(e.css('paddingTop'), 10));
        var padding_bottom = (isNaN(parseInt(e.css('paddingBottom'), 10)) ? 0 : parseInt(e.css('paddingBottom'), 10));

        var thisHeight = e.height() + padding_top + padding_bottom + border_top + border_bottom;
        height += thisHeight;
    });
    return height;
}
jQuery.fn.fadeAndSlide = function(options) {
    /**
    * fadeAndSlide v0.1 alfa
    * fades out the element, then slides it up
    * usage: $("#div").fadeAndSlide();
    *        $("#div").fadeAndSlide({
    *                removeElement: false,
    *                removeWrapper: true
    *        });
    *
    * removeElement removes the element being faded out, default: false. (use true if the element is not to be reused)
    * removeWrapper removes the element wrapper, default: true. 
    * 
    * @class fadeAndSlide
    *  
    */
    var defaults = {
        callbackz: function() { },
        removeElement: false,
        removeWrapper: true,
        fadeOut: true,
        slideTime: 200,
        floating: false,
        debug: true
    }
    var options = $.extend(defaults, options);

    var toFade = $(this);



    var newHeight = toFade.realHeight();
    if (newHeight == 0)
        newHeight = toFade.parent().height();

    var removeWrapper = function() {
        if (options.removeWrapper) {
            if (options.debug) log("removing wrapper= true");

            toFade.parent().replaceWith(toFade);
            if (options.debug) log("wrapper removed");

        }
    };
    var html = $("<div class='wrapperDiv'/>");
    if (options.floated) html.css({ float: "left" });
    var wrapper = toFade.wrap(html).parent();

    if (options.debug) log("wrap height=" + wrapper.height());
    if (options.fadeOut) {
        if (!toFade.is(":hidden")) {

            wrapper.height(newHeight);

            return toFade.fadeOut(options.slideTime, function() {
                wrapper.slideUp(options.slideTime, removeWrapper);
                setTimeout(options.callbackz, options.slideTime);
            });

        }
    } else {
        if (toFade.is(":hidden"))
            toFade.slideDown(options.slideTime);
    }

};
$.fn.tagName = function() {
    //handy metode for å finne tagname
    //$el.tagName();
    return this.get(0).tagName.toLocaleLowerCase();
}
jQuery.fn.nextAllUntil = function(untilWhat) {

    // Usage: $('li.parent:first').nextAllUntil('li.parent');
    var found = false;
    return $(
        $.grep(this.nextAll(), function(el) {
            return !found && !(found = $(el).is(untilWhat));
        })
    );
};


function toggleMittEmne(element) {
    var el = $(element);
    var ul = el.parent().parent().next("ul");
    if (ul.children("li").length)
        ul.slideToggle("fast", function() {
            log(ul.is(":hidden"));
            if (ul.is(":hidden")) {
                el.attr("src", "/App_Themes/standard/images/pil.png");
            } else {
                el.attr("src", "/App_Themes/standard/images/pil_ned.gif");
            }
        });

}
function fjernPensumfag(pensumfagID, element) {
    $.ajax({
        type: "POST",
        url: "/PensumService.asmx/FjernPensumfag",
        //data: "{'pensumfagID':'" + pensumfagID + "'}",
        data: "{'ids':'" + pensumfagID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(r) {
            log("fjernPensumfag(" + pensumfagID + "): " + r.d);
            if (r.d == 1) {//if (r.d == 0) {
                log("fjernet pensumfag");
                var toFade = $(element);

                //   var slide = toFade.fadeAndSlide();
                var header = toFade.parent().parent();
                var childz = header.children("ul").children(); //.remove("dt:nth-child(2)");

                var i = 1;
                if (childz.length > 0) {
                    childz.each(function() {
                        var $this = $(this);
                        setTimeout(function() {
                            $this.fadeAndSlide();
                            var li = header.children("ul").children("li:visible");
                            log(li);
                            if (li.length == 1) {
                                setTimeout(function() { header.fadeAndSlide(); }, i - 450);
                            }
                        }, i);
                        i += 450;

                    });
                } else {

                    setTimeout(function() { header.fadeAndSlide(); }, i);

                }
                $(element).visPopup({ text: "Fjernet mitt emne!", displayTime: 1000, delay: i + 500 });

            } else if (r.d == 0) {
                $(element).visPopup({ text: "Emnet finnes ikke, eller ble ikke fjernet!", displayTime: 2000 });
                log("pensumfag fantes ikke, eller ble ikke fjernet");

            } else if (r.d == 2) {
                log("ikke logget inn");
                loggedin = false;
                LoadLoginPopup(location.href);
            }
            return false;
        }

    });

    return false;
}

function removeFilter(current) {
    //fikser cleartype bug i IE etter fadeIn()-effekten.
    if (jQuery.browser.msie) {
        try {
            current.style.removeAttribute("filter");
        } catch (e) { }
    }
} 