
function Gadget(g, orgSrc, t, refTile, state) {	 
	 var self = this;
	 self.min = "0";
	 self.title = "";
	 self.state = state || 0;
	 self.fg = {};
	 self.fg["opt"] = {};
	 self.fg["opt"]["Sub"] = {};
	 self.fg["opt"]["Pub"] = {};
	 //debugger
	 
	 self.clearFunById = function(id) {
	 	var res = [];
	 	for (var i in self.fg["opt"]["Sub"]) {
	 		var f = self.fg["opt"]["Sub"][i];
	 		if ((typeof f)=="object" && f.id==id) {
	 			res[res.length] = i;
	 		}
	 	}
	 	for (var i=0; i<res.length; i++) 
	 		delete self.fg["opt"]["Sub"][i];
	 		
	 	res = [];
	 	for (var i in self.fg["opt"]["Pub"]) {
	 		var f = self.fg["opt"]["Pub"][i];
	 		if ((typeof f)=="object" && f.id==id) {
	 			res[res.length] = i;
	 		}
	 	}
	 	for (var i=0; i<res.length; i++) 
	 		delete self.fg["opt"]["Sub"][i];	
	 		
	 	
	 }
	 
	 self.clearTopicById = function(id, deletedTopic) {
	 	var res = [];
	 	for (var i in self.fg["opt"]["Sub"]) {
	 		var b = false;
	 		for (var j=0; j<deletedTopic.length; j++) {
	 			if (i==deletedTopic[j]) {
	 				b = true;
	 				break;
	 			}
	 		}
	 		if (b) {
	 			res[res.length] = i;
	 		}
	 	}
	 	for (var i=0; i<res.length; i++) 
	 		delete self.fg["opt"]["Sub"][i];
	 		
	 	res = [];
	 	for (var i in self.fg["opt"]["Pub"]) {
	 		var b = false;
	 		for (var j=0; j<deletedTopic.length; j++) {
	 			if (i==deletedTopic[j]) {
	 				b = true;
	 				break;
	 			}
	 		}
	 		if (b) {
	 			res[res.length] = i;
	 		}
	 	}
	 	for (var i=0; i<res.length; i++) 
	 		delete self.fg["opt"]["Pub"][i];
	 }
	 
  	 self.resetId = function (newSrc) {
  	 		var ds = newSrc.getElementsByTagName("div");    
  	 		for (var i=0; i<ds.length; i++) {
	  	 		if (ds[i].id.substring(0, 2)=="c_")
	  	 	  		ds[i].id = "c_"+self.id;
	  	 		else if (ds[i].id.substring(0, 2)=="m_")
	  	 	  		ds[i].id = "m_"+self.id;
	  	 		else if (ds[i].id.substring(0, 2)=="i_")
	  	 	  		ds[i].id = "i_"+self.id;
				else if (ds[i].id.substring(0, 3)=="i2_")
	  	 	  		ds[i].id = "i2_"+self.id;	  	 	  		
	  	 		else if (ds[i].id.substring(0, 2)=="u_")
	  	 	  		ds[i].id = "u_"+self.id;
	  	 		else if (ds[i].id.substring(0, 8)=="option0_")
	  	 	  		ds[i].id = "option0_"+self.id;  	
	  	 		else if (ds[i].id.substring(0, 8)=="option1_")
	  	 	  		ds[i].id = "option1_"+self.id;    	 	  		 	  		  	 	  		
		    }
		        
		    ds = newSrc.getElementsByTagName("a");    
		    for (var i=0; i<ds.length; i++) {
  	 			if (ds[i].id.substring(0, 2)=="a_")
  	 	  			ds[i].id = "a_"+self.id;
		    } 
		    
		    ds = newSrc.getElementsByTagName("span");    
		    for (var i=0; i<ds.length; i++) {
  	 			if (ds[i].id.substring(0, 3)=="id_")
  	 	  			ds[i].id = "id_"+self.id;
		    } 
		    
		    ds = newSrc.getElementsByTagName("table");    
		    for (var i=0; i<ds.length; i++) {
  	 			if (ds[i].id.substring(0, 9)=="subTopic_")
  	 	  			ds[i].id = "subTopic_"+self.id;
  	 			if (ds[i].id.substring(0, 9)=="regTopic_")
  	 	  			ds[i].id = "regTopic_"+self.id;  	 	  			
		    } 
		    
  	 		ds = newSrc.getElementsByTagName("option");    
  	 		for (var i=0; i<ds.length; i++) {
	  	 		if (ds[i].value.substring(0, 8)=="option0_")
	  	 	  		ds[i].value = "option0_"+self.id;  	
	  	 		else if (ds[i].value.substring(0, 8)=="option1_")
	  	 	  		ds[i].value = "option1_"+self.id;    	 	  		 	  		  	 	  		
		    } 
		       
			ds = newSrc.getElementsByTagName("a");    
			for (var i=0; i<ds.length; i++) {
  	 			if (ds[i].id.substring(0, 2)=="a_")
  	 	  			ds[i].id = "a_"+self.id;
				else if (ds[i].id.substring(0, 12)=="linkCreate0_")
  	 	  			ds[i].id = "linkCreate0_"+self.id; 
				else if (ds[i].id.substring(0, 12)=="linkCreate1_")
  	 	  			ds[i].id = "linkCreate1_"+self.id;    	 	  			 	  	 	  			
		    } 		        
		    ds = newSrc.getElementsByTagName("img");    
		    for (var i=0; i<ds.length; i++) {
	  	 		if (ds[i].id.substring(0, 3)=="x1_")
	  	 	  		ds[i].id = "x1_"+self.id;
	  	 		else if (ds[i].id.substring(0, 3)=="x2_")
	  	 	  		ds[i].id = "x2_"+self.id;
	  	 		else if (ds[i].id.substring(0, 3)=="x3_")
	  	 	  		ds[i].id = "x3_"+self.id;
	  	 		else if (ds[i].id.substring(0, 3)=="x4_")
	  	 	  		ds[i].id = "x4_"+self.id;  	 	  
		   }   
		   ds = newSrc.getElementsByTagName("select");    
		   for (var i=0; i<ds.length; i++) {
				if (ds[i].id.substring(0, 2)=="k_")
					ds[i].id = "k_"+self.id;
				else if (ds[i].id.substring(0, 9)=="hideIt01_")
					ds[i].id = "hideIt01_"+self.id;	
				else if (ds[i].id.substring(0, 9)=="hideIt11_")
					ds[i].id = "hideIt11_"+self.id;										
		  } 
		  
		  
		  ds = newSrc.getElementsByTagName("input");    
		  for (var i=0; i<ds.length; i++) {
				if (ds[i].id.substring(0, 7)=="hideIt_")
  	 	  			ds[i].id = "hideIt_"+self.id;
				else if (ds[i].id.substring(0, 9)=="hideIt02_")
  	 	  			ds[i].id = "hideIt02_"+self.id;
				else if (ds[i].id.substring(0, 9)=="hideIt12_")
  	 	  			ds[i].id = "hideIt12_"+self.id;
				else if (ds[i].id.substring(0, 9)=="hideIt13_")
  	 	  			ds[i].id = "hideIt13_"+self.id; 	 	  	 	  					  	 	  			  	 	  			  	 	  			  	 	  			  	 	  			
		  } 
		  ds = newSrc.getElementsByTagName("td");    
		  for (var i=0; i<ds.length; i++) {
				if (ds[i].id.substring(0, 2)=="t_")
  	 	  			ds[i].id = "t_"+self.id;
		  }  	 	  			
		  //msg(newSrc.innerHTML);
  	 }

     self.setupConnection = function() {
	    	self.doDefault();
	    	self.tr = self.src.parentNode.parentNode;
     }
     
     
  
     self.clear = function() {
     	gadgetManager.clearGadget(self.id);
     }


     
	 self.wipeOut = function(){	 

	 	var c = self.getNode("c");	
	    if (c.offsetHeight<1) 
	    	return;
	    self.h = self.tr.offsetHeight;
	    self.w = self.tr.offsetWidth;
	    
	    self.hideAllOptions();
		
		try {
			dojo.lfx.html.wipeOut(c, 300).play();		
		}catch (ee) {
			c.style.height = "0px";
			c.style.display = "none";
		}
		setTimeout(self.makeupMinH, 10);
	}
	
	self.makeupMinH = function() {
		self.src.style.height = "22px";
		self.tr.style.height = "22px";
	}
	self.makeupMaxH = function() {
		self.src.style.height = (self.h-22)+"px";
		self.tr.style.height = self.h+"px";
		
	}
	
	self.wipeIn = function() {
	//msg(dojo.byId(id).innerHTML);
	//debugger
	    var c = self.getNode("c");
	    if(c.offsetHeight!=0)
	    	return;
	    self.hideAllOptions();	    
	    try {
			dojo.lfx.html.wipeIn(c, 300).play();			
		}catch (ee) {
			c.style.height = self.h+"px";
			c.style.display = "block";
		}
		setTimeout(self.makeupMaxH, 200);
	}		
	
	self.doClose = function(e) {
	//debugger
	    var tt = dragSources[self.id];
	    if (tt) {
			dojo.dnd.dragManager.unregisterDragSource(tt);
			delete dragSources[self.id];
		}
		tt = dropTargets[self.id];
		if (tt) {
			dojo.dnd.dragManager.unregisterDropTarget(tt);	
			delete dropTargets[self.id];	
		}
		self.clear();
		var tile = dojo.byId(self.id);
		dojo.html.removeNode(tile.parentNode.parentNode);
		var td = document.createElement("td");
		td.setAttribute("vAlign", "top");
		td.appendChild(self.src);
		td.style.height = "40px";
		//self.src.style.height = "40px";
		var tb = dojo.byId("tb_tr");
		tb.appendChild(td);
		self.changeState(true);
		dragSources[self.id] = new dojo.dnd.TileHtmlDragSource(self.src, "tile");
		delete gadgetManager.gadgetMap[id];
		gadgetManager.tbTable[self.id] = self;
		//msg(document.getElementById("col_0").innerHTML)
	}
	
	
	self.hideAllOptions = function() {
		dojo.event.topic.publish("/hideOptions");
	}
	
	self.showOption = function(isPub) {
		var a = self.getNode("a");
		var u = self.getNode("u");
	    self.hideAllOptions();
		a.innerHTML = "Content";
        	
       	var y = dojo.html.getAbsolutePosition(a, true).top;
       	u.style.top = y;
       	var x = dojo.html.getAbsolutePosition(a, true).left;
       	x = Math.min(x, screen.width-360);
       	u.style.left = x;
       	u.style.display = "block";
       	//alert("u.h:"+u.clientHeight);
       	setTimeout("window.scrollTo("+x+", "+(y-200)+")", 100);

       	status = "y:"+y;
       	//alert("isPub:"+isPub);
       	if (isPub && ( typeof isPub) == "boolean")
       		self.setupRegister();
       	else
       		self.setupSubscribe();

        return false;
	}
	
	self.hideOption = function() {
		
		var a = self.getNode("a");
		var u = self.getNode("u");
		a.innerHTML = "Option";
        self.getNode("u").style.display = "none";       
        return false;
	}

	
	self.selectOption = function() {
	//debugger
		var c = self.getNode("k");
		for (var i=0; i<c.options.length;i++) {
			dojo.byId(c.options[i].value).style.display = "none";
		}
		dojo.byId(c.value).style.display = "block";
		if (c.value.substring(0, 8)=="option0_") {
			self.setupSubscribe();
		}else if (c.value.substring(0, 8)=="option1_") {
			self.setupRegister();
		}
	}

	
	self.setupSubscribe = function() {
			var u = self.getNode("u");
			var table = self.getNode("subTopic");
			clearTable(table);
			var j=-1;

			//alert("topic.h:"+topic.clientHeight);
			//alert("u.h:"+u.clientHeight);
			try {
				for (var i in gadgetManager.topicMap) {
					self.processTopic(i, gadgetManager.topicMap[i], table, ++j, "Sub", "sfun");
				}
			}catch (ee) {
				debugger;
			}
			u.style.height = (130 + table.clientHeight)+"px";
	}
	
	self.setupRegister = function() {

			var regTable = self.getNode("regTopic");		
			clearTable(regTable);
			var j=-1;
			var m = unionMap(gadgetManager.topicMap, gadgetManager.topicFunMap);
			for (var i in m) {
				self.processTopic(i, m[i], regTable, ++j, "Pub", "pfun");
			}
	}
	
	self.processTopic = function (i, t, table, j, k1, k2) {
				var i = i;
				var tn = t.topic;
				var j = j;
				var k1 = k1;
				var kk2 = k2;
				var tr = table.insertRow(-1);
				tr.setAttribute("id", "ccc_"+k1+"_"+j);
				var td1 = document.createElement("td");
				var input1 = document.createElement("input");
				input1.setAttribute("id", "tp"+j+"_"+self.id);
				input1.setAttribute("type", "checkbox");
				//debugger
				input1.onclick = (function () {
				//debugger
					return function() {
					//debugger
						var topic = gadgetManager.getTopic(tn);
						var al = eval("topic.available"+k1+"List");
						var src = getSrcElement(arguments[0]);
						var f;

						if (topic.private>0)
							f = getSurfix(al, "_"+self.id);
						else
							f = eval("topic.getAvailable"+k1+"()");
						var cc = self.getNode(k2+j);
						if (!f) {							
							var idd;
							if (!cc) {
								f = null;
								alert("There is no handler available for Topic"+i);
								src.disabled = true;
								src.checked = false;
								//debugger
								var ss = dojo.byId(kk2+j+"_"+self.id);
								if (ss)
									ss.disabled = true;
							}else {
								idd = cc.value;
								f = gadgetManager.funMap[idd];
							}
						}
						if (f){							
							if (src.checked) {							
								if (k1=="Sub")
									gadgetManager.subscribe(tn, f.getObj(), f.name);
								else
									gadgetManager.registerPublisher(tn, f.getObj(), f.name);
//debugger								
								var did = k1+"_"+"div_"+self.id+"_"+f.name+"_"+j;
								var div = dojo.byId(did);
								if (div) {
									var r = [];
									r[0] = f.name;									
									var p = [];
									//debugger
									for (var i=0; true; i++) {
										var pp = dojo.byId(did+"_"+i);
										if (!pp)
											break;
										p[p.length] = pp.value; 
									}
									r[1] = p;
									self.fg["opt"][k1][tn] = r;
								} else
									self.fg["opt"][k1][tn] = f.name;
							}else {		
								if (k1=="Sub")					
									gadgetManager.unsubscribe(tn, f.getObj().id);
								else
									gadgetManager.unregisterPublisher(tn, f.getObj().id);
								if (self.fg["opt"][k1][tn])
									delete self.fg["opt"][k1][tn];
							}
						}
					}
				})();			
				td1.appendChild(input1);				
				self.td2 = document.createElement("td");				 
				var td4 = document.createElement("td");
				
				
				if (k1=="Pub") 				
					 self.td2.innerHTML = "<a href=\"#\" style=\"text-decoration: none\" onMouseover=\"showtip2('Please select a trigger to see the description')\" onMouseout=\"hidetip()\" onclick=\"return false\">"+i+"</a>";			
				else 			
					self.td2.innerHTML = "<a href=\"#\" style=\"text-decoration: none\" onMouseover=\"showtip2('Please select a callee to see the description')\" onMouseout=\"hidetip()\" onclick=\"return false\">"+i+"</a>";
				self.td2.style.whiteSpace = "nowrap";
				dojo.html.setStyle(self.td2, 'font-size', '11');
				tr.appendChild(td1);
				tr.appendChild(self.td2);
					
				//debugger
				//var mf = gadgetManager.getTopicFun(i, self.id);
				td1 = document.createElement("td");
				var selectIndex = -1;
				var len = null;
				var al = eval("t.available"+k1+"List");
				//debugger
				if (!al)
					len = 0;
				if (!len)
					len = self.showLen(al);					
				if (len!=1 && len!=-1 && t.private<3) {
					var input2 = document.createElement("select");
					input2.setAttribute("id", k2+j+"_"+self.id);
					input2.onchange = (function() {
						return function() {
						
							if (self.getNode("tp"+j).checked) {
						
								self.fg["opt"][k1][tn] = this.value;
							}
                            self.showPara(getSrcElement(arguments[0]));
                            var f = gadgetManager.funMap[this.value];
                           
                            if (f)
	                            self.td2.innerHTML = "<a href=\"#\" style=\"text-decoration: none\" onMouseover=\"showtip2('"+f.des+"')\" onMouseout=\"hidetip()\" onclick=\"return false\">"+t.topic+"</a>";
				
						}
					})();
					var kk2 = self.fg["opt"][k1][t.topic];
					var mm = null;
					if (al && len>1) 
						mm = al;
					else
						mm = gadgetManager.funMap;
					var surfix = "_"+self.id;
					var lenn = surfix.length;
					//debugger
					for (var k in mm) {
						var fff = mm[k];
						if (fff.hidden)
							continue;
						if (k.substring(k.length-lenn)!=surfix) {
							if (t.private==2)
								continue;
							if (k.indexOf("_")>-1)
								continue;
						}														
						var op = document.createElement("option");
						op.setAttribute("value", k);
						if (kk2==k || (typeof kk2)=="object" && kk2[0]==k) {
							op.setAttribute('selected','selected');
							
						}
						op.innerHTML = k;
						input2.appendChild(op);						
						if (fff.para) {
							td4.appendChild(self.createParaDiv(k1, self.id+"_"+k+"_"+j, fff.para, kk2==k || (typeof kk2)=="object" && kk2[0]==k));						
							//debugger
						}
					}					
					
					td1.appendChild(input2);
								
				} else {
				//debugger						
					var mf;
					if (t.private>2) {					
						mf = getSurfix(al, "_"+self.id);
					} else 
						mf = getFirst(al)
					if (!mf) {
						tr.parentNode.removeChild(tr);					
						return;
					}
					var k = mf.name;
					td1.innerHTML = k;
					td1.style.whiteSpace = "nowrap";
					dojo.html.setStyle(td1, 'font-size', '11');
					input1.onmouseover = (function(tip) {
						return function() {
							showtip2(tip);			
						}
					})(mf.des);
					if (mf.para) {
							td4.appendChild(self.createParaDiv(k1, self.id+"_"+k+"_"+j, mf.para, true));						
							//debugger
					}
					self.td2.innerHTML = "<a href=\"#\" style=\"text-decoration: none\" onMouseover=\"showtip2('"+mf.des+"')\" onMouseout=\"hidetip()\" onclick=\"return false\">"+t.topic+"</a>"
			
				}
				tr.appendChild(td1);
				tr.appendChild(td4);
				//debugger
				if (self.fg["opt"][k1][t.topic])
					input1.checked = true;			
		
	}
	
	self.showLen = function(a) {
	    var res = 0;
	    var h = false;
		try {
			for (var x in a) {
				if (a[x].hidden) {
					h = true;
					continue;
				}
				res++;	
			}
		} catch (ee) {
			return 0
		}
		if (h && res==0)
			return -1;
		return res;
	}
	
	self.showPara = function(src) {
		if (src.selDiv)
			dojo.html.setStyle(src.selDiv, "display", "none");
								
		src.selDiv = dojo.byId("div_"+self.id+"_"+src.value);
		if (src.selDiv)
			dojo.html.setStyle(src.selDiv, "display", "block");
	
	}
	

	
	
	
	
	
	self.createParaDiv = function(k1, id, s, show) {
	//alert(s);
	
		s = eval(s);
		var did = k1+"_div_"+id;
		
		var div = document.createElement("div");
		div.setAttribute("id", did);
		var b = false;
		var k=-1;
		for (var i=0; i<s.length; i++) {
			var p = s[i];
			var label = document.createElement("span");
			dojo.html.setStyle(label, 'font-size', '11');
			label.innerHTML = p[1];
			
			if (p[0].toLowerCase()=="select") {
				var sel = document.createElement("select");
				if (p[3]) {
					for (var j=0; j<p[3].length; j++) {
						var opt = document.createElement("option");
						opt.setAttribute("value",p[3][j][0]);
						opt.innerHTML = p[3][j][1];
						sel.appendChild(opt);
					}
					
				}
				var iddd = did+"_"+(++k);
				sel.setAttribute("id", iddd);
				div.appendChild(label);
				div.appendChild(sel)
				/*debugger
				sel.onchange = (function(id) {
						return function() {
						//debugger
							var idd = getSrcElement().id;
						}
				})(iddd);*/
					 
				if (show)
					dojo.html.setStyle(div, 'display', "block");				
				else
					dojo.html.setStyle(div, 'display', "none");
				b = true;
				
			} else if (p[0].toLowerCase()=="hidden") {
				var input = document.createElement("input");
				input.setAttribute("id", did+"_"+(++k));
				input.setAttribute("type", "hidden");
				if (p[1]=="_id_")
					input.setAttribute("value", self.id);
				div.appendChild(input);
			}
		}
		if (b)
			return div;
		else
			return null;
	}
	
	self.getId = function(e) {
		var d = findContainerByTagAttrExclusiv(getSrcElement(e), "div", "id", "_");
		return d.id;
	}
	self.getNode = function(pre) {
		return dojo.byId(pre+"_"+self.id);
	}
	
	self.showTile= function() {
		self.tr.style.display = "block";
	}
	self.hideTile = function() {
	//debugger
		if (self.removable && self.removable=="0")
			return;
		self.tr.style.display = "none";
	}

	self.getRow = function() {
		var t = findContainerByTagAttrPre(self.src, "table", "id", "col_");
		var tb = getTBody(t);
		var trs = getChildren(tb);
		for (var i=0; i<trs.length; i++) {
			var td = getChildren(trs[i])[0];
			var src2 = getChildren(td)[0];
			if (src2.id==self.id) {
				return ""+i;
			}
		}
		return -1;
	}
	self.getCol = function() {
		var t = findContainerByTagAttrPre(self.src, "table", "id", "col_");
		return t.id.substring(4);
	}
	self.setCookie = function() {
		self.cookie = "["+self.getAttributeString()+","+self.getFGString()+"]";
	}
	
	self.getAttributeString = function() {
		return "['"+self.id+"','"+self.getRow()+"','"+self.getCol()+"','1','"+((self.getNode("c").style.display=="none")?"1":"0")+"']";
	}
	self.getFGString = function() {
		var res = "[[";
		var j=0;
		var m = self.fg["opt"]["Pub"];
		for (var i in m) {
			if (j++>0)
				res +=",";
			if ((typeof m[i])=="string")
				res += "['"+i+"','"+m[i]+"']";
			else {
				res += "['"+i+"',[";
				for (var kk=0; kk<m[i].length; kk++) {
					if (kk>0)
						res += ",";
					res += "'"+m[i][kk]+"'";
				}
				res += "]]";
			}
		}
		res += "],[";
		
		m = self.fg["opt"]["Sub"];
		j=0;
		
		for (var i in m) {
			if (j++>0)
				res +=",";
			res += "['"+i+"',"+toString(m[i])+"]";
		}
			
		res += "]]";
		return res;
	}
	
	  
  	self.postInit = function(g) {
	  	if (g) {
		    if (self.min=="1")
		    	self.wipeOut();
		    self.getNode("id").innerHTML = "Gadget Id: "+self.id;
		}
  	}
	
	self.changeState = function(isIcon) {
		if (isIcon) {
			 self.getNode("m").style.display = "none";
		 	 self.getNode("i").style.display = "block";		 	 
		 	 self.src.style.width = "60px";
		 	 var i2 = self.getNode("i2");
		 	 if (dojo.string.trim(i2.innerHTML)=="") {
			 	 var a = document.createElement("a");
			 	 a.href="javascript:void(0)";		 	 
			 	 //debugger
			 	 a.onmouseover = (function (t) {
			 	 	 return function() {
				 	 showtip2(t);}
				 })(self.title);
				 a.onmouseout = hidetip;
			 	 var img = document.createElement("img");
			 	 img.setAttribute("class", "hicon2");
			 	 img.setAttribute("border", "0");
			 	 img.style.width = "100%";
			 	 img.style.height = "100%";
			 	 img.src = g.Module.ModulePrefs.thumbnail;
			 	 a.appendChild(img);
			 	 i2.appendChild(a);
			 }
		 	 self.state = 0;
		} else {
		//debugger
			 self.getNode("m").style.display = "";
		 	 self.getNode("i").style.display = "none";
		 	 self.h = self.getNode("m").clientHeight;
		 	 self.w = 300;
		 	 self.src.style.width = self.w;		 	 
		 	 //self.src.style.height = self.h-22;		
		 	 self.tr.style.width = "300px";	
		 	 //self.tr.style.height = self.h;	
		 	 self.state = 1;
		 	 dropTargets[self.id] = new dojo.dnd.TileHtmlDropTarget(self.src, "tile");
		}
	}
	
	self.parserXML = function(s) {
		var doc;
		if (window.ActiveXObject)
		{
		  	doc =new ActiveXObject("Microsoft.XMLDOM");
		  	doc.async="false";
		  	doc.loadXML(s);
		 }
		// code for Mozilla, Firefox, Opera, etc.
		else
		{
		  var parser=new DOMParser();
		  doc=parser.parseFromString(s,"text/xml");
		}
		return doc;
  	}
	
	self.processContent = function(d, s, des){
		var s2 = s.toLowerCase();
		var sc1 = "<scr"+"ipt";
		var sc2 = ">";
		var sc3 = "</scr"+"ipt>";
	//debugger
		var res = "";
		var ii=0;
		while (true) {
			var i = s2.indexOf(sc1, ii);
			if (i<0)
				break;
				//debugger
			var j = s2.indexOf(sc2, i+7);
			if (j<0)
				break;
			var k = s2.indexOf(sc3, j+1);
			if (k<0)
				break;
			res += s.substring(ii, i);
			//alert(s.substring(j+1, k))
			eval(s.substring(j+1, k));
			ii = k+9;
	
		}
		res += s.substring(ii);
		//alert(res);
		if (des) {
		//debugger
			d.innerHTML = des;
			gadgetManager.addFun(self.id, "_popLink"+"_"+self.id, (function (m) {
				return function() {
					    showHTML(m);
			   		   }
			})(res), "_popLink"+"_"+self.id, self, null, null, null, true);
			gadgetManager.connect(self.getNode("pop"), "onclick", self, "_popLink"+"_"+self.id);
		
		} else 
			d.innerHTML = res;
	}
	
	self.insertId = function(s) {
		var res = s.replace(/__MODULE_ID__/g, "_"+self.id);
		//msg(res);
		return res;
	}
	
	self.doDefault = function() {
		self.publishDefault();
		self.subscribeDefault();
		self.connectDefault();
		self.defineDefaultFunctions();
	}
	
	self.defineDefaultFunctions = function() {
	//debugger
		gadgetManager.addFun(self.id, "hideOption"+"_"+self.id, (function (g) {
			return function() {
				    var a = g.getNode("a");
					a.innerHTML = "Option";
			        g.getNode("u").style.display = "none";
		   		   }
		})(self), "Enable this task to close this option box when another option is opened and so on", self, true, null, "/hideOptions", 3);
		
		gadgetManager.addFun(self.id, "ShowGadget"+"_"+self.id, (function (g) {
			return function() {
				    g.tr.style.display = "block";
		   		   }
		})(self), "Show a gadget", self);
		
		gadgetManager.addFun(self.id, "HideGadget"+"_"+self.id, (function (g) {
			return function() {
				    g.tr.style.display = "none";
		   		   }
		})(self), "Hide a gadget", self);
		
		gadgetManager.addFun(self.id, "MinimizeGadget"+"_"+self.id, (function (g) {
			return function() {
				    g.wipeOut();
		   		   }
		})(self), "Minimize a gadget", self);
				
		gadgetManager.addFun(self.id, "RestoreGadget"+"_"+self.id, (function (g) {
			return function() {
				    g.wipeIn();
		   		   }
		})(self), "Restore a gadget", self);
	}
	self.createTopic0 = function() {
		self.createTopic(false);
	}
	self.createTopic1 = function() {
		self.createTopic(true);
	}
	self.createTopic = function(isPub) {
		//alert("createTopic: not available yet");
		
		var para = new Array();
    	para[0] = top;
    	para[1] = "Create Topic";
    	para[2] = "<table><tr><td>Topic:</td><td><input type='text' id='topicId'/></td><td style='width:200'></td></tr></table>";
    	para[3] = "topicId";
		var topic = window.showModalDialog("/RemoteScriptGuru/jsp/common/msgBox.jsp?"+new Date().valueOf(),para,"dialogTop:"+(screen.height / 2)+"; dialogLeft:"+ (screen.width / 2)+";dialogWidth:250px;dialogHeight:140px;status:0;toolbar:0;help:0;scroll:0;resizable:0");

		if (topic) {
			gadgetManager.addTopic(topic);
			
			self.hideOption();
			self.showOption(isPub);
		}
	}
	
	self.publishDefault = function() {
		//gadgetManager
	}
	
	
	self.subscribeDefault = function() {
	//debugger
		gadgetManager.subscribe("/hideOptions", self, "hideOption"+"_"+self.id);
	}
	
	self.connectDefault = function() {
		gadgetManager.connect(self.getNode("a"), "onclick", self, "showOption");
	    gadgetManager.connect(self.getNode("x1"), "onclick", self, "wipeOut");
	    gadgetManager.connect(self.getNode("x2"), "onclick", self, "wipeIn");
	    gadgetManager.connect(self.getNode("x3"), "onclick", self, "doClose");
	    gadgetManager.connect(self.getNode("x4"), "onclick", self, "hideOption");
	    gadgetManager.connect(self.getNode("k"), "onchange", self, "selectOption");
	    
	    gadgetManager.connect(self.getNode("linkCreate0"), "onclick", self, "createTopic0");
	    
	    gadgetManager.connect(self.getNode("linkCreate1"), "onclick", self, "createTopic1");
	       
	}
	
//****************************************************
	
try {	

//debugger
	 var isIcon = g && g.Module.ModulePrefs.state=="0";
	 var cn =  dojo.byId("cloneGadget");
	 if (g) {
	 	self.title = g.Module.ModulePrefs.title;
	 	self.id = g.Module.ModulePrefs.id;
	 	self.src = document.createElement("div");
	 	self.src.innerHTML = cn.innerHTML;
     	self.src.id = self.id;
	 } else {
		//self.title = orgSrc.title;	 	
	 	if (orgSrc) {
	 		self.src = document.createElement("div");
		 	self.src.innerHTML = orgSrc.innerHTML;
		 	self.src.id = orgSrc.id;
		 	self.src.innerHTML = cleanInner(self.src.innerHTML);
//debugger
		 	self.id = self.src.id;
		
		} else {	
			self.src = document.createElement("div");
			self.id = ""+(++idCount);
     		self.src.id = self.id;	
		}
	 }
	 //debugger
	 var td = document.createElement("td");


     if (refTile==null) {
     	if (!isIcon)
	     	self.tr = t.insertRow(-1);
	    else {
	    	self.tr = t;
	    	td.setAttribute("vAlign", "top");
	    	td.style.width = "60px";
	    	td.style.height = "40px";
	    	self.src.style.width = "60px";
	    	//self.src.style.height = "40px";	    	
	    }
	 }else
     	self.tr = document.createElement("tr");
     td.appendChild(self.src);
     self.tr.appendChild(td);
     
	 //debugger
	 if (!g && !orgSrc) {
	    self.resetId(self.src);
	    getTBody(t).appendChild(self.tr);
	 	dropTargets[self.id] = new dojo.dnd.TileHtmlDropTarget(self.src, "tile");
	 	self.tr.style.width = "300px";
	 	self.tr.style.height = "200px";
	 	self.src.style.width = "300px";
	 	self.src.style.height = "200px";
	 	return self;
	 }
	 
	 var w;
	 var h;
	
     

     if (orgSrc) {
	 	w = orgSrc.clientWidth;
	 	h = orgSrc.clientHeight;
	 	self.src.style.height = h +"px";
	 	if (w==0 || h==0) {
	 	    var gg = gadgetManager.gadgetMap[orgSrc.id];
	 	  	if (gg) {
	 			w = gg.w;
	 			h = gg.h-22;
	 		}
	 	}
	 }else {
	 	w = 300;
	 }
     self.src.style.width = w+"px";
	 self.tr.style.width = w+"px";
	 
     gadgetManager.gadgetMap[self.id] = self;
     if (!orgSrc) {	     
    	 self.resetId(self.src);
     }
     

     
     //debugger
	//msg(document.getElementById("t").innerHTML); 
	 if (refTile) 
     	 dojo.html.insertBefore(self.tr, refTile);

//msg(document.getElementById("t").innerHTML);
     
	 if (g) {
	 	var mp = g.Module.ModulePrefs;
	    dojo.byId("t_"+self.id).innerHTML = mp.title;
	    self.min = mp.min;
	    //debugger
	    var poplabel=g.Module.ModulePrefs.poplabel;
	    if (!poplabel)
		    self.processContent(dojo.byId("c_"+self.id), self.insertId(unescape(g.Module.Content.content)));
		else {
			self.processContent(dojo.byId("c_"+self.id), self.insertId(unescape(g.Module.Content.content)), g.Module.ModulePrefs.des+"<br/><a href=# id='pop_"+self.id+"'>"+poplabel+"</a><br/>");
		}
	    self.removable = mp.removable;
	 }
	
	 dragSources[self.id] = new dojo.dnd.TileHtmlDragSource(self.src, "tile");
	 	 
	 if (!isIcon) {
	 
	 //alert(self.tr.outerHTML);
	 	 self.setupConnection();
	     dropTargets[self.id] = new dojo.dnd.TileHtmlDropTarget(self.src, "tile");
         self.postInit(g);     
         if (h) {
		     self.tr.style.height = (h+22)+"px";
		     self.src.style.height = h+"px";
	     }
	     td.setAttribute('vAlign', 'top');
	     self.h = self.tr.offsetHeight;
		 self.w = self.tr.offsetWidth;
		 
//alert(self.tr.outerHTML);		 
	 } else {
	 //debugger
	 	 self.changeState(true);
//msg(self.src.parentNode.innerHTML);		 	 
	 }
	 
	 return self;

  } catch(ee) {
  	debugger;
  }


}







