﻿/// <reference path="jquery-1.4.2.min-vsdoc.js" />
//This script file includes all javascript functions needed for this site, call functions from "jquery.document.ready.js"

//GLOBAL VAIABLES
var globalCurrencyText = $.tr('kr');
var globalAmountText = $.tr('st');
var globalImageFolder = '/files/billeder/ecom';
var globalProductDetailPageId = 3;
var globalSmallCartPageId = 172;
var globalBigCartPageId = 176;
var globalProductList, globalShowPriceWithVat, user;
var globalQuestions;
var $searchlist;
var result_image_pageSize = 18;
var result_list_pageSize = 25;
var result_currentPage = 1;
var result_sortColumn = 'hansen';
var result_sortDescending = false;
var post_hash_to_product_detail = '';


var filter_min_length = 3;

var dataTableLanguageSettings = {
    "oPaginate": {
        "sFirst": $.tr('Första'),
        "sLast": $.tr('Sista'),
        "sNext": $.tr('Nästa'),
        "sPrevious": $.tr('Föregående')
    },
    "sInfo": $.tr('Visar _START_ till _END_ av totalt _TOTAL_ rader'),
    "sLengthMenu": $.tr('Visa _MENU_ rader'),
    "sSearch": $.tr('Sök:'),
    "sProcessing": $.tr('Uppdaterar'),
    "sInfoFiltered": $.tr(' - filtrerat från _MAX_ rader'),
    "sZeroRecords": $.tr('Inga rader matchade sökningen'),
    "sEmptyTable": $.tr('Det fanns inte några rader att visa'),
    "sInfoEmpty": $.tr('Visar 0 av 0 rader')
};


//Function to swap browser sensitive images
$.fn.swapSensitiveImages = function () {
    if ($.exeptionbrowser(6)) {
        var imgarr = $.makeArray($(this).find('.browsersensitive'));
        for (var i in imgarr) {
            //if element is an image then scr is modified, else the css rule background-image is modified
            if (imgarr[i].tagName.match('IMG') || imgarr[i].tagName.match('img')) {
                imgarr[i].src = imgarr[i].src.replace('-24bit', '-8bit');
            }
            else {
                $(imgarr[i]).css('background-image', $(imgarr[i]).css('background-image').replace('-24bit', '-8bit'));
            }
        }
    }
}
$.fn.swapSensitiveImagesOnRequest = function () {
    var reqimgarr = $.makeArray($(this));
    for (var i in reqimgarr) {
        if (reqimgarr[i].tagName.match('IMG') || reqimgarr[i].tagName.match('img')) {
            reqimgarr[i].src = reqimgarr[i].src.replace('-24bit', '-8bit');
        }
        else {
            $(reqimgarr[i]).css('background-image', $(reqimgarr[i]).css('background-image').replace('-24bit', '-8bit'));
        }
    }
}


$.interChangeOrArtNrSearch = function (str) {
    var crosslistsearch = $("#crosslistsearchChkbox").attr("checked");
    if (crosslistsearch == true) {
        $.getInterchangeProductsBySearchString(str);
    }
    else {
        $.getArtNrProductsBySearchString(str);
    }
}


$.changeInputWithArrows = function () {
    $('#search_result_list input:text').keydown(function (e) {
        var id = $(this).attr('id');
        var numb = parseInt(id.match(/\d/g));
        if (e.keyCode == 38) { //Keyup
            id = id.replace(/\d/g, numb - 1);
            $("#" + id).focus().select();
            return false;
        }
        else if (e.keyCode == 40) { //Keydowmn
            id = id.replace(/\d/g, numb + 1);
            $("#" + id).focus().select();
            return false;
        }
    });
}

//BUTTON BINDINGS and GLOBAL VARIABLES associated with buttons
//TEMP
$.bindButtons = function () {
    //CAR: Free Text Search button
    var seastr;
    $('#carFreeTextSearchButton').click(function () {
        seastr = $.trim($('#carFreeTextSearchInput').val());
        if (seastr != '') {
            $.getCarProductsBySearchString(seastr);
        }
    });
    //MARINE: Free Text Search button
    $('#marineFreeTextSearchButton').click(function () {
        seastr = $.trim($('#marineFreeTextSearchInput').val());
        if (seastr != '') {
            $.getMarineProductsBySearchString(seastr);
        }
    });
    //INTERCHANGE/ArtNr: Free Text Search button
    $('#interFreeTextSearchButton').click(function () {
        var crosslistsearch = $("#crosslistsearchChkbox").attr("checked");
        seastr = $.trim($('#interFreeTextSearchInput').val());
        if (seastr != '' && crosslistsearch == true) {
            $.getInterchangeProductsBySearchString(seastr);
        }
        else if (seastr != '' && crosslistsearch == false) {
            $.getArtNrProductsBySearchString(seastr);
        }
    });
    //GULF: Free Text Search button
    $('#gulfFreeTextSearchButton').click(function () {
        seastr = $.trim($('#gulfFreeTextSearchInput').val());
        if (seastr != '') {
            $.getGulfProductsBySearchString(seastr);
        }
    });

    //Toggle big cart
    $('#showBigCartButton').toggleBigCart();

    $('input.filter').keyup(function (event) {
        if (event.keyCode == '13') {
            $.applyFilter();
        }
        else if (event.keyCode == '27') {
            $.clearFilter();
        }
        event.preventDefault();
    });

    $.bindReturnKey($('#interFreeTextSearchInput'), function (seastr) { $.interChangeOrArtNrSearch(seastr); });
    $.bindReturnKey($('#carFreeTextSearchInput'), function (seastr) { $.getCarProductsBySearchString(seastr); });
    $.bindReturnKey($('#marineFreeTextSearchInput'), function (seastr) { $.getMarineProductsBySearchString(seastr); });
    $.bindReturnKey($('#gulfFreeTextSearchInput'), function (seastr) { $.getGulfProductsBySearchString(seastr); });
    $.bindReturnKey($('#getCarInfoByRegistrationNoInput'), function (seastr) { $.getCarInfoByRegistrationNo(seastr); });
    $.bindReturnKey($('#getCarInfoByCassiNo'), function (seastr) { $.getCarInfoByCassiNo(seastr); });
}

$.bindReturnKey = function (textbox, func) {
    textbox.keyup(function (event) {
        if (event.keyCode == '13') {
            seastr = $.trim(textbox.val());
            func(seastr);
        }
        event.preventDefault();
    });
}

$.clearFilterInput = function () {
    $('input.filter').val('');
}



//Function to adjust search module size
$.fn.adjustSearchModuleSize = function () {
    var $adjTabs = $(this).find('.tabs .content');
    var $adjForm = $(this).find('.form');
    //reset
    $adjTabs.css('height', '');
    $adjForm.css('height', '');
    //adjust
    var th = $adjTabs.outerHeight();
    var fh = $adjForm.outerHeight();
    if (th != fh) {
        if (th > fh)
            $adjForm.attr('style', 'height:' + th + 'px !important;');
        if (fh > th)
            $adjTabs.attr('style', 'height:' + fh + 'px !important;');
    }
}



//Function to control search module tabs and panels also sets and reads cookies to activate correct tab and panel at reload
$.fn.searchModuleTabsAndPanels = function () {
    var $t = $(this);
    var $tabs = $t.find('#searchmoduletabs');
    var $tab = $tabs.find('li a[rel]');
    var $panels = $t.find('.form .sp');
    var cn = 'activetab';
    var ac = 'active';
    if ($panels.length > 1) {
        //setting up variables for current area
        var currentAreaId = parseInt($('#HansenAreaId').val());
        var areaRacing = [1, 's1'];
        var areaMarine = [8, 's2'];
        var areaGulf = [9, 's3'];
        var activeArea;
        var defaultTab;
        //function to set active tab if cookies are not enabled or not set
        function setDefaultTab() {
            if (currentAreaId == areaRacing[0])
                activeArea = areaRacing;
            else if (currentAreaId == areaMarine[0])
                activeArea = areaMarine;
            else if (currentAreaId == areaGulf[0])
                activeArea = areaGulf;
            else
                activeArea = areaRacing;

            defaultTab = $tab.filter('[rel=' + activeArea[1] + ']');
            $tabs.find('li.' + ac).removeClass(ac);
            defaultTab.parents('li').addClass(ac);
            $panels.hide();
            $panels.filter('.' + activeArea[1]).show();
        }
        //checking if cookies are enabled
        if (navigator.cookieEnabled) {
            var tabcoo = $.readCookie(cn);
            //if active tab cookie is set
            var validTabs = (user.auth) ? ['s1', 's2', 's3', 's4', 's5'] : ['s1', 's2', 's3', 's5'];
            if (tabcoo && $.inArray(tabcoo, validTabs) != -1) {
                $tabs.find('li.' + ac).removeClass(ac);
                $tabs.find('li a[rel=' + tabcoo + ']').parents('li').addClass(ac);
                $panels.hide();
                $panels.filter('.' + tabcoo).show();
            }
            else
                setDefaultTab();
        }
        else
            setDefaultTab();

        //on tab click
        $tab.click(function () {
            if (navigator.cookieEnabled) {
                try {
                    $.setCookie(cn, this.rel, {
                        duration: 30, //days
                        path: '/',
                        domain: '.hansenkatalogen.se',
                        secure: false
                    });
                }
                catch (e) {
                    $.cookieWarning(e);
                }
            }
            $tabs.find('li.' + ac).removeClass(ac);
            $(this).parents('li').addClass(ac);
            $panels.hide();
            $panels.filter('.' + this.rel).show();
            $('#CarModels').splitHtmlListV2();
            $('#MarineModels').splitHtmlListV2();
            $('#ulGulfAccessoryClass').splitHtmlListV2();
            $('#selectArticleClassUlListMarine').splitHtmlListV2();
            $('#selectArticleClassUlList').splitHtmlListV2();
            //$('#search .module').adjustSearchModuleSize();
            return false;
        });
    }

    return this;
}

$.fn.searchModuleSmallTabsAndPanels = function ($panels) {
    var $tt = $(this).find('a');
    $tt.click(function () {
        $panels.find('.panel').hide();
        $panels.find('.panel.' + this.rel).show();
        $tt.removeClass('a');
        $(this).addClass('a');
        $('#CarModels').splitHtmlListV2();
        return false;
    })
}



//Function to animate global go button on hover
$.fn.globlaGoButtonAnimation = function () {
    var fadespeed = 400;
    $(this).mouseover(function () {
        $(this).fadeTo(fadespeed, 0.75, function () {
            $(this).fadeTo(fadespeed, 1, function () {
                $(this).fadeTo(fadespeed, 0.75, function () {
                    $(this).fadeTo(fadespeed, 1);
                });
            });
        });
    });

    return this;
}


var target, table, row, column;
$.fn.splitHtmlListV2 = function (o) {
    if (this.length != 0) {
        if (!$(this).is('table')) {
            var settings = $.extend({
                adjustcolumn: 0
            }, o);
            target = {
                obj: $(this),
                id: $(this).attr('id'),
                width: $(this).outerWidth(),
                array: $.makeArray($(this).find('li a')),
                current: null,
                column: { amount: 0, width: 0, size: 0 }
            };

            //if the width is 0 then that means that the object we are trying to manipulate is not visible and we do nothing
            if (target.width != 0) {
                //if there is only on link/item in target array we automaticly execute click in it, else we modify object normaly
                if (target.array.length == 1) {
                    //if $overlay exists
                    if ($overlay != undefined) {
                        //we wait until overlay is gone
                        globalOneLink = $(target.array[0]);
                        globalOneLinkInterval = setInterval('$.automateLinkClick()', 200);
                    }
                    else
                        $(target.array[0]).click();
                }
                else {
                    //looping out list object to determine max width
                    for (var i in target.array) {
                        target.current = $(target.array[i]).width();
                        if (target.current > target.column.width)
                            target.column.width = target.current;
                    }

                    //adding width to create better looking columns
                    target.column.width += 10;

                    //calculating amount of columns needed
                    target.column.amount = (Math.floor(target.width / target.column.width)) + settings.adjustcolumn;

                    //calculating items per column
                    target.column.size = Math.ceil(target.array.length / target.column.amount);

                    //creating table to replace current target
                    table = $('<table />').attr('id', target.id).css({ 'width': '100%', 'font-size': '11px' });
                    row = $('<tr />').appendTo(table);

                    //looping trought items and placeing them in correct column
                    for (var i in target.array) {
                        target.current = i % target.column.size;
                        if (target.current == 0) {
                            column = $('<td />').css({ 'width': (100 / target.column.amount).toFixed(1) + '%', 'vertical-align': 'top' }).appendTo(row);
                        }

                        column.append($(target.array[i]).css({ 'display': 'block' }));
                    }

                    target.obj.replaceWith(table);
                }
            } //end if (target.width != 0)
        } //end if (!$(this).is('table'))
    } //end if (this.length != 0)

    //finishing up
    target = undefined;
    table = undefined;
    row = undefined;
    column = undefined;

    return this;
}

var globalOneLink, globalOneLinkInterval;
$.automateLinkClick = function () {
    if (($overlay == undefined) && ($status == undefined)) {
        if (globalOneLink != undefined)
            globalOneLink.click();
        clearInterval(globalOneLinkInterval);
        globalOneLink = undefined;
        globalOneLinkInterval = undefined;
    }
}


//Function to split html lists into columns (ul, ol)   NOT IN USE ANYMORE!!!
$.fn.splitHtmlList = function () {
    var $house = $(this);
    if ($house.length && ($house.width() != 0) && !$house.hasClass('isScriped')) {
        $house.addClass('isScriped');
        var $items = $house.find('li');
        var linkArr = $.makeArray($items.find('a'));
        var widest = false;
        var currentwidth = null;
        var itemcss = {
            'display': 'block',
            'float': 'left'
        };

        for (var i in linkArr) {
            currentwidth = $(linkArr[i]).outerWidth();
            if (!widest)
                widest = currentwidth;
            else {
                if (currentwidth > widest)
                    widest = currentwidth;
            }
        }

        var housespace = $house.innerWidth();
        var columns = helperCalculateColumns(housespace, widest);
        var paddingMultiplier = columns - 1;
        var minimumPadding = 10;
        var startPadding = 0;
        var savedPadding = 0;

        while (savedPadding < minimumPadding) {
            helperGetPadding();
        }

        $items.css('display', 'inline');

        for (var i in linkArr) {
            if (!((parseInt(i) + 1) % columns)) {
                $(linkArr[i]).css(itemcss).css({ 'width': widest + 'px', 'padding': '0 0 2px 0' });
            }
            else {
                $(linkArr[i]).css(itemcss).css({ 'width': widest + 'px', 'padding': '0 ' + savedPadding + 'px 2px 0' });
            }
        }

        //if single item list automate click
        if (linkArr.length == 1) {
            globalOneLink = $(linkArr[0]);
            globalOneLinkInterval = setInterval('$.automateLinkClick()', 200);
        }
    } //end if ($house.length)

    //helper functions
    function helperCalculateColumns(space, column) {
        return (Math.floor(space / column));
    }
    function helperGetPadding() {
        while ((((widest + startPadding) * paddingMultiplier) + widest) < housespace) {
            savedPadding = startPadding;
            startPadding++;
        }
        if (savedPadding < minimumPadding) {
            startPadding = 0;
            savedPadding = 0;
            paddingMultiplier -= 1;
            columns -= 1;
        }
    }

    return this;
}



//Function to swap different panels in the search module
$.fn.swapPanelsByRegionAndSelectors = function (options) {
    var settings = $.extend({
        swapFrom: false,
        swapTo: false,
        runSplitList: false
    }, options);

    if (settings.swapFrom && settings.swapTo) {
        var $region = $(this);
        $region.find(settings.swapFrom).hide();
        $region.find(settings.swapTo).show();
        //if the panel we are swapping to is a list then we run function to split it
        if (settings.runSplitList) {
            $(settings.swapTo).splitHtmlListV2();
        }
        //checking if we need to resize search module
        //$('#search .module').adjustSearchModuleSize();
    }

    return this;
}



// AJAX LOADING ANIMATION
var $load;
$.fn.ajaxLoadingAnimation = function (o) {
    var settings = $.extend({
        src: '/files/prod/ajax-loader.gif',
        css: { 'top': '5px', 'right': '5px' },
        remove: false
    }, o);

    if (settings.remove) {
        $load.remove();
    }
    else {
        var css = { position: 'absolute' };
        $load = $('<img src="' + settings.src + '" alt="" />').css(css).css(settings.css);
        $(this).css({ 'position': 'relative', 'top': '0', 'left': '0' }).append($load);
    }
}

// AJAX LOADING STATUS (animation v.2)
var $status, $update
$.ajaxLoadingStatus = function (o) {
    var s = $.extend({
        create: true,
        update: false,
        text: '',
        src: '/files/prod/ajax-loader.gif',
        modifyOverlay: true
    }, o);
    //creating
    if (s.create && !s.update) {
        if (s.modifyOverlay)
            $.toggleOverylay();
        var h = 60;
        var w = $(window).height();
        var p = ((w / 2) - (h / 2)) + $(document).scrollTop();
        $status = $('<div />').css({
            'background': '#1F1F1F',
            'width': $(document).width() + 'px',
            'height': h + 'px',
            'position': 'absolute',
            'left': 0,
            'top': p + 'px',
            'z-index': parseInt($overlay.css('z-index')) + 1
        }).append($('<div id="statusholder" />').css({
            'float': 'left',
            'position': 'relative'
        })).prependTo('body');
        $status.find('#statusholder').append($('<img src="' + s.src + '" alt="" />').css({
            'display': 'block',
            'float': 'left'
        }));
        $update = $('<div >').html(s.text).css({
            'float': 'left',
            'color': '#fff',
            'margin': '1px 0 0 10px'
        }).appendTo($status.find('#statusholder'));
        $status.find('#statusholder').append('<div class="clear">&nbsp;</div>');
        $status.append('<div class="clear">&nbsp;</div>');

        //positioning statusholder
        var pos = getStatusHolderPosition(
            $status.outerWidth(),
            $status.outerHeight(),
            $status.find('#statusholder').outerWidth(),
            $status.find('#statusholder').outerHeight()
        );

        $status.find('#statusholder').css({
            'left': pos[0] + 'px',
            'top': pos[1] + 'px'
        });
    }
    //updating
    if (s.update) {
        $update.html(s.text);

        //positioning statusholder
        var pos = getStatusHolderPosition(
            $status.outerWidth(),
            $status.outerHeight(),
            $status.find('#statusholder').outerWidth(),
            $status.find('#statusholder').outerHeight()
        );

        $status.find('#statusholder').css({
            'left': pos[0] + 'px',
            'top': pos[1] + 'px'
        });
    }
    //removing
    if (!s.create && !s.update) {
        if ($status != undefined) {
            $status.remove();
            $status = undefined;
        }
        if (s.modifyOverlay)
            $.toggleOverylay();
    }

    //helpers
    function getStatusHolderPosition(w1, h1, w2, h2) {
        var px = (w1 / 2) - (w2 / 2);
        var py = (h1 / 2) - (h2 / 2);
        return [px, py];
    }
}




//COOKIE SET AND GET FUNCTIONS
$.cookieMonster = function (options) {
    var settings = $.extend({
        get: false,
        set: false,
        value: false,
        split: ';',
        totalNumberOfSaves: 5
    }, options);

    //function global
    var exists = false;

    if (settings.set && settings.value) {
        try {
            if ($.readCookie(settings.set)) {
                var cookies = $.readCookie(settings.set);
                var cookieArray = cookies.split(settings.split);

                //checking to see if current search word exists in array
                for (var i in cookieArray) {
                    if (cookieArray[i] == settings.value)
                        exists = true;
                }
                
                if (!exists) {
                    if (cookieArray.length < settings.totalNumberOfSaves) {
                        $.delCookie(settings.set);
                        $.setCookie(settings.set, settings.value + settings.split + cookies, { duration: 30, path: '/', domain: '.hansenkatalogen.se', secure: false });
                    }
                    else {
                        var tempCookie = settings.value;

                        for (i = 0; i < (settings.totalNumberOfSaves - 1); i++) {
                            tempCookie += settings.split + cookieArray[i];
                        }
                        $.delCookie(settings.set);
                        $.setCookie(settings.set, tempCookie, { duration: 30, path: '/', domain: '.hansenkatalogen.se', secure: false });
                    }
                }
            }
            else {
                $.delCookie(settings.set);
                $.setCookie(settings.set, settings.value, { duration: 30, path: '/', domain: '.hansenkatalogen.se', secure: false });
            }

            return $.readCookie(settings.set).split(settings.split);
        }
        catch (e) {
            $.cookieWarning(e);
        }
    }

    if (settings.get) {
        try {
            if ($.readCookie(settings.get))
                return $.readCookie(settings.get).split(settings.split);
            else
                return false;
        }
        catch (e) {
            $.cookieWarning(e);
        }
    }
}

//COOKIE WARNING FUNCTION
$.cookieWarning = function (e) {
    var output = 'Something went wrong while trying to save cookie!\n';
    output += 'If you see this message repeated times and you are sure that you have cookies enabled, please report following error message to Hansen Racing.\n\n';
    output += '----- Error message -----\n';
    output += e.Message + '\n';
    output += '-- Navigator user agent --\n';
    output += navigator.userAgent;
    alert(output);
}



//GET IMAGE FUNCTION
$.getImage = function(o) {
    var img = $.extend({
        urlToApplication: '/admin/public/getimage.aspx?Image=',
        urlToImageFolder: globalImageFolder,
        src: '',
        format: 'jpg',
        width: false,
        height: false,
        crop: false
    }, o);

    var retimg = img.urlToApplication + img.urlToImageFolder + img.src + '&Format=' + img.format;

    if (img.width)
        retimg += '&Width=' + img.width;
    if (img.height)
        retimg += '&Height=' + img.height;
    if (img.crop)
        retimg += '&Crop=' + img.crop;
    
    return retimg;
}



//TOGGLE OVERLAY
var $overlay;
$.toggleOverylay = function (o) {
    var settings = $.extend({
        opacity: 0.6,
        color: '#000',
        lock: true
    }, o)

    if ($overlay) {
        if (settings.lock)
            $(window).unbind('scroll'); //unlocking scroll
        $overlay.remove();
        $overlay = undefined;
    }
    else {
        var cs = [$(document).scrollLeft(), $(document).scrollTop()]; //getting current scroll position
        if (settings.lock)
            $(window).bind('scroll', { pos: cs }, scrollLock); //locking scroll

        $overlay = $('<div>&nbsp;</div>').css({
            'position': 'absolute',
            'left': '0',
            'top': '0',
            'width': $(document).width() + 'px',
            'height': $(document).height() + 'px',
            'background': settings.color,
            'filter': 'alpha(opacity=' + (settings.opacity * 100) + ')',
            '-moz-opacity': settings.opacity,
            '-khtml-opacity': settings.opacity,
            'opacity': settings.opacity,
            'z-index': '1000'
        }).prependTo('body');
    }

    function scrollLock(e) {
        $(window).scrollLeft(e.data.pos[0]).scrollTop(e.data.pos[1]);
    }
}



//FUNCTION TO KEEP TRACK WETHER TO SHOW VAT PRICE OR NOT
$.fn.isShowPriceWithVAT = function () {
    var cookieName = 'isShowPriceWithVAT';
    var readCookie = $.cookieMonster({ get: cookieName });
    var $pricenovat = $('.pricewithnovat');
    var $pricevat = $('.pricewithvat');

    if (readCookie) {
        globalShowPriceWithVat = convertToBool(readCookie[0]);
    }
    else {
        globalShowPriceWithVat = $.cookieMonster({ set: cookieName, value: 'false', totalNumberOfSaves: 1 });
        globalShowPriceWithVat = convertToBool(globalShowPriceWithVat[0]);
    }

    if (globalShowPriceWithVat) {
        $(this).attr('checked', 'checked');
        $pricenovat.show();
        $pricevat.hide();
    }
    else {
        $(this).attr('checked', '');
        $pricenovat.hide();
        $pricevat.show();
    }

    $(this).click(function () {
        $pricenovat = $('.pricewithnovat');
        $pricevat = $('.pricewithvat');

        if (this.checked) {
            $pricenovat.show();
            $pricevat.hide();
            $.cookieMonster({ set: cookieName, value: 'true', totalNumberOfSaves: 1 });
            $(".netPriceChk").attr('checked', 'checked');
            globalShowPriceWithVat = true;
        }
        else {
            $pricenovat.hide();
            $pricevat.show();
            $.cookieMonster({ set: cookieName, value: 'false', totalNumberOfSaves: 1 });
            $(".netPriceChk").removeAttr('checked');
            globalShowPriceWithVat = false;
        }
    });
}
$.updateIsShowPriceWithVAT = function () {
    var cookieName = 'isShowPriceWithVAT';
    var readCookie = $.cookieMonster({ get: cookieName });

    if (readCookie) {
        globalShowPriceWithVat = convertToBool(readCookie[0]);
    }
    else {
        globalShowPriceWithVat = $.cookieMonster({ set: cookieName, value: 'false', totalNumberOfSaves: 1 });
        globalShowPriceWithVat = convertToBool(globalShowPriceWithVat[0]);
    }
}
//helpers
function convertToBool(b) {
    if (typeof b === "string") {
        if (b.toLowerCase() == 'true')
            b = true;
        else if (b.toLowerCase() == 'false')
            b = false;
        return b;
    }
    else if (typeof b === "boolean") {
        return b;
    }
    return false;
}



//FUNCTION TO KEEP TRACK ON USER STATES
$.setUserState = function () {
    user = {
        auth: false,
        netprice: false
    };
    //checking if user is logged in
    if ($('#userAuth').val() == 'true') {
        user.auth = true;
    }
    //checking if user can see net price
    if ($('#userNet').val() == 'true') {
        user.net = true;
    }
}




//FUNCTION TO FORCE CACHE
$.forceCache = function () { var ft = new Date(); return ft.getFullYear().toString() + ft.getMonth().toString() + ft.getDate().toString() + ft.getHours().toString() + ft.getMinutes().toString() + ft.getMilliseconds().toString(); ft = undefined; }


var $timeout;
$.fn.timerWarning = function (o) {
    var settings = $.extend({
        src: '/files/prod/ajax-loader.gif',
        css: { 'top': '5px', 'right': '5px' },
        remove: false
    }, o);

    if (settings.remove) {
        $timeout.remove();
    }
    else {
        var css = { position: 'absolute' };
        $timeout = $('<img src="' + settings.src + '" alt="" />').css(css).css(settings.css);
        $(this).css({ 'position': 'relative', 'top': '0', 'left': '0' }).append($timeout);
    }
}


// AJAX LOADING STATUS (animation v.2)
var $timerstatus, $timerupdate
$.timerWarning = function (o) {
    var s = $.extend({
        create: true,
        update: false,
        text: '',
        buttontext: '',
        buttonevent: function() {},
        modifyOverlay: true
    }, o);
    //creating
    if (s.create && !s.update) {
        if (s.modifyOverlay)
            $.toggleWarningOverylay();
        var h = 80;
        var w = $(window).height();
        var p = ((w / 2) - (h / 2)) + $(document).scrollTop();
        $timerstatus = $('<div />').css({
            'background': '#1F1F1F',
            'width': $(document).width() + 'px',
            'height': h + 'px',
            'position': 'absolute',
            'left': 0,
            'top': p + 'px',
            'z-index': parseInt($warningOverlay.css('z-index')) + 1
        }).append($('<div id="statusholder" />').css({
            'float': 'left',
            'position': 'relative'
        })).prependTo('body');
        $timerupdate = $('<div >').html(s.text).css({
            'color': '#fff',
            'margin': '1px 0 0 10px'
        }).appendTo($timerstatus.find('#statusholder'));
        $timerupdate = $('<input type="button" />')
        .val(s.buttontext)
        .click(s.buttonevent)
        .css({
            'display': 'block',
            'left': '50%',
            'margin-left': '-35px',
            'margin-top': '5px',
            'position': 'absolute',
            'width': '70px'
        })
        .appendTo($timerstatus.find('#statusholder'));
        $timerstatus.find('#statusholder').append('<div class="clear">&nbsp;</div>');
        $timerstatus.append('<div class="clear">&nbsp;</div>');

        //positioning statusholder
        var pos = getStatusHolderPosition(
            $timerstatus.outerWidth(),
            $timerstatus.outerHeight(),
            $timerstatus.find('#statusholder').outerWidth(),
            $timerstatus.find('#statusholder').outerHeight()
        );

        $timerstatus.find('#statusholder').css({
            'left': pos[0] + 'px',
            'top': pos[1] + 'px'
        });
    }
    //updating
    if (s.update) {
        $timerupdate.html(s.text);

        //positioning statusholder
        var pos = getStatusHolderPosition(
            $timerstatus.outerWidth(),
            $timerstatus.outerHeight(),
            $timerstatus.find('#statusholder').outerWidth(),
            $timerstatus.find('#statusholder').outerHeight()
        );

        $timerstatus.find('#statusholder').css({
            'left': pos[0] + 'px',
            'top': pos[1] + 'px'
        });
    }
    //removing
    if (!s.create && !s.update) {
        $timerstatus.remove();
        $timerstatus = undefined;
        if (s.modifyOverlay)
            $.toggleWarningOverylay();
    }

    //helpers
    function getStatusHolderPosition(w1, h1, w2, h2) {
        var px = (w1 / 2) - (w2 / 2);
        var py = (h1 / 2) - (h2 / 2);
        return [px, py];
    }
}


//TOGGLE OVERLAY
var $warningOverlay;
$.toggleWarningOverylay = function (o) {
    var settings = $.extend({
        opacity: 0.6,
        color: '#000',
        lock: true
    }, o)

    if ($warningOverlay) {
        if (settings.lock)
            $(window).unbind('scroll'); //unlocking scroll
        $warningOverlay.remove();
        $warningOverlay = undefined;
    }
    else {
        var cs = [$(document).scrollLeft(), $(document).scrollTop()]; //getting current scroll position
        if (settings.lock)
            $(window).bind('scroll', { pos: cs }, scrollLock); //locking scroll

        $warningOverlay = $('<div>&nbsp;</div>').css({
            'position': 'absolute',
            'left': '0',
            'top': '0',
            'width': $(document).width() + 'px',
            'height': $(document).height() + 'px',
            'background': settings.color,
            'filter': 'alpha(opacity=' + (settings.opacity * 100) + ')',
            '-moz-opacity': settings.opacity,
            '-khtml-opacity': settings.opacity,
            'opacity': settings.opacity,
            'z-index': '1000'
        }).prependTo('body');
    }

    function scrollLock(e) {
        $(window).scrollLeft(e.data.pos[0]).scrollTop(e.data.pos[1]);
    }
}

var $logoutTimer, $warningTimer;
$.startTimer = function () {
    clearTimeout($logoutTimer)
    clearTimeout($warningTimer)
    var timeoutInSeconds = $sessionTimeout * 60;
    $warningTimer = setTimeout($.showTimeoutWarning, (timeoutInSeconds - 40) * 1000);
    $logoutTimer = setTimeout($.showLoggedoutUser, (timeoutInSeconds - 10) * 1000);
}



$.showTimeoutWarning = function () {
    $.timerWarning({
        text: $.tr('Du håller på att bli automatiskt utloggad på grund inaktivitet. Klicka på Aktivera för att fortsätta vara inloggad.'),
        buttontext: $.tr('Aktivera'),
        buttonevent: function () { $.activateSession(); }
    });
}

$.activateSession = function () {
    clearTimeout($logoutTimer)
    $.timerWarning({ create: false, update: false });
    $.ajaxLoadingStatus({ text: $.tr('Aktiverar din session, var god vänta.') });
    $.ajax({
        type: 'GET',
        contentType: 'application/json',
        url: '/webservices/session.svc/GetTimeout',
        dataType: 'json',
        processData: false,
        success: function () {
            $.startTimer();
            $.ajaxLoadingStatus({ create: false, update: false });
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            $.showErrorMessage($.tr('Någonting gick fel när sidan försökte aktivera sessionen!'));
        }
    });
}

$.showLoggedoutUser = function () {
    $.timerWarning({ create: false, update: false });
    $.timerWarning({
        text: $.tr('Du har blivit automatiskt utloggad på grund inaktivitet. Klicka på Ladda om för att ladda om sidan.'),
        buttontext: $.tr('Ladda om'),
        buttonevent: function () { $.logoutUser(); }
    });
}

$.logoutUser = function () {
    $.ajaxLoadingStatus({ text: $.tr('Laddar om sidan, var god vänta.') });
    $.ajax({
        type: 'GET',
        contentType: 'application/json',
        url: '/webservices/session.svc/Abandon',
        dataType: 'json',
        processData: false,
        success: function () {
            $.timerWarning({ create: false, update: false });
            $.reloadAfterLogout();
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            // still reload page if something goes wrong
            $.reloadAfterLogout();
        }
    });
}

$.reloadAfterLogout = function () {
    if (location.href.indexOf("StartSida.aspx") != -1) {
        window.location.reload();
    }
    else {
        location.href = gBaseUrl + "StartSida.aspx#" + $.forceCache();
    }
}

$.showErrorMessage = function (message) {
    location.href = gBaseUrl + 'Felmeddelande.aspx?ErrorMessage=' + escape(message);
}

//FUNCTION TO RUN WHEN AJAX RETURNS ERROR OR SUCCESS FALSE
$.ajaxErrorHandler = function (p) {
    if (p == null || p.d == null) {
        $.showErrorMessage($.tr('Ett fel uppstod när sidan skulle laddas.'));
        //location.href = gBaseUrl + 'Felmeddelande.aspx?ErrorMessage=' + escape($.tr('Ett fel uppstod när sidan skulle laddas.'));
        return false;
    }
    else if (!p.d.Success) {
        $.showErrorMessage(p.d.ErrorMessage);
        return false;
    }
    else {
        return true;
    }
}

//HTML IT AND DE-HTLM IT
function htmlit(s) {
    s = s.replace(/( )/g, '%20');
    s = s.replace(/(å)/g, '%E5');
    s = s.replace(/(ä)/g, '%E4');
    s = s.replace(/(ö)/g, '%F6');
    s = s.replace(/(Å)/g, '%C5');
    s = s.replace(/(Ä)/g, '%C4');
    s = s.replace(/(Ö)/g, '%D6');

    return s;
}

function dehtmlit(s) {
    s = s.replace(/(\%20)/g, ' ');
    s = s.replace(/(\%E5)/g, 'å');
    s = s.replace(/(\%E4)/g, 'ä');
    s = s.replace(/(\%F6)/g, 'ö');
    s = s.replace(/(\%C5)/g, 'Å');
    s = s.replace(/(\%C4)/g, 'Ä');
    s = s.replace(/(\%D6)/g, 'Ö');

    return s;
}




//ADD RETURN TO URL ON LINK WHEN CLICKED
$.fn.addReturnUrl = function (check) {
    var isScriptedMark = 'ism';
    var linkurl, currenturl, newurl, prefix;

    $(this).each(function () {
        if (!$(this).hasClass(isScriptedMark)) {
            $(this).click(function () {
                linkurl = $(this).attr('href');
                currenturl = gBaseUrl + "StartSida.aspx" + location.hash.replace("#", "_H_") + post_hash_to_product_detail;
                newurl = linkurl + (linkurl.match(/(\?)/) ? '&' : '?') + 'ReturnUrl=' + currenturl;
                $(this).attr('href', newurl);

                return true;
            });
            $(this).addClass(isScriptedMark);
        }
    });
}

$.fn.getReturnUrl = function () {
    if (location.href.match('ReturnUrl=')) {
        var loc = location.href;
        var ret = loc.substring(loc.lastIndexOf('ReturnUrl=') + ('ReturnUrl=').length);
        if (location.hash)
            ret = ret.substring(0, ret.indexOf('#'));
        ret = ret.replace('_H_', '#');
        $(this).attr('href', ret);
    }
}

function generateReturnUrl() {
    
}

function changeLanguage() {
    return confirm("Varning/Warning\n\nNär du byter språk kommer din kundkorg att rensas automatiskt.\nVill du fortsätta?\n\nWhen you change language your order basket will be automatically emptied.\nDo you wish to proceed?");
}

function executeIfDefined(fn) {
    if (fn === undefined)
        return;
    fn();
    fn = undefined;
}

