﻿// ODESYS JScript File

// ---- Constants ----
var INFO_POPUP_DISPLAY_TIME = 5000; // display popup infos 5 seconds
var EVTKEY_TAB = 9;
var EVTKEY_RETURN = 13;

// ---- Attributes ----
var infoPopupCloseTime;
var mainPopupMaximized = false;
var popupFrameTopInfosOpen = false;
var validateCallback;
var dataUpdated = false;
var nbLoadDivDisplays = 0;
var lastMousePosX;
var lastMousePosY;
var normalWidth;
var normalHeight;

// ---- Body onload and Body onunload ----
var onbeforeunloads = new Array();
window.onbeforeunload = bodyOnBeforeUnLoad;

function bodyOnBeforeUnLoad() {
    var onloadResult = null;
    for (var i=0; i < onbeforeunloads.length; i++ ) {
        var result = onbeforeunloads[i]();
        if(result && !onloadResult) {
            onloadResult = result;
        }
    }
    if(onloadResult) {
        return onloadResult;
    }
}

//------------------- MISC METHODS ------------------------
// Redirect to url
function redirectToUrl(newUrl) {
    try {
        window.location = newUrl;
    }
    catch (ex) {}
}

// Logout user
function logoutUser() {
    if (confirm(logoutConfirmLabel)) {
        var result = SessionManager.logoutCurrentUser();
        if (result == true || result == null) {
            redirectToUrl("Default.aspx");
        }
    }
}

//------------------- LOADING DIV METHODS ------------------------
// Display loading div
function displayLoadingDiv() {
    if (nbLoadDivDisplays == 0) {
        $("#loadingDiv").show();
    }
    nbLoadDivDisplays++;
}

// Hide loading div (if display method has been called several times,
// hide only if hide method has been called at least the same number of times)
function hideLoadingDiv() {
    nbLoadDivDisplays--;
    nbLoadDivDisplays = Math.max(nbLoadDivDisplays, 0);
    if (nbLoadDivDisplays <= 0) {
        $('#loadingDiv').hide();
    }
}

//------------------- TOOLTIP METHODS ------------------------
// Display tooltip div on mouse position
function showToolTip(toolTipText) {
    if (toolTipText == "") {
	    return;
    }
    if ($('#tooltip').length == 0 || !$('#tooltip').is(':visible')) {
        $('#tooltip').remove();
        $("<div id='tooltip' style='position:absolute;'></div>").appendTo($(document.body));
        $("#tooltip").html(toolTipText);
        $("#tooltip").css("zIndex", 1000);
        $("#tooltip").show();
    }
    setTooltipPosition();
}

// Set tooltip position according to the mouse position
function setTooltipPosition() {
    if ($("#tooltip").length > 0 && $("#tooltip").is(':visible')) {
        $("#tooltip").css("left", Number(lastMousePosX + 20)+"px");
        $("#tooltip").css("top", Number(lastMousePosY + 15)+"px");
    }
}

// Hide tooltip div
function hideToolTip(){
    if ($('#tooltip').length > 0 && $('#tooltip').is(':visible')) {
	    $('#tooltip').hide();
    }
}

// Auto tooltip on DOM elements that have toolTipText attribute
$(function() {
        $("[tooltiptext]").mousemove(function(ev) {showToolTip($(ev.currentTarget).attr('tooltiptext'));}).mouseout(hideToolTip);
    });

//------------------- EVENT HANDLERS METHODS ------------------------
// recupere les coordonnees de la souris
$(document).mousemove(function(ev) {
	    lastMousePosX = ev.pageX;
	    lastMousePosY = ev.pageY;
	    setTooltipPosition();
    });

//------------------- TOP INFOS POPUP METHODS ------------------------
// open the popupFrameTopInfos popup div (informations popup)
function openPopupFrameTopInfos(screenRequest) {
    // Close if info popup already open
    if (popupFrameTopInfosOpen == true) {
        $('#popupFrameTopInfos').hide();
    }
    else {
        popupFrameTopInfosOpen = true;
        $(window).keyup(function(ev) {
                if (ev.keyCode == 27) {
                    closePopupFrameTopInfos();
                }
            });
    }
    $('#popupFrameContent').html(homeLoadingLabel);
    if (screenRequest == 'getContactInfos') {
        $('#popupFrameContent').load('AjaxHandlers/GetContactInfos.aspx?onlyHtml=true', function() {
                if ($('#mailConName').val() == "") {$('#mailConName').focus();}
                else {$('#mailConMsgContent').focus();}
            });
    }
    else if (screenRequest == 'getSupportInfos') {
        SessionManager.getSupportInfoPopupContent(function(content) {
                $('#popupFrameContent').html(content);
            });
    }
    else if (screenRequest == 'getVersionInfos') {
        SessionManager.getVersionInfoPopupContent(function(content) {
                $('#popupFrameContent').html(content);
            });
    }
    $('#popupFrameTopInfos').show('blind');
}

// close the popupFrameTopInfos popup div (informations popup)
function closePopupFrameTopInfos() {
    if (popupFrameTopInfosOpen == true) {
        $(window).unbind('keyup');
        popupFrameTopInfosOpen = false;
        $('#popupFrameTopInfos').fadeOut();
    }
}

//SEND CONTACT MAIL TO ETT TEAM
function sendContactMail() {
    var validOk = true;
    try {
        validOk = fVal.checkEntireForm();
    }
    catch (ex) {}
    
    if (validOk == true) {
        $('#contactSendButton').html(loadingLabel);
        $('#popupFrameContent').load('AjaxHandlers/GetContactInfos.aspx?onlyHtml=true', { name: + $('#mailConName').val(), firstName: $('#mailConFirstName').val(),
            email: $('#mailConEmail').val(), company: $('#mailConCompany').val(), message: $('#mailConMsgContent').val() });
    }
}

//------------------- INFO POPUP METHODS ------------------------
// Open a popup from an error code
// Send an ajax request to server to get the string according to the error code (in the current language)
// then display it into infoPopup
function openInfoPopupFromErrorCode(errorCode) {
    GuiUtils.getErrorStringFromCode(errorCode, function(errorMessage) {
            openInfoPopup(errorMessage, true);
        });
}

// Retourne vrai si le code renvoyé par ajax est un code de réussite
function isConfirmationResult(ajaxResponse) {
    // le debut de la chaine doit être "ok:"
    return (ajaxResponse.length >= 3) && (ajaxResponse.substring(0,3) == "ok:");
}

// Affiche la boîte de résultat en cas de réussite d'un appel ajax
function showConfirmationResult(ajaxResponse) {
    if (isConfirmationResult(ajaxResponse)) {
        openInfoPopupFromValidationCode(ajaxResponse.substring(3));
        return true;
    }
    else {
        return false;
    }
}

// Open a popup from a validation code
// Send an ajax request to server to get the string according to the validation code (in the current language)
// then display it into infoPopup
function openInfoPopupFromValidationCode(validationCode) {
    GuiUtils.getValidationStringFromCode(validationCode, function(message) {
            openInfoPopup(message, false);
        });
}

// Open info popup and display infoText argument into it
// if 'isError' set to true, display a red background,
// else display a green one.
function openInfoPopup(infoText, isError) {
    $("#infoPopup").html(infoText);
    infoTopPos = Math.max(125, $(window).scrollTop() + 5);
    $("#infoPopup").css("top", infoTopPos+"px");
    if (isError == true) {
        $("#infoPopup").css("background-color", '#F9C884');
        $("#infoPopup").css("border-color", '#A06030');
    }
    else {
        $("#infoPopup").css("background-color", '#C8F984');
        $("#infoPopup").css("border-color", '#60A030');
    }

    $("#infoPopup").show("blind",{},500,closeInfoPopup);
}

// Check la fermeture de la popup d'info (infoPopupCloseTime dépassé ou non)
function closeInfoPopup() {
	setTimeout(function(){$("#infoPopup:visible").fadeOut("slow");}, 3000);
}

//Manage local cache for labels
var labelsCache = new $.Hashtable();
function getEnumLabel(labelKey) {
    var labelValue = labelsCache.get(labelKey);
    if (!labelValue){
        labelValue = AdminManager.getLabel("ENUM", labelKey);
        if(!labelValue) labelValue = labelKey + " (no label)";
        labelsCache.set(labelKey, labelValue);
    }
    return labelValue;
}

// switch language
function switchLanguage(language) {
    if (SessionManager.switchLanguage(language) == true) {
        DeleteCookie("lastLanguage");
        var expdate = new Date ();
        expdate.setTime(expdate.getTime() + (30 * 24 * 60 * 60 * 1000)); // 30 days long cookie
        SetCookie("lastLanguage", language, expdate);
        if (typeof jumpTo == 'function') {
            jumpTo(window.location.href);
        }
        else {
            redirectToUrl(window.location);
        }
    }
}

function reloadOnF5Pressed(ev) {
    if (ev.keyCode == 116) {
        ev.stopPropagation();
        jumpTo(window.location);
    }
}

// CTRL Keys check method
$.ctrl = function(key, callback, args) {
    $(document).keydown(function(ev) {
        if(!args) args=[]; // IE barks when args is null
        if(ev.keyCode == key.charCodeAt(0) && ev.ctrlKey) {
            callback.apply(this, args);
            return false;
        }
    });
};

// Cookies management methods
function getCookieVal(offset) {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1) {
    endstr = document.cookie.length;
  }
  return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie(name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
	if (document.cookie.substring(i, j) == arg) {
      return getCookieVal (j);
    }
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) {
      break;
    }
  }
  return "";
}

function SetCookie(name, value) {
  var argv = SetCookie.arguments;
  var argc = SetCookie.arguments.length;
  var expires = (argc > 2) ? argv[2] : null;
  var path = (argc > 3) ? argv[3] : null;
  var domain = (argc > 4) ? argv[4] : null;
  var secure = (argc > 5) ? argv[5] : false;
  document.cookie = name + "=" + escape (value) +
    ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
    ((path == null) ? "" : ("; path=" + path)) +
    ((domain == null) ? "" : ("; domain=" + domain)) +
    ((secure == true) ? "; secure" : "");
}

function DeleteCookie(name) {
  var exp = new Date();
  exp.setTime (exp.getTime() - 1);  // This cookie is history
  var cval = GetCookie (name);
  if (cval != null) {
    document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
  }
}
