	// TreeController
	// ----------------------
function TreeController(list) {
	
		this.list = list;
		EventListener.addEvent(list, 'click', this.scope('handleClick'));
	}

	TreeController.prototype = {
		scope:function(method) {
			var scope = this;
			return function() {
				scope[method].apply(scope, arguments);
			}
		},

		handleClick:function(e) {
			var target = e.target || e.srcElement;
			//alert(target.id);
			if(/^li$/i.test(target.nodeName)) {
				if(ClassName.hasClass(target, 'folder'))
					this.toggle(target);
					else if (ClassName.hasClass(target, 'open')){			
					target.className='folder';

			}
			

			}
		},
		
		toggle:function(li) {
					var ul = li.getElementsByTagName('ul')[0];
			
			if(ClassName.hasClass(li, 'open')) {
			
				ClassName.removeClass(li, 'open');
				
				ul.style.display = 'none';
			} else {
				//alert(li.id);

				ClassName.addClass(li, 'open');
				ul.style.display = 'block';
			}
		}
	} // fin prototype

	// Class name switcher
	// ----------------------

	ClassName = {
		hasClass:function(element, cls) {
			var reg = new RegExp('\\b'+cls+'\\b');
			return reg.test(element.className);
		},

		addClass:function(element, cls) {
			if(!this.hasClass(element, cls)) {
				element.className += ' ' + cls;
			}
		},

		removeClass:function(element, cls) {
			var reg = new RegExp('\\b'+cls+'\\b', 'g');
			element.className = element.className.replace(reg, '');
		}
	}

	// EventListener
	// ----------------------
	EventListener = {
		addEvent:function(element, type, handler) {
			try {
			
				element.addEventListener(type, handler, false);
			} catch(inferiorBrowserException) {
				if(element.attachEvent) 
					element.attachEvent('on'+type, handler);
				else 
					element['on'+type] = handler;
			}
			return [element, type, handler];
		},

		removeEvent:function(event) {
			var element = event[0], type = event[1], handler = event[2];
			try {
				element.removeEventListener(type, handler, false);
			} catch(inferiorBrowserException) {
				if(element.detachEvent)
					element.detachEvent('on'+type, handler);
				else
					element['on'+type] = null;
			}
		},

		cancelEvent:function(e) {
			try {
				e.preventDefault();
				e.stopPropagation();
			} catch (someException) {
				e.returnValue = false;
			}	return false;
		}
	}

	// Onload
	// ----------------------

	EventListener.addEvent(window, 'load', function() {
		new TreeController($('tree'));

	});
	
	// Appel AJAX du flux
	
		function afficheTree(flux){
	$('tree').innerHTML=(flux.responseText);
	
	}
	
	
	function showTree(id){
	 var opts = { method : "post",
                 parameters : "id=" + id,
                 onComplete : afficheTree,
                asynchronous : true };	
				
		//		alert(url);
	var myAjax = new Ajax.Request(url,opts);	
				}
