﻿var g_visitorId = -1;
var g_siteId = 0;
var g_planId = 0;
var g_serverUri = GetServerUri();
var g_urlService = g_serverUri + "/LiveChatVisitorHandler.ashx";

var EnumChatAction = {    
    PreChat : 84,
    OfflineMessage : 85
};

var g_interval = 20000;
var g_callId = 0;
var g_callBackIds = [];
var g_garbagePeriod = 60;

/*Utils*/
var $ = function(id) { return document.getElementById(id); };

/* Heart Beat*/
function StartHeartBeatForPreChat() {
    HeartBeatForPreChat();
    setInterval("HeartBeatForPreChat()", g_interval);
}

function StartHeartBeatForOfflineMessage() {
    HeartBeatForOfflineMessage();
    setInterval("HeartBeatForOfflineMessage()", g_interval);
}

function HeartBeatForPreChat() {
    SendActionCallByScript(EnumChatAction.PreChat);
}

function HeartBeatForOfflineMessage() {
    SendActionCallByScript(EnumChatAction.OfflineMessage)
}

/* Send Live Chat Action By Script*/
function SendActionCallByScript(action) {
    var enumAction = action;
    var radomString = Math.round(10000 * Math.random());
    var handleUrl = g_urlService + "?siteId=" + g_siteId + "&action=" + enumAction + "&visitorId=" + g_visitorId + "&callId=" + g_callId + "&r=" + radomString;
    SendWebRequestByScript(handleUrl);
    g_callId++;
}

/* Send Call By Script*/
function SendWebRequestByScript(url) {
    var headLoc = document.getElementsByTagName("head").item(0);
    var scriptObj = document.createElement("script");
    scriptObj.setAttribute("type", "text/javascript");
    scriptObj.setAttribute("src", url);
    scriptObj.setAttribute("id", "lcScript_" + g_callId);
    headLoc.appendChild(scriptObj);
}

/* Get query string from url*/
function UrlQueryString(param, defaultValue) {
    var url = location.href;
    var paramString = url.substring(url.indexOf("?") + 1, url.length).split("&");

    var paramObj = {};
    for (var i = 0; j = paramString[i]; i++) {
        paramObj[j.substring(0, j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=") + 1, j.length);
    }
    
    var returnValue = paramObj[param.toLowerCase()];
    if (typeof (returnValue) == "undefined") {
        return defaultValue;
    }
    else {
        return returnValue;
    }
}

/* Get Server Uri from js url*/
function GetServerUri() {
    var JSProtocol = "";

    var src = location.href;
    var pos = src.indexOf('//');
    if (-1 == pos) { return null; }
    JSProtocol = src.substring(0, pos + 2);
    var srcWithoutProtocol = src.substring(pos + 2);
    pos = srcWithoutProtocol.indexOf('/');
    if (-1 == pos) return JSProtocol + srcWithoutProtocol;
    return JSProtocol + srcWithoutProtocol.substring(0, pos);
}

function GarbageCollection() {
    var headLoc = document.getElementsByTagName("head").item(0);
    for (var i = 0, iMax = g_callBackIds.length; i < iMax; i++) {
        if (g_callBackIds[i] != null && $("lcScript_" + g_callBackIds[i]))
            headLoc.removeChild($("lcScript_" + g_callBackIds[i]));
    }
    var removedItems = g_callBackIds.splice(0, g_callBackIds.length);
}

function HandleException(e, method) {
    if (e && e.message) {
        alert(e.message + " [" + method + "]");
    }
}

function HandleErrorFromServer(errorCode, errorMessage) {
    if (errorCode) {
        var messageToShow = "#" + errorCode + ": " + errorMessage;
        if ($("lblMessage"))
            $("lblMessage").innerHTML = messageToShow;
    }
}

function GetWindowWidth() {
    return window.innerWidth ? window.innerWidth : document.documentElement.clientWidth;
}

function GetWindowHeight() {
    return window.innerHeight ? window.innerHeight : document.documentElement.clientHeight;
}

var g_garbageTimer = setInterval("GarbageCollection()", g_garbagePeriod * 1000);