﻿// Fonction pour générer un pop-up centré

var isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false; // Detecting IE
var langString;
var popUpBlockedMessageBox; // Objet de référence à la boîte de message affiché lorsque le pop-up est bloqué ({obj, id})
var popUpBlockedMessage;

function PopupFullscreen(page, target, ratioX, ratioY, options) {
	// On peut utiliser les paramètres ratioX et ratioY pour limiter le plein écran au ratio spécifié
	var w = screen.availWidth ? screen.availWidth : screen.width; // On utilise la propriété availWidth si possible
	var h = screen.availHeight ? screen.availHeight : screen.height; // On utilise la propriété availWidth si possible
	var correctX = 0;
	var correctY = 0;

	if (navigator.appName.indexOf("Microsoft") != -1) { w -= 8; h -= 34; } // Ajustement de la taille pour IE
	else if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) { w -= 10; h -= 56; } // Ajustement de la taille pour Chrome

	if (isNaN(ratioX) && (String(options) == "undefined" || String(options) == "null")) {
		// Pas de ratio, seulement les options sont passées
		options = String(ratioX);
	} else {
		if (!isNaN(ratioX) && !isNaN(ratioY)) {
			ratioX = Number(ratioX);
			ratioY = Number(ratioY);
			var newW = w;
			var newH = h;
			// On a un ratio, on calcul
			newH = (ratioY * w) / ratioX;
			if (newH > h) {
				// trop grand, on calcul selon la hauteur
				newH = h;
				newW = ((h - 58) * ratioX) / ratioY;
			}
			if (newW < w) correctX = (w - newW) / 2;
			if (newH < h) correctY = ((h - newH) / 2) - 30;
			w = newW;
			h = newH;
		}
	}


	// Traitement des options (nettoyage si aucune)
	if (String(options) == "undefined" || String(options) == "null") options = "";
	else options = "," + options;

	var newWin = window.open(page, target, "top=" + correctY + ",left=" + correctX + ",width=" + w + ",height=" + h + options);
	if (newWin == null) {
		// Bloquée
		if (popUpBlockedMessageBox && popUpBlockedMessageBox.obj && popUpBlockedMessageBox.id) {
			try {
				popUpBlockedMessageBox.obj.show(popUpBlockedMessageBox.id);
			} catch (e) {
				alert("Erreur à l'ouverture du messageBox spécifié: " + e);
				if (popUpBlockedMessage) {
					alert(popUpBlockedMessage);
				} else {
					if (langString && langString == "fr") alert("Erreur: Vous devez autoriser le site à éxécuter ce script.\n\nPour ce faire cliquez sur la bande jaune, plus haut sur cette page, et cliquez sur \"Autoriser le contenu bloqué...\".");
					else alert("Error: You must autorize the site to execute such script.\n\nTo do so, simply click on the yellow bar, upper on this page, and click on \"Autorize blocked content...\".");
				}
			}
		} else if (popUpBlockedMessage) {
			alert(popUpBlockedMessage);
		} else {
			if (langString && langString == "fr") alert("Erreur: Vous devez autoriser le site à éxécuter ce script.\n\nPour ce faire cliquez sur la bande jaune, plus haut sur cette page, et cliquez sur \"Autoriser le contenu bloqué...\".");
			else alert("Error: You must autorize the site to execute such script.\n\nTo do so, simply click on the yellow bar, upper on this page, and click on \"Autorize blocked content...\".");
		}
	} else {
		newWin.focus();
	}
	return newWin;
}


var sTime = new Date();
function getTimer() {
	var now = new Date();
	return now - sTime;
}

function trim(myString) {
	return myString.replace(/^\s+/g, '').replace(/\s+$/g, '')
}

function openViaWin(UserId, userIDEnc, SessionID, url, accessDelay, errorMessageID, accessButtonID, activityDateString, recordID, forceGAccess) {

	// Validation de l'accès (accessDelay en secondes)
	var hasAccess = true;
	try {
		if (!isNaN(accessDelay) && (Number(accessDelay) == -1 || (Number(accessDelay) > 0 && getTimer() < Number(accessDelay * 1000)))) hasAccess = false;
	} catch (e) { }

	// Infos utilisateur Guest
	var lang = null;
	var guestFirstName = null;
	var guestLastName = null;
	try {
		var ddl = document.getElementById("ddlLanguage"); if (ddl) lang = ddl.value;
		var txt = document.getElementById("txtFirstName"); if (txt) guestFirstName = trim(txt.value);
		var txt = document.getElementById("txtLastName"); if (txt) guestLastName = trim(txt.value);
	} catch (e) { }

	// G access
	var gAccess = Boolean(forceGAccess || Key.isDown(71));
	if (Key.isDown(71)) Key._keys[71] = false;

	// Ouverture de l'activité
	if (hasAccess) {

		var settingsStr = "?sessionID=" + urlencode(SessionID) + (recordID != null ? "&recordID=" + urlencode(recordID) : "") + (userIDEnc != null ? "&userID=" + urlencode(userIDEnc) : "") + (gAccess ? "&gAccess=1" : "") + (lang != null ? "&lang=" + lang : "") + (guestFirstName != null ? "&firstName=" + urlencode(guestFirstName, true) : "") + (guestLastName != null ? "&lastName=" + urlencode(guestLastName, true) : "");
		activityNotAccessibleLastWarned = null;
		if (Key.isDown(70)) {
			// Fullscreen
			var newWin = window.open(url + "Application/Via.aspx" + settingsStr, "via" + UserId, "fullscreen=1,resizable=0,status=0,scrollbars=0,titlebar=0,toolbar=0,location=0,menubar=0");
			Key._keys[70] = false;
		} else {
			// Standard
			var newWin = PopupFullscreen(url + "Application/Via.aspx" + settingsStr, "via" + UserId, "resizable=1,status=1,scrollbars=0,titlebar=0,toolbar=0,location=0,menubar=0");
		}
	} else {
		try {
			if (myMsgBox) {
				myMsgBox.show(errorMessageID);
				activityNotAccessibleLastWarned = accessButtonID;
				if (!isNaN(accessDelay) && Number(accessDelay) > -1) {
					//var minutesHolder = document.getElementById("remainingTimeBeforeAccess");
					//if(minutesHolder) minutesHolder.innerHTML = String(Math.ceil((accessDelay - (getTimer()/1000)) / 60)) + " (" + (accessDelay*1000) + " > " + getTimer() + ")";
					var dateHolder = document.getElementById("activityDate");
					if (dateHolder) dateHolder.innerHTML = activityDateString;
				}
			}
		} catch (e) { alert("Error in openViaWin: " + e); }
	}
	if (newWin) window.viaWin = newWin;
}

// Rafraîchissement automatique de la page à la fermeture de la fenêtre Via
window.allowAutoRefreshOnViaWinClose = true;
window.viaWin = null;
function onViaClose(win) {
	try {
		if (window.allowAutoRefreshOnViaWinClose && window.viaWin == win) window.location.reload();
	} catch (e) { }
}
window.onViaClose = onViaClose;


function encodeURL(url) {
	var TempQuery;
	var Query = "";
	var FinalQuery = "";

	//si il y au moin un parametre
	if (url.indexOf('?') != -1) {
		TempQuery = url.split('?');
		FinalQuery = TempQuery[0] + '?';
		Query = TempQuery[1];

		//plusieur parametre	
		if (Query.indexOf('&') != -1) {
			param = Query.split('&');

			for (i = 0; i < param.length; i++) {

				//tmpVal = param[i].split('=');
				var index = param[i].indexOf('=')
				var param0 = param[i].substring(0, index);
				var param1 = param[i].substring(index + 1, Query.length);

				FinalQuery += "&" + param0 + "=" + urlencode(param1);
			}
			//un seul parametre		  			 
		} else {

			var index = Query.indexOf('=')
			var param0 = Query.substring(0, index);
			var param1 = Query.substring(index + 1, Query.length);
			FinalQuery += param0 + "=" + urlencode(param1);
		}
		return FinalQuery;
	}
	return url;
}

function urlencode(str, fullEncode) {
	if (fullEncode) str = escape(str);
	str = str.replace(/\+/g, "%2B");
	str = str.replace(/\*/g, "%2A");
	str = str.replace(/\//g, "%2F");
	str = str.replace(/\@/g, "%40");
	str = str.replace(/\=/g, "%3D");

	return str;
}


function PopupCenter(pageURL, target, largeur, hauteur, langString, options, returnWin) {
	//alert("PopupCenter: " + pageURL + ", " + target + ", " + largeur + ", " + hauteur + ", " + langString + ", '" + options + "', " + returnWin);
	if (pageURL == null) return null;

	pageURL = encodeURL(pageURL);

	if (target == null) target = "";

	var screenWidth = screen.availWidth ? screen.availWidth : screen.width;
	var screenHeight = screen.availHeight ? screen.availHeight : screen.height;
	var top = 0; var left = 0;
	var deltaL = 0; var deltaH = 0;

	if (largeur == null) {
		largeur = screenWidth;
		if (isIE) deltaL = 12;
	} else {
		left = (screenWidth - largeur) / 2;
	}

	if (hauteur == null) {
		hauteur = screenHeight;
		if (isIE) deltaH = 38;
	} else {
		top = (screenHeight - hauteur) / 2;
	}

	var newWin = window.open(pageURL, target, "top=" + top + ", left=" + left + ", width=" + (largeur - deltaL) + ", height=" + (hauteur - deltaH) + ", " + options);
	if (newWin == null) { // Bloquée par un popup bloquer
		if (langString == "en") alert("Error: You must autorize the site to execute such script.\n\nTo do so, simply click on the yellow bar, upper on this page, and click on \"Autorize blocked content...\".");
		else alert("Erreur: Vous devez autoriser le site à éxécuter ce script.\n\nPour ce faire cliquez sur la bande jaune, plus haut sur cette page, et cliquez sur \"Autoriser le contenu bloqué...\".");
	}
	newWin.focus();
	if (returnWin != false) return newWin;
}


// ---- Accès aux activités automatiques
var activitiesToEnable = [];
var activityNotAccessibleLastWarned = null;
var autoActivitiesAccessInterval = null;

// Initialisation
function initAutoActivitiesAccess() {
	if (activitiesToEnable && activitiesToEnable.length > 0) {
		autoActivitiesAccessInterval = setInterval(autoActivitiesAccessCheck, 1000);
	}
}

function setNextUpdate() {
	var curSeconds = getTimer() / 1000; // Timer courant, en sec.
	var nextUpdateTime = 999;
	for (var i = 0; i < activitiesToEnable.length; i++) {
		if (activitiesToEnable[i][1] - curSeconds < nextUpdateTime) nextUpdateTime = (activitiesToEnable[i][1] - curSeconds) * 1000;
	}
	if (autoActivitiesAccessInterval != null) clearInterval(autoActivitiesAccessInterval);
	autoActivitiesAccessInterval = setInterval(autoActivitiesAccessCheck, nextUpdateTime);
}

// Vérification de accès
function autoActivitiesAccessCheck() {
	try {

		var curSeconds = getTimer() / 1000; // Timer courant, en sec.
		for (var i = 0; i < activitiesToEnable.length; i++) {
			try {
				if (curSeconds >= activitiesToEnable[i][1]) {
					var btn = document.getElementById(activitiesToEnable[i][0]);

					// Activation du bouton
					if (btn && String(btn.className).toLowerCase().indexOf("disabled") != -1) btn.className = String(btn.className).replace("buttonDisabled", "buttonDefault").replace("disabled", "");
					// Fermeture de la fenêtre d'avertissement
					if (myMsgBox && myMsgBox.messageID != null && activityNotAccessibleLastWarned == activitiesToEnable[i][0]) {
						activityNotAccessibleLastWarned = null;
						myMsgBox.close();
					}
					// Suppression de la liste à surveiller
					activitiesToEnable.splice(i, 1);
					i--;
				}
			} catch (e) {
				//alert(e);
				activitiesToEnable.splice(i, 1);
				i--;
			}
			if (activitiesToEnable.length == 0) clearInterval(autoActivitiesAccessInterval);

		}
	} catch (e) {
		//alert(e);

	}
	if (activitiesToEnable.length == 0) clearInterval(autoActivitiesAccessInterval);
	else setNextUpdate();
}






// ---- KEY management
// KeyLib v1 (http://www.n-son.com/scripts/keyLib/)
// - Reduced version - (removed addListeners, onkeydown and onkeyup management)
var Key = {
	_keys: [], LEFT: 37, RIGHT: 39, UP: 38, DOWN: 40, BACKSPACE: 8, CAPSLOCK: 20, CONTROL: 17, DELETEKEY: 46,
	END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, TAB: 9, PGDN: 34, PGUP: 33, SPACE: 32, SHIFT: 16
};

Key.isDown = function (key) {
	return Boolean(this._keys[key]);
};

Key.init = function () {
	document.onkeydown = function (e) {
		e = e ? e : event;
		Key._keys[e.keyCode] = true;
	};
	document.onkeyup = function (e) {
		e = e ? e : event;
		Key._keys[e.keyCode] = false;
	};
	for (var num = 0; num < 256; num++) {
		this._keys[num] = false;
	}
};

Key.init();

