<br />
<b>Warning</b>:  include(../langue/IndexAAP_.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in <b>/home/aap/www/js/nested.php</b> on line <b>11</b><br />
<br />
<b>Warning</b>:  include() [<a href='function.include'>function.include</a>]: Failed opening '../langue/IndexAAP_.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in <b>/home/aap/www/js/nested.php</b> on line <b>11</b><br />
// Version: 1.20
// Date: 2007-01-25
// Author: CrazyDave
// Website: http://www.clanccc.co.uk/moo/nested.html
var Nested = new Class({
	getOptions: function() {
		return {
			childTag: 'LI',
			ghost: true,
			childStep: 30, // attempts to become a child if the mouse is moved this number of pixels right
			handleClass: null, 
			onStart: Class.empty,
			onComplete: Class.empty,
			collapse: false, // true/false
			collapseClass: 'nCollapse', // Class added to collapsed items
			expandKey: 'shift', // control | shift
			lock: null, // parent || depth || class
			lockClass: 'unlocked'
		};
	},

	initialize: function(list, options) {
		this.setOptions(this.getOptions(), options);
		if (!this.options.expandKey.match(/^(control|shift)$/)) {
			this.options.expandKey = 'shift';
		}
		this.list = $(list);
		this.options.parentTag = this.list.nodeName;
		this.bound = {};
		this.bound.start = this.start.bindWithEvent(this);
		this.bound.hide = this.hide.bindWithEvent(this);
		this.bound.modify = this.modify.bindWithEvent(this);
		this.bound.validerFormulaire = this.validerFormulaire.bindWithEvent(this);
		this.bound.deleteItem = this.deleteItem.bindWithEvent(this);
		this.bound.creerNouvelItem = this.creerNouvelItem.bindWithEvent(this);
		this.addMouseDown();
		/*if (this.options.collapse)
		{
			this.bound.collapse = this.collapse.bindWithEvent(this);
			addEventDE(this.list,'click', this.bound.collapse);
		}*/
		if (this.options.initialize) this.options.initialize.call(this);
	},
	
	addMouseDown: function() {
		cookieValue = '';
		i=0;
		nbCol=this.list.childNodes.length;
		while(i < nbCol)
		{
			j=0;
			nbLi=this.list.childNodes[i].childNodes.length;
			while(j < nbLi)
			{
				itemClass = this.list.childNodes[i].childNodes[j].className;
				if (itemClass!="itemVideTop" && itemClass!="itemVideBottom")
				{
					// On renomme les éléments afin que leur numéro soit conforme à leur position
					value = this.list.childNodes[i].childNodes[j].childNodes[0].childNodes[1];
					if (value.childNodes[0].innerHTML!='Nom')
					{
						this.list.childNodes[i].childNodes[j].id='li_'+i+'_'+j;
						value.childNodes[0].id='nom_'+i+'_'+j;
						value.childNodes[1].id='display_'+i+'_'+j;
						value.childNodes[2].id='url_'+i+'_'+j;
						value.childNodes[3].id='num_'+i+'_'+j;
						// On retrouve les infos contenus dans la page HTML
						nom = value.childNodes[0].innerHTML;
						display = value.childNodes[1].innerHTML;
						url = value.childNodes[2].innerHTML;
						num = value.childNodes[3].innerHTML;
						cookieValue += i+'##'+j+'##'+Utf8.encode(nom)+'##'+display+'##'+url+'##'+num+'###';
						// On cache ou on montre les infos, en fonction de la valeur contenue dans la variable display
						this.list.childNodes[i].childNodes[j].childNodes[0].childNodes[2].className='tab '+display;
					}
					// Activation des boutons
					option = this.list.childNodes[i].childNodes[j].childNodes[0].childNodes[0];
					addEventDE(option.childNodes[0], 'mousedown', this.bound.start);// BOUTON MOVE
					//alert (option.childNodes[4].className);
					addEventDE(option.childNodes[5], 'mousedown', this.bound.hide);// BOUTON HIDE/SHOW
					addEventDE(option.childNodes[4], 'mousedown', this.bound.modify);// BOUTON MODIFY
					addEventDE(option.childNodes[3], 'mousedown', this.bound.deleteItem); // BOUTON DELETE
				}
				else if (itemClass=="itemVideBottom")
				{
					addEventDE(this.list.childNodes[i].childNodes[j].childNodes[2], 'mousedown', this.bound.creerNouvelItem); // BOUTON NOUVEL ITEM
				}
				j++;
			}
			i++;
		}
		setCookie('', cookieValue);
	},

	start: function(event) {
		var el = $(event.target);
		if (this.options.handleClass) {
			while (el.nodeName != this.options.childTag && !el.hasClass(this.options.handleClass) && el != this.list) {
				el = el.getParent();
			}
			if (!el.hasClass(this.options.handleClass)) return true;
		}
		while (el.nodeName != this.options.childTag && el != this.list) {
			el = el.parentNode;
		}
		if (el.nodeName != this.options.childTag) return true;
		el = $(el);
		if (this.options.lock == 'class' && !el.hasClass(this.options.lockClass)) return;
		if (this.options.ghost) { // Create the ghost
			this.ghost = el.clone().setStyles({
				'list-style-type': 'none',
				'opacity': 1,
				'position': 'absolute',
				'visibility': 'hidden',
				'top': event.page.y+'px',
				'left': (event.page.x+10)+'px',
				'width': '300px',
				'zIndex': 1000
			}).injectInside(document.body);
		}
		el.style.border='2px dashed black';
		el.childNodes[0].style.visibility='hidden';
		el.depth = this.getDepth(el);
		el.moved = false;
		this.bound.movement = this.movement.bindWithEvent(this, el);
		this.bound.end = this.end.bind(this, el);
		addEventDE(this.list,'mousedown', this.bound.end);
		addEventDE(this.list,'mousemove', this.bound.movement);
		addEventDE(document,'mouseup', this.bound.end);
		this.fireEvent('onStart', el);
		event.stop();
	},
	
	hide: function(event) {
		var el = $(event.target.parentNode.parentNode.childNodes[1].childNodes[1]);
		if (el.innerHTML=='hide') el.innerHTML='show'; else el.innerHTML='hide';
		event.target.className='display_'+el.innerHTML+' btn';
		this.addMouseDown();
	},

	modify: function(event) {
		// On resort les valeurs actuelles
		value=event.target.parentNode.parentNode.childNodes[1];
		nom=value.childNodes[0].innerHTML;
		url=value.childNodes[2].innerHTML;
		num=value.childNodes[3].innerHTML;
		var el = $(event.target.parentNode.parentNode.parentNode);
		this.afficherFormulaire(el);
		this.initialiserFormulaire(el.childNodes[0],nom,url,num);
		accordeon();
	},
	
	deleteItem: function(event) {
		if (confirm(''))
		{
			var el = event.target.parentNode.parentNode.parentNode;
			el.parentNode.removeChild(el);
			this.addMouseDown();
		}
	},
	
	creerNouvelItem: function(event) {
		var el = event.target;
		var li = document.createElement("li");
		var liste = el.parentNode.parentNode;
		this.afficherFormulaire(li);
		//liste.removeChild(el.parentNode);
		liste.appendChild(li);
		liste.appendChild(el.parentNode);
		this.initialiserFormulaire(li.childNodes[0],'nom','',5);
		accordeon();
	},
	
	afficherFormulaire: function(el) {
		el.innerHTML = '<div class="cadre"><div class="option"><img src="templates//images/aap_item_g1.jpg" class="move floatL" alt="" /><span class="floatL">&nbsp;</span><img src="templates//images/aap_item_d1.jpg" class="floatR" alt="" ><div class="delete btn"></div><div class="modify btn">&nbsp;</div><div class="display_hide btn"></div></div><div class="value"><span id="nom_11_1"></span><span id="display_11_1">hide</span><span id="url_11_1"></span><span id="num_11_1"></span></div><div class="tab hide"><div><form action="" method="post" id="formulaireItem"><input name="previousUrl" type="hidden" value="" /><input name="nom" id="nom" type="hidden" size="30" value="" /><label for="num"></label> <select name="num" id="num"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option></select><br/><br/><label for="url"></label><br/><div class="form"><h3 class="titre"></h3><div class="accordeon"><input type="radio" name="NumFlux" value="url"><input name="url" id="url" type="text" size="30" value="" /></div></div></form></div><div class="center"><input type="submit" value=""></div></div></div></div>';
	},
	
	initialiserFormulaire: function(el,nom, url, num) {
		el.childNodes[0].childNodes[1].innerHTML='&nbsp;';
		formulaire=document.getElementById('formulaireItem');
		formulaire.nom.value=nom;
		formulaire.previousUrl.value=url;
		document.getElementById('num').options[num-1].selected=true;
		if (url.length>=5) formulaire.url.value=url;
		addEventDE(el.childNodes[2].childNodes[1],'mousedown', this.bound.validerFormulaire);
		el.childNodes[0].childNodes[5].style.visibility='hidden';
		addEventDE(el.childNodes[0].childNodes[4],'mousedown', this.bound.validerFormulaire);
		addEventDE(el.childNodes[0].childNodes[3],'mousedown', this.bound.deleteItem);
		el.childNodes[1].childNodes[0].innerHTML=nom;
		el.childNodes[1].childNodes[2].innerHTML=url;
		el.childNodes[1].childNodes[3].innerHTML=num;
	},
	
	validerFormulaire: function(event) {
		formulaire=document.getElementById('formulaireItem');
		url='';
		url = verifierRadio(formulaire.numFlux); // On récupère la valeur de l'url
		if (url==undefined || url=='url') // Si le visiteur n'a rien coché
		{
			if (formulaire.url.value!='') url=formulaire.url.value;
			else url=formulaire.previousUrl.value;
		}
		if (url!='')
		{
			if (document.getElementById('ahah')!=undefined) document.getElementById('ahah').id = '';
			formulaire.parentNode.parentNode.parentNode.parentNode.id='ahah';
			if (url=='121') num='0'; else num = formulaire.num.value;
			var page = 'chargerItemRSS.php?nom='+encodeURI(formulaire.nom.value)+'&url='+encodeURI(url)+'&num='+num+'&skin='+encodeURI('');
			ahah(page,'ahah',this);
		}
		else formulaire.parentNode.parentNode.childNodes[1].childNodes[0].value="";
	},

	/*
	collapse: function(event) {
		var el = $(event.target);
		if (this.options.handleClass) {
			while (el.nodeName != this.options.childTag && !el.hasClass(this.options.handleClass) && el != this.list) {
				el = el.getParent();
			}
			if (!el.hasClass(this.options.handleClass)) return true;
		} 
		while (el.nodeName != this.options.childTag && el != this.list) {
			el = el.parentNode;
		}
		if (el == this.list) return;
		el = $(el);
		if (!el.moved) {
			var sub = $E(this.options.parentTag, el);
			if (sub) {
				if (sub.getStyle('display') == 'none') {
					sub.setStyle('display', 'block');
					el.removeClass(this.options.collapseClass);
				} else {
					sub.setStyle('display', 'none');
					el.addClass(this.options.collapseClass);
				}
			}
		}
		event.stop();
	},
	*/
	
	stop: function(event) {
		event.stop();
		return false;
	},
	
	getDepth: function(el, add) {
		var counter = (add) ? 1 : 0;
		while (el != this.list) {
			if (el.nodeName == this.options.parentTag) counter += 1;
			el = el.parentNode;
		}
		return counter;
	},
	
	movement: function(event, el) {
		var dir, over, check, items;
		var dest, move, prev, prevParent;
		var abort = false;
		if (this.options.ghost && el.moved) { // Position the ghost
			this.ghost.setStyles({
				'position': 'absolute',
				'visibility': 'visible',
				'top': event.page.y+'px',
				'left': (event.page.x+10)+'px'
			});
		}
		over = event.target;
		while (over.nodeName != this.options.childTag && over != this.list) {
			over = over.parentNode;
		}
		if (over == this.list) return;
		if (event[this.options.expandKey] && over != el && over.hasClass(this.options.collapseClass)) {
			check = $E(this.options.parentTag, over);
			over.removeClass(this.options.collapseClass);
			check.setStyle('display', 'block');
		}
		// Check if it's actually inline with a child element of the event firer
		orig = over;
		if (el != over) {
			items = $ES(this.options.childTag, over);
			items.each(function(item) {
				if (event.page.y > item.getTop() && item.offsetHeight > 0) over = item;
			});
		}
		// Make sure we end up with a childTag element
		if (over.nodeName != this.options.childTag) return;
			
		// store the previous parent 'ol' to remove it if a move makes it empty
		prevParent = el.getParent();
		dir = (event.page.y < el.getTop()) ? 'up' : 'down';
		move = 'before';
		dest = el;
		if (el != over) {
			check = over;
			while (check != null && check != el) {
				check = check.parentNode;
			} // Make sure we're not trying to move something below itself
			if (check == el) return;
			if (over.className=='itemVideBottom'){
				move = 'before'; dest = over;
			}
			else if (over.className=='itemVideTop'){
				move = 'after'; dest = sub;
			}
			else if (dir == 'up') {
				move = 'before'; dest = over;
			}
			else {
				sub = $E(this.options.childTag, over);
				if (sub && sub.offsetHeight > 0) {
					move = 'before'; dest = sub;
				} else {
					move = 'after'; dest = over;
				}
			}
		}

		// Check if we're trying to go deeper -->>
		/*prev = (move == 'before') ? dest.getPrevious() : dest;
		if (prev) {
			move = 'after';
			dest = prev;
			check = $E(this.options.parentTag, dest);
			while (check && event.page.x > check.getLeft() && check.offsetHeight > 0) {
				dest = check.getLast();
				check = $E(this.options.parentTag, dest);
			}
			if (!check && event.page.x > dest.getLeft()+this.options.childStep) {
				move = 'inside';
			}
		}*/

		last = dest.getParent().getLast();
		while (((move == 'after' && last == dest) || last == el) && dest.getParent() != this.list && event.page.x < dest.getLeft()) {
			move = 'after';
			dest = $(dest.parentNode.parentNode);
			last = dest.getParent().getLast();
		}
		
		abort = false;
		if (move != '') {
			abort += (dest == el);
			abort += (move == 'after' && dest.getNext() == el);
			abort += (move == 'before' && dest.getPrevious() == el);
			abort += (this.options.lock == 'depth' && el.depth != this.getDepth(dest, (move == 'inside')));
			abort += (this.options.lock == 'parent' && (move == 'inside' || dest.parentNode != el.parentNode));
			abort += (dest.offsetHeight == 0);
			sub = $E(this.options.parentTag, over);
			sub = (sub) ? sub.getTop() : 0;
			sub = (sub > 0) ? sub-over.getTop() : over.offsetHeight;
			abort += (event.page.y < (sub-el.offsetHeight)+over.getTop());
			if (!abort) {
				if (move == 'inside') dest = new Element(this.options.parentTag).injectInside(dest);
				$(el).inject(dest, move);
				el.moved = true;
				if (!prevParent.getFirst()) prevParent.remove();
			}
		}
		event.stop();
	},

	detach: function() {
		removeEventDE(this.list,'mousedown', this.start.bindWithEvent(this));
		if (this.options.collapse) removeEventDE(this.list,'click', this.bound.collapse);
	},

	serialize: function(listEl) {
		var serial = [];
		var kids;
		if (!listEl) listEl = this.list;
		$$(listEl.childNodes).each(function(node, i) {
			kids = $E(this.options.parentTag, node);
			serial[i] = {
				id: node.id,
				children: (kids) ? this.serialize(kids) : []
			};
		}.bind(this));
		return serial;
	},

	end: function(el) {
		el.style.border='none';
		el.childNodes[0].style.visibility='visible';
		if (this.options.ghost) this.ghost.remove();
		removeEventDE(this.list,'mousemove', this.bound.movement);
		removeEventDE(document,'mouseup', this.bound.end);
		removeEventDE(this.list,'mousedown', this.bound.end);
		this.addMouseDown();
		this.fireEvent('onComplete', el);
	}
});

Nested.implement(new Events);
Nested.implement(new Options);

