/****************************************************************************
* Fichier :  GroupePopup.js
* Description :  Affiche une fenêtre popup sous forme de div dans la page
*								 appelante. 
*								 Une fenêtre popup est constituée de différents blocs:
*								 - Une barre de titre faisant office de "poignée" pour 
*								   déplacer la fenêtre et contenant le titre et l'icone
*									 de fermeture
*								 - Une zone de contenu dans laquelle afficher le texte,
*								   un formulaire ou encore charger un fichier externe 
*									 via Ajax
*
*								 La fenetre peut être de deux types différents:
*								 - popup normal, avec barre de titre et icone "fermer"
*								 - popup formulaire, avec barre de titre et bouton OK
* 
*								 Le look de la fenêtre dépend d'un certain nombre
*								 de classes qui doivent être définies dans la css du site :
*								 - PopupBorder : définit le style des bordures 
*								 - PopupHandle : définit le style de la barre de titre
*								 - PopupContent: définit le style de la zone de contenu
*								 - PopupControls : définit le style de la zone contenant
*								   le bouton OK pour une popup formulaire
*
* Auteur : CMG
*
* Version : 1.0
* Date    : Juin 2006
*
*		ATTENTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*     Ce composant nécessite de se trouver dans le meme répertoire que les 
*			librairies javascript suivantes:
*			- prototype.js
*			- scriptaculous.js et toutes ses dépendances
*			- rico ou sont spin-off rounder.js
*
*			Il est également nécessaire d'initialiser la variable "path" du présent
*			fichier afin que le chargement des autres bibliothèque puisse se faire
*
*   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*
* Exemple d'utilisation:
*   Insérer dans la balise head de la page html/asp appelante : 
*   <script type="text/javascript" src="/js/groupePopup.js">	</script>
*
*   Dans le body de la page:
*   <div id="popup1">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vestibulum augue.</div>
*   <div id="popup2"></div>
*   <div id="popup3"><label for="idInput">Label champ</label><input type="text" id="idInput"></div>
*
*   Avant le tag </body>
*   <script type="text/javascript">new GroupePopup('popup1','MyTitle', 400,400,'','','');
*   <script type="text/javascript">var oPop=new GroupePopup('popup2','MyTitle2', 400,200,450,'','');oPop.open('test.html','','');</script>
*		<script type="text/javascript">new GroupeFormPopup('popup3','2eme popup', 400,400,0,450,'Valider');</script>
****************************************************************************/


/*function GetScript(){
  var collScripts=document.getElementsByTagName('script');
  for(kcpt=0;kcpt<collScripts.length;kcpt++){
  	if(collScripts[kcpt].src && collScripts[kcpt].src.match(/groupePopup\.js(\?.*)?$/)){
			return collScripts[kcpt];
		}
	}
}

if(document.getElementsByTagName){
	var oScript=GetScript();
	alert(oScript);
	var path = oScript.src.replace(/groupePopup\.js(\?.*)?$/,'');
	if(path!=''){
		path=path.replace(location.protocol+'//'+location.host,'');
		var oScriptaculous=document.createElement("script");
		oScriptaculous.setAttribute("type", "text/javascript");
		oScriptaculous.setAttribute("src", path+'prototype.js');
		oScript.parentNode.insertBefore(oScriptaculous,oScript.nextSibling);
		
		var oScriptaculous=document.createElement("script");
		oScriptaculous.setAttribute("type", "text/javascript");
		oScriptaculous.setAttribute("src", path+'scriptaculous.js?load=effects,dragdrop,rounder');
		oScript.parentNode.insertBefore(oScriptaculous,oScript.nextSibling);
	}
}
*/

// VARIABLE A INITIALISER --------------------------------------------
// path absolu vers le présent fichier
//
var path='/js/';
//
//---------------------------------------------------------------------


//chargement des bibliothèques nécessaires
document.write('<script type="text/javascript" src="'+path+'prototype.js"></script>');
document.write('<script type="text/javascript" src="'+path+'scriptaculous.js?load=effects,dragdrop,rounder"></script>');


//Constructeur d'un popup normal
//  idPopup : identifiant du popup (id du div)
//	sTitle : titre de la fenêtre popup
//	iWidth : largeur de la fenêtre popup
//	iHeight : hauteur de la zone d'affichage de la fenêtre popup
//	iTop   : position en hauteur de la fenêtre popup
//	iLeft : position à partir du bord gauche de la fenêtre popup
//
// Tous les paramètres sont facultatifs sauf l'idPopup
function GroupePopup(idPopup, sTitle, iWidth, iHeight, iTop, iLeft){

  if (idPopup=='') throw("GroupePopup : nécessite au minimum le paramètre 1 (idPopup)");
	//Initialisation des propriétés 
  this.id=idPopup
	this.type='GroupePopup';
	this.oPopup=$(idPopup);
	this.oPopup.id='Main'+idPopup;
	this.HTMLContent=this.oPopup.innerHTML;
	this.oPopup.className=this.oPopup.className + ' PopupBorder';
	this.oPopup.style.position='absolute';
	(iWidth=='')?null:this.oPopup.style.width=iWidth+"px";
	(iHeight=='')?null:iHeight=' height: '+iHeight+"px";
	(iTop=='')?null:this.oPopup.style.top=iTop+"px";
	(iLeft=='')?null:this.oPopup.style.left=iLeft+"px";
	
	//on réécrit le contenu du div pour façonner la popup
	this.oPopup.innerHTML=''
	+'<div id="'+this.id+'Handle"  class="PopupHandle" style="height: 20px">'
	+'	<span id="'+this.id+'Title" style="float: left;">'+sTitle+'</span><a title="Fermer" href="javascript:ShowSelects(true);Element.hide(\'Main'+this.id+'\');" id="'+this.id+'Close" style="float: right">Fermer [X]</a>'
	+'</div>'
	+'<div id="'+this.id+'Content" class="PopupContent" style="clear: both; ">'
	+'  <div id="'+this.id+'" style="padding: 5px;overflow: auto;' + iHeight + '">'
	+'  '+this.HTMLContent
	+'  </div>'
	+'</div>';
	//On la rend déplaçable
  new Draggable('Main'+this.id, {handle:this.id+'Handle'})
	//on arrondit les coins de la zone d'affichage
	Rico.Corner.round(this.id+'Content');
	//on cache tous les éléments Select de la page (pour IE)
	ShowSelects(false);
	
  //Définition des méthodes
	this.open=_open; //Ouverture d'un document externe dans le popup via Ajax
	this.Show=_show;
	this.Hide=_hide;
	this.SetText=_setText;
	this.ShowClose = _showClose;
		this.RelocateInside = _relocateInside;
}

//Constructeur d'un popup formulaire
//  idPopup : identifiant du popup (id du div)
//	sTitle : titre de la fenêtre popup
//	iWidth : largeur de la fenêtre popup
//	iHeight : hauteur de la zone d'affichage de la fenêtre popup
//	iTop   : position en hauteur de la fenêtre popup
//	iLeft : position à partir du bord gauche de la fenêtre popup
//  sOk		: Texte à afficher sur le bouton
//
// Tous les paramètres sont facultatifs sauf l'idPopup
function GroupeFormPopup(idPopup, sTitle, iWidth, iHeight, iTop, iLeft, sOk){


  if (idPopup=='') throw("GroupePopup : nécessite au minimum le paramètre 1 (idPopup)");
	
	//Initialisation des propriétés
  this.id=idPopup
	this.type='GroupeFormPopup';
	this.oPopup=$(idPopup);
	this.oPopup.id='Main'+idPopup;
	this.HTMLContent=this.oPopup.innerHTML;
	this.oPopup.className=this.oPopup.className + ' PopupBorder';
	this.oPopup.style.position='absolute';
	(iWidth=='')?null:this.oPopup.style.width=iWidth+"px";
	(iHeight=='')?null:iHeight=' height: '+iHeight+"px";
	(iTop=='')?null:this.oPopup.style.top=iTop+"px";
	(iLeft=='')?null:this.oPopup.style.left=iLeft+"px";
	(sOk=='')?sOk='OK':null;
	
	//on réécrit le contenu du div pour façonner la popup
	this.oPopup.innerHTML=''
	+'<div id="'+this.id+'Handle"  class="PopupHandle" style="height: 20px">'
	+'	<span id="'+this.id+'Title" style="float: left;">'+sTitle+'</span>'
	+'</div>'
	+'<div id="'+this.id+'Content" class="PopupContent" style="clear: both; ">'
	+'  <div id="'+this.id+'" style="padding: 5px;overflow: auto;' + iHeight + '">'
	+'  '+this.HTMLContent
	+'  </div>'
	+'  <div id="'+this.id+'Controls" class="PopupControls">'
	+'	   <input type="button" name="'+this.id+'OK" id="'+this.id+'OK" value="'+sOk+'" onclick="javascript:ShowSelects(true);Element.hide(\''+this.id+'\');">'
	+'  </div>'
	+'</div>';
  
	//On la rend déplaçable
  new Draggable('Main'+this.id, {handle:this.id+'Handle'})
	//on arrondit les coins de la zone d'affichage
	Rico.Corner.round(this.id+'Content');
	//on cache tous les éléments Select de la page (pour IE)
	ShowSelects(false);
  
	//Définition des méthodes
	this.open=_open; //Ouverture d'un document externe dans le popup via Ajax
	this.Show=_show;
	this.Hide=_hide;
  this.SetText=_setText;
	this.ShowClose = _showClose;
	this.RelocateInside = _relocateInside;
}

//Affichage/dissimulation des éléments select de la page
//  bShow : booléen, true = afficher, false = cacher
function ShowSelects(bShow){
		//récupération de tous les select du document
		var someNodeList = document.getElementsByTagName('select');
		var nodes = $A(someNodeList);
		if(bShow){
		  //affichage des selects
  		nodes.each(function(node){
					node.style.visibility='visible';
  			});
		}else{
			//dissimulation des selects
  		nodes.each(function(node){
  			node.style.visibility='hidden';
  			});
		}
	}

//Méthode de chargement d'un document externe via Ajax
//  url : url du document à charger
//  params : paramètres à passer à l'url sous la forme : param1=val1&param2=val2
function _open(url, params){
  	new Ajax.Updater(
  			this.id+'', 
  			url, 
  			{
  				method: 'get', 
  				parameters: params
  			});
	}

function _show(){
	this.oPopup.style.display='block';
} 

function _hide(){
	this.oPopup.style.display='none';
} 

function _setText(sText){
  document.getElementById(this.id).innerHTML=sText;
}

function _showClose(bShow){
  if(bShow){
	  document.getElementById(this.id+'Close').style.display='inline';
	}else{
		  document.getElementById(this.id+'Close').style.display='none';
	}
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function _relocateInside(){
	//alert(findPosY(this.oPopup));
	//alert(findPosX(this.oPopup));		
}
//Extensions prévues
//-->possibilité de ne pas afficher de barre de titre
//--> personnalisation de l'icone fermer


