﻿var _arr_DragModule = [];
var _arr_DragLand = [];
var _arr_DragSplitID = "_Split";
var _DragLandLabelID = "_Label";
var _DragLandLinkID = "_Link";
var _DragLandContentID = "_Content";
var _DragLandBtnID = "_Btn";
var _DragLinkMoreID = "_LinkMore";
var _DragMovingEventTime = 0;
var _str_UserID = 0;
var _str_RoleID = 0;


function _drag_UpdateModuleArray()
{
	var tmpLand = [];
	for(var s = 0;s < _arr_DragLand.length;s++)
	{
		var dlcN = _arr_DragLand[s].childNodes;
		var tmpModules = [];
		var tmpc = 0;
		for(var n = 0;n<dlcN.length;n++)
		{
			var nodeObj = dlcN[n];
			if (nodeObj.id)
			{
				var nodeObjID = nodeObj.id;
				var nodeLinkObj = gid(nodeObjID + _DragLandLinkID);
				if (nodeLinkObj)
				{
					var tmpModule = [];
					tmpModule[0] = nodeObjID;
					tmpModule[1] = nodeLinkObj.innerHTML;
					tmpModule[2] = nodeObj.Killable;
					tmpModule[3] = nodeObj.Warpable;
					tmpModules[tmpc] = tmpModule;
					tmpc++;
				}
			}
		}
		tmpLand[s] = tmpModules;
	}
	_arr_DragModule = tmpLand;
	_drag_upc();
}

function _drag_CreatModule(id, title, content, ki, wp, morelink)
{
	var cModule = gid(id);
	if (!cModule)
	{
		var mainDivObj = document.createElement("div");
		mainDivObj.className = "mkall";
		mainDivObj.id = id;
		mainDivObj.Killable = ki;
		mainDivObj.Warpable = wp;
		if(title=='快速留言')
		{
		  mainDivObj.EventInit = true;
		}
		else
		{
		  mainDivObj.EventInit=false;
		}
		var headDivObj = document.createElement("div");
		headDivObj.className = "mktitle";

		var contentObj = document.createElement("div");
		contentObj.id = id + _DragLandContentID;
		contentObj.className = "mkshow";
		if (wp)
		{
			contentObj.style.display = "block";
		}
		else
		{
			contentObj.style.display = "none";
		}
		if (content)
		{
			contentObj.innerHTML = content;
		}
		else
		{
			contentObj.innerHTML =  "<div class=\"loading\">正在读取内容...</div>";
		}
		
		var titleLinkObj = document.createElement("div");
		titleLinkObj.id = id + _DragLandLinkID;
		titleLinkObj.title = "展开/收拢";
		titleLinkObj.innerHTML =  HtmlDecode(title);
		if (wp)
		{
			titleLinkObj.className = "mktitleleft";
		}
		else
		{
			titleLinkObj.className = "mktitleleft2";
		}
		titleLinkObj.WarpContent = contentObj;
		titleLinkObj.WarpParent = mainDivObj;
		titleLinkObj.onclick = function ()
		{
			this.blur();
			if (this.className == "mktitleleft2")
			{
				if (this.WarpContent) this.WarpContent.style.display = "block";
				this.className = "mktitleleft";
				if (this.WarpParent) this.WarpParent.Warpable = true;
			}
			else
			{
				if (this.WarpContent) this.WarpContent.style.display = "none";
				this.className = "mktitleleft2";
				if (this.WarpParent) this.WarpParent.Warpable = false;
			}
			_drag_UpdateModuleArray();
			return false;
		}

		var cellDragObj = document.createElement("div");
		cellDragObj.title = "点击并拖动此模块...";
		cellDragObj.id = id + _DragLandLabelID;

		var divRightObj = document.createElement("div");
		divRightObj.className = "right";
		if(_str_RoleID==1)
		{
			if(ki)
			{
				var cellBtnObj = document.createElement("span");
				cellBtnObj.id = id + _DragLandBtnID;
			}
		}

		var cellLinkMoreObj = document.createElement("span");
		cellLinkMoreObj.id = id + _DragLinkMoreID;
		cellLinkMoreObj.title="";
		cellLinkMoreObj.innerHTML =  HtmlDecode(morelink);
				
		headDivObj.appendChild(titleLinkObj);
		divRightObj.appendChild(cellLinkMoreObj);
		if(_str_RoleID==1)
		{
			if (ki) divRightObj.appendChild(cellBtnObj);
		}
		headDivObj.appendChild(divRightObj);
		headDivObj.appendChild(cellDragObj);

		mainDivObj.appendChild(headDivObj);
		mainDivObj.appendChild(contentObj);
		cModule = mainDivObj;
	}
	return cModule;
}

function _drag_AddModule(dragland, id, title, content, ki ,wp, allow, update, morelink)
{
	var loadObj = gid("ModuleLoading");
	if (loadObj) loadObj.innerHTML = "";
	if (dragland)
	{
		var cModule = gid(id);
		if (!cModule)
		{
			var module = _drag_CreatModule(id, title, content, ki, wp, morelink);
			dragland.insertBefore(module, _drag_GetLandFirstModule(dragland));
			if (allow) _drag_InitModuleEvent(module);
			if (update) _drag_UpdateModuleArray();
		}
	}
}

//装载可移动对象的方法//
function DragInit(allow, arr, mod, userid, roleid)
{
	_arr_DragLand = arr;
	_arr_DragModule = mod;
	_str_UserID = userid;
	_str_RoleID = roleid;
	if (_arr_DragLand.length > 0)
	{
		for(var s = 0;s < _arr_DragLand.length;s++)
		{
			var lObj = _arr_DragLand[s];
			var sObj = gid(lObj.id + _arr_DragSplitID);
			var smod = mod[s];
			for (var m=0;m<smod.length;m++)
			{
				_drag_AddModule(lObj, smod[m][0], smod[m][1], null, smod[m][2] ,smod[m][3], allow, false, smod[m][4]);
			}
		}
		window.setTimeout("_drag_gc()", 600);
	}
}


function _drag_InitModuleEvent(module)
{
	if (!module.EventInit)
	{
		var nodeObj = module;
		var mlObj = gid(nodeObj.id + _DragLandLabelID);
		mlObj.module = nodeObj;
		DragEventObj.init(mlObj);
		module.EventInit = true;
		mlObj.style.cursor = "move";
		mlObj.innerHTML = "&nbsp;";
		
		var _isKillable = nodeObj.Killable;
		var btnObj = gid(nodeObj.id + _DragLandBtnID);
		if (btnObj && _isKillable)
		{
			btnObj.innerHTML = "关闭";
			btnObj.title = "关闭此模块";
			btnObj.style.cursor = "pointer";
			btnObj.module = nodeObj;
			btnObj.onclick = function() {this.blur();_drag_RemoveModule(this.module);return false;};
			nodeObj.killbtn = btnObj;
		}
		
		mlObj.onDragStart = function(left, top)
		{
			clearInterval(_DragMovingEventTime);
			var oObj = this.module;
			_drag_FormatChild(oObj);
			oObj.origNextSibling = oObj.nextSibling;				

			var mObj = _drag_CreatDiv();
			mObj.style.left = _drag_LeftTop(oObj, true) + "px";
			mObj.style.top = _drag_LeftTop(oObj, false) + "px";
			mObj.style.height = oObj.offsetHeight + "px";
			mObj.style.width = oObj.offsetWidth + "px";
			mObj.style.border = "#f00 1px dashed";
			mObj.style.filter = "alpha(opacity=60)";
			mObj.style.opacity = 0.6;
			mObj.style.MozOpacity = 0.6;
			mObj.style.display = "block";
			mObj.innerHTML = oObj.innerHTML;
			mObj.className = oObj.className;
			this.dragged = false;
		};

		mlObj.onDrag=function(left, top)
		{
			_drag_Moving(this.module, left, top);
			this.dragged = true;
		};

		mlObj.onDragEnd=function(left, top)
		{
			if(this.dragged)
			{
				_DragMovingEventTime = _drag_MovingEvent(this.module, 1, 1);
			}
			else
			{
				_drag_CreatDiv().style.display = "none";
			}
			if (this.module.nextSibling != this.module.origNextSibling)
			{
				_drag_UpdateModuleArray();
			}
		}
	}
}

//
function _drag_InitContentByDivId(divId,content)
{
    var mObj=gid(divId);
    if(mObj)
    {
        mObj.innerHTML = HtmlDecode(content);
    }
}

var DragEventObj=
{
	obj:null,
	init:function(event)
	{
		event.onmousedown = DragEventObj.start;
		if(isNaN(parseInt(_drag_CreatDiv().style.left))) _drag_CreatDiv().style.left = "0px";
		if(isNaN(parseInt(_drag_CreatDiv().style.top))) _drag_CreatDiv().style.top = "0px";
		event.onDragStart = new Function();
		event.onDragEnd = new Function();
		event.onDrag = new Function()
	}
	,start:function(event)
	{
		var eObj = DragEventObj.obj = this;
		event = DragEventObj.fixE(event);
		if(event.button == 2 || event.button == 3)
		{
			return true;
		}
		var top = parseInt(_drag_CreatDiv().style.top);
		var left = parseInt(_drag_CreatDiv().style.left);
		eObj.onDragStart(left, top, event.clientX, event.clientY);
		eObj.lastMouseX = event.clientX;
		eObj.lastMouseY = event.clientY;
		document.onmousemove = DragEventObj.drag;
		document.onmouseup = DragEventObj.end;
		return false;
	}
	,drag:function(event)
	{
		event = DragEventObj.fixE(event);
		var eObj = DragEventObj.obj;
		var etop = event.clientY;
		var eleft = event.clientX;
		var otop = parseInt(_drag_CreatDiv().style.top);
		var oleft = parseInt(_drag_CreatDiv().style.left);
		var mleft, mtop;
		mleft = oleft + eleft - eObj.lastMouseX;
		mtop = otop + etop - eObj.lastMouseY;
		_drag_CreatDiv().style.left = mleft + "px";
		_drag_CreatDiv().style.top = mtop + "px";
		eObj.lastMouseX = eleft;
		eObj.lastMouseY = etop;
		eObj.onDrag(mleft, mtop, eleft, etop);
		return false
	}
	,end:function()
	{
		document.onmousemove = null;
		document.onmouseup = null;
		DragEventObj.obj.onDragEnd(parseInt(_drag_CreatDiv().style.left), parseInt(_drag_CreatDiv().style.top));
		DragEventObj.obj = null;
	}
	,fixE:function(event)
	{
		if(typeof event == "undefined") event = window.event;
		if(typeof event.layerX=="undefined") event.layerX = event.offsetX;
		if(typeof event.layerY=="undefined") event.layerY = event.offsetY;
		return event;
	}
};

function _drag_GetModuleString()
{
	var tmdModules = [];
	for (var p in _arr_DragModule)
	{
		var tmpModule = [];
		for (var m in _arr_DragModule[p])
		{
			var tmpNewModule = [];
			tmpNewModule[0] = _arr_DragModule[p][m][0];
			tmpNewModule[1] = _arr_DragModule[p][m][3];
			tmpModule[m] = tmpNewModule;
		}
		tmdModules[p] = tmpModule.join("|");
	}
	var tmpString = tmdModules.join("$");
	return tmpString;
}

function showModuleAll()
{
	for (var p in _arr_DragModule)
	{
		for (var m=_arr_DragModule[p].length-1; m>=0 ; m--)
		{
			var mObj = gid(_arr_DragModule[p][m][0] + _DragLandLinkID);
			if (mObj.className == "mktitleleft2")
			{
				if (mObj.WarpContent) mObj.WarpContent.style.display = "block";
				mObj.className = "mktitleleft";
			}
		}
	}
}

function hideModuleAll()
{
	for (var p in _arr_DragModule)
	{
		for (var m=_arr_DragModule[p].length-1; m>=0 ; m--)
		{
			var mObj = gid(_arr_DragModule[p][m][0] + _DragLandLinkID);
			if (mObj.className == "mktitleleft")
			{
				if (mObj.WarpContent) mObj.WarpContent.style.display = "none";
				mObj.className = "mktitleleft2";
			}
		}
	}
}

function _drag_GetLandFirstModule(dragland)
{
	var landFirstObj = null;	
	if (dragland)
	{
		var dlcN = dragland.childNodes;
		for(var n = 0;n<dlcN.length;n++)
		{
			var nodeObj = dlcN[n];
			if (nodeObj.id)
			{
				var nodeLinkObj = gid(nodeObj.id + _DragLandLinkID);
				if (nodeLinkObj)
				{
					landFirstObj = nodeObj;
					break;
				}
			}
		}
		if (!landFirstObj)
		{
			landFirstObj = gid(dragland.id + _arr_DragSplitID);
		}
	}
	return landFirstObj;
}

function _drag_ModuleConentInit(modid, body)
{
	var obj = gid(modid + _DragLandContentID);
	if (obj)
	{
		if (body) obj.innerHTML = HtmlDecode(body);
	}
}

function _drag_RemoveModule(modObj)
{
	if (modObj)
	{
		if (modObj.parentNode)
		{
			modObj.parentNode.removeChild(modObj);
			_drag_UpdateModuleArray();
		}
	}
}

var _drag_creatDivObj = null;
function _drag_CreatDiv()
{
	if(!_drag_creatDivObj)
	{
		_drag_creatDivObj = document.createElement("DIV");
		_drag_creatDivObj.style.display = "none";
		_drag_creatDivObj.style.position = "absolute";
		_drag_creatDivObj.style.cursor = "move";
		_drag_creatDivObj.style.backgroundColor = "#fff";
		_drag_creatDivObj.style.paddingBottom = "0px";
		document.body.appendChild(_drag_creatDivObj);
	}
	return _drag_creatDivObj;
}

function _drag_HideDiv()
{
	_drag_CreatDiv().style.display="none";
}

function _drag_LeftTop(obj, LT)
{
	var v = 0;
	while(obj != null)
	{
		v += obj["offset" + (LT?"Left":"Top")];
		obj = obj.offsetParent
	}
	return v;

}

function _drag_FormatChild(obj)
{
	for(var s = 0;s<_arr_DragLand.length;s++)
	{
		var dlcN = _arr_DragLand[s].childNodes;
		var h = 0;
		for(var n = 0;n<dlcN.length;n++)
		{
			var nodeObj = dlcN[n];
			if(nodeObj == obj) h = nodeObj.offsetHeight;
			nodeObj.pagePosLeft = _drag_LeftTop(nodeObj, true);
			nodeObj.pagePosTop = _drag_LeftTop(nodeObj, false) - h;
		}
	}
}

function _drag_Moving(obj, left, top)
{
	var bObj = null;
	var mp = 100000000;
	for(var s=0;s<_arr_DragLand.length;s++)
	{
		var dlcN = _arr_DragLand[s].childNodes;
		for(var n=0;n<dlcN.length;n++)
		{
			var nodeObj = dlcN[n];
			if(nodeObj == obj) continue;
			var ms = Math.sqrt(Math.pow(left - nodeObj.pagePosLeft, 2) + Math.pow(top - nodeObj.pagePosTop, 2));
			if(isNaN(ms)) continue;
			if(ms < mp)
			{
				mp = ms;
				bObj=nodeObj;
			}
		}
	}
	if(bObj!=null && obj.nextSibling != bObj)
	{
		bObj.parentNode.insertBefore(obj, bObj);
		obj.parentNode.style.display="none";
		obj.parentNode.style.display=""
	}
}

function _drag_MovingEvent(obj, len, step)
{
	var left = parseInt(_drag_CreatDiv().style.left);
	var top = parseInt(_drag_CreatDiv().style.top);
	var leftstep = (left - _drag_LeftTop(obj, true)) / step;
	var topstep = (top - _drag_LeftTop(obj, false)) / step;
	return setInterval(
		function()
		{
			if(step < 1)
			{
				clearInterval(_DragMovingEventTime);
				_drag_HideDiv();
				return;
			}
			step--;
			left -= leftstep;
			top -= topstep;
			_drag_CreatDiv().style.left = parseInt(left) + "px";
			_drag_CreatDiv().style.top = parseInt(top) + "px"
		}
		, len/step
	);
}
