﻿/// <reference path="jquery-1.3.2.js" />
/// <reference path="libCore.js" />
/// <reference path="text/ajax_js.Sv.js" />

var txtAjax = lib.text.ajax_js;

// Ajaxvariabler som kan vara bra att ha
var months = new Array();
months[0] = txtAjax.months.m1;
months[1] = txtAjax.months.m2;
months[2] = txtAjax.months.m3;
months[3] = txtAjax.months.m4;
months[4] = txtAjax.months.m5;
months[5] = txtAjax.months.m6;
months[6] = txtAjax.months.m7;
months[7] = txtAjax.months.m8;
months[8] = txtAjax.months.m9;
months[9] = txtAjax.months.m10;
months[10] = txtAjax.months.m11;
months[11] = txtAjax.months.m12;

// Rundade hörn
var curvySettings = {
    tl: { radius: 7 },
    tr: { radius: 7 },
    bl: { radius: 7 },
    br: { radius: 7 },
    antiAlias: true,
    autoPad: true,
    validTags: ["div"]
}

// Här lägger jag inställningar för vad de olika kunderna har för "rättigheter", hackas detta kollas det även i servern
//var ContractSettings =
//{
//    CanChangeSenderName: false
//};

var isIE = false;

// funktioner som ska köras direkt vid sidladdning
// Kollar webbläsare
$.each(jQuery.browser, function(i) {
    if ($.browser.msie)
        isIE = true;
});

function getCurrentPage() {
    var sPath = window.location.pathname;
    var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
    if (sPage === 'Message.aspx'    // UGLY
        && window.location.search === '?type=2')
        sPage = "Survey.aspx";
    return sPage;
}

function setCurrentMenuItemActive() {
    var objFind = "";
    var pageName = getCurrentPage();
    
    switch (pageName) {
        case "ChooseService.aspx":
            objFind = "#ctl00_hlStart";
            break;
        case "Org.aspx":
            objFind = "#ctl00_hlOrg";
            break;
        case "Message.aspx":
            objFind = "#ctl00_hlMessage";
            break;
        case "Contests.aspx":
            objFind = "#ctl00_hlContest";
            break;
        case "Survey.aspx":
            objFind = "#ctl00_hlSurvey";
            break;
        case "SalesAdmin.aspx":
            objFind = "#ctl00_hlSalesAdmin";
            break;
        case "Help.aspx":
            objFind = "#ctl00_hlHelp";
            break;
        case "MyAccount.aspx":
            objFind = "#ctl00_hlMyAccount";
            break;
        default:
            objFind = "";
    }

    if (objFind != "") {
        $("#tableMenu").find(objFind).parent("td").removeClass("menuItem");
        $("#tableMenu").find(objFind).parent("td").addClass("menuItemActive");
        //$("#tableMenu").find(objFind).parent("td")[0].className = "menuItemActive";
    }
}

function applyCurvyCorners() {
    var curvycornersObj = new curvyCorners(curvySettings, "divRound");
    curvycornersObj.applyCornersToAll();    
}

/// target = Den panel eller knapp som man vill använda (knapp ej klarbyggd)
/// allButtons = Om true, tar även dolda knappar
function applyScaleButtons(target, allButtons) {
    var Location = $();
    if (target != undefined
        && target != null) {
        Location = $(target);
    }
    if (Location != null) {
        var Buttons = null;
        if (!allButtons)
            Buttons = Location.find(":submit:visible, :button:visible");
        else
            Buttons = Location.find(":submit, :button");
        if (Buttons != null) {
            for (var i = 0; i < Buttons.length; i++) {
                if (!$(Buttons[i]).data('scaleApplied')) {
                    $(Buttons[i]).data('scaleApplied', true)
                    $(Buttons[i]).data('hidden', false);
                    $(Buttons[i]).wrap('<div></div>');
                    $(Buttons[i]).before("<div class=\"btnLeft\"></div>");
                    $(Buttons[i]).after("<div class=\"btnRight\" style=\"clear: right;\"></div>");
                }
                if ($(Buttons[i]).is(':disabled'))
                    disableScaleButtons($(Buttons[i]), true);
            }
        }
    }
}

/// target  = knappen
/// hide    = om den ska döljas eller ej
/// (speed) = valfritt, om man vill ha en slideeffekt, anger man hastighet här
function hideScaleButtons(target, hide, speed) {
    if (hide) {
        if (speed == undefined
            || speed == null)
            $(target).parent().css('display', 'none');
        else
            $(target).parent().slideUp(speed);
        $(target).data('hidden', true);
    }
    else {
        $(target).css('display', 'block');
        if (speed == undefined
            || speed == null)
            $(target).parent().css('display', 'block');
        else
            $(target).parent().slideDown(speed);
        $(target).data('hidden', false);            
    }
}

function disableScaleButtons(target, disabled) {
    if (disabled) {
        $(target).parents('div:first').addClass('btnDisabled');
        $(target).attr('disabled', 'disabled');
    }
    else {
        $(target).parents('.btnDisabled').removeClass('btnDisabled');
        $(target).removeAttr('disabled');        
    }
}

function FAQToggle(sender) {
    if ($(sender).next().is(':hidden'))
        $(sender).next().slideDown('fast', function() {
            $(sender).parents('div .FAQContainer').scrollTo(sender, 1000, { margin: true });
        });
    else
        $(sender).next().slideUp('fast');

    $(sender).toggleClass('FAQHead_open');
}

// Till för om man vil köra timerfunktionen, så sparas starttiden här
var debugTimerStart = null;
// Ställ in denna variabeln för att se info om sessionen
var displaySessionInfo = true;

// Gör det lite enklare att posta ett ajaxanrop
function SendAjax(uri, data, success, error) {
    $.ajax({
        async: true,        
        type: "POST",
        url: uri,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: data,
        success: success,
        error: error
    });
}

// Meddelanderutans huvud, innehåll, inställningar
// {
//      button : true,
//      delayHide : 1500,
//      loader: false
//  }
// Obs, kan se tokigt ut om man både har en loading och en knapp.
function ModalPopup(head, content, options) {
    applyScaleButtons($('#popupwindow'), true);

    // Stoppar eventuell timer
    $(this).stopTime('modalHide');
    if (options != undefined
        || options != null) {
        if (options.button != undefined
            || options.button != null) {
            if (options.button)
                $('#popupwindow #body #close').css('display', 'block');
            else
                $('#popupwindow #body #close').css('display', 'none');
        }
        else
            $('#popupwindow #body #close').css('display', 'block');

        hideScaleButtons($('#popupwindow').find('input[type=button]'), false);

        if (options.delayHide != undefined
            || options.delayHide != null) {
            if (options.delayHide > 0) {
                $(this).oneTime(options.delayHide, 'modalHide' , function() {
                    $('#popupwindow').jqmHide();
                });
            }
            else {
                $('#popupwindow').jqmHide();
            }
        }

        if (options.loader != undefined
            || options.loader != null) {
            if (options.loader)
                $('#loader').css('display', 'block');
            else
                $('#loader').css('display', 'none');
        }
        else
            $('#loader').css('display', 'none');
    }
    else {
        hideScaleButtons($('#popupwindow').find('input[type=button]'), false);
        $('#loader').css('display', 'none');
    }      
        
    $('#popupwindow').find('#head').html(head);
    $('#popupwindow').find('#body #cont').html(content);
    $('#popupwindow').jqm({ 'modal': true });
    $('#popupwindow').jqmShow();
}
// Visa laddarutan 
function ModalLoadingShow() {
    //$('#loadingWindow').find('#loadingHead').html(head);
    //$('#loadingWindow').find('#LoadingContents').html(content);
    $('#loadingWindow').jqm({ modal: true, toTop: true });
    $('#loadingWindow').jqmShow();
}
// Dölj laddarutan 
function ModalLoadingHide() {
    $('#loadingWindow').jqmHide();
}

// ToDo. Ska kunna spara alla tabbarna som objekt och kunna manipulera dem i efterhand, typ ändra events och byta namn på dem

// tabArray =   array med strängar som talar om vad alla tabbar ska heta eller
//              array med tabObjekt (hur dessa ser ut finns längst ner på sidan)
// tabLocation= En div med två sivar i sig, en med .Tabs och en med .Panels
// startIndex = Vilket index som ska vara valt direkt efter att tabarna är skapade
function CreateTabs(tabArray, tabLocation, startIndex) {
    if (tabLocation != null) {
        // Hämtar platsen där alla tabbar ska placeras 
        // (ifall flera finns, ser jag till att bara den första hämtas)
        var Tabholder = '';
        if($(tabLocation).find('.Tabs').length > 0)
            Tabholder = $(tabLocation).find('.Tabs')[0];
        if (typeof (Tabholder) == 'object') {
            // Plockar bort alla tabbar som redan finns
            $(Tabholder).find('.Tab').unbind('click');
            $(Tabholder).html('');

            $(Tabholder).append('<div class="Tab Tab_l"></div>');

            if (tabArray.length > 0) {
                $.each(tabArray, function(i, currTab) {
                    var tabName = '';
                    if (typeof (currTab) == 'string')
                        tabName = currTab;
                    else if (typeof (currTab) == 'object')
                        tabName = currTab.tabName;
                    if (i > 0) {
                        $(Tabholder).append('<div class="Tab Tab_split"></div>');
                    }
                    var tab = '<div id="tabId' + i + '" class="Tab Tab_c"';
                    if (typeof (currTab) == 'object'
                        && currTab.disabled != null
                        && currTab.disabled)
                        tab += ' disabled="disabled" ';
                    tab += '>' + tabName + '</div>';
                    tab = $(tab);
                    if (typeof (currTab) == 'object') {
                        if (currTab.tabWidth != null)
                            $(tab).css('width', currTab.tabWidth);
                        if (currTab.beforeLeave != undefined)
                            $(tab).data('beforeLeave', currTab.beforeLeave);
                    }
                    // $(tab).prepend('<div style="height : 0px; width : 0px;"><div style="border : solid 1px black; width : 100px; position : relative; margin-top : -15px; background-color : white;">Text</div></div>');

                    if (typeof (currTab) == 'object'
                        && currTab.disabled != null
                        && currTab.disabled)
                        $(tab).data('disabled', true);

                    $(tab).click(function() {
                        if (!this.disabled) {
                            // Kollar om vi har någon funktion kopplad till den valda tebben som ska köras inann den lämnas
                            var selectedTab = $(tabLocation).find('#tabId' + SelectedTab(tabLocation) + ':first')
                            var beforeLeave = $(selectedTab).data('beforeLeave');
                            if (beforeLeave != null
                                && typeof (beforeLeave) == 'function') {
                                var result = beforeLeave();
                                if (result != undefined
                                    && result == false)
                                    return;
                            }

                            if (typeof (currTab) == 'object'
                            && currTab.beforeChange != null
                            && typeof (currTab.beforeChange) == 'function')
                                currTab.beforeChange(SelectedTab(tabLocation));
                            SelectTab(tabLocation, i);
                            if (typeof (currTab) == 'object'
                            && currTab.autoFocus != null)
                                $(currTab.autoFocus).focus();
                            if (typeof (currTab) == 'object'
                            && currTab.onClick != null
                            && typeof (currTab.onClick) == 'function')
                                currTab.onClick(i);
                        }
                    });
                    $(Tabholder).append(tab);
                    if (currTab.hidden != null
                        && currTab.hidden)
                        ToggleTab(Tabholder, i, true)
                });
            }

            $(Tabholder).append('<div class="Tab Tab_r"></div>');
            $(Tabholder).append('<div style="clear : left; height : 0px;"></div>');
            if(!AreTabsVisible($(Tabholder)))
                $(Tabholder).find('.Tab_l, .Tab_r').css('display', 'none');

            // Ser till att en tab väljs
            if (startIndex != null)
                ChangeTab(tabLocation, startIndex);
            else
                ChangeTab(tabLocation, '0');
        }
    }
}

// Kollar om någon av tabbarna är synliga
function AreTabsVisible(tabLocation) {
    var tabs = $(tabLocation).find('.Tab_c');
    for (var i = 0; i < tabs.length; i++) {
        if ($(tabs[i]).css('display') != 'none')
            return true;
    }
    return false;
}

// Denna funktionen ska köras när man ska byta tab.
// Ska se till att funktionerna och autofokusen ska fungera ordentligt
function ChangeTab(tabLocation, tabIndex) {
    var tab = $(tabLocation).find('.Tabs:first .Tab_c:eq(' + tabIndex + ')');
    var wasDisabled = tab.data('disabled');
    if(wasDisabled)
        DisableTab(tabLocation, tabIndex, false);
    tab.click();
    if(wasDisabled)
        DisableTab(tabLocation, tabIndex, true);
}

// Tabindex börjar på 0
function SelectTab(tabLocation, tabIndex) {
    // Hämtar en array med Tabbar och alla Paneler
    var TabContainer = $(tabLocation).find('.Tabs:first');
    var TabPanels = $(tabLocation).find('.Panels:first').children('.Panel');
   
    // Nollställer alla tabbar så bara en blir vald
    $(TabContainer).find('.Tab_l_sel').removeClass('Tab_l_sel')
    $(TabContainer).find('.Tab_c_sel').removeClass('Tab_c_sel')
    $(TabContainer).find('.Tab_split_sel').removeClass('Tab_split_sel')
    $(TabContainer).find('.Tab_r_sel').removeClass('Tab_r_sel')

    // Väljer den valda tabben
    if (tabIndex != '0') {
        var isFirst = true;
        var isLast = true;
        // Kollar igenom alla tabbar före för att kolla om denna är den första synliga
        // Ska isåfall "aktivera" Tab_l
        for (var i = 0; i < tabIndex; i++) {
            if ($(TabContainer).find('#tabId' + i).css('display') == 'block') {
                isFirst = false;
                break;
            }
        }
        // Gör samma som ovan fast baklänges för att se om den är den sista synliga
        for (var i = $(TabContainer).find('.Tab_c').length; i > tabIndex; i--) {
            if ($(TabContainer).find('#tabId' + i).css('display') == 'block') {
                isLast = false;
                break;
            }
        }
        
        if (isFirst)
            $(TabContainer).find('.Tab_l').addClass('Tab_l_sel');
        if (isLast)
            $(TabContainer).find('.Tab_r').addClass('Tab_r_sel');            
        $(TabContainer).find('#tabId' + tabIndex).prev().addClass('Tab_split_sel');
    }
    else
        $(TabContainer).find('#tabId' + tabIndex).prev().addClass('Tab_l_sel');
    $(TabContainer).find('#tabId' + tabIndex).addClass('Tab_c_sel');
    if (tabIndex == TabPanels.length - 1)
        $(TabContainer).find('#tabId' + tabIndex).next().addClass('Tab_r_sel');

    if (TabPanels.length > 1) {
        // Stänger alla paneler
        $.each(TabPanels, function(i, panel) {
            if (i != tabIndex)
                $(panel).css('display', 'none');
        });
        // öppnar den valda panelen
        $(TabPanels[tabIndex]).css('display', 'block');
        applyScaleButtons(TabPanels[tabIndex]);
    }
}

// Tabindex börjar på 0 (hanterar inte ännu om man vill dölja första eller sista
// Fungerar inte 100, men ganska bra (när man döljer och visar de första, sista tabbarna kan slut och startbilden bete sig roligt ibland)
function ToggleTab(tablocation, tabIndex, hide) {
    if ($(tablocation).find('.Tabs').length > 0)
        tablocation = $(tablocation).find('.Tabs:first');
    if (hide) {
        $(tablocation).find('#tabId' + tabIndex + ':first').css('display', 'none')
        if (tabIndex > 0) {
            $(tablocation).find('#tabId' + tabIndex + ':first').prev().css('display', 'none');
            if ($(tablocation).find('#tabId' + (tabIndex + 1)).length == 0)
                $(tablocation).find('#tabId' + tabIndex).next().removeClass('Tab_r_sel');
        }
        else {
            $(tablocation).find('#tabId' + tabIndex + ':first').nextAll('.Tab_c:visible:first').prev().css('display', 'none');
            $(tablocation).find('#tabId' + tabIndex + ':first').prev().removeClass('Tab_l_sel');
        }
        // Kollar genom hur många tabbar som är synliga, om inga är synliga så döljs fram och första och sista bilden bland tabbarna
        if (!AreTabsVisible($(tablocation)))
            $(tablocation).find('.Tab_l, .Tab_r').css('display', 'none');
    }
    else {
        $(tablocation).find('#tabId' + tabIndex + ':first').css('display', 'block')
        if ($(tablocation).find('.Tab_c:visible').length > 1) {
            if (tabIndex > 0)
                $(tablocation).find('#tabId' + tabIndex + ':first').prev().css('display', 'block');
            else
                $(tablocation).find('#tabId' + tabIndex + ':first').nextAll('.Tab_c:visible:first').prev().css('display', 'block');
        }
        if ($(tablocation).find('.Tab_l').css('display') == 'none')
            $(tablocation).find('.Tab_l, .Tab_r').css('display', 'block');
    }
}

// Tabindex börjar på 0 (hanterar inte ännu om man vill dölja första eller sista
function DisableTab(tablocation, tabIndex, disabled) {
    if (disabled) {
        $(tablocation).find('#tabId' + tabIndex + ':first').attr('disabled', 'disabled');
        $(tablocation).find('#tabId' + tabIndex + ':first').data('disabled', true);
    }
    else {
        $(tablocation).find('#tabId' + tabIndex + ':first').removeAttr('disabled');
        $(tablocation).find('#tabId' + tabIndex + ':first').data('disabled', false);
    }
}

// Tabindex börjar på 0 (hanterar inte ännu om man vill dölja första eller sista
function ChangeTabText(tablocation, tabIndex, newtext) {
    $(tablocation).find('#tabId' + tabIndex + ':first').html(newtext);
}

function SelectedTab(tabLocation) {
    if ($(tabLocation).find('.Tabs .Tab_c_sel').length > 0)
        return $(tabLocation).find('.Tabs .Tab_c_sel')[0].id.substring(5);
    return -1;
}

/// Visar en gul notifikationslist ovanför den öppna panelen
/// message = Meddelandet som ska visas
/// options = inställningar för fördröjningar m.m. (ej definerad ännu)
function DisplayPanelNotification(tabLocation, message, options) {
    var $panel = tabLocation.find('.Panels:first').css('position', 'relative');
    var $notification = $panel.prepend('<div class="notification" style="display : none; position : absolute; top : 0px; left : 0px; width : 100%;"><div><div>' + message + '</div></div></div>').find('.notification:first');
    if (tabLocation.find('.notification').length > 1)
        tabLocation.find('.notification:eq(1)').parent().animate({ marginTop: '0px' }, 'slow');
    var PanelPadding = $panel.css('padding');
    $notification.wrap('<div style="margin-top : -' + PanelPadding + '; min-height : 10px; width : ' + $panel.width() + ';"></div>');
    $notification.slideDown('slow', function() {
        $notification.oneTime(2500, 'notification', function() {
            $notification.slideUp('slow', function() {
                $notification.parent().remove();
            });
        });
    });
}

// Exempel på hur ett tabObjekt kan se ut
//{   'tabName' : 'namn',
//    'tabHover' : 'hovernamn',
//    'tabWidth: '100px',
//    'hidden' : true,
//    'disabled' : false,               // Anger om knappen ska synas, men vara inaktiverad (Den går inte att klicka på då)
//    'autoFocus' : null,               // Namn på det objekt som man vill att focus ska sättas till efter att tabben är klickad på
//    'onCreate' : function(){},
//    'beforeLeave' : function(){},     // Körs inann man lämnar den aktuella tabben
//    'beforeChange' : function(index), // körs före taben byts,           index = Vald Tab före byte
//    'onClick' : function(index){}     // körs när klickeventet är klart  index = Vald Tab efter byte
//}

// Ser till att avsändarnamnet blir giltigt
function CheckSenderName(event) {
    var success = {
        result: true,
        message: ''
    };
    var validChars = '';
    var iKeyCode, strKey;

    var sender = event.srcElement ? event.srcElement : event.target;

    if (sender.value.length == 0)
        validChars = '[A-Za-z0-9\+]';
    else if (sender.value.substr(0, 1) == '+')
        validChars = '[0-9]';
    else
        validChars = '[A-Za-z0-9]';

    if (isIE)
        iKeyCode = event.keyCode;
    else
        iKeyCode = event.which;

    strKey = String.fromCharCode(iKeyCode);

    if (iKeyCode != 8) {   // Kollar så vi inte blockar någon som ska sudda
        if ((sender.value.substr(0, 1) == '+'
            && sender.value.length > 14)
        || (sender.value.substr(0, 1) != '+'
            && sender.value.length > 10)) {
            success.result = false;
            success.message = txtAjax.CheckSenderName.failMax;
        }
        else if (!strKey.match(validChars)) {
            success.result = false;
            if (iKeyCode == 32)
                strKey = txtAjax.CheckSenderName.failInvalidSpace;
            success.message = strKey + ' ' + txtAjax.CheckSenderName.failInvalid;
        }
    }
    if (!success.result) {
        ShowNotification(sender, success.message);
        return success.result;
    }
}

// Ser till att ett telefonnummer är korrekt formaterat
function CheckPhoneNo(event) {
    var success = {
        result: true,
        message: ''
    };
    var validChars = '';
    var iKeyCode, strKey;
    
    validChars = '[0-9\+]';

    if (isIE)
        iKeyCode = event.keyCode;
    else
        iKeyCode = event.which;

    var sender = event.srcElement ? event.srcElement : event.target;        
    
    strKey = String.fromCharCode(iKeyCode);

    if (iKeyCode != 8) {   // Kollar så vi inte blockar någon som ska sudda
        if (sender.value.length > 13) {
            success.result = false;
            success.message = txtAjax.CheckPhoneNo.failMax;
        }
        else if (!strKey.match(validChars)) {
            success.result = false;
            if (iKeyCode == 32)
                strKey = txtAjax.CheckPhoneNo.failInvalidSpace;
            success.message = strKey + ' ' + txtAjax.CheckPhoneNo.failInvalid;
        }
    }

    if (!success.result) {
        ShowNotification(sender, success.message);
        return success.result;
    }
}

// Lägger wrappers runt alla element med klassen notific, det för att tappa focus när man visar första notificationen
// Notifikationerna fungerar ändå om man inte kör detta, men inte riktigt lika bra
function SetNotificationInputs(target)
{
    var foundItems = [];
    if (target == undefined)
        foundItems = $('.notific');
    else
        foundItems = $(target).find('.notific');

    for (var i = 0; i < foundItems.length; i++) {
        if (!$(foundItems[i]).parent().hasClass('notification'))
            $(foundItems[i]).wrap('<div class="notification"></div>');
    }
}

// Visar en notifikationsruta
// target       = Rutan där notifikationen ska visas (ska vara en input)
// notification = Meddelandet som ska visas i notifikationen
// options      = Inställningar för notifikationsrutan
//  {
//      Kommer senare, men nyt ställa in tider mm.
//  }
function ShowNotification(target, notification, options) {
    // Gör om target till ett jQuery objekt.
    var $target = $(target);
    var wasVisible = $target.parent().find('div').is(':visible');
    var notItm = [];
    if (wasVisible)
        notItm.push('<div>');
    else
        notItm.push('<div style="display : none;">');
    notItm.push('<div>' + notification + '</div>');
    notItm.push('</div>');

    notItm = $(notItm.join(''));
    
    // Kollar om inputen har en notificationdiv omkring sig, lägger annars till en (betyder att man kan tappa focus)
    if (!$target.parent().hasClass('notification'))
        $target.wrap('<div style="width : ' + ($target.attr('clientWidth') + 4) + 'px;" class="notification"></div>');
    
    if ($target.attr('clientWidth') > 0) {
        $target.parent().css('width', ($target.attr('clientWidth') + 4) + 'px');
    }

    $target.next().remove('div');
    $target.after(notItm);

    if (!wasVisible)
        notItm.slideDown('fast', function(event) {
            notItm.oneTime(2500, 'notification', function() {
                notItm.slideUp('fast', function() {
                    notItm.remove();
                });
            });
        });
    else
        notItm.oneTime(2500, 'notification', function() {
            notItm.slideUp('fast', function() {
                notItm.remove();
            });
        });
}

function GetCharsLeft(item, MaxChars, ToObj) {
    if (!MaxChars)
        MaxChars = 1000;
    var text = $(item).val();
    var CharsLeft = (MaxChars - text.length);
    var lineBreaks = text.match(/\n/g);
    if (lineBreaks)
        CharsLeft -= lineBreaks.length;
    if (CharsLeft < 0)
        $(item).val($(item).val().substr(0, MaxChars));
    
    if (ToObj)
        $(ToObj).html(CharsLeft);
    return CharsLeft;
}


// Gammal. Ersatt av lib.Core.EventChecker().startTimer()
// Startar en timer som kollar alla events i systemet.
// Exempelvis om man har fått in några meddelanden som ska visas, om man råkar ha slut på sms
// Den håller även igång sessionen, så man kan vara inloggad länge.
// Framöver kommer den även kontrollera att man inte tappat anslutningen till servern, och isåfall meddea när den kommit tillbaka och göra så man kan logga in igen.
function EventChecker_Start() {

    EventChecker();
    $('#eventChecker').everyTime(5000, function() {
        EventChecker();
    });
}

// Gammal, se ovan...
function EventChecker() {
    SendAjax('wsAjax.asmx/EventChecker',
            JSON.stringify({ Page: location.pathname }),
            function(msg) {
                var response = JSON.parse(msg.d);
                if (response.Success) {
                    // Lägger till Usermessages
                    for (var i = 0; i < response.Data.UserMessages.length; i++) {
                        UserMessage(response.Data.UserMessages[i]);
                    }
                    // Kolla om några meddelandebars ska uppdateras
                    if (response.Data.MessageData.length > 0
                        && updateMessageBars != null)
                        updateMessageBars(response.Data.MessageData);
                }
                else {
                    switch(response.Data){
                        case 'noSession':
                        
                        break;
                    }
                }
            },
            function(err) {
                //ModalPopup('Eventchecker', 'Fel i eventcheckern:<br />' + err.statusText);
            });
}

function SessionKeeper_Start() {
    if (location.hostname.match('live.mobileaction') != null
        || location.hostname.match('teliamobilrespons.mobileaction') != null)
        displaySessionInfo = false;

    if (displaySessionInfo)
        $('#sessionLogger').css('display', 'block');
    else
        $('#sessionLogger').css('display', 'none');
                
    SessionKeeper();
    $('#sessionLogger').everyTime(60000, function() {
        SessionKeeper();
    });

}

function SessionKeeper() {
    SendAjax('wsAjax.asmx/KeepSession',
            JSON.stringify({}),
            function(msg) {
                var response = JSON.parse(msg.d);
                if (response.Success) {
                    if (displaySessionInfo)
                        $('#sessionLogger').html('Aktiv i ' + response.Message + ' minuter');
                    $('#sessionLogger').data('guid', response.Data);
                }
                else
                    if (displaySessionInfo)
                    $('#sessionLogger').html('Sessionen har avslutats');
            },
            function(err) {
                if (displaySessionInfo)
                    $('#sessionLogger').html(err.statusText);
            });
}

function SessionKeeper_End() {
    $('#sessionLogger').stopTime();
}

// Startar eller startar om timern
function TimerStart() {
    if (location.hostname.match('live.mobileaction') != null
        || location.hostname.match('teliamobilrespons.mobileaction') != null
        || location.hostname.match('tmr.mobileaction') != null)
        displaySessionInfo = false;

    if (displaySessionInfo)
        $('#timerLogger').css('display', 'block');
    else
        $('#timerLogger').css('display', 'none');
    debugTimerStart = Date.parse('now');
}
// Visar hur lång tid det gått sedan timern startades
// Om append = true så läggs tiden till i listan, annars tömms listan och den nya tiden visas
function TimerShow(append) {
    var time = Date.parse('now') - debugTimerStart;
    if ($('#timerLogger').length > 0) {
        if (debugTimerStart == null)
            document.getElementById('timerLogger').innerHTML = 'Timern ej startad';
        else {
            if (append == undefined
            || !append)
                document.getElementById('timerLogger').innerHTML = time + 'ms';
            else
                document.getElementById('timerLogger').innerHTML += '<br />' + time + 'ms';
        }
    }
}

// Finns i lib.Core
// Kollar om testObject är ett objekt eller en array
function isArray(testObject) {
    return testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';
}

// Finns även i lib.Core
function ToDate(JsonDate) {
    if (JsonDate != undefined
        || JsonDate != null) {
        var DateValue = parseInt(JsonDate.replace('Date', '').replace('/(', '').replace(')/', ''));
        if (DateValue != NaN)
            return new Date(DateValue);
    }
    return new Date();
}

function CheckMessagesLeft_Start() {
 if (location.hostname.match('live.mobileaction') != null
        || location.hostname.match('teliamobilrespons.mobileaction') != null
        || location.hostname.match('tmr.mobileaction') != null)
        displaySessionInfo = false;

    if (displaySessionInfo)
        $('#messagesLeft').css('display', 'block');
    else
        $('#messagesLeft').css('display', 'none');
    // Kollar om vi har någon maxgräns på antal meddelanden.
    // Struntar i så fall i hela funktionen
    if (ContractSettings.HasMessageLimit) {
        CheckMessagesLeft(false);
        $('#messagesLeft').everyTime(10000, function() {
            CheckMessagesLeft(false);
        });
    }
}

function CheckMessagesLeft(displayed) {
    Data = { Displayed: false };
    if (displayed != undefined)
        Data.Displayed = displayed;
    if (Data.Displayed)
        CheckMessagesLeft_End();

    SendAjax('wsMessage.asmx/CheckMessagesLeft',
            JSON.stringify(Data),
            function(msg) {
                var response = JSON.parse(msg.d);
                if (response.Success) {
                    if (!response.Data.MessagesLeft
                       && !response.Data.AllReadyDisplayed) {
                        ModalPopup(txtAjax.CheckMessagesLeft.msgsEmpty, response.Message);
                        CheckMessagesLeft(true);
                    }
                    $('#messagesLeft').html(response.Data.SentMessages);
                }
            },
            function(err) {
                $('#messagesLeft').html(err.statusText);
            });
}

function CheckMessagesLeft_End() {
    $('#sessionLogger').stopTime();
}