/****************************************************************************************/
// Tree by Umazuma
/****************************************************************************************/
/****************************************************************************************/

var myArboList;		// Cet objet lui-même pour l'appeler dans des fonctions internes

function ArboList(){
	var treeId;				// Id de la liste
	var tabEntree ;			// tableaux des li
	var activNode;			// Le noeud qui est en train d'être survolé
	var activNodeId;		// Id du noeud qui flotte
	var activNodePage;		// Page du noeud qui flotte
	var myDivToClone;		// La div à cloner
	var pos_x;				// Position de l'élément à cloner
	var pos_y;				// Position de l'élément à cloner
	var mouse_x;			// Coordonnées x de la souris
	var mouse_y;			// Coordonnées y de la souris
	var mouse_offset_x; 	// offset x du pointeur sur l'objet
	var mouse_offset_y;		// offset y du pointeur sur l'objet
	var empty_node_height; 	// Hauteur de la node vide
	var empty_node_width; 	// Largeur de la node vide
	var timer1;				// identifiant de timer
	var dragTimer; 			// Timer de délais sur la création de node (stabilité FIREFOX)
	var etat_nodes;			// Etat des noued ouverts et fermés
}


// *** Prototypage *** //	

// Récupérer le cookie de l'arbre
/****************************************************************************************/
ArboList.prototype.get_cookie = function(name) { 
		
	var start = document.cookie.indexOf(name+"="); 
	var len = start+name.length+1; 
	if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
	if (start == -1) return null; 
	var end = document.cookie.indexOf(";",len); 
	if (end == -1) end = document.cookie.length; 
	return unescape(document.cookie.substring(len,end));

} 


// Ecrire le cookie de l'arbre
/****************************************************************************************/
ArboList.prototype.set_cookie = function(name,value,expires,path,domain,secure) { 
	
	expires = expires * 60*60*24*1000;
	var today = new Date();
	var expires_date = new Date( today.getTime() + (expires) );
	var cookieString = name + "=" +escape(value) + 
	   ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
	   ( (path) ? ";path=" + path : "") + 
	   ( (domain) ? ";domain=" + domain : "") + 
	   ( (secure) ? ";secure" : ""); 

	document.cookie = cookieString; 

}
			
// trouver la position en Y de l'objet
/****************************************************************************************/
ArboList.prototype.yPos = function(obj){
	var top = obj.offsetTop/1;
	while((obj = obj.offsetParent) != null){
		if(obj.tagName!='HTML')top += obj.offsetTop;
	}			
	if(document.all)top = top/1 + 13; else top = top/1 + 4;		
	return top;
}
	

// Trouver la position en X de l'objet
/****************************************************************************************/
ArboList.prototype.xPos = function(obj){
	var left = obj.offsetLeft/1 + 1;
	while((obj = obj.offsetParent) != null){
		if(obj.tagName!='HTML')left += obj.offsetLeft;
	}
		
	if(document.all)left = left/1 - 2;
	return left;
}

// Récupérer l'arborescence de l'arbre
/****************************************************************************************/
ArboList.prototype.getSchema = function(arbre,schema){
			
	if(!schema){
		var schema = '';
	}
	if(!arbre){
		arbre = document.getElementById(myArboList.treeId);
	}
	var lis = arbre.getElementsByTagName('LI');

	if(lis.length > 0){
		var li = lis[0];
		while(li){
			if(li.id){
				if(schema.length > 0){
					schema = schema + ',';
				}
				//var numericID = li.id.replace(/[^0-9]/gi,'');
				var pageID = li.getAttribute('page');
				/*if(numericID.length == 0){
					numericID = 'A';
				}*/
				
				var numericParentID = li.parentNode.parentNode.getAttribute('page');
				if(numericParentID == null){
					numericParentID = 0;
				}
				
				schema = schema + pageID;
				schema = schema + '-';
				schema = schema + numericParentID;
				/*schema = schema + '-';
				schema = schema + numericID;*/
				
				var ul = li.getElementsByTagName('UL');
				if(ul.length>0){
					schema = myArboList.getSchema(ul[0],schema);	
				}	
			}			
			li = li.nextSibling;
		}
	}

	return schema;
}

ArboList.prototype.send_affiche = function(ajax){
	
	//document.getElementById('r1').innerHTML =ajax.responseText;
	thisPage.reorder_menu_page();
}


// Envoyer les données sur un schéma en AJAX vers le serveur
/****************************************************************************************/
ArboList.prototype.sendDataTree = function(){
	
	var schema = myArboList.getSchema();
	
	//alert(schema);
	

	/************************************************************************/
	// Réorganiser les menus...
	/************************************************************************/
	// Création d'un objet de requete 
	method 		= "GET";
	data 		= "";
	url			= "/umaservices/umapage/inc/utilities.php?what=reorder_menu&schema="+schema; 
	myAjax 		= new UmaAjax(method, data, url, myArboList.send_affiche);

}

// Décaler les LI pour mettre le contenu vide en face du flottant
/****************************************************************************************/
ArboList.prototype.decalDiv = function(index_div_activ){
		
	// Rechercher la div vide
	for(var i=0; i< myArboList.tabEntree.length; i++){
		
		myArboList.tabEntree[i].parentNode.style.borderBottom = "1px solid white";
		if(myArboList.tabEntree[i].parentNode.innerHTML == '<a href=""></a>'){
			var empty_node = i;
		}
		
	}
	//myArboList.myDivToClone.style.borderBottom = "1px dotted red";	
	
	//myArboList.tabEntree[index_div_activ].parentNode.style.borderBottom = "5px solid red";
	// Superposer l'image d'addition
	myAdd = document.getElementById("insertIt");
	myAdd.style.visibility = "visible";
	myAdd.style.position ="absolute";
	myAdd.style.left = (myArboList.xPos(myArboList.tabEntree[index_div_activ].parentNode)-20)+"px";
	myAdd.style.top = (myArboList.yPos(myArboList.tabEntree[index_div_activ].parentNode)+10)+"px";
	myArboList.tabEntree[index_div_activ].parentNode.style.borderBottom = "0";
	
	// Si c'est décalé un peu on change de couleur pur indiqué que c'est à ajouter au UL
	if(myArboList.ajout){
		document.getElementById("insertIt").style.visibility ="hidden";
		// Superposer l'image d'addition
		myAdd = document.getElementById("addIt");
		myAdd.style.visibility = "visible";
		myAdd.style.position ="absolute";
		myAdd.style.left = (myArboList.xPos(myArboList.tabEntree[index_div_activ].parentNode)+30)+"px";
		myAdd.style.top = myArboList.yPos(myArboList.tabEntree[index_div_activ].parentNode)+"px";
		myArboList.tabEntree[index_div_activ].parentNode.style.borderBottom = "0";
	}else{
		document.getElementById("addIt").style.visibility ="hidden";
	}
	
	myArboList.activNode = index_div_activ;	
}

// Supprimer le clone du LI sur lequel on vient de cliquer
/****************************************************************************************/
ArboList.prototype.deleteClone = function(){
	
	// Si on a bougé modifier les divs actives
	if(document.getElementById("clone")){
		
		// Si c'st un ajout créer un UL dans ce LI s'il n'existe pas
		if(myArboList.ajout){
			
			nextDiv = myArboList.tabEntree[myArboList.activNode].parentNode;
			//Créer le li avec les données
			myNewDiv = document.createElement("LI");
			myNewDiv.setAttribute("id", document.getElementById("clone").name);
			myNewDiv.setAttribute("page", myArboList.activNodePage);
			myNewDiv.innerHTML = document.getElementById("clone").innerHTML;
			
			// Voir s'il existe un ul déjà ou pas
			ulExist = -1;
			for(i=0; i< nextDiv.childNodes.length; i++){
				if(nextDiv.childNodes[i].nodeName == "UL"){
					ulExist = i;	
				}
			}
			// Ajouter un UL si besoin
			if(ulExist < 0){
				myNewUl = document.createElement("UL");
				myNewUl.appendChild(myNewDiv);
				nextDiv.appendChild(myNewUl);
			}else{
				nextDiv.childNodes[ulExist].appendChild(myNewDiv);
			}
		
		}else{
		
			//Ajouter un div vide en dessous de cette div
			myNewDiv = document.createElement("LI");
			myNewDiv.setAttribute("id", document.getElementById("clone").name);
			myNewDiv.setAttribute("page", myArboList.activNodePage);
			myNewDiv.innerHTML = document.getElementById("clone").innerHTML;
			nextDiv = myArboList.tabEntree[myArboList.activNode+1].parentNode;
			nextDiv.style.border ="1px dotted orange"; 
			nextDiv.parentNode.insertBefore(myNewDiv, nextDiv);
		
		}
		// Supprimer la div vide à dupliquer
		for(var i=0; i< myArboList.tabEntree.length; i++){
		
		myArboList.tabEntree[i].parentNode.style.borderBottom = "1px solid white";
		myArboList.tabEntree[i].parentNode.style.borderBottom = "0";
		if(myArboList.tabEntree[i].parentNode.innerHTML == '<a href=""></a>'){
			myArboList.tabEntree[i].parentNode.parentNode.removeChild(myArboList.tabEntree[i].parentNode);
		}
		
	}

		// Supprimer la div flottante
		document.body.removeChild(document.getElementById("clone"));
	}
	
	// Masquer l'image d'addition et d'insertion
	document.getElementById("addIt").style.visibility = "hidden";
	document.getElementById("insertIt").style.visibility ="hidden";
		
	// Renvoyer les données de l'arbre en AJAX
	myArboList.sendDataTree();
	return;
}

// Bouger la div flottante en suivant la souris
/****************************************************************************************/
ArboList.prototype.moveFloatDiv = function(e){
	
	// Si le clone n'existe pas sortir (délais de Firefox...)
	if(!document.getElementById("clone")){	
		return;	
	}
		
	// detection des coordonnées de souris
	if(document.all)e = event;
	myArboList.mouse_x = e.clientX ;
	myArboList.mouse_y = e.clientY;
	// récupérer l'offset entre la souris et l'élément si c'est juste au clic
	if(myArboList.mouse_offset_x < 0){
		myArboList.mouse_offset_x = myArboList.mouse_x - parseInt(myFloatDiv.style.left);
		myArboList.mouse_offset_y = myArboList.mouse_y - parseInt(myFloatDiv.style.top);
	}
	
	
	myFloatDiv = document.getElementById("clone");
	//myFloatDiv.style.left = (myArboList.mouse_x - myArboList.mouse_offset_x)+"px";
	myFloatDiv.style.left = (myArboList.mouse_x)+"px";
	myFloatDiv.style.top = (myArboList.mouse_y - myArboList.mouse_offset_y)+"px";
	
	// Détecter les collisions
	pos_x_float_div = parseInt(myFloatDiv.style.left);
	pos_y_float_div = parseInt(myFloatDiv.style.top);
	
	

	for(var i=0; i< myArboList.tabEntree.length; i++){
		pos_x_li = myArboList.xPos(myArboList.tabEntree[i].parentNode);
		pos_y_li = myArboList.yPos(myArboList.tabEntree[i].parentNode);
		width_li = myFloatDiv.offsetWidth;
		height_li = myFloatDiv.offsetHeight;
		// Regarder si les coordonnées de la div flottante
		// sont dans ce rectangle
		en_largeur = ((pos_x_float_div < (pos_x_li + width_li)));
		en_hauteur = ((pos_y_float_div  > pos_y_li) &&  (pos_y_float_div < (pos_y_li + height_li)));  
		
		// Si c'est en décalage vers la droite de plus de 50px c'est un ajout et pas un rangement en dessous
		if((pos_x_float_div > (pos_x_li + 50))){
			 myArboList.ajout = 1;
		}else{
			myArboList.ajout = 0;
		}
		
		if (en_largeur   && en_hauteur){
			// détecter les collision 
			myArboList.decalDiv(i);
			//
			break;
		}
	}
	
}

// Bouger la div flottante en suivant la souris
/****************************************************************************************/
ArboList.prototype.clearFloatDiv = function(){
	
	//window.releaseEvents(Event.MOUSEMOVE);
	clearTimeout(myArboList.timer1);
	myArboList.timer_clone = 0;
	myArboList.dragTimer = 0;
	if(!document.getElementById("clone")){
		return;	
	}
	myArboList.deleteClone();
	myArboList.mouse_offset_x = -1;
	myArboList.mouse_offset_y = -1;

}

// Créer un clone du LI sur lequel on vient de cliquer
/****************************************************************************************/
ArboList.prototype.createClone = function(){
	
	// Temporiser 200 ms pour Firefox 
	if(myArboList.dragTimer < 5){
		myArboList.dragTimer++;	
		myArboList.timer1 = setTimeout(myArboList.createClone, 20);
		return;
	}
	
	// Créer un élément avec le même contenu que le LI
	myClone = document.createElement("div");
	myClone.setAttribute("id", "clone");
	myClone.name = myArboList.myDivToClone.id;
	document.body.appendChild(myClone);
	
	// Positionner le nouveau div avec un peu de décalage
	myFloatDiv = document.getElementById("clone");
	myFloatDiv.style.position ="absolute";
	myFloatDiv.style.width = myArboList.myDivToClone.offsetWidth+"px";
	myFloatDiv.style.left = myArboList.pos_x+"px";
	myFloatDiv.style.top = myArboList.pos_y+"px";
	myFloatDiv.style.zIndex = 3500;
	myFloatDiv.className = "floatingNode";
	
	myFloatDiv.innerHTML = myArboList.myDivToClone.innerHTML;
	// Récupérer l'id et la page du node actif
	myArboList.activNodeId = myArboList.myDivToClone.id;
	myArboList.activNodePage = myArboList.myDivToClone.getAttribute('page');
	// Récupérer la valeur de la hauter de l'objet bougé
	myArboList.empty_node_height = myArboList.myDivToClone.offsetHeight;
	myArboList.empty_node_width = myArboList.myDivToClone.offsetWidth;
	// Vider le contenu du LI sélectionné et mettre une bordure pointillée
	myArboList.myDivToClone.innerHTML = '<a href=""></a>';
	
	myArboList.myDivToClone.style.border = "1px dotted black";
	myArboList.myDivToClone.style.height = "20px";
	
	// Autoriser le mouvement lors du déplacement de souris
	//window.captureEvents(Event.MOUSEMOVE);
	if(document.all){
		// Pour IE
		document.onmousemove = myArboList.moveFloatDiv;
		// Supprimer le clone à la souris relacher
		document.onmouseup = myArboList.clearFloatDiv;
		
	}else{
		window.onmousemove = myArboList.moveFloatDiv;
		// Supprimer le clone à la souris relacher	
		window.onmouseup = myArboList.clearFloatDiv;
	}
	
	

	return;
	
}

// Ajouter une icone de document
/****************************************************************************************/
ArboList.prototype.addIconeDoc = function(thisDiv){
	
	// Créer une image
	myDoc = document.createElement("IMG");
	
	// Placer l'icone de document (tester la classe.
	if(thisDiv.parentNode.className){
		myDoc.setAttribute("src", "images_interface/tree/"+thisDiv.parentNode.className);
	}else{
		myDoc.setAttribute("src", "images_interface/tree/document.gif");
	}
	
	myDoc.setAttribute("border", "0");
	myDoc.setAttribute("align", "absmiddle");
	// Mettre une image de document
	//this.tabEntree[i].appendChild(myDoc);
	thisDiv.parentNode.insertBefore(myDoc,thisDiv);

	
}

// Ajouter une icone de document
/****************************************************************************************/
ArboList.prototype.toggleOpenClose = function(thisDiv){
	
	nodeIdToToggle = thisDiv.parentNode.id.replace(/[^0-9]/g,'');
	myVis = thisDiv.parentNode.childNodes[3].style.display;
	if(!myVis || myVis == "block"){
		thisDiv.parentNode.childNodes[3].style.display = "none";
		thisDiv.parentNode.childNodes[0].setAttribute("src", "images_interface/tree/plus.gif");
		// Mettre dans le cookie les nodes fermées
		if(!myArboList.etat_nodes){
			myArboList.etat_nodes = ',';
		}
		if(myArboList.etat_nodes.indexOf(',' + nodeIdToToggle + ',') < 0) {
			myArboList.etat_nodes = myArboList.etat_nodes + nodeIdToToggle + ',';
		}
		
		
	}else{
		thisDiv.parentNode.childNodes[3].style.display = "block";
		thisDiv.parentNode.childNodes[0].setAttribute("src", "images_interface/tree/moins.gif");
		// Enlever le node du cookie
		myArboList.etat_nodes = myArboList.etat_nodes.replace(',' + nodeIdToToggle,'');
	}
	myArboList.set_cookie(myArboList.treeId,myArboList.etat_nodes,500);	
}

// Ajouter une icone de document
/****************************************************************************************/
ArboList.prototype.addIconePlus = function(thisDiv){
	
	// Créer une image
	myDoc = document.createElement("IMG");
	
	// Placer l'icone de document (tester la classe.
	myDoc.setAttribute("src", "images_interface/tree/moins.gif");
	myDoc.setAttribute("border", "0");
	
	if(thisDiv.parentNode.childNodes.length <= 1){
		myDoc.style.visibility="hidden";
	}
	myDoc.onclick = function(){
		myArboList.toggleOpenClose(thisDiv);
	}
	// Mettre une image de document
	thisDiv.parentNode.insertBefore(myDoc,thisDiv);

	
}

var timer_clone = 0;
var tp1 = 0;
// démarrage de l'objet
/****************************************************************************************/
ArboList.prototype.init = function(){
	
	myArboList = this;
	myArboList.activeNode = 0;
	myArboList.timer1 = 0;
	myArboList.mouse_offset_x = -1;
	myArboList.mouse_offset_y = -1;
	
	// Créer une image d'addition
	myAdd = document.createElement("IMG");
	myAdd.setAttribute("src", "images_interface/tree/insertit.gif");
	myAdd.setAttribute("id", "insertIt");
	document.body.appendChild(myAdd);
	
	
	// Activer le clic sur chaque lien de l'arbre
	
	 // Créer une image d'insertion
	myAdd = document.createElement("IMG");
	myAdd.setAttribute("src", "images_interface/tree/addit.gif");
	myAdd.setAttribute("id", "addIt");
	document.body.appendChild(myAdd);
	// Activer le clic sur chaque lien de l'arbre
	if(document.getElementById(this.treeId)){
		this.tabEntree = document.getElementById(this.treeId).getElementsByTagName("a");	
	
	
	
		for(i=0; i< this.tabEntree.length; i++){
			
			this.addIconePlus(this.tabEntree[i]);
			this.addIconeDoc(this.tabEntree[i]);
					
			// Surligner au passage de la souris
			this.tabEntree[i].onmouseover = function(){
				this.style.backgroundColor="#e0e0e0";
			}
			
			// éteindre au enlevé de la souris
			this.tabEntree[i].onmouseout = function(){
				this.style.backgroundColor="#fff";
			}
			
			
			// Créer un clone à souris enfoncée
			/*this.tabEntree[i].onmousedown = function(){
	
				function test_delay(){
					if(timer_clone == 5){
						timer_clone = 0;
						myArboList.myDivToClone = myTab;
						myArboList.pos_x = myArboList.xPos(myTab);
						myArboList.pos_y = myArboList.yPos(myTab);
						myArboList.createClone();
					}else{
						timer_clone ++;
						tp1 = setTimeout(test_delay, 20);
					}
				}
				
				if(!myArboList.activNode){
					// Créer un délais pour valider le déplacement
					var myTab = this.parentNode;
					myArboList.activNode = i;
					test_delay();
				}
				
			}
			
			this.tabEntree[i].onmouseup = function(){
				
				clearTimeout(tp1);
				timer_clone = 0;
				if(document.getElementById('clone')){
					myArboList.deleteClone();
				}
				
			}*/
		}
		
		
		// Initialiser les ul fermées stockés dans le cookie
		myArboList.etat_nodes = myArboList.get_cookie(myArboList.treeId);
		
		if(myArboList.etat_nodes){
			var nodesFermees = myArboList.etat_nodes.split(',');
			
			for(var i=0; i<document.getElementById(this.treeId).getElementsByTagName("LI").length; i++){
				for(var j=0; j<nodesFermees.length; j++  ){
					if(document.getElementById(this.treeId).getElementsByTagName("LI")[i].id == "node"+nodesFermees[j]){
						document.getElementById("node"+nodesFermees[j]).childNodes[3].style.display = "none";
						document.getElementById("node"+nodesFermees[j]).childNodes[0].setAttribute("src", "images_interface/tree/plus.gif");
					}
				}
			}
		}
	}
}

/****************************************************************************************/
/****************************************************************************************/
// FIN
/****************************************************************************************/
/****************************************************************************************/
