/*
 * Fichier qui permet de génerer un popup incruster dans la page html
 * 
 * Pour que le script fonctionne, il est nécéssaire d'inclure les ligne suivante dans le balise head du fichier HTML
 
	<script type="text/javascript">
		if( document.body ) {
			var largeur_fenetre = document.body.clientWidth;
			var hauteur_fenetre = document.body.clientHeight;
		} else {
			var largeur_fenetre = window.innerWidth;
			var hauteur_fenetre = window.innerHeight;
		}
	</script> 

 * Pour appeler le popup utilisé la ligne suivante
	 tab_obj_popup.push ( new popup( id, contenu, width, height, positionnement_X, positionnement_Y, event));
	 
	 id : identifiant du div du popup
	 contenu : contenu HTML inséré dans le div du popup
	 width : largeur du popup
	 height : hauteur du popup
	 positionnement_X : méthode de positionnement sur x valeur : "center" si popup centré en largeur, "mouse" si positionner sous la souris pour un rollover ou valeur en px)
	 positionnement_Y : méthode de positionnement sur y valeur : "center" si popup centré en hauteur, "mouse" si positionner sous la souris pour un rollover ou valeur en px)
 *  
 *
 *      
 */
// Détermination du navigateur > pour le masquage des select
var agt = navigator.userAgent.toLowerCase();
var isMac = (agt.indexOf('mac') != -1);
var isOpera = (agt.indexOf('opera') != -1);
var IEver = parseInt(agt.substring(agt.indexOf('msie ') + 5));
var isIE = ((agt.indexOf('msie')!=-1 && !isOpera && (agt.indexOf('webtv')==-1)) && !isMac);
var isIE7 = ((agt.indexOf('msie 7.0')!=-1 && !isOpera && (agt.indexOf('webtv')==-1)) && !isMac);
var isIE5win = (isIE && IEver >= 5);
var isIE5mac = ((agt.indexOf('msie') != -1) && isMac);
var isSafari = (agt.indexOf('safari') != -1);

// Initialisation des variable globales


/*var IE6 = false, IE7 = false,
FIREFOX2 = false, FIREFOX = false,
NETSCAPE7 = false, NETSCAPE = false,
OPERA9 = false, OPERA = false,
AUTRE = false;
var strChUserAgent = navigator.userAgent;
var intSplitStart = strChUserAgent.indexOf("(",0);
var intSplitEnd = strChUserAgent.indexOf(")",0);
var strChStart = strChUserAgent.substring(0,intSplitStart);
var strChMid = strChUserAgent.substring(intSplitStart, intSplitEnd);
var strChEnd = strChUserAgent.substring(strChEnd); 

alert( strChUserAgent );*/

var debug = false;
/*var debug = true;*/
var hauteur_cliquable = 25; // hauteur du popup cliquable pour le déplacement (souvent la hauteur du clique)


var tab_obj_popup = new Array(); // tableau d'objet popup
var popupToMove = null; // index du popup à déplacer dans le tableau tab_obj_popup
var b_traine = false; // vrai, lorsqu'on est en train de déplacer le layer
var _zindex = 1; //s'incrémente de 1 a chaque deplacement pour que le popup actif soit toujours au premier plan
// Variable de gestion des evenement
var X = "";
var offsetX = "";
var Y = "";
var offsetY = "";
var moveX;
var moveY;
var obj_body = null;
// variables de test des navigateurs
var nn4 = (document.layers);
var dom = (document.getElementById);
var iex = (document.all);

document.observe('dom:loaded', function() {
	//hauteur_fenetre = $(obj_body).getHeight();
	//alert( largeur_fenetre + " * " + hauteur_fenetre );
	if (self.innerHeight) // all except Explorer
	{
		largeur_fenetre = self.innerWidth;
		hauteur_fenetre = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
		// Explorer 6 Strict Mode
	{
		largeur_fenetre = document.documentElement.clientWidth;
		hauteur_fenetre = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
		largeur_fenetre = document.body.clientWidth;
		hauteur_fenetre = document.body.clientHeight;
	}
	obj_body = document.getElementsByTagName('body')[0];
	largeur_fenetre = $(obj_body).getWidth();
});

//alert( document.compatMode);

if( dom ) {
	X = iex ?  "event.clientX": "e.clientX";
  Y = iex ?  "event.clientY" : "e.clientY";
  offsetX = (iex) ? "document.body.scrollLeft" : "pageXOffset";
  offsetY = (iex) ? "document.body.scrollTop" : "pageYOffset";
}else if( iex ) {
	X = "event.clientX";
  Y = "event.clientY";
  offsetX = "document.body.scrollLeft";
  offsetY = "document.body.scrollTop";
} else if( nn4 ) {
	X="e.pageX";
  Y="e.pageY";
  offsetX="pageXOffset";
  offsetY="pageYOffset";
	document.captureEvents(Event.MOUSEDOWN|Event.MOUSEMOVE|Event.MOUSEUP);
}


// id du div, contenu du div, largeur du div, hauteur du div, methode de positionnement en X (center, mouse ou px) du div, methode de positionnement en Y (center, mouse ou px) du div, event
function popup ( id, contenu, w, h, posx, posy, event, hauteur_clic) {
	this.method_pos_x = posx; // Methone de positionnement sur X (center, mouse ou px)
	this.method_pos_y = posy; // Methone de positionnement sur Y (center, mouse ou px)
	this.event = event; // Evenement généré sur l'action utilisateur
	this.pos_x = 0; // position sur X
	this.pos_y = 0; // position sur Y
	this.width = w; // Largeur
	this.height = h; // Hauteur
	//this.height = 0; // Hauteur
	this.element_id = id; // id de l'element a créer
	this.element_obj = null; // objet html récupéré a l'aide de document.getElementById
	this.isHidden = true; // indique si le popup est masqué (true) ou non (false)
	this.contenu = contenu; // contenu du Popup
	this.index = tab_obj_popup.length-1;
	
	hauteur_cliquable = hauteur_clic;
	
	this.init = popup_init; // Méthode d'initialisation
	this.elt_show = popup_show; // Méthode  d'affichage du popup
	this.close = popup_close; // Méthode de fermeture du popup
	this.scroll = popup_scroll; // Méthode de calcul du scroll 
	this.get_id = popup_get_id; // Accesseur de la propriete element_id
	this.get_is_hidden = popup_get_is_hidden; // Accesseur de la propriete is_hidden
	this.get_zindex = popup_get_zindex; // Accesseur de la propriete zindex
	this.get_left_position = popup_get_left_position; // Accesseur de la propriete left
	this.get_width = popup_get_width; // Accesseur de la propriete width
	this.set_width = popup_set_width; // setteur de la propriete width
	this.get_height = popup_get_height; // setteur de la propriete width
	this.set_height = popup_set_height; // setteur de la propriete width
	this.get_top_position = popup_get_top_position; // Accesseur de la propriete top
	this.set_zindex = popup_set_zindex; // setteur de la propriete zindex
	this.set_top = popup_set_top; // setteur de la propriete top
	this.set_left = popup_set_left; // setteur de la propriete left
	this.rePos = popup_rePos;
	
	// Initialisation puis affichage du popup
	this.init();
	this.scroll();
	this.elt_show();
}

function popup_init()
{
// Recherche si un element a le meme id pour le supprimer
	//alert( "avant effacement");
	if( document.getElementById( this.element_id) ) {
		for( var i = 0 ; i < tab_obj_popup.length ; i++ ) {
			if( tab_obj_popup[i] ) {
				if( tab_obj_popup[i].get_id() == this.element_id ) {// && tab_obj_popup[i].get_is_hidden()
					$( this.element_id).remove();
					delete tab_obj_popup[i]; // suppression de l'objet javascript
					tab_obj_popup[i] = false;
				}
			}
		}
	}
	
// Création du div et ajout dans le body
	Insertion.Bottom( document.body, "<div id='" + this.element_id + "'></div>");// style='background-color: #FFFFFF;'
	/*if( isIE == true && IEver < 7 ) {
		//alert( "IE 6 ou inferieur");
		Insertion.Bottom( this.element_id, "<div id='div_iframe_" + this.element_id + "'><iframe id='iframe_" + this.element_id + "' frameborder='0'></iframe></div>");// style='background-color: #FFFFFF;'
	}*/
	Insertion.Bottom( this.element_id, "<div id='contenu_" + this.element_id + "'>" + this.contenu + "</div>");// style='background-color: #FFFFFF;'
  this.element_obj = $(this.element_id);
  this.set_width( this.width);
  this.set_height( this.get_height());
  /*alert($( "contenu_" + this.element_id).getWidth());
  alert($( "contenu_" + this.element_id).getHeight());*/
  $( this.element_id).setStyle({
		position: 'absolute',
		top: 0+"px",
		left: 0+"px",
		width: $( "contenu_" + this.element_id).getWidth()+"px",
		height: $( "contenu_" + this.element_id).getHeight()+"px"
	});
	/*if( isIE == true && IEver < 7 ) {
		$( "iframe_" + this.element_id).setStyle({
			position: 'absolute',
			top: 0+"px",
			left: 0+"px",
			width: $( "contenu_" + this.element_id).getWidth()+"px",
			height: $( "contenu_" + this.element_id).getHeight()+"px"
		});
	}*/
	//Insertion.Bottom( this.element_id, "<div id='contenu_" + this.element_id + "' style='background-color: #FFFFFF;'>" + this.contenu + "</div>");
  $( "contenu_" + this.element_id).setStyle({
		position: 'absolute',
		top: 0+"px",
		left: 0+"px",
		width: $( "contenu_" + this.element_id).getWidth()+"px",
		height: $( "contenu_" + this.element_id).getHeight()+"px"
	});
	
	//this.set_width( $( this.element_id).getWidth());
  //this.set_width( this.width);
  //this.set_height( $( this.element_id).getHeight());
  //this.set_height( this.height);
  
// incrémentation de la variable globale zindex pour que le popup soit toujours au premier plan
	_zindex++;
	this.element_obj.zIndex = _zindex;
  
// initialisation de la position du popup en X puis en Y suivant la methode choisie
	if ( this.element_obj ) {
		if( this.method_pos_x == "center" ) {
			//this.pos_x = ( largeur_fenetre - parseInt( this.get_width() ) ) / 2 ;
			this.pos_x = ( largeur_fenetre - parseInt( this.get_width() ) ) / 2 ;
		} else if( this.method_pos_x == "mouse" ) {
			this.pos_x = parseInt( this.event.clientX);
			
		} else {
			this.pos_x = this.method_pos_x;
			
		}
		if( this.method_pos_y == "center" ) {
			//this.pos_y = ( hauteur_fenetre - parseInt( this.get_height() ) ) / 2 ;
			//alert( parseInt( this.height ));
			this.pos_y = ( hauteur_fenetre - parseInt( this.get_height() ) ) / 2 ;
			//this.pos_y = ( hauteur_fenetre - parseInt( this.element_obj.height) ) / 2 ;
		} else if( this.method_pos_y == "mouse" ) {
			this.pos_y = parseInt( this.event.clientY);
			
		} else {
			this.pos_y = this.method_pos_y;
			
		}
		
  }
	if( debug == true ) {
		var output_debug = "Largeur de la fenetre : " + largeur_fenetre + "\n";
		output_debug += "Largeur du popup : " + parseInt( this.element_obj.width) + "\n";
		output_debug += "hauteur de la fenetre : " + hauteur_fenetre + "\n";
		output_debug += "hauteur du popup : " + parseInt( this.element_obj.height) + "\n";
		output_debug += "POS_X : " + this.pos_x + "\n";
		output_debug += "POS_Y : " + this.pos_y + "\n";
		output_debug += "Largeur_prototype : " + $(this.element_id).getWidth() + "\n";
		output_debug += "Hauteur prototype : " + $(this.element_id).getHeight() + "\n";
		alert( output_debug);
	}
	//alert( this.element_id);
	
}

function popup_show() {
	var_popup_show = false;
   
  $(this.element_id).show();
  this.isHidden = false;
  //this.rePos();
  if( this.isHidden == false ) {
		var_popup_show = true;
	}
}

// cache le layer (seulement s'il est visible)
// index : index de l'objet dans le tableau tab_obj_popup
function popup_close( index) {
  if ( !this.isHidden) {
    //this.element_obj.visibility = "hidden";
    $( this.element_id).hide();
    $( this.element_id).remove();
    this.isHidden = true;
		delete tab_obj_popup[index];
		tab_obj_popup[index] = false;
  }
}

function popup_rePos() {
	this.width = $( this.element_id).getWidth();
	this.height = $( this.element_id).getHeight();
	if ( this.element_obj ) {
		if( this.method_pos_x == "center" ) {
			this.pos_x = ( largeur_fenetre - parseInt( this.element_obj.width) ) / 2 ;
		} else if( this.method_pos_x == "mouse" ) {
			this.pos_x = parseInt( this.event.clientX);
		} else {
			this.pos_x = this.method_pos_x;
		}
		if( this.method_pos_y == "center" ) {
			this.pos_y = ( hauteur_fenetre - parseInt( this.height) ) / 2 ;
		} else if( this.method_pos_y == "mouse" ) {
			this.pos_y = parseInt( this.event.clientY);
		} else {
			this.pos_y = this.method_pos_y;	
		}
  }
  //this.scroll();
}

function id2tab_obj_popup(id_popup) {
	for( var i = 0 ; i < tab_obj_popup.length ; i++ ) {
		if( tab_obj_popup[i] && tab_obj_popup[i].get_id() == id_popup && !tab_obj_popup[i].get_is_hidden() ) {
			return i;
		}
	}
}

// Détermine quel popup il faut cacher
function close_popup( id_popup) {
	for( var i = 0 ; i < tab_obj_popup.length ; i++ ) {
		if( tab_obj_popup[i] && tab_obj_popup[i].get_id() == id_popup && !tab_obj_popup[i].get_is_hidden() ) {
			tab_obj_popup[i].close( i);
			popup_open = 0;
		}
	}
	
}

// positionne correctement le layer si on a fait défilé la page
function popup_scroll() {

		var realOff = Position.realOffset(obj_body);
		var x,y;
		x = realOff[0];
		y = realOff[1];
		if( debug == true ) {
			var output_debug = "scroll x : " + x + "\n";
			output_debug += "scroll y : " + y + "\n";
			output_debug += "pos x : " + this.pos_x + "\n";
			output_debug += "pos y : " + this.pos_y + "\n";
			output_debug += "left : " + parseInt( x + this.pos_x)+"px" + "\n";
			output_debug += "top : " + parseInt( y + this.pos_y)+"px" + "\n";
			alert( output_debug);
		}
		$( this.element_id).setStyle({
			left: parseInt( x + this.pos_x)+"px",
			top: parseInt( y + this.pos_y)+"px"
		});

}

function popup_get_id() {
	return this.element_id;
}

function popup_get_is_hidden() {
	return this.isHidden;
}

function popup_get_zindex() {
	return this.element_obj.zIndex;
}

function popup_get_left_position() {
	return Position.cumulativeOffset($(this.element_id))[0];
	return parseFloat(this.element_obj.left);
}

function popup_get_width() {
	return $( this.element_id).getWidth();
}

function popup_get_height() {
	return $( this.element_id).getHeight();
}

function popup_set_width( w) {
	$( this.element_id).setStyle({
			width: w + "px"
	});
}

function popup_set_height( h) {
	$( this.element_id).setStyle({
			height: h + "px"
	});
	//this.element_obj.setStyle width = w;
}

function popup_get_top_position() {
	return Position.cumulativeOffset($(this.element_id))[1];
}

function popup_set_zindex ( zindex) {
	$( this.element_id).setStyle({
			zIndex: zindex
	});
}

function popup_set_top ( t) {
	$( this.element_id).setStyle({
			top: t + "px"
	});
}

function popup_set_left ( l) {
	$( this.element_id).setStyle({
			left: l + "px"
	});
}

// DEPLACEMENT DU LAYER AVEC LA SOURIS

// initialisation lorsqu'on appuye sur le bouton de la souris (début du déplacement)
// l'argument "e" est nécessaire pour Netscape 4
function init_traine( e) {
  if(!e) e = window.event;
  var Xin = parseInt( eval(X));
  var Yin = parseInt( eval(Y));
  var H = parseInt( hauteur_cliquable);
  var offX = (nn4)? 0 : eval(offsetX);
  var offY = (nn4)? 0 : eval(offsetY);
  var realOff = Position.realOffset(obj_body);
	var x,y;
	x = realOff[0];
	y = realOff[1];
  offX = parseInt( x);
  offY = parseInt( y);
  var L, T, W;
  
	var max_zindex = 0; //valeur max de zindex du popup sous la souris
	var index_max_zindex = "init"; //index du popup sous la souris
	for( var i = 0 ; i < tab_obj_popup.length ; i++ ) {
		if ( tab_obj_popup[i] && !tab_obj_popup[i].get_is_hidden() ) {
			L = tab_obj_popup[i].get_left_position();
			W = tab_obj_popup[i].get_width();
			T = tab_obj_popup[i].get_top_position();
    	test1 = Xin - (L-offX);
	    test2 = ( L - offX + W ) - Xin;
			test3 = Yin - ( T - offY );
			test4 = ( T - offY + H ) - Yin;
			if( test1 > 0 && test2 > 0 && test3 > 0 && test4 > 0 ) {
				// ce popup est sous la souris on garde son index et son zindex seulement si c'est celui qui est au premier plan
				//alert( "OK : ")
				if( max_zindex < tab_obj_popup[i].get_zindex() ) {
					max_zindex = tab_obj_popup[i].get_zindex();
					var index_max_zindex = i;
				}
			}
		}
	}

	if( index_max_zindex != "init" ) { // Si on a trouver un popup sous la souris
		b_traine = true;
		moveX = Xin - tab_obj_popup[index_max_zindex].get_left_position();
		moveY = Yin - tab_obj_popup[index_max_zindex].get_top_position();
		$( tab_obj_popup[index_max_zindex].element_id).setStyle({
			opacity: 0.6
		});
		popupToMove = index_max_zindex;
		_zindex++;
		tab_obj_popup[index_max_zindex].set_zindex( _zindex); // Mise au premier plan du popup
	} else {
		b_traine = false;
	}
}

function stop_traine() {
  if (b_traine) {
    moveX = null;
    moveY = null;
    b_traine = false;
    $( tab_obj_popup[popupToMove].element_id).setStyle({
			opacity: 1
		});
    popupToMove = null;
  }
}

function traine_layer( e) {
  if(!e) e = window.event;
  if (b_traine) {
    var Xin = eval(X);
    var Yin = eval(Y);
   // déplacement
    tab_obj_popup[popupToMove].set_top( Yin - moveY);
    tab_obj_popup[popupToMove].set_left( Xin - moveX);
  }
}

document.onmousedown=init_traine;
document.onmousemove=traine_layer;
document.onmouseup=stop_traine;
