if(window["gDragAndDrop_Loaded"] != true)
{
	window["gDragAndDrop_Loaded"] = true;

	var gDragAndDropObject = null;
	


	registerDocumentOnMouseUp
	(
		function(e)
		{
			if(gDragAndDropObject && gDragAndDropObject.parentNode)
			{
				gDragAndDropObject.parentNode.removeChild(gDragAndDropObject);
	
				if(document.selection)
					document.onselectstart = function() {return true};
				else
					document.body.style.MozUserSelect='';
				
				var xpos = document.selection?window.event.clientX + document.body.scrollLeft+document.documentElement.scrollLeft : e.pageX + document.body.scrollLeft;
				var ypos = document.selection?window.event.clientY + document.body.scrollTop+document.documentElement.scrollTop : e.pageY;
				
				var forms = gForms_AllForms;
				var hitObject = null;
				var hitZIndex = -99999;
				//Trace(forms.length)
				if(gDragAndDropObject.getAttribute('nocrop') != '1')
				{
					for(var i = 0; i < forms.length; i++)
					{
						var offsetTop = forms[i].offsetTop;
						var curObj = forms[i].offsetParent;
						while(curObj)
						{
								offsetTop+=curObj.offsetTop;
								curObj = curObj.offsetParent;
						}
						
						var offsetLeft = forms[i].offsetLeft;
						var curObj = forms[i].offsetParent;
						while(curObj)
						{
								offsetLeft+=curObj.offsetLeft;
								curObj = curObj.offsetParent;
						}
						
						if(xpos >= offsetLeft && xpos <= offsetLeft + forms[i].offsetWidth	
							&& ypos >= offsetTop && ypos <= offsetTop + forms[i].offsetHeight
							&& (forms[i].getAttribute('editmode') == 1 || forms[i].customOnDrop != null))
						{
							//Trace(forms[i].style.zIndex)
							if(forms[i].style.zIndex > hitZIndex)
							{
								hitZIndex = forms[i].style.zIndex;
								hitObject = forms[i];		
							}
						}
					}
				}
				var toolbox_div = document.getElementById('toolbox_div');
				if(toolbox_div)
				{
					if(toolbox_div.offsetLeft < xpos && toolbox_div.offsetTop < ypos && toolbox_div.offsetLeft+toolbox_div.offsetWidth > xpos && toolbox_div.offsetHeight+toolbox_div.offsetHeight > ypos)
					{
						gDragAndDropObject = null;
						return;
					}
				}
				
				if(hitObject)
				{
					if(typeof(hitObject.customOnDrop) == "function")
					{
						hitObject.customOnDrop(gDragAndDropObject);
					}
					else if(gDragAndDropObject.getAttribute('DnDType') != "CART_ITEM")
						dragAndDrop_OnDropFrame(xmlpath+'&'+xmlfile+'&'+xpos+'&'+ypos+'&'+hitObject.getAttribute('formnr')+'&'+hitObject.getAttribute('locked_size')+'&'+hitObject.getAttribute('guid'),gDragAndDropObject.getAttribute('DnDType'),gDragAndDropObject.getAttribute('DnDId'));	
				}
				else if(gDragAndDropObject.getAttribute('DnDType') != "CART_ITEM")
					dragAndDrop_OnDropContainer(xmlpath+'&'+xmlfile+'&'+xpos+'&'+ypos,gDragAndDropObject.getAttribute('DnDType'),gDragAndDropObject.getAttribute('DnDId'));	
				
				gDragAndDropObject = null;
					
			}
			
		}
	);
	
	registerDocumentOnMouseMove
	(
		function(ev)
		{
			if(gFakeDnDObject)
			{
				gFakeDnDObject.parentNode.removeChild(gFakeDnDObject);
				gFakeDnDObject = null;
			}
			if(gDragAndDropObject && gDragAndDropObject.parentNode)
			{
				var e = document.selection?window.event:ev;
				var mouse = {x: e.clientX + document.documentElement.scrollLeft+document.body.scrollLeft, y: e.clientY + document.documentElement.scrollTop+document.body.scrollTop};
				if(gForms_SnapToGridSize)
				{
					mouse.x = (parseInt(mouse.x/gForms_SnapToGridSize)*gForms_SnapToGridSize);
					mouse.y = (parseInt(mouse.y/gForms_SnapToGridSize)*gForms_SnapToGridSize);
					
				}
				gDragAndDropObject.style.position='absolute';
				gDragAndDropObject.style.top=mouse.y+"px";
				gDragAndDropObject.style.left=mouse.x+"px";
//				alert(mouse.x+' '+mouse.y);
			}
		}
	);
	
	
	function dragAndDrop_StartDrag(that)
	{
		if(gDragAndDropObject && gDragAndDropObject.parentNode)
			gDragAndDropObject.parentNode.removeChild(gDragAndDropObject);
		
		gDragAndDropObject = that.cloneNode(true);
		
		
		gDragAndDropObject.style.position='absolute';
		gDragAndDropObject.style.zIndex='99999';
		gDragAndDropObject.style.top='-100';
		gDragAndDropObject.style.left='-100';
		gDragAndDropObject.style.filter='alpha(opacity=50)';
		gDragAndDropObject.style.opacity='.5';
		
		gDragAndDropObject.onmousedown=function(){};
		
		document.body.appendChild(gDragAndDropObject);
		
		if(document.selection)
			document.onselectstart = function() {return false};
		else
			document.body.style.MozUserSelect='none';
	}
	
	var oldDocOnMouseOut = document.onmouseout;
	document.onmouseout = function(e)
	{
		var e = document.selection?window.event:e;
		if(gDragAndDropObject && gDragAndDropObject.parentNode)
		{
			if((e.clientX < 0 || e.clientX > GetWidth()) || (e.clientY < 0 || e.clientY > GetHeight()))
			{
				var xmltrans = new XmlTransferable();
				xmltrans.setAttribute("type",gDragAndDropObject.getAttribute('DnDType'))
				xmltrans.setAttribute("id",gDragAndDropObject.getAttribute('DnDId'))				
				//xmltrans.xmlroot.appendChild(document.createElement('DnDElement'));				
				//xmltrans.xmlroot.firstChild.appendChild(gDragAndDropObject.cloneNode(true));
				StartDragXMLEx(xmltrans,e);
				gDragAndDropObject.parentNode.removeChild(gDragAndDropObject);
				gDragAndDropObject = null;
			}
		}
		if(oldDocOnMouseOut)
			oldDocOnMouseOut(e);
	}
	
	var gFakeDnDObject = null;
	function gDnd_OnDragOver(e)
	{
		if(!gFakeDnDObject)
		{
			var xmltrans = new XmlTransferable(GetXmlClipboardData(e));
			var type = xmltrans.getAttribute('type');
			switch(type)
			{
				case 'asset':
				{
					gFakeDnDObject = document.createElement('div');
					gFakeDnDObject.setAttribute('DnDType','asset');
					gFakeDnDObject.setAttribute('DnDId',xmltrans.getAttribute('id'));
					gFakeDnDObject.style.position = 'absolute';
					gFakeDnDObject.style.top = e.clientY+'px';
					gFakeDnDObject.style.left = e.clientX+'px';
					gFakeDnDObject.style.zIndex = '99999';
					gFakeDnDObject.innerHTML = '<img src="'+window['prefix']+'v3/generic/image.cfm?assetid='+xmltrans.getAttribute('id')+'&width=60&height=60" />';
					document.body.appendChild(gFakeDnDObject);
					break;
				}
			}
		}
		else
		{
			var e = document.selection?window.event:e;
			var mouse = {x: e.clientX + document.body.scrollLeft+document.documentElement.scrollLeft, y: e.clientY + document.body.scrollTop+document.documentElement.scrollTop};
			gFakeDnDObject.style.top=mouse.y+1;
			gFakeDnDObject.style.left=mouse.x+1;
		}

	}	

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	function dragAndDrop_OnDropContainer(droptargetid,sourcetype,sourceid)
	{
		var gdiv = document.getElementById('griddiv');
		
		var margin_top = gdiv?gdiv.getAttribute('margin_top'):0;
		var margin_left = gdiv?gdiv.getAttribute('margin_left'):0;
		
		var path = decodeURI(droptargetid.replace('%3A',':').split('&')[0]);
		var xmlfile = decodeURI(droptargetid.replace('%3A',':').split('&')[1]);
		var pos_x = droptargetid.split('&')[2]-margin_left;
		var pos_y = droptargetid.split('&')[3]-margin_top;
		//alert('type: '+ sourcetype + '\nassetid: ' + sourceid + '\ndroptargetid: ' + droptargetid + '\nxmlfile: ' + xmlfile);
		
		var gg = encodeURI(document.location);
		gg = gg.replace(/&/g,'%26').replace(/=/g,'%3D');
		document.location = syspath+"/_drophandlers/handler.cfm?xmlpath="+xmlpath+'&xmlfile='+xmlfile+'&x='+pos_x+'&y='+pos_y+'&id='+sourceid+'&type='+sourcetype+ '&return='+gg; 
		
	}
	
	function dragAndDrop_OnDropFrame(droptargetid,sourcetype,sourceid)
	{
		var gdiv = document.getElementById('griddiv');
		
		var margin_top = gdiv?gdiv.getAttribute('margin_top'):0;
		var margin_left = gdiv?gdiv.getAttribute('margin_left'):0;
				
		var path = decodeURI(droptargetid.replace('%3A',':').split('&')[0]);
		var xmlfile = decodeURI(droptargetid.replace('%3A',':').split('&')[1]);
		var pos_x = droptargetid.split('&')[2]-margin_left;
		var pos_y = droptargetid.split('&')[3]-margin_top;
		var formid = droptargetid.split('&')[4];
		var params = encodeURIComponent(window['params']);
		var locked_size = droptargetid.split('&')[5];
		var guid = droptargetid.split('&')[6];
		
		var gg = encodeURI(document.location);
		gg = gg.replace(/&/g,'%26').replace(/=/g,'%3D');
		
		var form = forms_GetFormByGuid(guid);
		
		if(form && form.customOnDrop != null)
		{
			var dndObj = new Object();
			dndObj.getAttribute = function(key)
			{
				if(key.toLowerCase() == "dndtype")
					return sourcetype;
				else if(key.toLowerCase() == "dndid")
					return sourceid;
				else
					return "";
			}

			form.customOnDrop(dndObj);
		}
		else
		{
			//if(locked_size == '1')
			//	showCropWindow(path,xmlfile,pos_x,pos_y,formid,locked_size,sourceid,sourcetype);
			//else
				document.location = syspath+"/_drophandlers/handler.cfm?formguid="+encodeURIComponent(guid)+"&xmlpath="+form.getAttribute('path')+'&xmlfile='+form.getAttribute('xmlfile')+'&x='+pos_x+'&y='+pos_y+'&id='+sourceid+'&type='+sourcetype+ '&return='+gg+'&params='+params; 
		}
	}

	/*function showCropWindow(path,xmlfile,pos_x,pos_y,formid,locked_size,sourceid,sourcetype)
	{
		var centerX = screen.width - 300;
		var centerY = screen.height /8 - 100;
		
		var win = window.open(syspath+"/_system/popup_crop.cfm?formid="+formid+"&xmlpath="+xmlpath+"&xmlfile="+xmlfile+'&x='+pos_x+'&y='+pos_y+'&id='+sourceid+'&type='+sourcetype, "ShowEditForm", "left=" + centerX + ", top=" + centerY + ", width=640, height=480, location=no, menubar=no, resizable=yes, scrollbars=no, status=no, titlebar=no, toolbar=no");
		win.focus();
	}*/
	
	

}