text: /*
   * Async Treeview 0.1 - Lazy-loading extension for Treeview
   * 
   * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
   *
   * Copyright (c) 2007 JÃ¶rn Zaefferer
   *
   * Dual licensed under the MIT and GPL licenses:
   *   http://www.opensource.org/licenses/mit-license.php
   *   http://www.gnu.org/licenses/gpl.html
   *
   * Revision: $Id$
   *
   */
  
  ;(function($) {
  
  function load(settings, root, child, container, parentNode) {
          cls = ""
          if (parentNode !== undefined) {
            cls = parentNode.find("span").attr("class");
            parentNode.find("span").addClass("wait");
          }
  	$.getJSON(settings.url, {root: root}, function(response) {
  		function createNode(parent) {
  			var current = $("<li/>").attr("id", this.id || "").html("<span>" + this.text + "</span>").appendTo(parent);
  			if (this.classes) {
  				current.children("span").addClass(this.classes);
  			}
  			if (this.expanded) {
  				current.addClass("open");
  			}
  			if (this.hasChildren || this.children && this.children.length) {
  				var branch = $("<ul/>").appendTo(current);
  				if (this.hasChildren) {
  					current.addClass("hasChildren");
  					createNode.call({
  						text:"placeholder",
  						id:"placeholder",
  						children:[]
  					}, branch);
  				}
  				if (this.children && this.children.length) {
  					$.each(this.children, createNode, [branch])
  				}
  			}
  		}
  	$.each(response, createNode, [child]);
          $(container).treeview({add: child});
          if (parentNode !== undefined) {
            parentNode.find("span").removeClass("wait").addClass(cls);
          }
      });
  }
  
  var proxied = $.fn.treeview;
  $.fn.treeview = function(settings) {
  	if (!settings.url) {
  		return proxied.apply(this, arguments);
  	}
  	var container = this;
  	load(settings, "source", this, container);
  	var userToggle = settings.toggle;
  	return proxied.call(this, $.extend({}, settings, {
  		collapsed: true,
  		toggle: function() {
  			var $this = $(this);
  			if ($this.hasClass("hasChildren")) {
  				var childList = $this.removeClass("hasChildren").find("ul");
  				childList.empty();
  				load(settings, this.id, childList, container, $this);
  			        
   			        
  			}
  			if (userToggle) {
  				userToggle.apply(this, arguments);
  			}
  		}
  	}));
  };
  
  })(jQuery);
  