text: if(!dojo._hasResource["dojox.collections.BinaryTree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  dojo._hasResource["dojox.collections.BinaryTree"] = true;
  dojo.provide("dojox.collections.BinaryTree");
  dojo.require("dojox.collections._base");
  
  dojox.collections.BinaryTree=function(data){
  	function node(data, rnode, lnode){
  		this.value=data||null;
  		this.right=rnode||null;
  		this.left=lnode||null;
  		this.clone=function(){
  			var c=new node();
  			if(this.value.value){
  				c.value=this.value.clone();
  			}else{ 
  				c.value=this.value;
  			}
  			if(this.left!=null){
  				c.left=this.left.clone();
  			}
  			if(this.right!=null){
  				c.right=this.right.clone();
  			}
  			return c;
  		}
  		this.compare=function(n){
  			if(this.value>n.value){ return 1; }
  			if(this.value<n.value){ return -1; }
  			return 0;
  		}
  		this.compareData=function(d){
  			if(this.value>d){ return 1; }
  			if(this.value<d){ return -1; }
  			return 0;
  		}
  	}
  
  	function inorderTraversalBuildup(current, a){
  		if(current){
  			inorderTraversalBuildup(current.left, a);
  			a.push(current.value);
  			inorderTraversalBuildup(current.right, a);
  		}
  	}
  
  	function preorderTraversal(current, sep){
  		var s="";
  		if (current){
  			s=current.value.toString() + sep;
  			s+=preorderTraversal(current.left, sep);
  			s+=preorderTraversal(current.right, sep);
  		}
  		return s;
  	}
  	function inorderTraversal(current, sep){
  		var s="";
  		if (current){
  			s=inorderTraversal(current.left, sep);
  			s+=current.value.toString() + sep;
  			s+=inorderTraversal(current.right, sep);
  		}
  		return s;
  	}
  	function postorderTraversal(current, sep){
  		var s="";
  		if (current){
  			s=postorderTraversal(current.left, sep);
  			s+=postorderTraversal(current.right, sep);
  			s+=current.value.toString() + sep;
  		}
  		return s;
  	}
  	
  	function searchHelper(current, data){
  		if(!current){ return null; }
  		var i=current.compareData(data);
  		if(i==0){ return current; }
  		if(i>0){ return searchHelper(current.left, data); }
  		else{ return searchHelper(current.right, data); }
  	}
  
  	this.add=function(data){
  		var n=new node(data);
  		var i;
  		var current=root;
  		var parent=null;
  		while(current){
  			i=current.compare(n);
  			if(i==0){ return; }
  			parent=current;
  			if(i>0){ current=current.left; }
  			else{ current=current.right; }
  		}
  		this.count++;
  		if(!parent){
  			root=n;
  		}else{
  			i=parent.compare(n);
  			if(i>0){ 
  				parent.left=n;
  			}else{
  				parent.right=n;
  			}
  		}
  	};
  	this.clear=function(){
  		root=null;
  		this.count=0;
  	};
  	this.clone=function(){
  		var c=new dojox.collections.BinaryTree();
  		var itr=this.getIterator();
  		while(!itr.atEnd()){
  			c.add(itr.get());
  		}
  		return c;
  	};
  	this.contains=function(data){
  		return this.search(data) != null;
  	};
  	this.deleteData=function(data){
  		var current=root;
  		var parent=null;
  		var i=current.compareData(data);
  		while(i!=0&&current!=null){
  			if(i>0){
  				parent=current;
  				current=current.left;
  			}else if(i<0){
  				parent=current;
  				current=current.right;
  			}
  			i=current.compareData(data);
  		}
  		if(!current){ return; }
  		this.count--;
  		if(!current.right){
  			if(!parent){ 
  				root=current.left;
  			}else{
  				i=parent.compare(current);
  				if(i>0){ parent.left=current.left; }
  				else if(i<0){ parent.right=current.left; }
  			}
  		} 
  		else if(!current.right.left){
  			if(!parent){
  				root=current.right;
  			}else{
  				i=parent.compare(current);
  				if(i>0){ parent.left=current.right; }
  				else if(i<0){ parent.right=current.right; }
  			}
  		}
  		else{
  			var leftmost=current.right.left;
  			var lmParent=current.right;
  			while(leftmost.left!=null){
  				lmParent=leftmost;
  				leftmost=leftmost.left;
  			}
  			lmParent.left=leftmost.right;
  			leftmost.left=current.left;
  			leftmost.right=current.right;
  			if(!parent){ 
  				root=leftmost;
  			}else{
  				i=parent.compare(current);
  				if(i>0){ parent.left=leftmost; }
  				else if(i<0){ parent.right=leftmost; }
  			}
  		}
  	};
  	this.getIterator=function(){
  		var a=[];
  		inorderTraversalBuildup(root, a);
  		return new dojox.collections.Iterator(a);
  	};
  	this.search=function(data){
  		return searchHelper(root, data);
  	};
  	this.toString=function(order, sep){
  		if(!order){ order=dojox.collections.BinaryTree.TraversalMethods.Inorder; }
  		if(!sep){ sep=","; }
  		var s="";
  		switch(order){
  			case dojox.collections.BinaryTree.TraversalMethods.Preorder:
  				s=preorderTraversal(root, sep);
  				break;
  			case dojox.collections.BinaryTree.TraversalMethods.Inorder:
  				s=inorderTraversal(root, sep);
  				break;
  			case dojox.collections.BinaryTree.TraversalMethods.Postorder:
  				s=postorderTraversal(root, sep);
  				break;
  		};
  		if(s.length==0){ return ""; }
  		else{ return s.substring(0, s.length - sep.length); }
  	};
  
  	this.count=0;
  	var root=this.root=null;
  	if(data){
  		this.add(data);
  	}
  }
  dojox.collections.BinaryTree.TraversalMethods={
  	Preorder: 1, Inorder: 2, Postorder: 3
  };
  
  }
  