function wp_Tree( mcfg ) {
	
	var cfg = {
		id : mcfg.id,
		toggle_classes : mcfg.toggle_classes.split(","),
		ontoggle : (mcfg.ontoggle || null)
	};
	
	var event = new wp_Event();
	var self = this;
	
	function getElementPosition( element, data ) {
	
		if( !data ) {
			data = new Object();
		}
		
		data["top"] = 0;
		data["left"] = 0;
		
		while( element ) {
			data["top"] += element.offsetTop;
			data["left"] += element.offsetLeft;
			
			element = element.offsetParent;
		}
		return data;
	}
	
	this.init = function() {
		self.enable();		
	}
	
	this.enable = function() {
		self.disable();
		var elements = document.getElementById(cfg["id"]).getElementsByTagName("LI");
		
		for( var ec = 0; ec < elements.length; ec++ ) {
			if( elements[ec].className.split(" ").intersection(cfg["toggle_classes"]) != "" ) {
				event.add(elements[ec],"mouseup",toggle);
			}
		}
	}
	
	this.disable = function() {
		var elements = document.getElementById(cfg["id"]).getElementsByTagName("LI");
		
		for( var ec = 0; ec < elements.length; ec++ ) {
			if( elements[ec].className.split(" ").intersection(cfg["toggle_classes"]) != "" ) {
				event.remove(elements[ec],"mouseup",toggle);
			}
		}
	}
	
	function toggle( e ) {
	
		// -- Vi skall inte ha någon select ---------------
		if (document.selection) {
    		document.selection.empty();
  		} else if (window.getSelection) {
   			window.getSelection().removeAllRanges(); 
		}
		// --------------------------------------------------
	
	    // -- Hämta event --------------------------------
		var data = event.get(e);
		// --------------------------------------------------
		
		// -- Stäng bubbles -------------------------------
		data["event"].cancelBubble=true;
		data = getElementPosition( data.element, data );
		// --------------------------------------------------
		
		// -- Begränsa till området runt + & - ----------
		if( data.top+20 < data.mousetop ) return false;
		if( data.left+20 < data.mouseleft ) return false;
		// --------------------------------------------------
		
		return self.toggle( data.element );
	}
	
	this.toggle = function( element ) {
	
	    var classes = element.className.split(" ");
		var currentClass = "";
		
		var pos = -1;
		
		var cc = 0;
		for( cc = 0; cc < cfg.toggle_classes.length; cc++ ) {
			pos = classes.find(cfg.toggle_classes[cc]);
			if( pos > -1 ) {
				break;
			}
		}
		
		cc++;
		if( cc == cfg.toggle_classes.length ) {
			cc = 0;
		}
		
		if( pos != -1 ) {
	        classes[pos]=cfg.toggle_classes[cc];
	        currentClass = cfg.toggle_classes[cc];
	    }
		
		element.className = classes.join(" ");
		
		var returnvalue = false;
		
		if( cfg.ontoggle ) {
			returnvalue = cfg.ontoggle({ element:element,currentClass:currentClass });
		}
		
		return returnvalue ? true : false;
	}
	
	event.add(window,"load",self.init);	
	
}