﻿// 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); }
	    }
	}


	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();
