/***********************************************************
** Projet :			E-FONCIER	
** Nom fichier :	cadre_menu.js
** Contenu :		fonctions pour la gestion des fenêtres flottantes 
** Auteur :			LRA le 14/06/2006
** 
** Modifications : 
***********************************************************/

// Initialisation des variables globales 
var dragged_obj = null;
var redag_obj = null;
var close_obj = null;
var is_trans = null;
var depOpa = 60; // transparence lors du déplacement et en début de fermeture en pourcents, 0% = invisible
var vitOpa = 6; // vitesse de transition lors de la fermeture = -6% à chaque fois
var durOpa = 20; // temps entre deux appels de la transition lors de la fermeture 
var vitRed = 10; // vitesse de transition lors de la réduction ou de l'agrandissemnt, en %
var DurRed = 20; // durée entre deux appels de la fonction, en ms
// Chargement du contenu du div thématique 
var xhr = null; 


// Définition des actions durant le déplacement de l'objet 
function doDrag(e) {
	e = fixee(e);
	var difX=e.clientX-window.lastX;
	var difY=e.clientY-window.lastY;
	var newX1 = parseInt(dragged_obj.style.left)+difX;
	var newY1 = parseInt(dragged_obj.style.top)+difY;
	bodWidth = window.outerWidth  ;
	bodheight = window.outerHeight ;
	largeurObj = dragged_obj.style.width ;
	hauteurObj = dragged_obj.style.Height ;	
	if (newX1<0)newX1 = 0 ;
	if (newY1<0)newY1 = 0 ;
	if (newX1+largeurObj>bodWidth)newX1=bodWidth-largeurObj ;
	if (newY1+hauteurObj>bodheight)newY1=bodheight-hauteurObj ;
	dragged_obj.style.left=newX1+"px";
	dragged_obj.style.top=newY1+"px";
	window.lastX=e.clientX;
	window.lastY=e.clientY;
	return false;
}
// Définitions des actions au lancement du drag de l'objet 
//params : objet ou le drag a été défini || e évènement souris qui a déclenché le drag  
function beginDrag(o,e) {
	//if ( redag_obj || is_trans || close_obj ) return true;
	if (dragged_obj) {
		endDrag(null);
		return true;
	}
	e = fixee(e);
	if(e.button == 2 || e.button == 3){return true;}
	window.lastX=e.clientX;
	window.lastY=e.clientY;
	document.onmousemove=doDrag;
	document.onmouseup=endDrag;
	// Récupération du div parent à deplacer 
	dragged_obj=getFirstParentByClass(o,"cadre");	
	//Placer le bloc en déplacement en premier plan 	
	zmax = 0;
	var tables = document.getElementsByTagName("div");
	for (var i = 0; i < tables.length; i++) {
		if (parseInt(tables[i].style.zIndex) > parseInt(zmax) && parseInt(tables[i].style.zIndex) != 5000) {
			zmax = parseInt(tables[i].style.zIndex);
		}
	}	
	// Définir le style du bloc durant le déplacement 
	dragged_obj.style.zIndex = parseInt(zmax) + 1;
	dragged_obj.style.display="block";
	//dragged_obj.style.opacity=0.6;
	//dragged_obj.style.filter="alpha(opacity=60)";
	return false;
}
// Définition des actions à la fin du drag 
// params : e évènement souris 
function endDrag(e) {
	// Enlever les styles définis durant le déplacement 
	dragged_obj.style.display="block";
	dragged_obj.style.opacity="";
	dragged_obj.style.filter="";
	// Initialisation des évènements souris 
	document.onmousemove=null;
	document.onmouseup=null;
	// Initialisation du bloc déplacement 
	dragged_obj = null;
}
// Recupération de l'évènement suivant le navigateur 
function fixee(a){
	if(typeof a=="undefined")
		a=window.event;
	if(typeof a.layerX=="undefined")
		a.layerX=a.offsetX;
	if(typeof a.layerY=="undefined")
		a.layerY=a.offsetY;
	return a;
}
// Recupérer le premier objet parent de o dont la classe est name 
// Retourne l'objet parent 
function getFirstParentByClass(o,name) {
	/* tant que l'objet courant n'a pas la bonne classe, on cherche un objet parent */
	while (o!=null && o.className != name) { o = o.parentNode; }
	if (o!=null && o.className == name) {
		return o;
	}
	else {
		return null;
	}
}
// Récupérer le premier objet fils de o dont la classe est name 
// Retourne l'objet fils 
function getFirstChildByClass(o,name) {
	var k=0;
	while ( k < o.childNodes.length && o.childNodes[k].className != name ) { k++; }
	
	if ( k < o.childNodes.length && o.childNodes[k].className == name ) return o.childNodes[k];
	else return null;
	
}
// Function des objets de l'AJAX 	 
function getXhr(){
	if(window.XMLHttpRequest) // Firefox et autres
	   xhr = new XMLHttpRequest(); 
	else if(window.ActiveXObject){ // Internet Explorer 
	   try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
	}
	else { // XMLHttpRequest non supporté par le navigateur 
	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
	   xhr = false; 
	} 
}

// Fonctions de chargement du contenu de la fenêtre cadre thématique par ajax 
function chargementDivThematique(url){
	getXhr();
	// On défini ce qu'on va faire quand on aura la réponse
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4 && xhr.status == 200){
			oContenuMenu = getObjetContenu("cadre_menu");
			//oContenuHT = document.getElementById("contenu");
			oContenuMenu.innerHTML = xhr.responseText ;
			deroulerContenu("cadre_menu");
		}		
	}
	xhr.open("GET",url,true);
	xhr.send(null);	
}
// Ouverture de la 
function openThematique(id_categorie){	
	if (document.getElementById("cadre_menu").style.display != "block")document.getElementById("cadre_menu").style.display = "block";
	chargementDivThematique("fiche_parcelles.php?id_categorie="+id_categorie);	
}
function getObjetContenu (cadreid){
		cadreparent = document.getElementById(cadreid) ;
		cadreContenu = getFirstChildByClass(cadreparent,"contenu");
		return cadreContenu ; 
}
function contenuDeroule(cadreid){
	  cadreContenu = getObjetContenu(cadreid);
	  if(cadreContenu.style.display == "block")return true ;
	  else return false ;
}
function getBoutonReduire (cadreid){
		boutonReduire = document.getElementById("reduire_"+cadreid) ;
		return boutonReduire ; 
}
function getBoutonFermer (cadreid){
		boutonFermer = document.getElementById("fermer_"+cadreid) ;
		return boutonFermer ; 
}
function deroulerContenu(cadreid){
		var oContenu = getObjetContenu(cadreid);	
		var oReduire = getBoutonReduire (cadreid);	
		oContenu.style.display = "block";	
		redag_obj = oContenu;
		oContenu.style.height = "1px";
		oReduire.src = "../images/reduire.gif";
		AgrTransition();
		//oContenu.blur();
}
function reduireagrandir(cadreid){	
	var oContenu = getObjetContenu(cadreid);
	var oReduire = getBoutonReduire (cadreid);	
	redag_obj = oContenu;
	if ( oContenu.style.display == "none" || oContenu.style.height == "0px" ) {
		redag_obj.style.display="";		
		oContenu.style.height = "1px";
		oReduire.src = "../images/reduire.gif";
		AgrTransition();
		oContenu.blur();
	} else {		
		oContenu.style.height = oContenu.scrollHeight + "px";
		oReduire.src = "../images/agrandir.gif";
		RedTransition();
		oContenu.blur();
		oContenu.style.display = 'none';
	}
	
}
function reduireagrandirById(){	
	var oContenu = getObjetContenu(cadreid);
	var oReduire = getBoutonReduire (cadreid);	
	redag_obj = oContenu;
	if ( oContenu.style.display == "none" || oContenu.style.height == "0px" ) {
		redag_obj.style.display="";		
		oContenu.style.height = "1px";
		oReduire.src = "../images/reduire.gif";
		AgrTransition();
		oContenu.blur();
	} else {		
		oContenu.style.height = oContenu.scrollHeight + "px";
		oReduire.src = "../images/agrandir.gif";
		RedTransition();
		oContenu.blur();
	}
}
function RedTransition() {

	var hmax = redag_obj.scrollHeight;
	var hnow = parseInt(redag_obj.style.height.split("px")[0]);
	var tmpcib = hnow - ( hmax * vitRed / 100 );

	if ( tmpcib > 1 ) {
		redag_obj.style.height = tmpcib + "px";
		setTimeout("RedTransition();",DurRed);
	} else {
		redag_obj.style.display="none";
		redag_obj = null;
	}
}
function AgrTransition() {
	if(!redag_obj) return false;
	var hmax = redag_obj.scrollHeight;
	var hnow = parseInt(redag_obj.style.height.split("px")[0]);
	var tmpcib = hnow + ( hmax * vitRed / 100 );
	try {redag_obj.click(); } catch(e) { }
	if ( tmpcib < hmax ) {
		redag_obj.style.height = tmpcib + "px";
		setTimeout("AgrTransition();",DurRed);
	} else {
		redag_obj.style.height="";
		redag_obj = null;
	}
}
function fermer(cadreid) {
	document.onmousemove=null;
	dragged_obj = null;
	close_obj = document.getElementById(cadreid);
	var oContenu = getObjetContenu(cadreid);
	depOpaTest=0;
	fadewin(depOpaTest);
	oContenu.style.display = "none";
}
// Function pour faire disparaitre le bloc petit à petit avec la transparence 
function fadewin(opa) {
	var ofadewin = close_obj;
	ofadewin.style.opacity = opa / 100;
	ofadewin.style.filter="alpha(opacity=" + opa + ")";
	if ( ofadewin.style.opacity <= 0 ) { 
		ofadewin.style.display="none"; 
		ofadewin.style.opacity = 100;
		close_obj = null; 
	}
	else { 
		setTimeout("fadewin('" + (opa - vitOpa) + "')",durOpa); 
	}
}
// Function pour jouer le style d'affichage d'un block 
function transp(cadreid) {
	otransp = document.getElementById(cadreid);
	otransp.style.opacity = depOpa / 100;
	otransp.style.filter = "alpha(opacity=" + depOpa + ")";
	dragged_obj = otransp;
	document.onmousemove = endDrag;
}
function onmouseoverfermerreduire() {
	is_trans = 1;
}
function onmouseoutfermerreduire() {
	is_trans = null;
}
function clickContenu(divId) {
	//elementCptedStyle = element.currentStyle || window.getComputedStyle(element, null); 	
	var listDiv = document.getElementsByTagName("div");
	var zIndexMax = 0;
	for (var i = 0; i < listDiv.length; i++) {
		if (parseInt(listDiv[i].style.zIndex) > parseInt(zIndexMax) && parseInt(listDiv[i].style.zIndex) != 5000) {
			zIndexMax = parseInt(listDiv[i].style.zIndex);
		}
	}	
	id2Elt(divId).style.zIndex = parseInt(zIndexMax) + 1;
}
