// JavaScript Document

/*
++ + + + + + + + + + + + + + + + + + + + ++
++                                       ++
++  所有函数在IE6,7和FireFox2下测试通过  ++
++                                       ++
++ + + + + + + + + + + + + + + + + + + + ++
*/

/**
++ update   : 2007-12-14
++ Author   : Rong
++ Name     : drag
++ Function : 层拖曳
++ Param    : @event event : 触发的事件
              @string oId  : 拖曳的元素的ID
++ use      : 
   <div id="oDiv" onmousedown="drag(event||window.event,'oDiv');">
      <div id="oDivH"></div>
   </div>
++ Synopsis : CSS用外联方式，不用style,拖曳完成后去用savePos()发送数据到服务端保存拖曳后的位置,可用Ajax方式发送
*/
function drag(evt){
        //获取窗口事件
		var evt = evt||window.event;
		
		//获取拖动对象
		var tar = evt.srcElement || evt.target;
		if('yes' == tar.parentNode.getAttribute('freeDrag'))
		{
		    oObj = tar.parentNode;
		}else return false;
				
		oObjPos = getPosition(oObj);
		
		//保存原来的zIndex
		if(0 == oObj.style.zIndex)
		{
			var zIndex = getCurrentStyle(oObj,'zIndex');
		}else var zIndex = oObj.style.zIndex;
		
		//设置当前层的 zIndex 为 999
		oObj.style.position = 'absolute';
		oObj.style.left = oObjPos.x + 'px';
		oObj.style.top  = oObjPos.y - parseInt(getCurrentStyle(oObj,'marginTop')) + 'px';
		
		oObj.style.zIndex   = 299;
		
		//赋予对象拖动操作
		oObj.onmousemove = mouseMove;
		oObj.onmouseup   = mouseUp;
		
		//捕获鼠标移动
		oObj.setCapture ? oObj.setCapture() : function(){};
		
		//取得鼠标在该对象中的相对位置 
		mouseInDragObjOffset = getMouseOffset(oObj, evt);
		
		//鼠标移动
		function mouseMove(evt){
		    var evt = evt||window.event;
		            
		    var mousePos     = mouseCoords(evt);//鼠标相对文档的绝对位置

            var windowWidth  = document.body.offsetWidth;        //窗口宽度
            var windowHeight = document.body.offsetHeight;      //窗口高度
           
		   //拖拽对象相对文档的绝对位置
           var dragObjLeft  = mousePos.x - mouseInDragObjOffset.x;
           var dragObjTop   = mousePos.y - mouseInDragObjOffset.y - parseInt(getCurrentStyle(oObj,'marginTop'));

        //增加判断，阻止拖拽对象拖出浏览器窗口
        //if(dragObjLeft >= 0 && dragObjLeft <= windowWidth - oObj.offsetWidth)
            oObj.style.left = dragObjLeft + 'px';

        if(dragObjTop >=0)
            oObj.style.top = dragObjTop + 'px';
		}
		
		//鼠标键抬起
		function mouseUp(evt){
			//清除对象拖动操作
			oObj.onmousemove = null;
			oObj.onmouseup = null;
			
			// 还原层的 zIndex 
			oObj.style.zIndex = zIndex;
			
			//关闭捕获鼠标移动 
			oObj.releaseCapture ? oObj.releaseCapture() : function(){};
			
			//保存本DIV拖曳后的位置坐标
			//savePos(oId,oObj.style.left , oObj.style.top);
		}
}
