/* variable global */

// stock la derniere action effectuer
var DerniereAction=null;

//Enregistre l'action effectuer sur une node afin de 
//pouvoir bloquée les autre action sur celle-ci temps que la 1er n'est pas finit
var TabAction=new Array();


/****************************
 * nom : onMouse
 * desciption : modification de la class (l'icône) 
 * d'une node au survole de la souris
 * 
 * @param el : id de l'element etant survolée
 ****************************/
function onMouse(el) {
		
	//en mode normal et en mode d'action en cours...
	switch (el.className) {
		case 'Tree_vlm Tree_vloading':
			el.className="Tree_vlmh Tree_vloading";
		break;
		case 'Tree_vtmh Tree_vloading':
			el.className="Tree_vtm Tree_vloading";
		break;
		case 'Tree_vtm Tree_vloading':
			el.className="Tree_vtmh Tree_vloading";
		break;
		case 'Tree_vlp Tree_vloading':
			el.className="Tree_vlph Tree_vloading";
		break;
		case 'Tree_vlph Tree_vloading':
			el.className="Tree_vlp Tree_vloading";
		break;
		case 'Tree_vtph Tree_vloading':
			el.className="Tree_vtp Tree_vloading";
		break;
		case 'Tree_vtp Tree_vloading':
			el.className="Tree_vtph Tree_vloading";
		break;
		case 'Tree_vlmh Tree_vloading':
			el.className="Tree_vlm Tree_vloading";
		break;
		case 'Tree_vlmh':
			el.className="Tree_vlm";
		break;
		case 'Tree_vlm':
			el.className="Tree_vlmh";
		break;
		case 'Tree_vtmh':
			el.className="Tree_vtm";
		break;
		case 'Tree_vtm':
			el.className="Tree_vtmh";
		break;
		case 'Tree_vlp':
			el.className="Tree_vlph";
		break;
		case 'Tree_vlph':
			el.className="Tree_vlp";
		break;
		case 'Tree_vtph':
			el.className="Tree_vtp";
		break;
		case 'Tree_vtp':
			el.className="Tree_vtph";
		break;
	}
	
}

/****************************
 * nom : onMouseCategorie
 * desciption : modification de l'icône
 * d'une categorie au survole de la souris
 * 
 * @param el : id de l'element etant survolée
 * @param action : action effectuer : over / out
 ****************************/
function onMouseCategorie(el,action) {
	if (action=="over") {
		if (el.getAttribute("value")=="exp") el.src="../common/img/TreeView/collapseh_cat.gif";
		else el.src="../common/img/TreeView/expapseh_cat.GIF";
	} else {
		if (el.getAttribute("value")=="exp") el.src="../common/img/TreeView/collapseon_cat.gif"; 
		else el.src="../common/img/TreeView/expapseon_cat.GIF"
	}
	
}

/****************************
 * nom : clikNode
 * desciption : Déroule ou enroule le contenue 
 * d'une node (les nodes filles) au clique sur l'icône 
 * 
 * @param el : DOMElement de l'icone cliquée
 * @param div: identifant de la partie cliquée
 ****************************/
function clikNode(el,div) {
	
	//Enregistre l'action , afin de bloquée les autres actions 
	//possible sur le même objet, temps que celle-ci n'est pas finit.
	if (!TabAction[el.id]) {
		TabAction[el.id] =true;
		
		var etat = DOM("child_"+div).className;
		
		//on modifie l'icone (class) de la node [+] => [-][loading]  et [-] => [+][loading]
		switch (el.className) {
			case 'Tree_vlmh':
				el.className="Tree_vlph Tree_vloading";
			break;
			case 'Tree_vlm':
				el.className="Tree_vlp Tree_vloading";
			break;
			case 'Tree_vtmh':
				el.className="Tree_vtph Tree_vloading";
			break;
			case 'Tree_vtm':
				el.className="Tree_vtp Tree_vloading";
			break;
			case 'Tree_vlp':
				el.className="Tree_vlm Tree_vloading";
			break;
			case 'Tree_vlph':
				el.className="Tree_vlmh Tree_vloading";
			break;
			case 'Tree_vtph':
				el.className="Tree_vtmh Tree_vloading";
			break;
			case 'Tree_vtp':
				el.className="Tree_vtm Tree_vloading";
			break;
		}
		
		if (etat=="Tree_vchildren Tree_div_show") {
			//on déclenché le masquage processif des nodes filles
			window.setTimeout("collspaceNode('child_"+div+"','endCollspace(\""+div+"\")')",50);
		}
		else {
			//on affiche la div contant les nodes filles
			DOM("child_"+div).className="Tree_vchildren Tree_div_show";
			//on déclenché l'affichage progressif des nodes filles
			window.setTimeout("expendNode('child_"+div+"','endNode(\""+div+"\")')",50);
		}
		
	}
}

/****************************
 * nom : endNode
 * desciption : fin de l'action de Déroulement 
 * ou d'enroulement du contenue d'une node
 * 
 * @param div: identifant de la partie cliquée
 ****************************/
function endNode(div) {
		var el = DOM("bt_"+div);
		
		//on modifie l'icone (class) de la node [-][loading] => [-]  et [+][loading] => [+]
		switch (el.className) {
			case 'Tree_vlmh Tree_vloading':
				el.className="Tree_vlmh";
			break;
			case 'Tree_vlm Tree_vloading':
				el.className="Tree_vlm";
			break;
			case 'Tree_vtmh Tree_vloading':
				el.className="Tree_vtmh";
			break;
			case 'Tree_vtm Tree_vloading':
				el.className="Tree_vtm";
			break;
			case 'Tree_vlp Tree_vloading':
				el.className="Tree_vlp";
			break;
			case 'Tree_vlph Tree_vloading':
				el.className="Tree_vlph";
			break;
			case 'Tree_vtph Tree_vloading':
				el.className="Tree_vtph";
			break;
			case 'Tree_vtp Tree_vloading':
				el.className="Tree_vtp";
			break;
		}
		
	//On rend les actions possibles pour la node
	TabAction[el.id]=false;
}

/****************************
 * nom : endCollspace
 * desciption : fin de l'action d'enroulement 
 * du contenue d'une node : on 
 * 
 * @param div: identifant de la partie cliquée
 ****************************/
function endCollspace(div) {
	//on masque la div contant les nodes filles
	DOM("child_"+div).className="Tree_vchildren Tree_div_hide"; 
	// declencehement de la fin d'action normal
	endNode(div);
}

/****************************
 * nom : clikTree
 * desciption : Déroule ou enroule le contenue 
 * d'une categorie au clique sur l'icône 
 * 
 * @param el : DOMElement de l'icone cliquée
 * @param div: identifant de la partie cliquée
 ****************************/
function clikTree(el,div) {
	
	var etat = el.getAttribute("value");
	
	if (etat=="exp") {
		//test si la derniere action est un expend
		if (DerniereAction!=null){
			//oui donc on replie la categorie qui a été dérouler
			clikTree(DerniereAction[0],DerniereAction[1]); }
		// on enregistre l'action
		DerniereAction=new Array(el,div);
		el.setAttribute("value","coll");
		//on modifie l'icone
		el.src="../common/img/TreeView/expapseon.GIF";
		//on déclenché l'affichage progressif du contenue
		window.setTimeout("expendNode('"+div+"')",50);
	}
	else {
	    // on enregistre l'action
		DerniereAction=null;
		el.setAttribute("value","exp");
		//on modifie l'icone
		el.src="../common/img/TreeView/collapseon.gif"
		//on déclenché le masquage processif du contenue
		window.setTimeout("collspaceNode('"+div+"',null,"+DOM(div).getAttribute("max")+")",50);
	}
	
}

/****************************
 * nom : expendNode
 * desciption : affiche la partie de 
 * l'arbre voulu de facon progressif
 * 
 * @param div: id de l'element qui a été cliqué
 * @param handel : fonction a executer a la fin de l'affichage
 * @param max : nombre max d'element a affiché
 ****************************/
function expendNode(div,handel,max) {
	
	//on insialise les parametre optionels
	if (typeof handel=='undefined') handel=null;
	if (typeof max=='undefined') max=-1;
	
	var obj=DOM(div);
	// On vérifie d'abord si l'objet n'est pas vide, c.-à-d. s'il a des enfants 
	if (obj.hasChildNodes())
	{
	  var collEnfants = obj.childNodes;
	  var etat=true;
	  var nb=0;
	  // on parcoure les childs	  
	  for (var i=collEnfants.length-1 ; -1 < i; i--) 
	  {
		//on recuper l'objet enfant
		objNode=collEnfants[i];	
		//test si l'objet est bien une div
		if (typeof(collEnfants[i].id)!="undefined") {
			//test si on a pas atteind le nombre max d'element a affiché
			if (nb>max && max!=-1) { break; etat=false; }		
			//test si l'objet est affiché
			if (objNode.className=="Tree_vitem Tree_div_hide") {
				//afficahe de l'objet
				objNode.className="Tree_vitem Tree_div_show";
				etat=false;
				// on passe au suivant
				window.setTimeout("expendNode('"+div+"','"+handel+"',"+max+")",50);
				break;
			}
			nb++;
		} else objNode.inerHTML="";
	  }
	  //fin de l'action on declanche la fonction apprpriée
	  if (etat) eval(handel);
	}
}

/****************************
 * nom : collspaceNode
 * desciption : masque la partie de 
 * l'arbre voulu de facon progressif
 * 
 * @param div: id de l'element qui a été cliqué
 * @param handel : fonction a executer a la fin du masquage
 * @param max : nombre max d'element a masqué
 ****************************/
function collspaceNode(div,handel,max) {
	
	//on insialise les parametre optionels
	if (typeof handel=='undefined') handel=null;
	if (typeof max=='undefined') max=-1;
	
	var obj=DOM(div);
	// On vérifie d'abord si l'objet n'est pas vide, c.-à-d. s'il a des enfants 
	if (obj.hasChildNodes())
	{
	  var collEnfants = obj.childNodes;
	  var etat=true;
	  var nb=0;
	  
	  // on parcoure les childs
	  for (var i=0 ; i<collEnfants.length; i++) 
	  {
		//on recuper l'objet enfant
		objNode=collEnfants[i];	
		//test si l'objet est bien une div
		if (typeof(collEnfants[i].id)!="undefined") {
			//test si on a pas atteind le nombre max d'element a masqué
			if ((nb>max && max!=-1) || max==-1) {		
				//test si l'objet est masqué
				if (objNode.className=="Tree_vitem Tree_div_show") {
					//masque de l'objet
					objNode.className="Tree_vitem Tree_div_hide";
					etat=false;
					// on passe au suivant
					window.setTimeout("collspaceNode('"+div+"','"+handel+"',"+max+")",50);
					break;
				}
			}
			nb++;
		}
	  }
	 //fin de l'action on declanche la fonction apprpriée
	if (etat) eval(handel);
	}
}



//#########################################################################################################################################
// fonction de manipluation des elements du DOM

function DOM() {
   var elements = new Array();
   for (var i = 0; i < arguments.length; i++) {
      var element = arguments[i];
      if (typeof element == 'string'){
         element = _getInstance(element);
      }
      if (arguments.length == 1)
         return element;
      elements.push(element);
   }
   return elements;
}



function _getInstance(pId) {
 //Retourne un pointeur sur l'objet DOM, retourne false si l'objet n'existe pas
   if(document.getElementById){
       var el = document.getElementById(pId);
       if(el != null && pId != el.id){//pour eviter que IE ne retourne le premier ?l?ment d'un radio group
          el = null;
       }
       return el;
   } else if(document.all){
       return document.all[pId];
   } else {
      return null;
   }
}
