/**
 * Module  : browser.js
 * Contenu : Gestion des valeurs relatives au navigateur (Ex : taille de la fenêtre, position scroll vertical, etc.)
 * Auteur  : Frank Malenfant
 * Date    : 12 août 2008
 **/

/**
 * FONCTIONS DOCUMENTÉES:
 *
 * f_filterResults(n_win, n_docel, n_body) : Fonction de traitement utilisée par les fonctions get_clientWidth(), get_clientHeight(), get_scrollLeft() et get_scrollTop()
 * get_clientWidth()                       : Retourne la largeur disponible à l'écran
 * get_clientHeight()                      : Retourne la hauteur disponible à l'écran
 * get_scrollLeft()                        : Retourne la valeur de défilement horizontal actuelle
 * get_scrollTop()                         : Retourne la valeur de défilement vertical actuelle
 * get_scrollTopById(str id)               : Retourne la valeur de défilement vertical actuelle de l'objet dont l'id est spécifié
 * gtDialog(str msg, array params)         : Immite l'apparence d'une boîte de dialogue mais offre des options javascript car il est impossible de stopper le code en javascript
 * override_selectbox(obj $selectbox, obj $input) : Permet à un champs de saisie de se substituer au selectbox pour permettre plus de possibilités
 * set_scrollTopById(str id)               : Spécifie la valeur de défilement vertical actuelle de l'objet dont l'id est spécifié
 * stopPropagation(e)                      : Cesse la propagation d'un événement (ex : onClick)
 **/

/**
 * Fonction de traitement utilisée par les fonctions get_clientWidth(), get_clientHeight(), get_scrollLeft() et get_scrollTop()
 **/
function f_filterResults(n_win, n_docel, n_body) {
  var n_result = n_win ? n_win : 0;
  if(n_docel&&(!n_result||(n_result > n_docel))) n_result = n_docel;
  return n_body&&(!n_result||(n_result > n_body))?n_body:n_result;
}

/**
 * Retourne la largeur disponible à l'écran
 **/
function get_clientWidth() {
  return f_filterResults (
    window.innerWidth ? window.innerWidth : 0,
	document.documentElement ? document.documentElement.clientWidth : 0,
	document.body ? document.body.clientWidth : 0
  );
}

/**
 * Retourne la hauteur disponible à l'écran
 **/
function get_clientHeight() {
  return f_filterResults (
    window.innerHeight ? window.innerHeight : 0,
	document.documentElement ? document.documentElement.clientHeight : 0,
	document.body ? document.body.clientHeight : 0
  );
}

/**
 * Retourne la valeur de défilement horizontal actuelle
 **/
function get_scrollLeft() {
  return f_filterResults (
	window.pageXOffset ? window.pageXOffset : 0,
	document.documentElement ? document.documentElement.scrollLeft : 0,
	document.body ? document.body.scrollLeft : 0
  );
}

/**
 * Retourne la valeur de défilement vertical actuelle
 **/
function get_scrollTop() {
  return f_filterResults (
    window.pageYOffset ? window.pageYOffset : 0,
	document.documentElement ? document.documentElement.scrollTop : 0,
	document.body ? document.body.scrollTop : 0
  );
}

/**
 * Retourne la valeur de défilement horizontal actuelle dans un objet précis
 **/
function get_scrollLeftById(id) {
  return document.getElementById(id).scrollLeft;
}

/**
 * Retourne la valeur de défilement vertical actuelle dans un objet précis
 **/
function get_scrollTopById(id) {
  return document.getElementById(id).scrollTop;
}

/**
 * Immite l'apparence d'une boîte de dialogue mais offre des options javascript car il est impossible de stopper le code en javascript
 * Paramètres : sting msg
 *              array params = Array(Array("<STRING texte bouton #1>", "<STRING code bouton #1>", "<BOOL fermer dialog>"),
 *                                   Array("<STRING texte bouton #2>", "<STRING code bouton #2>", "<BOOL fermer dialog>"), 
 *                                   ...
 *                                  );
 **/
function gtDialog(msg, params) {
	if(isIE()) document.body.scroll = "no"; //IE
	else if((isChrome())||(isFirefox())) {
		document.width = window.innerWidth;
		document.height = window.innerHeight;
	}
	
	var block = document.createElement("DIV");
	block.id = 'block';
	block.style.position = "absolute";
	block.style.width = get_clientWidth();
	block.style.height = get_clientHeight();
	block.style.top = get_scrollTop();
	block.style.left = get_scrollLeft();
	block.style.backgroundColor = "#000000";
	block.style.opacity = 0.2;
	block.style.filter = "alpha(opacity = 20)";

	
	var dw = document.createElement("DIV");
	dw.style.backgroundColor = "#e0dfe3";
	dw.style.position = "absolute";
	dw.style.width = "700px";
	dw.style.height = "150px";
	dw.style.overflow = "visible";
	dw.style.border = "2px outset #e0dfe3";
	//dw.innerHTML = msg;
	
	var be = document.createElement("DIV");
	be.style.width = "100%";
	be.style.height = "24px";
	be.style.margin = "0px";
	be.style.backgroundColor = "#FF0000";
	be.style.backgroundImage = "url('img/footer.png')";
	be.style.backgroundRepeat = "repeat-x";
	be.style.backgroundPosition = "0px -20px";
	be.style.color = "#FFFFFF";
	be.style.fontFamily = "Arial, Helvetica, Sans-serif";
	be.style.paddingTop = "4px";
	be.style.paddingLeft = "3px";
	be.style.fontSize = "12px";
	be.style.fontWeight = "bold";
	be.innerHTML = "Gesprod - Suppression du plan de montage...";
	
	var x = document.createElement("IMG");
	x.id = "X"+Math.random();
	x.src = "img/fermer.png";
	x.align = "right";
	x.style.marginTop = "-18px";
	x.border = 0;
	x.style.cursor = "pointer";
	x.onclick = function() {
		            document.body.removeChild(document.getElementById('block'));
	              document.body.removeChild(this.parentNode.parentNode); 
								if(isIE()) document.body.scroll = "yes"; //IE
								else if((isChrome())||(isFirefox())) {
									document.width = 1000;
									document.height = 1000;
								}
							}
	
	var c = document.createElement("DIV");
	c.style.width = "100%";
	c.style.marginTop = "20px";
	c.style.marginBottom = "20px";
	c.style.backgroundImage = "url('img/confirm.png')";
	c.style.backgroundPosition = "15px 5px";
	c.style.backgroundRepeat = "no-repeat";
	c.style.paddingLeft = "60px";
	c.style.fontFamily = "Arial, Helvetica, Sans-serif";
	c.style.fontSize = "12px";
	c.innerHTML = msg;
	
	var b = document.createElement("DIV");
	b.style.width = "100%";
	b.style.textAlign = "center";
	b.style.marginBottom = "10px";
	
	for(var i = 0; i < params.length; i++) {
		var btn = document.createElement("INPUT");
		btn.type = "button";
		btn.value = params[i][0];
		eval("btn.onclick = function() { "+(((params[i][2] == undefined)||(params[i][2] == true))?"document.getElementById('"+x.id+"').onclick();":"")+" "+params[i][1]+" }");
		btn.style.float = "left";
		btn.style.width = "100px";
		btn.style.paddingLeft = "3px";
		btn.style.paddingRight = "3px";
		btn.style.overflow = "visible";
		if(i > 0) btn.style.marginLeft = "10px";
		b.appendChild(btn);
	}
	
	document.body.appendChild(block);
	document.body.appendChild(dw);
	dw.appendChild(be);
	be.appendChild(x);
	dw.appendChild(c);
	dw.appendChild(b);
	dw.style.top = get_scrollTop() + ((get_clientHeight() - dw.offsetHeight) / 2);
	dw.style.left = get_scrollLeft() + ((get_clientWidth() - dw.offsetWidth) / 2);
}

function isChrome() { return navigator.userAgent.toLowerCase().indexOf("chrome") >= 0;}
function isIE() { return navigator.userAgent.toLowerCase().indexOf("msie") >= 0;}
function isFirefox() { return navigator.userAgent.toLowerCase().indexOf("firefox") >= 0;}

/**
 * spécifie la valeur de défilement vertical actuelle dans un objet précis
 **/
function set_scrollTopById(id, posy) {
  return document.getElementById(id).scrollTop = posy;
}

/**
 * Cesse la propagation d'un événement (ex : onClick)
 **/
function stopPropagation(e) {
	e=e||event;
	e.stopPropagation?e.stopPropagation():e.cancelBubble=true; 
} 

