

dojo.provide("dojo.dnd.TileHtmlDropTarget");
dojo.require("dojo.dnd.*");
dojo.require("dojo.lang.*");
//var nn = 0;

dojo.declare("dojo.dnd.TileHtmlDropTarget", dojo.dnd.HtmlDropTarget, {
	vertical: false,
	onDragOver: function(e){

	    try {
	    //debugger
			if(!this.accepts(e.dragObjects)){ return false; }
			
			if (e.dragObjects && e.dragObjects[0])
				  this.dragObject = e.dragObjects[0];
			 
			if (!this.dragObject || this.dragObject.domNode.id==this.domNode.id) {
				var g = gadgetManager.gadgetMap[this.dragObject.domNode.id];
				if (g && g.state==1) {
						g.tr.style.display = "none";
						//if (nn<0)
						//alert("fdas");
						//status = "hide("+(nn++)+"):"+g.src.id+" table:"+g.tr.parentNode.parentNode.id;
				}
			  return true;
		    }
			gadgetManager.gadgetMap[this.dragObject.domNode.id].hideAllOptions();
			if(!this.dropIndicator){
				this.createDropIndicator();
			}
			this.placeIndicator(e);

			return true;
		}catch (ee) {
			debugger;
		}
		return false;
	},

	createNewTile: function (div, hide) {
	  var tr = document.createElement("tr");
	  var src = this.dragObject.domNode;
	  var w = Math.max(src.clientWidth, 290);
	  var h = Math.max(src.clientHeight+22, 50);
	
	  tr.style.width = w+"px";
	  tr.style.height = h+"px";
	  td = document.createElement("td");
	  td.setAttribute("vAlign", "top");
	  if (!div) {		
	  	var div = document.createElement("div");
	  	div.style.width = w+"px";
	  	if (dojo.byId(this.dragObject.domNode.id).style.height=="22px") 
	  		div.style.height = "22px";
	  	else
	  		div.style.height = h+"px";
	  	if (!hide) {
	  		div.style.borderStyle = "dashed";
		  	div.style.borderWidth = "thin";
	  	} else {
	  		div.style.display = "none";
	  	}
	  	div.id = ""+(++idCount);	  	
	  }
	  td.appendChild(div);
	  tr.appendChild(td);
	  
	  return tr;
	},

	createDropIndicator: function() {
		this.dropIndicator = this.createNewTile();
		dojo.dnd.dragManager.dgIndicator = this.dropIndicator;
		
		//var c = getChildren(this.dropIndicator)[0];
		//c = getChildren(c)[0];
		//dropTargets[c.id] = new dojo.dnd.TileHtmlDropTarget(c, "tile");
	},
	
	createTile: function(td) {
		return this.createNewTile(td);
	},

	onDragMove: function(e, dragObjects){
		//dojo.html.scrollIntoView(this.dropIndicator);
	},

	/**
	 * Position the horizontal line that indicates "insert between these two items"
	 */
	placeIndicator: function(e) {
	    dojo.html.insertBefore(this.dropIndicator, this.domNode.parentNode.parentNode);
	},

	onDragOut: function(e) {
		this.removeIndicator();
	},
	
	removeIndicator: function() {
	
		try {
			if (!this.dragObject || this.dragObject.domNode.id==this.domNode.id) 
			  return false;
		    var c = getChildren(this.dropIndicator)[0];
			c = getChildren(c)[0];
		    //dojo.dnd.dragManager.unregisterDropTarget(c);	
		    dojo.html.removeNode(this.dropIndicator);
			delete this.dropIndicator;
			
			this.dropIndicator = null;
			dojo.dnd.dragManager.dgIndicator = null;
		}catch (ee) {
			debugger;
		}
	},

	/**
	 * Inserts the DragObject as a child of this node relative to the
	 * position of the mouse.
	 *
	 * @return true if the DragObject was inserted, false otherwise
	 */
	onDrop: function(e){
		this.removeIndicator();
		try {
//debugger
			var src = null;
			if (this.dragObject)
				src = this.dragObject.domNode;
			else
				src = getSrcElement();
 		//debugger	
			if (src) {	
				
				if (this.domNode.id==src.id) {
					return false;
				}
				var g = gadgetManager.gadgetMap[src.id];
				var refTile = this.domNode.parentNode.parentNode;
				if (g.state==1) { 
				
					g.tr = src.parentNode.parentNode;						
					g.tr.parentNode.removeChild(g.tr);	
					status = "remove:"+g.src.id;	
					//debugger
					dojo.html.insertBefore(g.tr, refTile);	
					g.clear();				
				} else {
					var td = src.parentNode;
					td.parentNode.removeChild(td);
					status = "add:"+g.src.id;
					g.tr = document.createElement("tr");
					g.tr.appendChild(td);
					dojo.html.insertBefore(g.tr, refTile);
						//debugger
					g.changeState();	
					g.clear();
					delete gadgetManager.tbTable[g.id];
					if (g.reset)
						g.reset();
				}
				
				g.setupConnection();
//msg(g.src.parentNode.parentNode.innerHTML)
				return true;			
			}  	
		}catch (ee) {
			debugger;
		}	
		return false;
	}
}, function(node, types){
	if (arguments.length == 0) { return; }
	this.domNode = dojo.byId(node);
	dojo.dnd.DropTarget.call(this);
	if(types && dojo.lang.isString(types)) {
		types = [types];
	}
	this.acceptedTypes = types || [];
	dojo.dnd.dragManager.registerDropTarget(this);
});

dojo.provide("dojo.dnd.TileHtmlDragSource");
dojo.declare("dojo.dnd.TileHtmlDragSource", dojo.dnd.HtmlDragSource, {
	dragClass: "", // CSS classname(s) applied to node when it is being dragged

	onDragStart: function(){
		try {
		//debugger
			/*var src1 = getSrcElement();
			if (src1.id.substring(0, 2)=="c_") {
				dojo.event.browser.currentEvent.cancelBubble = true;
				dojo.event.browser.currentEvent.returnValue = false;
				return false;
			}*/
			
			
			
			var dragObj = new dojo.dnd.HtmlDragObject(this.dragObject, this.type);
			if(this.dragClass) { dragObj.dragClass = this.dragClass; }
	
			if (this.constrainToContainer) {
				dragObj.constrainTo(this.constrainingContainer || this.domNode.parentNode);
			}
	        this.dragObj = dragObj;
	        

			    
			return dragObj;
		}catch (ee) {
			debugger;
		}
		return null;
	},
	onSelected: function() {
	    //this.addDragObjects(dojo.byId("m_"+this.domNode.id));

		for (var i=0; i<this.dragObjects.length; i++) {
		    dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragSource(this.dragObjects[i]));
		}
		this.selectedSources = dojo.dnd.dragManager.selectedSources;
	},

	onDragEnd: function(){
		if (this.dragObj && this.dragObj.domNode.parentNode.parentNode.style) {

			var g = gadgetManager.gadgetMap[this.dragObj.domNode.id];
			if (g)
				g.tr.style.display = "block";
			//status = "show:"+g.src.id+" table:"+g.tr.parentNode.parentNode.id;
			//nn = -1;
		}
		if (dojo.dnd.dragManager.dgIndicator) {
			dojo.html.removeNode(dojo.dnd.dragManager.dgIndicator);
			delete dojo.dnd.dragManager.dgIndicator;
			dojo.dnd.dragManager.dgIndicator = null;
		}

	}
}, function(node, type){

	node = dojo.byId(node);
	this.dragObjects = [];
	this.constrainToContainer = false;
    
	if(node){
		this.domNode = node;
		this.dragObject = node;
		// set properties that might have been clobbered by the mixin
		this.type = (type)||(this.domNode.nodeName.toLowerCase());
		this.reregister();
	}
});

