﻿/*********************************************************************** 
 *	函数名：startdrag
 *	说明：开始一段拖动行为，检查拖动行为的过程和终止并响应相应的事件。
 *	参数：
 *		parent		DOM对象，拖动所属的父对象，必需是容器，可以为document.body
 *		onmove		函数对象，事件，拖动开始后，鼠标移动触发事件
 *		onfinish	函数对象，事件，拖动结束时，触发事件一次
 *		area		对象，可以缺省，必须包含4个属性top left width height，以指定鼠标移动的有效范围，默认值为parent的全部范围。
 ***********************************************************************/
 
function startdrag(parent,onmove,onfinish,area)
{
	var up,out,over;
	var divarea=document.createElement("div");
	if(!area)area={
		"top":"0px",
		"left":"0px",
		"width":"100%",
		"height":"100%"
	}
	divarea.style.position="absolute";
	divarea.style.top=area.top;
	divarea.style.left=area.left;
	divarea.style.width=area.width;
	divarea.style.height=area.height;
	divarea.style.overflow="hidden";
	divarea.style.zIndex="10000";
	divarea.className="dragArea";
	parent.appendChild(divarea);

	if(divarea.attachEvent)
	{
		divarea.attachEvent("onmousemove",onmove)
		document.attachEvent("onmouseup",up=function(){
			divarea.detachEvent("onmousemove",onmove);
			document.detachEvent("onmouseup",up);
			divarea.detachEvent("onmouseout",out);
			parent.removeChild(divarea);
			onfinish(event||arguments[0]);
		});
		divarea.attachEvent("onmouseout",out=function(){
			divarea.detachEvent("onmousemove",onmove);
			document.detachEvent("onmouseup",up);
			divarea.detachEvent("onmouseout",out);
			parent.removeChild(divarea);
			onfinish(event||arguments[0]);

		});
	}
	else if(divarea.addEventListener)
	{
		divarea.addEventListener("mousemove",onmove,true);
		document.addEventListener("mouseup",up=function(){
			divarea.removeEventListener("mousemove",onmove,true);
			document.removeEventListener("mouseup",up,true);
			divarea.removeEventListener("mouseout",out,true);
			parent.removeChild(divarea);
			onfinish(event||arguments[0]);
		},true);
		divarea.addEventListener("mouseout",out=function(){
			//alert("out");
			divarea.removeEventListener("mousemove",onmove,true);
			document.removeEventListener("mouseup",up,true);
			divarea.removeEventListener("mouseout",out,true);
			parent.removeChild(divarea);
			onfinish(event||arguments[0]);
		},true);
	}
}

/*
带虚拟框拖动的鼠标向下事件 
注册事件onmousedown 执行 virtual_mousedown.apply(this,arguments)
this 需要拖动的对象
*/

function virtual_mousedown()
{
	var e=arguments[0]||event;
	var me=this;
	var dy=e.clientY-parseInt(me.style.top);
	var dx=e.clientX-parseInt(me.style.left);
	var dragbox=document.createElement("div");
	dragbox.className="dragbox";
	dragbox.style.width=me.style.width;
	dragbox.style.height=me.style.height;
	dragbox.style.position="absolute";
	document.body.appendChild(dragbox);
	startdrag(
		document.body,
		function(e){
			e=e||event;
			dragbox.style.top=e.clientY-dy;
			dragbox.style.left=e.clientX-dx;
		},
		function(e){
			document.body.removeChild(dragbox);
			me.style.top=e.clientY-dy;
			me.style.left=e.clientX-dx;
		}
	);
}
/*
带虚拟框拖动的鼠标向下事件 
注册事件onmousedown 执行 resize_mousedown.apply(this,arguments)
this 需要重设置尺寸的对象
*/
function resize_mousedown()
{
	var e=arguments[0]||event;
	var me=this;
	var dy=e.clientY-parseInt(me.style.top)-parseInt(me.style.height);
	var dx=e.clientX-parseInt(me.style.left)-parseInt(me.style.width);

	startdrag( 
		document.body,
		function(e){
			e=e||event;
			me.style.height=e.clientY-dy;
			me.style.width=e.clientX-dx;
		},
		function(e){
		}
	);
}