



//-------------------------------------------------------------------------------------------------------------
//-----------------------------------------CONSTRUCTEUR--------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------

function jslib_arbo(instance)
{	
	
	//---------- instance de la classe-------------
	this.instance=instance; 
	//---------- instance de la classe-------------
	
	//----------FONCTIONS PUBLIQUES----------------
	this.arbo_add=jslib_arbo_add;
	this.arbo_load=jslib_arbo_load;
	
	this.arbo_dragable=jslib_arbo_dragable;
	//----------FONCTIONS PUBLIQUES----------------
	
	
	this.liste=0;
	
	//----------FONCTIONS PRIVATES----------------
	this.arbo_niveau=jslib_arbo_niveau;
	this.arbo_getparent=jslib_arbo_getparent;
	this.arbo_exist=jslib_arbo_exist;
	this.arbo_deploy=jslib_arbo_deploy;
	this.arbo_ligne=jslib_arbo_ligne;
	
	this.arbo_rename=jslib_arbo_rename;
	this.arbo_rename_valid=jslib_arbo_rename_valid
	this.arbo_newdir=jslib_arbo_newdir;
	this.arbo_newdir_valid=jslib_arbo_newdir_valid;
	//----------FONCTIONS PRIVATES----------------
	
	//----------CONSTANTES PRIVATES----------------	
	this.img_liste=jslib_arbo_img_liste;
	this.img_moins=jslib_arbo_img_moins;
	this.img_plus=jslib_arbo_img_plus;
	this.img_dirclose=jslib_arbo_img_dirclose;
	this.img_diropen=jslib_arbo_img_diropen;
	this.img_valider=jslib_arbo_img_valider;
	this.img_annuler=jslib_arbo_img_annuler;
	this.img_supp=jslib_arbo_img_supp;
	this.img_rename=jslib_arbo_img_rename;
	this.img_move=jslib_arbo_img_move;
	this.img_newdir=jslib_arbo_img_newdir;
	this.img_prop=jslib_arbo_img_prop;
	//----------CONSTANTES PRIVATES----------------
	
	
}
//-------------------------------------------------------------------------------------------------------------
//-----------------------------------------CONSTRUCTEUR--------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------






//-------------------------------------------------------------------------------------------------------------
//-----------------------------------------ARBORESCENCE--------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
function jslib_arbo_add(iddiv,tabarbo,selection,modemenu,del,rename,move,newdir,prop){
	
		var divarbo = getbyidname(iddiv);
			
		this.divarbo=divarbo;
			
		this.tabarbo=tabarbo;
			
		this.selection=selection;
		this.modemenu=modemenu;		
		this.del=del;
		this.rename=rename;
		this.move=move;
		this.newdir=newdir;
		this.prop=prop;	
}




function jslib_arbo_exist(ligneId){	
	try{
		var id=this.tabarbo[ligneId][0];
	}catch(e){
		return false;
	}
	return true;
}

function jslib_arbo_getparent(ligneId){	
	return this.tabarbo[ligneId][0];
}


function jslib_arbo_dragable(src,dst){
	
	
	var iddest=dst.substr(dst.lastIndexOf('_')+1);
	var eldest=dst.substr(0,dst.lastIndexOf('_'));
	//alert(this.drag.dragsrc+'--'+src+'--'+dst+'--'+iddest+'--'+eldest);
	if (eldest==this.drag.dragsrc){	
		
		
		if (iddest==this.arbo_getparent(src)) return false;
		
		var parent=iddest;
		while (parent!=null){
			if (src==parent) return false;
			parent=this.arbo_getparent(parent);
		}
 	}
	
	return true;	
}	

function jslib_arbo_load(){	
			this.drag=new jslib_drag(this.instance+".drag")
			this.drag.dragsrc='liligne_'+this.instance;
			this.drag.dragdst='self';
			
			//alert(this.instance+'.arbo_dragable');
			this.drag.onover=this.instance+'.arbo_dragable';
			this.drag.ondrag=this.ondrag
	
	
		//INIT NOUVEAU CHAMP
		for (var ligneId in this.tabarbo) {	
			this.tabarbo[ligneId].push(0); //nombre d'enfant
			this.tabarbo[ligneId].push(false); //ouvert
			this.tabarbo[ligneId].push(0); //niveau
			this.tabarbo[ligneId].push(false); //selectionné
		}
		
		
		//INIT nombre d'enfant
		for (var ligneId in this.tabarbo) {				
			idparent=this.arbo_getparent(ligneId);
			if (this.arbo_exist(idparent))	this.tabarbo[idparent][7]++;		
		}
		
		
		//INIT ouvert
		var idparent=this.selection;						
		var i=0;
		while ((i<10000)  && (this.arbo_exist(idparent)))	{
			this.tabarbo[idparent][8]=true;	
			idparent=this.arbo_getparent(idparent);
			i++;
			
		}
		//OUVRE LES ROOTS
		for (var ligneId in this.tabarbo) {	
			if (this.tabarbo[ligneId][0]==undefined)	this.tabarbo[ligneId][8]=true;	
		}
		
		//FERME CEUX QUI ON PAS D'ENFANT
		for (var ligneId in this.tabarbo) {	
			if (this.tabarbo[ligneId][7]==0)	this.tabarbo[ligneId][8]=false;	
		}
		
			
		//INIT selection
		if (this.arbo_exist(this.selection)){
			this.tabarbo[this.selection][10]=true;			
		}		
	
				
		this.divarbo.innerHTML=this.arbo_niveau(undefined,0,0);		
	
	jslib_context_flush();
}

function jslib_arbo_newdir(ligneId)	{
	var linewdir=document.getElementById('linewdir_'+this.instance+'_'+ligneId);
	var ularbo=document.getElementById('ularbo_'+this.instance+'_'+ligneId);
	ularbo.style.display='';
    linewdir.style.display='';
     
    var actionnewdir='';
    actionnewdir=actionnewdir+'<img style="visibility:hidden;" border=0 src="'+jslib_path+this.img_plus+'"></A>'
    actionnewdir=actionnewdir+'&nbsp;<img border=0 src="'+jslib_path+this.img_dirclose+'">'
	actionnewdir=actionnewdir+'&nbsp;<input onclick="this.value=\'\';this.onclick=\'\';" id="inputnewdir_'+this.instance+'_'+ligneId+'" type=text class="textInput">';
	actionnewdir=actionnewdir+'&nbsp;<a href="javascript:'+this.instance+'.arbo_newdir_valid('+ligneId+',true)"><img src="'+jslib_path+this.img_valider+'"></a>';
    actionnewdir=actionnewdir+'&nbsp;<a href="javascript:'+this.instance+'.arbo_newdir_valid('+ligneId+',false)"><img src="'+jslib_path+this.img_annuler+'"></a>';
 	
    linewdir.innerHTML=actionnewdir;	
	
	var inputnewdir=document.getElementById('inputnewdir_'+this.instance+'_'+ligneId);
	
	inputnewdir.value=jslib_arbo_txt_newdossier;
    inputnewdir.focus();
    
}
function jslib_arbo_newdir_valid(ligneId,valid)	{
	 var linewdir=document.getElementById('linewdir_'+this.instance+'_'+ligneId);
	 var inputnewdir=document.getElementById('inputnewdir_'+this.instance+'_'+ligneId);
  
	 var ularbo=document.getElementById('ularbo_'+this.instance+'_'+ligneId);
	    
	
          
    if (valid){
	     eval(this.instance+'.onnewdir('+ligneId+',\''+removetag(inputnewdir.value)+'\')');
   	}else{
	   	 linewdir.style.display='none';	 
	   	 //ularbo.style.display='none';  	
  	}     
     
}


function jslib_arbo_rename(ligneId)	{
	
	 var lienname=document.getElementById('lienname_'+this.instance+'_'+ligneId);
	 var spanname=document.getElementById('spanname_'+this.instance+'_'+ligneId);
	 var spanaction=document.getElementById('spanaction_'+this.instance+'_'+ligneId);
	 var inputrename=document.getElementById('inputrename_'+this.instance+'_'+ligneId);
	 var spanrename=document.getElementById('spanrename_'+this.instance+'_'+ligneId);
	 spanname.style.display='none';    
	 spanaction.style.display='none'; 
     inputrename.style.display='';
     spanrename.style.display='';
     lienname.className=jslib_arbo_class_unselect;
     
     inputrename.value=spanname.innerHTML;
     inputrename.focus();
     
     
     var actionrename='';
     actionrename=actionrename+'&nbsp;<a href="javascript:'+this.instance+'.arbo_rename_valid('+ligneId+',true)"><img src="'+jslib_path+this.img_valider+'"></a>';
     actionrename=actionrename+'&nbsp;<a href="javascript:'+this.instance+'.arbo_rename_valid('+ligneId+',false)"><img src="'+jslib_path+this.img_annuler+'"></a>';

     spanrename.innerHTML=actionrename;
}

function jslib_arbo_rename_valid(ligneId,valid)	{
	 var lienname=document.getElementById('lienname_'+this.instance+'_'+ligneId);
	 var spanname=document.getElementById('spanname_'+this.instance+'_'+ligneId);
	 var spanaction=document.getElementById('spanaction_'+this.instance+'_'+ligneId);
	 var inputrename=document.getElementById('inputrename_'+this.instance+'_'+ligneId);
	 var spanrename=document.getElementById('spanrename_'+this.instance+'_'+ligneId);
	 
	 spanname.style.display='inline';    
	 spanaction.style.display='inline'; 
     inputrename.style.display='none';
     spanrename.style.display='none';
     if (this.tabarbo[ligneId][10]==true)    lienname.className=jslib_arbo_class_select;
     
     spanname.innerHTML= inputrename.value;
     
     if (valid){
	     eval(this.instance+'.onrename('+ligneId+',\''+removetag(inputrename.value)+'\')');
  	}     
     
}


function jslib_arbo_deploy(ligneId)	{
	 var ularbo=document.getElementById('ularbo_'+this.instance+'_'+ligneId);
	 var imgnav=document.getElementById('imgnav_'+this.instance+'_'+ligneId);
	 var imgdos=document.getElementById('imgdos_'+this.instance+'_'+ligneId);
	 
	 	if (ularbo.style.load=='no'){		 	
		 	var niveau=this.tabarbo[ligneId][9];
		 	ularbo.innerHTML=this.arbo_niveau(ligneId,niveau+1,ligneId);
		 	
		 	jslib_context_flush();
		 	
		 	ularbo.style.load='yes';
	 	}
	
	 	if (ularbo.style.display=='none'){
	 		ularbo.style.display='';
	 		imgnav.src=jslib_path+this.img_moins;	
	 		imgdos.src=jslib_path+this.img_diropen;	
	 		
		}else{
			ularbo.style.display='none';
	 		imgnav.src=jslib_path+this.img_plus;
	 		imgdos.src=jslib_path+this.img_dirclose;	
		}
}
function jslib_arbo_ligne(ligneId){
	var imgnav,imgdos,showselect,showaction
	
	
	var ligne=this.tabarbo[ligneId];
	
	//ligne 0->parent
	//ligne 1->nom
	//ligne 2->droit suppression
	//ligne 3->droit renomage
	//ligne 4->droit deplacement
	//ligne 5->droit nouveaudossier
	//ligne 6->droit propriétés
	//ligne 7->nombre d'enfant
	//ligne 8->ouvert
	//ligne 9->niveau
	//ligne10->selection
	
	

	
    if (ligne[8]||ligne[10]){
		imgnav=jslib_path+this.img_moins;
		imgdos=jslib_path+this.img_diropen;
	}else{
		imgnav=jslib_path+this.img_plus;
		imgdos=jslib_path+this.img_dirclose;
	}	

	
	if ((ligne[7]==0) && (this.liste==1)){	
		imgdos=jslib_path+this.img_liste;
	}	
	
	//ligne[9] non utiliser au cas ou
	if (ligne[10]==true){
		showselect='class="'+jslib_arbo_class_select+'"';		
	}else{
		showselect='class="'+jslib_arbo_class_unselect+'"';
	}
	
	
	showaction='<span id="spanaction_'+this.instance+'_'+ligneId+'">';
	if ((this.modemenu=='bouton') || (this.modemenu=='boutonunique')){
		
		
		if ((ligne[10]==true) || (this.modemenu=='bouton')){
			if (ligne[2]==1)	showaction=showaction+'&nbsp;<a href="javascript:'+this.instance+'.onsupp('+ligneId+')"><img src="'+jslib_path+this.img_supp+'"></a>';
			
			if (ligne[3]==1)	showaction=showaction+'&nbsp;<a href="javascript:'+this.instance+'.arbo_rename('+ligneId+')"><img src="'+jslib_path+this.img_rename+'"></a>';
			
			if (ligne[4]==1)	showaction=showaction+'&nbsp;<a href="#" onmouseup="javascript:'+this.instance+'.drag.start(event,\''+ligneId+'\');"><img src="'+jslib_path+this.img_move+'"></a>';
			
			if (ligne[5]==1)	showaction=showaction+'&nbsp;<a href="javascript:'+this.instance+'.arbo_newdir('+ligneId+')"><img src="'+jslib_path+this.img_newdir+'"></a>';	
			
			if (ligne[6]==1)	showaction=showaction+'&nbsp;<a href="javascript:'+this.instance+'.onprop('+ligneId+')"><img src="'+jslib_path+this.img_prop+'"></a>';
		}
		
		
	}
	if (this.modemenu=='context'){
		if ((ligne[2]==1) ||(ligne[3]==1) ||(ligne[4]==1) ||(ligne[5]==1) ||(ligne[6]==1)){
			jslib_context_addmenutmp('liligne_'+this.instance+'_'+ligneId);
			jslib_context_additemtmp('liligne_'+this.instance+'_'+ligneId,ligne[1],'','');
			
			if (ligne[2]==1) jslib_context_additemtmp('liligne_'+this.instance+'_'+ligneId,'Supprimer'	,this.instance+'.onsupp('+ligneId+')'			,jslib_path+this.img_supp);
			if (ligne[3]==1) jslib_context_additemtmp('liligne_'+this.instance+'_'+ligneId,'Renommer'	,this.instance+'.arbo_rename('+ligneId+')'	,jslib_path+this.img_rename);
			if (ligne[4]==1) jslib_context_additemtmp('liligne_'+this.instance+'_'+ligneId,'Déplacer'	,'jslib_context_off(event);'+this.instance+'.drag.start(event,\''+ligneId+'\')'	,jslib_path+this.img_move);
			if (ligne[5]==1) jslib_context_additemtmp('liligne_'+this.instance+'_'+ligneId,'Nouveau'	,this.instance+'.arbo_newdir('+ligneId+')'	,jslib_path+this.img_newdir);
			if (ligne[6]==1) jslib_context_additemtmp('liligne_'+this.instance+'_'+ligneId,'Propriétés',this.instance+'.onprop('+ligneId+')'			,jslib_path+this.img_prop);
		}
	}
	showaction=showaction+'</span>';
	

	

	if (ligne[7]==0){	
		imgnav='<img id="imgnav_'+this.instance+'_'+ligneId+'" style="visibility:hidden;" border=0 src="'+imgnav+'">';
	}else{
		imgnav='<a href="javascript:'+this.instance+'.arbo_deploy('+ligneId+')"><img id="imgnav_'+this.instance+'_'+ligneId+'" border=0 src="'+imgnav+'"></A>';
	}	
	
	imgdos='<img id="imgdos_'+this.instance+'_'+ligneId+'" border=0 src="'+imgdos+'">'
	
	spanname='<span id="spanname_'+this.instance+'_'+ligneId+'">'+ligne[1]+'</span>';
	lien='<a '+showselect+' id="lienname_'+this.instance+'_'+ligneId+'" href="javascript:'+this.instance+'.onselect(\''+ligneId+'\')">'+imgdos+'&nbsp;'+spanname+'</a>';
	
	inputrename='<input id="inputrename_'+this.instance+'_'+ligneId+'" type=text class="'+jslib_arbo_class_input+'" style="display:none;"><span id="spanrename_'+this.instance+'_'+ligneId+'"></span>';

	

	return '<li class="dragin" id="liligne_'+this.instance+'_'+ligneId+'" style="word-break: break-all;display:inline;">'+imgnav+'&nbsp;'+lien+inputrename+showaction+'</li><BR>';
	
}


function jslib_arbo_niveau(idrep,niveau,diropen){
	
	
	var arbohtml='';
	var isvisible=false;

	if ((diropen==idrep) || (idrep==undefined) || (this.tabarbo[idrep][8])){
		
		for (var ligneId in this.tabarbo) {			
					
				if (this.tabarbo[ligneId][0]==idrep){	
					this.tabarbo[ligneId][9]=niveau;
							
					if (this.del==0) 	this.tabarbo[ligneId][2]=0;
					if (this.rename==0) this.tabarbo[ligneId][3]=0;
					if (this.move==0)	this.tabarbo[ligneId][4]=0;
					if (this.newdir==0)	this.tabarbo[ligneId][5]=0;
					if (this.prop==0)	this.tabarbo[ligneId][6]=0;
					
		
					
					arbohtml=arbohtml+this.arbo_ligne(ligneId);
					arbohtml=arbohtml+this.arbo_niveau(ligneId,niveau+1,diropen);
	
				}
		}
		var aff=''
	}else{
		var aff='style="display:none;load:no;"'
	}
	if (arbohtml==''){
		var aff='style="display:none;load:no;"'
	}

	arbohtml=arbohtml+'<li id="linewdir_'+this.instance+'_'+idrep+'" style="white-space: nowrap;display:none;"></li>';
	
	if (niveau==0){
		var styleul='style="list-style-type:none;margin: 0px;"';
	}else{
		var styleul='style="list-style-type:none;margin-left: 12px;"';
	}

	
	return '<ul '+aff+' '+styleul+' id="ularbo_'+this.instance+'_'+idrep+'">'+arbohtml+'</ul>';	
	
}




//-------------------------------------------------------------------------------------------------------------
//-----------------------------------------ARBORESCENCE--------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------