var echopad = function(){
		YAHOO.namespace("echopad");
		YAHOO.echopad.manager = new YAHOO.widget.OverlayManager(); 
		var omniLeaf = 0;
		var defaultLeaf = 1;
		var activeLeaf = false;;
		var leafs = new Array();
		var echolet = new Array(); // Keep track of each widget

		// Initialize Surface
		var finder= false;
		var finderid = false;
		var curr_id = -1;
		var leaf_id = -1;
		var resizer_id = -1;

		var click_mom = 0;
		var click_child = 0;
		var click_smom = 0;
		var IE = false;
		var docwidth = false;
		var docheight = false;
	

		var tempX = 300;
		var tempY = 200;
		var gdebug = false;
	
		// RESIZE ini
		var resize = new Array();
		// QUIRKS FLAG, FOR BOX MODEL
		var IE_QUIRKS = false;;
		// UNDERLAY/IFRAME SYNC REQUIRED
		var IE_SYNC = false;;
		// PADDING USED FOR BODY ELEMENT (Hardcoded for example)
		var PANEL_BODY_PADDING = (10*2) // 10px top/bottom padding applied to Panel body element. The top/bottom border width is 0	
		
		var loadAll = false;
		var uid;
		var profileid;
		var partnerid;
		var hasPermission = false;
		if(gdebug){alert('preinit');}
		//initialize_SC();
		init();

	function init(){
		setTimeout(YUIdragdrop, 2000);
		if(loadAll==false){
			uid = window.uid;
			profileuser = window.profileuser;
			profileid = window.profileid;
			partnerid = window.partnerid;
			hasPermission = setPermission();
			IE = document.all?true:false;
			document.onmousemove = getMouseXY;
		
			//opera Netscape 6 Netscape 4x Mozilla 
			if (window.innerWidth || window.innerHeight){ 
			docwidth = window.innerWidth; 
			docheight = window.innerHeight; 
			} 
			//IE Mozilla 
			if (document.body.clientWidth || document.body.clientHeight){ 
			docwidth = document.body.clientWidth; 
			docheight = document.body.clientHeight; 
			}
			// RESIZE vars
			IE_QUIRKS = (YAHOO.env.ua.ie && document.compatMode == "BackCompat");
			// UNDERLAY/IFRAME SYNC REQUIRED
			IE_SYNC = (YAHOO.env.ua.ie == 6 || (YAHOO.env.ua.ie == 7 && IE_QUIRKS));
			
			//addListener(document, "dblclick", mother_click, false);
			//addListener(document, "click", smom_click, false);
					
			if(gdebug){alert('preleaf');}
			
			if(uid!=0){
				//loadLeafs("get_user_leafs.php?profileid="+profileid);
			}
		}
	};
	
	function setPermission(){
		if(isMyProfile() && uid!=0){return true;}else{return false;}	
	}

	// LOAD
	
	function loadLeafs(sUrl){	
			var handleSuccess = function(o){
			if(o.responseText !== undefined){
				var jsonData = o.responseText.substring(o.responseText.indexOf('{'), o.responseText.lastIndexOf('}') + 1); 
				try { 
					var data = YAHOO.lang.JSON.parse(jsonData);
					for(i=0;i<data.Results.length;i++){				
						var lid = data.Results[i].lid;
						var leaf = data.Results[i].leaf;
						var order = data.Results[i].leaforder;
						
						if(order!=-1){
							leafer = createLeaf(lid, leaf);
						}
					}
					if(data.Results.length>0){
						if(gdebug){alert('prewidget');}
						loadWidgets("get_user_widgets.php?profileid="+profileid);
					}else{
						var soeie_nav= document.getElementById('soeie_nav');
						var tab = document.createElement('div');			
						tab.className = "leaf_tabs";
						tab.innerHTML = '<div class="leaf_div" style="background-color:#333;font-weight:bold; padding: 10px;">User has not setup account yet, tell them to sign up!</div>';	
						soeie_nav.appendChild(tab);							
					}
					
				} 
				catch (e) { 
					alert(e);
				}
			}
		};
					
		var callback =
		{
		  success:handleSuccess,
		  failure:function(o){alert("ajax failed"+o.responseText);}
		};
		
		var cObj = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); 
	};
		
	function loadWidgets(sUrl){	
			var handleSuccess = function(o){
			if(o.responseText !== undefined){
				var jsonData = o.responseText.substring(o.responseText.indexOf('{'), o.responseText.lastIndexOf('}') + 1); 
				try { 
					//var data = eval('(' + jsonData + ')'); 					
					var data = YAHOO.lang.JSON.parse(jsonData);
					for(i=0;i<data.Results.length;i++){				
						var wid = data.Results[i].wid;
						var link = data.Results[i].link;
						var widget = data.Results[i].widget;
						var hlast = parseInt(data.Results[i].hlast);
						var wlast = parseInt(data.Results[i].wlast);
						var xlast = parseInt(data.Results[i].xlast);
						var ylast = parseInt(data.Results[i].ylast);
						var display = data.Results[i].display;
						var type = data.Results[i].type;
						var lid = data.Results[i].lid;
						var leaf = data.Results[i].leaf;
						if(xlast<=0){
							xlast = docwidth/2-100;
						}
						if(ylast<=0){
							ylast = docheight/2+100+i*20;
						}
						
						curr_id++;	
						leafer = leafExists(lid);
						echolet[curr_id]= new addWidget(wid, link, widget, hlast, wlast, xlast,ylast,display,type, leafer);

					}
					renderLeaf(defaultLeaf);
					finder = false; 	
					loadAll = true;			
				} 
				catch (e) { 
					alert(e);
				}
			}
		};
					
		var callback =
		{
		  success:handleSuccess,
		  failure:function(o){alert("ajax failed"+o.responseText);}
		};
		
		var cObj = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); 
	};
	
	function insertWidget(wid){
		var handleSuccess = function(o){
			if(o.responseText !== undefined){
				var jsonData = o.responseText.substring(o.responseText.indexOf('{'), o.responseText.lastIndexOf('}') + 1); 
				try { 
					//var data = eval('(' + jsonData + ')'); 					
					var data = YAHOO.lang.JSON.parse(jsonData);
				
					var wid = data.Results[0].wid;
					var link = data.Results[0].link;
					var widget = data.Results[0].widget;
					var h = parseInt(data.Results[0].h);
					var w = parseInt(data.Results[0].w);
					var display = data.Results[0].display;
					var type = data.Results[0].type;
					var leaf = data.Results[0].leaf;
					var xlast = docwidth/2-200;
					if(tempY){var ylast= tempY - 300;}else{var ylast = 250;}

					if(!hasPermission && activeLeaf===false){activeLeaf=createLeaf(omniLeaf, "All");}
					curr_id++;	
					echolet[curr_id]= new addWidget(wid, link, widget,h, w, xlast,ylast,display,type, activeLeaf);
					createPanel(curr_id);
					setWidget(curr_id);
				} 
				catch (e) { 
					alert(e);
				}
			}
		};
					
		var callback =
		{
		  success:handleSuccess,
		  failure:function(o){alert("ajax failed"+o.responseText);}
		};
		
		var cObj = YAHOO.util.Connect.asyncRequest('GET', 'get_widget.php?wid='+wid, callback); 	
	};
	
	// LEAFS

	function Leaf(lid, name, view){
		this.lid = lid;
		this.name = name;
		this.view = view;
		return true;
	};
	
	function leafExists(lid){
		if(leaf_id!=-1){
			for(var i=0; i <= leaf_id; i++){
				if(leafs[i].lid == lid){
					return i;
				}
			}
		}

		return false;
	};
	
	function newLeaf(){
		if(!document.getElementById('leaf_edit')){
			var soeie_nav= document.getElementById('soeie_nav');
			var tab = document.createElement('li');			
			tab.className = "leaf_tabs";
			tab.id = "leaf_edit";
			tab.innerHTML = '<div class="leaf_div"><div id="leaf_div_edit" class="inputbox focus_box"><input id="leaf_input" class="inputfield" type="text" value="New Tab" /><div class="tools icon_yes lefty" onclick="echopad.saveNewLeaf();"></div><div class="tools icon_no lefty" onclick="echopad.cancelNewLeaf();" ></div><div class="clearfix"></div></div></div>';	
			soeie_nav.appendChild(tab);			
			document.getElementById('leaf_input').select();
		}

	}
	
	function saveNewLeaf(){
		if(hasPermission){
			leaf = document.getElementById('leaf_input').value;
			order = leaf_id+1;
			var handleSuccess = function(o){
				if(o.responseText !== undefined){
					try { 
						var lid = o.responseText;	
						if(leafExists(lid)==false){
							createLeaf(lid, leaf);						
							showLeaf(leaf_id);
						}
						cancelNewLeaf();
					} 
					catch (e) { 
						alert(e);
					}
				}
			};
						
			var callback =
			{
			  success:handleSuccess,
			  failure:function(o){alert("ajax failed"+o.responseText);}
			};
			var postData = "leaf="+leaf+"&order="+order+"&max="+order;
			var cObj = YAHOO.util.Connect.asyncRequest('POST', 'setLeaf.php', callback, postData); 
		}

	}
	
	function cancelNewLeaf(){
		var tabs= document.getElementById('soeie_nav');
		var tab = document.getElementById('leaf_edit');
		if(tab){
			tabs.removeChild(tab);
		}	
	}
	
	function customizeLeaf(){
		var toolNode = document.getElementById('leaf_cog_'+activeLeaf);
		var leafNode = document.getElementById('leaf_div_'+activeLeaf);
	}
	
	function deleteLeaf(){
		if(hasPermission){
			var parent = document.getElementById('soeie_nav');
			var child = document.getElementById('leaf_tab_'+activeLeaf);
			var callback =
			{
			};
			
			var postData = "order=-1"+"&lid="+leafs[activeLeaf].lid;
			var cObj = YAHOO.util.Connect.asyncRequest('POST', 'setLeaf.php', callback, postData);
			renderLeaf(defaultLeaf);	
			if(child){
				parent.removeChild(child);
			}	
		}

	}
	
	function createLeaf(lid, name){
		leaf_id++;
		if(leaf_id == defaultLeaf){
			var view = "visible";
			if(!hasPermission){name = profilename +"'s "+name;}
		}else if(leaf_id == omniLeaf){
			var view = "visible";
		}else{
			var view = "hidden";
		}
		leafs[leaf_id] = new Leaf(lid, name, view);
		//var obj = document.createElement('div');
		//obj.id = "leaf_"+leaf_id;
		
		if(leaf_id!=omniLeaf && uid!=0){	
			if(hasPermission&&leaf_id!=defaultLeaf){
				var tools = '<div id ="leaf_delete_'+leaf_id+'" class="tools icon_deleteTool lefty" onclick="echopad.deleteLeaf();"></div>';
			}else{
				var tools = '';	
			}
			var soeie_nav= document.getElementById('soeie_nav');
			var tab = document.createElement('li');			
			if(leaf_id == defaultLeaf){
				tab.className = "leaf_tabs";
				activeLeaf = leaf_id;
				var leafclass = "activelink";
			}else{
				var leafclass = "leaf_div";
			}
			tab.className = "leaf_tabs";

			tab.id = "leaf_tab_" + leaf_id;
			tab.innerHTML = '<div id="leaf_div_' +leaf_id+ '" class="'+leafclass+'" onClick="echopad.renderLeaf('+leaf_id+');"><div class="lefty">'+name +'.</div>'+tools+'<div class="clearfix"></div></div>';	
			soeie_nav.appendChild(tab);
			//obj.className = "leafs hiddenLeaf";
			
		}

		//document.body.appendChild(obj);	
		return leaf_id;
	}
	
	
	function renderLeaf(lid){
		if(loadAll){
			if(activeLeaf!=lid){
				var tab = document.getElementById('leaf_div_'+activeLeaf);
				tab.className = "leaf_div";
				hideLeaf(activeLeaf);
				leafs[activeLeaf].view = "hidden";
				var tab = document.getElementById('leaf_div_'+lid);
				tab.className = "activelink";
				showLeaf(lid);
				leafs[lid].view = "visible";
				activeLeaf = lid;
				if(lid!=1){
					document.getElementById('soeie_content_canvas').style.display="none";
					document.getElementById('soeie_content_menu').style.display="none";
					document.getElementById('sc_echopad').style.display="block";
				}
				else{
					document.getElementById('soeie_content_canvas').style.display="block";
					document.getElementById('soeie_content_menu').style.display="block";
					document.getElementById('sc_echopad').style.display="none";			
				}
			}

		}else{
			var tab = document.getElementById('leaf_div_'+lid);
			tab.className = "activelink";
			showLeaf(lid);
			leafs[lid].view = "visible";
			activeLeaf = lid;
		}
		
	};
	
	function showLeaf(lid){
		var created = false;
		if(curr_id != -1){
			for(var eid=0;eid <= curr_id; eid++){
				if(echolet[eid].leaf_id == lid){
					if(!echolet[eid].epanel){
						var created = createPanel(eid);
					}else{
						quickShow(eid);
					}	
				}
			}	
		}		
	};
	

	function hideLeaf(lid){
		for(var eid=0;eid <= curr_id; eid++){
			if(echolet[eid].leaf_id == lid){
				quickHide(eid);
			}
		}
	};

	function quickHide(eid){
		if(echolet[eid].display=="loaded"){
			var panel = document.getElementById('echolet_'+eid);

			echolet[eid].h = panel.offsetHeight;
			echolet[eid].w = panel.offsetWidth;
	
			if(echolet[eid].media!="flash"){			
				var resize_knob = document.getElementById('yui-gen'+echolet[eid].resizeid);
				resize_knob.style.display="none";
				var attributes = {
					opacity: { to:0}
				};		
				var anim = new YAHOO.util.Anim('echolet_'+eid, attributes, 0.5);
				anim.animate(); 	
				anim.onComplete.subscribe(function(){
					panel.style.visibility="hidden";
					panel.style.height = "0px";
					panel.style.width = "0px";
				});		
			}else{
				panel.style.height = "0px";
				panel.style.width = "0px";
				panel.style.visibility="hidden";
			}
		}else if(echolet[eid].display=="mini"){
			var tab = document.getElementById('mini_'+eid);
			tab.style.display = "none";
		}
		if(!loadAll){
			echolet[eid].display="mini";
			toggleMini(eid);
		}
	};
	
	function quickShow(eid){
		if(echolet[eid].display=="loaded"){
			var panel = document.getElementById('echolet_'+eid);
	
			h = echolet[eid].h;
			w = echolet[eid].w;
	
			if(echolet[eid].media!="flash"){			
				panel.style.visibility="visible";
				panel.style.height = h+"px";
				panel.style.width = w+"px";
				var attributes = {
					opacity: { to:1}
				};		
				var anim = new YAHOO.util.Anim('echolet_'+eid, attributes);
				anim.animate(); 
				anim.onComplete.subscribe(function(){
					if(echolet[eid].leaf_id == activeLeaf){
						var resize_knob = document.getElementById('yui-gen'+echolet[eid].resizeid);
						resize_knob.style.display="block";
					}	   
				});		
	
			}else{
				panel.style.height = h+"px";
				panel.style.width = w+"px";
				panel.style.visibility="visible";
			}	
		}else if(echolet[eid].display=="mini"){
			var tab = document.getElementById('mini_'+eid);
			tab.style.display = "block";
		}
	};

	// PANELS
	
	function addEcholet()
	{	
		if(tempY>135){		
			curr_id++;	
			finder= true;
			type = "finder";
			finderid = curr_id;
			wid=0;
			h = "auto";
			w = "auto";
			x = tempX-100;
			y = tempY;
			link = false;
			widget = "Search for Widgets";
			display = "finder";
			lid = activeLeaf;
			if(docwidth-x<200){
				x = docwidth-250;
			}
		
			echolet[finderid] = new addWidget(wid, link, widget, h, w, x, y, display, type, lid);
			createPanel(finderid);
		}
	};
	
	function addWidget(wid, link, widget, h, w, x,y,display,type, lid){
			this.eid = curr_id;
			this.type = type;
			this.wid = wid;
			this.widget = widget;
			this.h = h;
			this.w = w;
			this.x = x;
			this.y = y;
			this.display = display;
			this.type = type;			
			this.link = link;	
			this.media =false;
			this.leaf_id = lid;
			this.epanel = false;
			this.resizeid = false;			
			return true;
	};
	

	
	function createPanel(eid){
			if(gdebug){alert('createPanel'+eid);}
			hello(eid);
			var echolet_id = "echolet_"+eid;
	
			echolet[eid].media = getMediaType(echolet[eid].link);
			if(echolet[eid].media == "flash"){
				w = "auto";
				h = "auto";
			}else if(echolet[eid].media == "iframe"){
				/*if(echolet[eid].h==0){h = "auto";}
				else if(echolet[eid].h!="auto"){h = echolet[eid].h+"px";}
				if(echolet[eid].w==0){w ="auto";}
				else if(echolet[eid].h!="auto"){w = echolet[eid].w+"px";}*/
				h = "auto";
				w = "auto";
			}else{		
				if(echolet[eid].h==0){h = "auto";}
				else if(echolet[eid].h!="auto"){h = echolet[eid].h+"px";}
				if(echolet[eid].w==0){w ="auto";}
				else if(echolet[eid].h!="auto"){w = echolet[eid].w+"px";}
			}
			x = echolet[eid].x;
			y = echolet[eid].y;
			
			echolet[eid].epanel= new YAHOO.widget.Panel(echolet_id, 
			{ 	xy:[x,y], 
				underlay:"none", 
				visible:true, 
				constraintoviewport:false, 
				draggable:true, 
				close:false, 
				height:h,
				width:w,
				effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.25}
			} );			

			echolet[eid].epanel.setBody("");
			echolet[eid].epanel.setHeader("");
			echolet[eid].epanel.setFooter("");
			echolet[eid].epanel.render(document.body);

			createContent(eid);
			
			var header = createHeader(eid);			
			echolet[eid].epanel.setHeader(header);

			
			if(echolet[eid].type!="finder"){
				if(hasPermission){echolet[eid].epanel.moveEvent.subscribe(setXY, echolet[eid].wid);}
				if(echolet[eid].media!="flash"){
					resizer(eid); 						
				}		
				if(echolet[eid].display=="mini"){
					hidePanel(eid);
				}	

			}else{
				//echolet[eid].link = selectLink(eid);
				//var content = createContent(eid);
				//echolet[eid].epanel.setBody(content);
				start_autocomp(eid);
				document.getElementById("echolet_"+eid+"_c").focus();
				document.getElementById('myInput'+eid).focus();			
				if(IE){
					var panel = document.getElementById('echolet_'+eid);
					echolet[eid].w = panel.offsetWidth;
					panel.style.width = echolet[eid].w+"px";	
				}
			}

			function child_click(){
				click_child = -1;
				if(echolet[eid].type == "finder"){
					var ac_input = document.getElementById('myInput'+eid);
					if(ac_input){ac_input.focus();}
				}
			};
			YAHOO.util.Event.addListener(echolet_id, "click", child_click);
			YAHOO.echopad.manager.register(echolet[eid].epanel);
			echolet[eid].epanel.focus;

		return true;
	};
	
	
	// AUTOCOMPLETE
	
	function start_autocomp(eid){
		// An XHR DataSource
		var myServer = "echo_engine.php";
		var mySchema = ["Widgets", "widget", "text", "link", "superscore", "matchid", "h", "w", "tid","wid", "type"];
		var myDataSource = new YAHOO.widget.DS_XHR(myServer, mySchema);
		//myDataSource.responseType = YAHOO.widget.DS_XHR.TYPE_JSON;

		
		// APPENDING to the QUERY (to send widget to ACTION)
		//myXHRDataSource.scriptQueryAppend = "abc=123&def=456"; 
		// ...or configure the response type to be JSON (default)
		//myDataSource.responseType = YAHOO.widget.DS_XHR.TYPE_JSON;
		//myDataSource.scriptQueryAppend = "action=server";
		
		// Match case sensitivity if true
		myDataSource.queryMatchCase = false;
		// Match results of query strings that are *subsets* of the current query string
		//myDataSource.queryMatchSubset = true;
		// Disable the cache
		myDataSource.maxCacheEntries = 60;
	
		
		var myinput_var = "myInput"+ eid;
		var myresult_var = "myResults"+ eid;
		var myAutoComp = new YAHOO.widget.AutoComplete(myinput_var,myresult_var, myDataSource);
		// Query Delay
		myAutoComp.queryDelay = 0.2; 
		// Container will expand and collapse vertically
		myAutoComp.animVert = true;
		// Container animation will take 2 seconds to complete
		myAutoComp.animSpeed = 0.2;
		myAutoComp.alwaysShowContainer = true;
		myAutoComp.minQueryLength = 1;
	
		myAutoComp.setHeader("<div id='header'>Search Widgets</div>");
		var help = "<div class='feedback' id=\"intro\">words you can try:<br/><br/><b>games, blog, news, video, photo, chat, comics</b><br/><br/>check out our special filters:<br/><br/><b>!popular, !new</b></div>";
		myAutoComp.setBody(help);
		document.getElementById('myResults'+eid).childNodes[0].style.display = "block";
				
		//ac_input.focus();
		
		// This function returns markup that bolds the original query,
		// and also displays to additional pieces of supplemental data.
		myAutoComp.formatResult = function(aResultItem, sQuery) {
	
		   var s = aResultItem[0]; // s is wname
		   var k = aResultItem[1];
		   var link = aResultItem[2];
		   var score = aResultItem[3];
		   var id = aResultItem[4];
		   
		   var h = aResultItem[5];
		   var w = aResultItem[6];
		   
		   var tid = aResultItem[7];
		   var wid = aResultItem[8];
		   //var uid = aResultItem[9];
		
		   var sLoc = (s.toLowerCase()).search(sQuery.toLowerCase());
		   var kLoc = (k.toLowerCase()).search(sQuery.toLowerCase());
		   
		   if (sLoc != -1){
			   var sPre = s.substr(0,sLoc);
			   var sKey = s.substr(sLoc, sQuery.length);
			   var sSum = sLoc+sQuery.length;
			   var sRemainder = s.substr(sSum); // the rest of the result
			   
		   }else{
			   var sPre = s;
			   var sRemainder = "";
			   var sKey = "";  
		   }
		   
			
		   if (s == k){
				var kPre = "";
				var kRemainder = "";
				var kKey = "";
	
		   }else{
			   
			   if (kLoc != -1){
				   var kPre = k.substr(0,kLoc);
				   var kKey = k.substr(kLoc, sQuery.length);
				   var kSum = kLoc+sQuery.length;
				   var kRemainder = k.substr(kSum); // the rest of the result
				   
	
			   }else{
				   var kPre = k;
				   var kRemainder = "";
				   var kKey = "";
			   }
			   
	
		   }
		   
			var aMarkup = ["<div><div class='firstrow'> ",
			  sPre,
			  "<span class='s_key'>", sKey,"</span>",
			  sRemainder,
			  "<span class='score'>",score,"</span>",
			  "</div>",
			  "<div class='secondrow'><span class = 'k_result'> ",
			  kPre,
			  "<span class='k_key'>", kKey,"</span>",
			  kRemainder,
			  "</span> ", 
			  "</div></div>"
			  ];
			//var aMarkup = ["<div>", s,"</div>","<div>",k,"</div>"];
			
			return (aMarkup.join(""));
		};
	
		var dataRequest = function(oSelf , sQuery){
			myAutoComp.setBody("<div class='feedback' id=\"searching\">Searching...</div>");
		};
		myAutoComp.dataRequestEvent.subscribe(dataRequest);
			// Show custom message if no results found
		var myOnDataReturn = function(sType, aArgs) {
			var myAutoComp = aArgs[0];
			var sQuery = aArgs[1];
			var aResults = aArgs[2];
	
			if(aResults.length == 0) {
					myAutoComp.setHeader("<div id='header'>No Matches</div>");
				myAutoComp.setBody("<div class='feedback' id=\"noresults\">Try shortening your query, the Echopad widget database is limited at the moment</div>");
					document.getElementById('myResults'+eid).childNodes[0].style.display = "block";
			}else{				
				myAutoComp.setHeader("<div id='header'>Best Matches</div>");
			}
		};
		myAutoComp.dataReturnEvent.subscribe(myOnDataReturn);
		
		function fnCallback(e, args) {		
			finder= false;			
			finderid = false;

			var sel_s = args[2][0];
			var sel_k = args[2][1];
			var sel_link = args[2][2];
			var sel_score= args[2][3];
			var sel_id = args[2][4];
			var sel_h = args[2][5];
			var sel_w = args[2][6];
			var sel_tid = args[2][7];
			var sel_wid = args[2][8];
			//var sel_uid = args[2][9];
			var sel_type = args[2][9];
			
			echolet[eid].leaf_id = activeLeaf;
			echolet[eid].wid = sel_wid;
			echolet[eid].widget = sel_s;
			echolet[eid].type = sel_type;
			echolet[eid].h = sel_h;
			echolet[eid].w = sel_w;	
			echolet[eid].link = sel_link;		
			//echolet[eid].link = selectLink(eid);
			echolet[eid].media = getMediaType(echolet[eid].link);
			echolet[eid].display = "loaded";
			
			if(echolet[eid].media!="flash"){			
				resizer(eid);
			}

			createContent(eid);
			var header = createHeader(eid);
			echolet[eid].epanel.setHeader(header);
			
			var usage_params = "id=" + sel_id +"&tid=" + sel_tid +"&wid=" + sel_wid;
			updateUsage(usage_params);
			setWidget(eid);
		};
		myAutoComp.itemSelectEvent.subscribe(fnCallback);
	
	};
	
	function selectLink(eid){
		var link = echolet[eid].link;
		if(link!=false){
			var h = parseInt(echolet[eid].h) + 30;
			var w = parseInt(echolet[eid].w) + 10;
			var wid = echolet[eid].wid;
			
			var debug = 0;
			var scriptpos = link.search(/<script/);
			var hostedWidget = "soeiewidgets";
			var hostedWidgetPos = link.search(hostedWidget);
			
			if(hostedWidgetPos >=0 && (echolet[eid].type=='hosted' || echolet[eid].type=='developer' || echolet[eid].type=='init')){
				var brackpos = link.indexOf(hostedWidget)+hostedWidget.length;
				var jspos = link.indexOf(".js");
				var appname = link.substring(brackpos+1,jspos);
				var source = "soeiewidgets/"+appname+".js";
				
				var divpos = link.indexOf("<div");
				var link_div = link.substring(divpos);
				if(debug == 1){
					alert(appname);
					alert(source);
					alert(link_div);
				}
		
				var headID = document.getElementsByTagName("head")[0];         
				var newScript = document.createElement('script');
				newScript.type = 'text/javascript';
				newScript.src = source;
				headID.appendChild(newScript);
						
				return link_div;
			}else if(scriptpos>=0){
	
				newlink = "<iframe src='iframy.php?linkid="+wid+"' height='"+h+"' width='"+w+"' scrolling='no' marginwidth='0' marginheight='0' frameborder='0' vspace='0' hspace='0' ></iframe>";
				return newlink;	
			}else{
				return link;
			}
		}
		return link;
			
	};
	
	function updateUsage(params){
		var callback =
		{	
		};
		var sUrl = "echo_usage.php?"+params; 
		var cObj = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); 
	}
	
	function setWidget(eid){
		if(hasPermission){
			var handleSuccess = function(o){
				if(o.responseText !== undefined){
					try { 
						//wid = o.responseText;			
						echolet[eid].epanel.moveEvent.subscribe(setXY, echolet[eid].wid);		
					} 
					catch (e) { 
						alert(e);
					}
				}
			};
	
			var callback =
			{
				  success:handleSuccess,
				  failure:function(o){alert("ajax failed"+o.responseText);}
			};						
			// XY process
			echolet[eid].x = YAHOO.util.Dom.getX("echolet_"+eid);
			echolet[eid].y = YAHOO.util.Dom.getY("echolet_"+eid);
			//fixed_link = encodeURIComponent(sel_link);
			var postData = "wid="+echolet[eid].wid+"&x="+echolet[eid].x+"&y="+echolet[eid].y+"&h="+echolet[eid].h+"&w="+echolet[eid].w+"&lid="+leafs[activeLeaf].lid;
			var sUrl = "set_widget.php"; 
			var cObj = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData); 
		}	
}
	
	function resizerOff(eid){
		resize[eid].destroy();
	};

	function hello(eid){
		function TestObj(id) {
			YAHOO.util.Event.onAvailable(id, this.handleOnAvailable, this); 
		}
		
		TestObj.prototype.handleOnAvailable = function(me) {
			if(echolet[eid].media == "flash"){
				changeClass('widget_'+eid, "flash");
			}
		}
		
		var obj = new TestObj("widget_"+eid);	
	}
	
	function resizer(eid){
	// RESIZE	
		if(true){		
			if(gdebug){alert('resizer'+eid);}
			
			var panel = document.getElementById('echolet_'+eid);
			   
			var panel_body = document.getElementById('echolet_'+eid).childNodes[1];
			var panel_footer = document.getElementById('echolet_'+eid).childNodes[2];
			var panel_header = document.getElementById('echolet_'+eid).childNodes[0];
		
			var panelHeight = panel.offsetHeight;
			var headerHeight = panel_header.offsetHeight; // Content + Padding + Border
			var footerHeight = panel_footer.offsetHeight; // Content + Padding + Border
	
			var bodyHeight = (panelHeight - headerHeight - footerHeight);
			var bodyContentHeight = (IE_QUIRKS) ? bodyHeight : bodyHeight - PANEL_BODY_PADDING;
			if(bodyContentHeight!=0 && echolet[eid].media!="iframe"){
				YAHOO.util.Dom.setStyle('widget_'+eid, 'height', bodyContentHeight + 'px');
			}
			echolet_id = "echolet_"+eid;			
			resizer_id++;
			echolet[eid].resizeid = resizer_id;
			if(gdebug){alert('init resizer'+eid);}

			resize[eid] = new YAHOO.util.Resize(echolet_id, {
				handles: ['br'],
				 autoRatio: false,
				 minWidth: 200,
				 minHeight: 200,
				 visible: false,
				 proxy: true,
				 animate: true,
        		 animateDuration: .25,
        		 animateEasing: YAHOO.util.Easing.backBoth
			 });

			resize[eid].on('resize', function(args) {
				
			   var panelHeight = args.height;
		
			   var headerHeight = this.header.offsetHeight; // Content + Padding + Border
			   var footerHeight = this.footer.offsetHeight; // Content + Padding + Border
		
			   var bodyHeight = (panelHeight - headerHeight - footerHeight);
			   var bodyContentHeight = (IE_QUIRKS) ? bodyHeight : bodyHeight - PANEL_BODY_PADDING;
			   YAHOO.util.Dom.setStyle('widget_'+eid, 'height', bodyContentHeight + 'px');
			   YAHOO.util.Dom.setStyle(this.body, 'height', bodyContentHeight + 'px');
				if (IE_SYNC) {
		
				   // Keep the underlay and iframe size in sync.
		
				   // You could also set the width property, to achieve the
				   // same results, if you wanted to keep the panel's internal
				   // width property in sync with the DOM width.
		
				   this.sizeUnderlay();
		
				   // Syncing the iframe can be expensive. Disable iframe if you
				   // don't need it.
		
				   this.syncIframe();
				}
				getDimensions(eid);
				saveHW(echolet[eid].wid, echolet[eid].h, echolet[eid].w);
		   }, echolet[eid].epanel, true);	   
	   }

	};
	
	// SAVING
	
	function getDimensions(eid){
		if(gdebug){alert('getDimensions'+eid);}
		var panel = document.getElementById('echolet_'+eid);
		if(panel.offsetHeight!=0 && panel.offsetWidth!=0){
			echolet[eid].h = panel.offsetHeight;
			echolet[eid].w = panel.offsetWidth;
		}

		//alert("got this "+ echolet[eid].h + " " + echolet[eid].w);
	};
	
	function setDimensions(eid){
		var panel = document.getElementById('echolet_'+eid);
		panel.style.height = echolet[eid].h+"px";
		panel.style.width = echolet[eid].w+"px";
		//alert("set this" + echolet[eid].h + " " + echolet[eid].w);
	};
	function setXY(e,xy, wid){
		x = xy[0][0];
		y = xy[0][1];
		saveXY(wid, x,y);
	};
							
	function saveXY(wid, x,y){
		if(hasPermission){
			var callback =
			{	
			};
			var sUrl = "set_user_widgets.php?wid="+wid+"&x="+x+"&y="+y; 
			var cObj = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); 
		}
	};
	
	function saveHW(wid, h, w){
		if(hasPermission){
			var callback =
			{	
			};
			var sUrl = "set_user_widgets.php?wid="+wid+"&h="+h+"&w="+w; 
			var cObj = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); 
		}

	};
	
	function saveDisplay(eid){
		if(hasPermission){
			var callback =
			{
			};
			var sUrl = "set_user_widgets.php?wid="+echolet[eid].wid+"&display="+echolet[eid].display; 
			var cObj = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); 
		}
	};
	
	function saveAll(eid){
		if(hasPermission){
			getDimensions(eid);
			var callback =
			{
			};
			var sUrl = "set_user_widgets.php?wid="+echolet[eid].wid+"&display="+echolet[eid].display+"&h="+echolet[eid].h+"&w="+echolet[eid].w; 
			var cObj = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback); 
		}
	};
	
	// MINIS
	
	function hideFinder(eid) {
		echolet[eid].epanel.hide();
		document.body.focus()
	}; 
	
	function showFinder() {
		if(!finder && tempY>130){
			addEcholet();
		}else{
			var x_pos = tempX-100;
			var y_pos = tempY;
			if(docwidth-x_pos<200){
				x_pos = docwidth-250;
			}
			if(y_pos>130){
				echolet[finderid].epanel.moveTo(x_pos, y_pos);
				if(!echolet[finderid].epanel.visible){
					echolet[finderid].epanel.show();			
					var ac_input = document.getElementById('myInput'+finderid);
					ac_input.focus();
				}
			}

		}
	}; 
	
	function toggleView(){
		for(i=0;i<=curr_id;i++){
			if(echolet[i].display == "loaded" && echolet[i].leaf_id == activeLeaf){
				hidePanel(i);
			}else if(echolet[i].display == "mini" && echolet[i].leaf_id == activeLeaf){
				showPanel(i);
			}
		}	
	}
	
	function hideAllLeaf(){
		for(i=0;i<=curr_id;i++){
			if(echolet[i].display == "loaded" && echolet[i].leaf_id == activeLeaf){
				hidePanel(i);
			}
		}
	}
	
	function showAllLeaf(){
		for(i=0;i<=curr_id;i++){
			if(echolet[i].display == "mini" && echolet[i].leaf_id == activeLeaf){
				showPanel(i);
			}
		}
	}
	
	function hidePanel(eid) {
		if(gdebug){alert('hidePanel'+eid);}
		wid = echolet[eid].wid;
		if(loadAll){		
			//var panel_body = document.getElementById('echolet_'+eid).childNodes[1];
			//var panel_footer = document.getElementById('echolet_'+eid).childNodes[2];
			//var panel_header = document.getElementById('echolet_'+eid).childNodes[0];
			var panel = document.getElementById('echolet_'+eid);

			getDimensions(eid);
			if(echolet[eid].media!="flash"){		
				var resize_knob = document.getElementById('yui-gen'+echolet[eid].resizeid);
				resize_knob.style.display="none";
				var attributes = {
					height: { to: 0 },
					width: { to: 0 },
					opacity: { to:0}
				};
			}else{
				var attributes = {
					height: { to: 0 },
					width: { to: 0 }
				};	
			}
	
			var anim = new YAHOO.util.Anim('echolet_'+eid, attributes, 0.5);
			anim.animate(); 
	
			anim.onComplete.subscribe(function(){
				panel.style.visibility="hidden";
				if(echolet[eid].type!="finder"){
					echolet[eid].display="mini";
					toggleMini(eid);
					saveDisplay(eid);
				}
			});	
		}else{
			if(gdebug){alert('hidePanel'+eid);}
			var panel = document.getElementById('echolet_'+eid);

			if(echolet[eid].media!="flash"){
				panel.style.visibility="hidden";
				var resize_knob = document.getElementById('yui-gen'+echolet[eid].resizeid);
				resize_knob.style.display="none";
			}
			if(echolet[eid].media == "iframe"){
				echolet[eid].h = echolet[eid].h+30;
				echolet[eid].w = echolet[eid].w+10;
			}else{
				var h = echolet[eid].h;
				var w = echolet[eid].w;
			}			
			panel.style.height = "0px";
			panel.style.width = "0px";
			if(h==0 && w==0){
				getDimensions(eid);
			}

			echolet[eid].display="mini";
			toggleMini(eid);
		}
	}; 
	
	function showPanel(eid){
			if(gdebug){alert('showPanel'+eid);}
		/*var panel_body = document.getElementById('echolet_'+eid).childNodes[1];
		var panel_footer = document.getElementById('echolet_'+eid).childNodes[2];
		var panel_header = document.getElementById('echolet_'+eid).childNodes[0];*/

		var panel = document.getElementById('echolet_'+eid);
		if(echolet[eid].type!="finder"){
			echolet[eid].display="loaded";
			toggleMini(eid);
			saveDisplay(eid);

			var h = echolet[eid].h;
			var w = echolet[eid].w;
			if(h==0 && w==0){
				panel.style.height = "auto";
				panel.style.width = "auto";
				getDimensions(eid);
			}
		}
		wid = echolet[eid].wid;

		panel.style.visibility="visible";
		if(echolet[eid].media!="flash"){
			var attributes = {
				height: { to: echolet[eid].h },
				width: { to: echolet[eid].w },
				opacity: { to: 1}
			};
		}else{
			var attributes = {
				height: { to: echolet[eid].h },
				width: { to: echolet[eid].w }
			};		
		}

		var anim = new YAHOO.util.Anim('echolet_'+eid, attributes, 0.5);
		anim.animate(); 
		anim.onComplete.subscribe(function(){
				echolet[eid].epanel.focus;	
				if(echolet[eid].media == "iframe"){				
					panel.style.height = "auto";
					panel.style.width = "auto";
				}
				if(echolet[eid].media!="flash"){var resize_knob = document.getElementById('yui-gen'+echolet[eid].resizeid);resize_knob.style.display="block";}		
		});
				
			

	};
	

	
	function closePanel(eid){
		if(echolet[eid].type=="finder"){
			hideFinder(eid);
		}else{
			//resizerOff(eid);
			echolet[eid].display="unloaded";
			echolet[eid].epanel.destroy();
			saveDisplay(eid);
		}
	} ;
	
	function toggleMini(eid){
		leafdiv = "leaf_dashboard";
		if(echolet[eid].display=="loaded"){
			var tabs = document.getElementById(leafdiv);
			var tab = document.getElementById('mini_'+eid);
			if(tab){
				tabs.removeChild(tab);
			}
			echolet[eid].display=="mini";
		}else{
			var tabs = document.getElementById(leafdiv);
			var tab = document.createElement('li');
			tab.setAttribute('id','mini_'+eid);
			//tab.setAttribute('class','minis');
			//tab.setAttribute('onclick', 'echopad.showPanel('+eid+');');
			tab.innerHTML='<div class="minis" onclick="echopad.showPanel('+eid+');">'+echolet[eid].widget+'.</div>';
			tabs.appendChild(tab);
			echolet[eid].display=="loaded";
		}
	}
	
	

	// HELPERS

	function changeClass(id, classname){
		var obj = document.getElementById(id);
		obj.setAttribute("class", classname);
	}
	
	
	function getMediaType(link){
		if(link!=false){
			var embed = link.search("<embed");
			var object = link.search("<object");
			var script = link.search("<script");
			var iframe = link.search("<iframe");			
			var hostedWidget = link.search("soeiewidgets");
			if(embed >=0 || object >=0){
				return "flash";
			}else if(hostedWidget>=0){
				return "hosted";
			}else if(script>=0){
				return "iframe";
			}else{
				return "normal";
			}
		}else{
			return false;
		}
	}
	
	
	// Create Header and Content
	function createHeader(eid){
			if(gdebug){alert('createHeader'+eid);}
		var gumby = false;
		wid = echolet[eid].wid;
		title = echolet[eid].widget;
		type = echolet[eid].type;
		
		if(gumby){var panel = document.getElementById('echolet_'+eid);	}
		if((type == "init" || type =="developer")&&false){
				var widget_header = "<div class='widget_name lefty' id='header_wid_"+eid+"'>"+title+"</div>";
				if(!gumby){var panel_tools = "<div class='hidePanel lefty' id='hidePanel_"+eid+"' onClick='echopad.hidePanel("+eid+")'></div>";
				}else{
					var id1="hidePanel_"+eid;
					var class1="hidePanel alone";
					var onclick1 = "echopad.hidePanel("+eid+");";
					var id2="showPanel_"+eid;
					var class2= "showPanel alone";
					var onclick2 = "echopad.showPanel("+eid+");";
				}
		}else if(type == "finder"){
			var widget_header = "<div class='widget_name lefty' id='header_wid_"+eid+"'>"+title+"</div>";
			if(!gumby){var panel_tools = "<div class='closePanel lefty' onClick='echopad.closePanel("+eid+")'></div>";
			}else{
				var id1="closePanel_"+eid;
				var class1 ="closePanel";
				var onclick1 = "echopad.closePanel("+eid+");";
			}
		}else{
			var widget_header = "<div class='widget_name lefty' id='header_wid_"+eid+"'>"+title+"</div>";
			if(!gumby){
				var panel_tools = "<div class='closePanel lefty' onClick='echopad.closePanel("+eid+")'></div><div class='hidePanel lefty' id='hidePanel_"+eid+"' onClick='echopad.hidePanel("+eid+")'></div>";
			}else{
				var id1="hidePanel_"+eid;
				var class1 ="hidePanel";
				var onclick1 = "echopad.hidePanel("+eid+");";
				var id2="showPanel_"+eid;
				var class2= "showPanel";
				var onclick2 = "echopad.showPanel("+eid+");";
				var id3="closePanel_"+eid;
				var class3= "closePanel";
				var onclick3 = "echopad.closePanel("+eid+");";
			}
		}
			
			if(gumby){
				var obj = document.createElement('span');
				obj.setAttribute('id',id1);
				obj.setAttribute('class',class1);
				obj.setAttribute('onclick', onclick1);
				panel.appendChild(obj);
										//obj.innerHTML="&nbsp;";

				if(type!="finder"){
					var obj2 = document.createElement('span');
					obj2.setAttribute('id',id2);
					obj2.setAttribute('class',class2);
					obj2.setAttribute('onclick', onclick2);
											//obj2.innerHTML="&nbsp;";

					panel.appendChild(obj2);
					if(type!= "init" && type !="developer"){
						var obj3 = document.createElement('span');
						obj3.setAttribute('id',id3);
						obj3.setAttribute('class',class3);
						obj3.setAttribute('onclick', onclick3);
						//obj3.innerHTML="&nbsp;";
						panel.appendChild(obj3);		
					}
				}
				return widget_header;
			}else{
				return panel_tools+widget_header+"<div class='clearfix'></div>";
			}
	};
		
	function createContent(eid){
		if(echolet[eid].type=="finder"){
			var content = "<div class='ysearchmod'><input class=inputs id=myInput"+eid+" type=text onFocus='echopad.inputFocus(this.id);' onBlur='echopad.inputBlur(this.id);'><div class=results id=myResults"+eid+"></div></div>";
			echolet[eid].epanel.setBody(content);
		}else{		
			var link = echolet[eid].link;
			if(link!=false){
				var h = parseInt(echolet[eid].h) + 30;
				var w = parseInt(echolet[eid].w) + 10;
				var wid = echolet[eid].wid;
				
				var debug = 0;
				var scriptpos = link.search(/<script/);
				var hostedWidget = "soeiewidgets";
				var hostedWidgetPos = link.search(hostedWidget);
				
				if(hostedWidgetPos >=0 && (echolet[eid].type=='hosted' || echolet[eid].type=='developer' || echolet[eid].type=='init')){
					var brackpos = link.indexOf(hostedWidget)+hostedWidget.length;
					var jspos = link.indexOf(".js");
					var appname = link.substring(brackpos+1,jspos);
					var source = "soeiewidgets/"+appname+".js";
					
					var divpos = link.indexOf("<div");
					var link_div = link.substring(divpos);
					if(debug == 1){
						alert(appname);
						alert(source);
						alert(link_div);
					}
					link = link_div;
					var content = "<div class='widgets' id='widget_"+eid+"'>"+link+"</div>";
					echolet[eid].epanel.setBody(content);

					var headID = document.getElementsByTagName("head")[0];         
					var newScript = document.createElement('script');
					newScript.type = 'text/javascript';
					newScript.src = source;
					headID.appendChild(newScript);
				}else if(scriptpos>=0){
					link = "<iframe src='iframy.php?linkid="+wid+"' height='"+h+"' width='"+w+"' scrolling='no' marginwidth='0' marginheight='0' frameborder='0' vspace='0' hspace='0' ></iframe>";
					var content = "<div class='widgets' id='widget_"+eid+"'>"+link+"</div>";
					echolet[eid].epanel.setBody(content);
				}else{
					var content = "<div class='widgets' id='widget_"+eid+"'>"+link+"</div>";
					echolet[eid].epanel.setBody(content);	
				}					
				if(IE){var panel = document.getElementById('echolet_'+eid);panel.style.width = "auto";}

			}
		}
		
	};
	
	// Surface and other helpers
	function getIdentity(){
		return curr_id;
	};			
	
	function isLoggedIn(){
		if(uid==0){
			return false;
		}else{
			return true;
		}

	};
	
	function addListener(element, type, expression, bubbling)
	{
		bubbling = bubbling || false;
		
		if(window.addEventListener)	{ // Standard
			element.addEventListener(type, expression, bubbling);
			return true;
		} else if(window.attachEvent) { // IE
			element.attachEvent('on' + type, expression);
			return true;
		} else return false;
	};
	
	
	function isInteger(s) {
		return (s.toString().search(/^-?[0-9]+$/) == 0);
	};
	function getMouseXY(e) {
		if (IE) { // grab the x-y pos.s if browser is IE
		tempX = event.clientX + document.body.scrollLeft;
		tempY = event.clientY + document.body.scrollTop;
		}
		else {  // grab the x-y pos.s if browser is NS
		tempX = e.pageX;
		tempY = e.pageY;
		}  
		
		//opera Netscape 6 Netscape 4x Mozilla 
		if (window.innerWidth || window.innerHeight){ 
		docwidth = window.innerWidth; 
		docheight = window.innerHeight; 
		} 
		//IE Mozilla 
		if (document.body.clientWidth || document.body.clientHeight){ 
		docwidth = document.body.clientWidth; 
		docheight = document.body.clientHeight; 
		}
		
		if (tempX <= 20){tempX = docwidth/2-100;}
		if (tempY <= 20){tempY = docheight/2-100;}  
		return true;
	};
	
	function isset(varname){
		//if('undefined'===window.variablename){return false;}else{return true;}
		return(typeof(window[varname])!='undefined');
	};

		// Surface Logic
	function mother_click()
	{
		if(((click_smom  + click_child)===0))
		{	
			if(!finder){	
				addEcholet();
			}else{
				showFinder();
			}
		}
		
		click_child=0;
		click_mom  = 0;
		click_smom = 0;
	};
	
	function smom_click(){
		if(click_child!=-1){
			click_smom = 0; 
			click_child = 0;
		}else{
			click_smom = -1;
			click_child = 0;
		}
	};
	
	function soeie_click(){
		click_child = -1;
	};
	
	function isMyProfile(){
		if(uid != profileid){
			return false;
		}else{
			return true;
		}
	};
	
	function getProfileID(){
		return profileid;
	};
	
	function inputFocus(id){
		var obj = document.getElementById(id);
		obj.select();
		var classname = obj.className;
		obj.className = ('class', classname+' focus_box');
		
	}
	
	function inputBlur(id){
		var obj = document.getElementById(id);
		var classname = obj.className;
		classname = classname.replace("focus_box", "");
		classname = classname.replace("failed", "");
		obj.className = ('class', classname);		
	}
	
	function content(menu){
		var params = profileid+'&';
		var func = "print_"+menu;
		var start = 0;
		var limit = 20;
		var filter = "";
		switch (menu){
			case "footprints":
				func = "print_bookmarks";
				params = profileid+'&';
				break;
			case "me":
				func = "print_profile";
				params = profileid+'&';
				break;
			case "community":
				func = "print_activities";
				params = profileid+'&';
				break;
			case "comments":
				func = "print_user_comments";
				//params = profileid+'&'start+'&'limit+'&';
				break;
			default : func = "print_"+menu;params = profileid+'&';
		}
		new Ajax.Updater('soeie_content_body', 'ajax.php', {
		parameters: { 'func':func, 'params': params}
		});
		}
	
	// PUBLIC pointers
	return{
		closePanel:closePanel,
		showPanel:showPanel,
		hidePanel:hidePanel,
		hideFinder:hideFinder,
		showFinder:showFinder,
		toggleView:toggleView,
		renderLeaf:renderLeaf,
		newLeaf:newLeaf,
		saveNewLeaf:saveNewLeaf,
		cancelNewLeaf:cancelNewLeaf,
		insertWidget:insertWidget,
		resize:resize,
		customizeLeaf:customizeLeaf,
		deleteLeaf:deleteLeaf,
		getIdentity:getIdentity,
		isMyProfile:isMyProfile,
		getProfileID:getProfileID,
		inputFocus:inputFocus,
		inputBlur:inputBlur,
		content:content,
		soeie_click:soeie_click,
		init:init
	};
}();
