// JavaScript Document
//--基础程序
var ES_Drag_js=true;

var ES_Drag = new Object();

ES_Drag.touchX 		= 0;
ES_Drag.touchY 		= 0;
ES_Drag.touchObj	= null;
ES_Drag.tounchDepth = 100;

ES_Drag.lockX		= false;
ES_Drag.lockY		= false;

ES_Drag.startX		= 0;
ES_Drag.startY		= 0;
ES_Drag.lastX		= 0;
ES_Drag.lastY		= 0;

ES_Drag.LastTouchObj= null;


ES_Drag.func		= null;
ES_Drag.onStop		= null;

ES_MaskCreate();

var touchX,touchY,touchID ;
var tounchDepth = 10 ;

function ES_Drag_touchXY (e , getObject , filter ) {		//选取
	try{
		e = e || event ;
		
		filter = filter || new Object();
		
		ES_Drag.lockX 	= filter["lockX"] || false;
		ES_Drag.lockY 	= filter["lockY"] || false;
		ES_Drag.onStop	= filter["onStop"]|| null;
		
		var touchObj = getObject ;					//取值	
		var objX = touchObj.offsetLeft ;			//当前层的坐标x值		
		var objY = touchObj.offsetTop  ; 			//当前层的坐标y值	
		
					
		var touchX = e.screenX - parseInt(objX) ;			//屏幕与层的坐标x差	
		var touchY = e.screenY - parseInt(objY) ;			//屏幕与层的坐标y差	
		
		//window.status = touchX+"/"+touchY
			
		ES_Drag.startX		= objX
		ES_Drag.startY		= objY	
			
		ES_Drag.touchObj 	= touchObj
		ES_Drag.touchX		= touchX
		ES_Drag.touchY		= touchY
		ES_Drag.tounchDepth ++  ;								//改变层的深度	
											
		ES_Drag.touchObj.style.zIndex = ES_Drag.tounchDepth ;	//使被点击层为最上层	
		
		ES_cancelSelect = true;
	}catch(e){
		document.title = e.message;
	}				
}


function ES_Drag_Move( e ){//拖动
	try{
		if ( ES_Drag.touchObj != null ){						//排除控对象
			e = e || event ;
	
			var DragX = e.screenX ;
			var DragY = e.screenY ;
			
			if( !ES_Drag.lockX ){
				ES_Drag.touchObj.style.left = DragX - ES_Drag.touchX + "px" ;//X层移动数据
			}
			if( !ES_Drag.lockY ){
				ES_Drag.touchObj.style.top 	= DragY - ES_Drag.touchY + "px" ; //Y层移动数据	
			}
		}
	}catch(e){
		document.title = e.message;
	}
}	

function ES_Drag_Stop(){//放下	
	if ( ES_Drag.touchObj != null ){					//排除控对象
	
		ES_Drag.lastX  			= ES_Drag.touchObj.offsetLeft		
		ES_Drag.lastY  			= ES_Drag.touchObj.offsetTop
		ES_Drag.LastTouchObj	= ES_Drag.touchObj
		
		ES_Drag.offsetX			=   ES_Drag.lastX - ES_Drag.touchX
		ES_Drag.offsetY			=   ES_Drag.lastY - ES_Drag.touchY
				
		ES_Drag.touchObj = null
		try{
		//--停止时执行的函数
		if( ES_Drag.onStop != null ){
			ES_Drag.onStop();
			ES_Drag.onStop = null;
		}
		
		if( ES_Drag.func != null ){
			
			ES_Drag.func();
			
			ES_Drag.func = null;
		}
		}catch(e){
				alert(e.message + " ES_Drag_Stop")
		}
		ES_cancelSelect = false;
		//alert(1)
	}
}

//--函数在ES_Base.js中
reFunction("ES_onMouseMove",'ES_Drag_Move(e)');
reFunction("ES_onMouseUp",'ES_Drag_Stop(e)');
reFunction("ES_onMouseUp",'ES_Drager_End(e)');


//document.onmousemove=ES_Drag_Move;
document.onmousemove	= ES_onMouseMove
document.onmouseup		= ES_onMouseUp
document.onmousedown	= ES_onMouseDown
document.onselectstart	= ES_onSelectStart


//--应用程序
//--移动层
var ES_Drager = new Object();
	ES_Drager.created	= false;
	ES_Drager.target 	= null;
	ES_Drager.border 	= "1px dashed #6666ff";

function ES_Drager_Start(e,which,filter){	
	e = e || event
	
	if( !_LeftClick(e) ){ return }//--不是鼠标左键退出
	
	ES_Drag_setTextAreaScroll(which,"hidden")
	ES_MaskShow();
	ES_cancelSelect = true;
	
	filter = filter || new Object();
	ES_Drag.func = filter["func"]|| null;

	//which = eventElement(e);
	
	if( GetCurrentStyle(which,"position") != "absolute" ){
		return
	}
	
	
	
	ES_Drag.tounchDepth ++  ;								//改变层的深度
		
	which.style.zIndex = ES_Drag.tounchDepth ;				//使被点击层为最上层	
	
	if( ES_Drager.created == false ){//--创建一个可移动的层，用来计算的偏差值
		var oES_DragerDiv	= ES_Drager_create();
	}else{
		var oES_DragerDiv	= document.getElementById("ES_DragerDiv");
	}
	
	oES_DragerDiv.style.display 	= "block" ;
	oES_DragerDiv.style.background	= "skyblue";
	oES_DragerDiv.style.top 		= getRealPosition(which).offsetTop		+ "px"  ;
	oES_DragerDiv.style.left 		= getRealPosition(which).offsetLeft 	+ "px" ;
	oES_DragerDiv.style.zIndex		= which.style.zIndex+1;
	oES_DragerDiv.style.border 		= ES_Drager.border;

	
	
	if( isIE ){
		oES_DragerDiv.style.filter	= "alpha(opacity=20)";
	}else if( isFF ){
		oES_DragerDiv.style.opacity 	= "0.20"
	}

	//alert(which.offsetWidth)
	ES_FullSize(oES_DragerDiv,which,{outer:true})//--使新建的层与原来的对象大小一样

	
	ES_Drag_touchXY(e,oES_DragerDiv,{onStop:ES_Drager_End})
	
	ES_Drager.target = which
	
	ES_cancelSelect = true
	
}

//--使对象跟随移动层移动
function ES_Drager_End(){
	if( ES_Drager.target != null && document.getElementById("ES_DragerDiv") != null ){
		ES_Drager.target.style.top	= (ES_Drager.target.offsetTop + ( ES_Drag.lastY - ES_Drag.startY))+"px";
		ES_Drager.target.style.left	= (ES_Drager.target.offsetLeft + ( ES_Drag.lastX - ES_Drag.startX))+"px";
		
		document.getElementById("ES_DragerDiv").style.border 	= '0px';
		document.getElementById("ES_DragerDiv").style.display 	= 'none';
		
		
		ES_Drag_setTextAreaScroll(ES_Drager.target,"auto");
		ES_Drager.target.focus();
		ES_Drager.target = null;
		ES_cancelSelect = false;
		
	}
	
	ES_MaskHide();
	ES_cancelSelect = false;
}


function ES_Drager_create(){
	var oES_DragerDiv = document.createElement("div");
	document.body.appendChild(oES_DragerDiv);
	
	oES_DragerDiv.id 			= "ES_DragerDiv";
	oES_DragerDiv.style.position = 'absolute';
	oES_DragerDiv.style.zIndex 	= '1000';
	oES_DragerDiv.style.overflow = 'hidden';
	oES_DragerDiv.style.top 		= '0px';
	oES_DragerDiv.style.left	 	= '0px';
	oES_DragerDiv.style.width 	= '100px';
	oES_DragerDiv.style.height 	= '100px';
	//transformerDiv.style.border 	= ES_Transformer.border;
	
	//oES_DragerDiv.onmousedown	= ES_Drager_Start;
	//oES_DragerDiv.oncontextmenu	= function(){ return false }

	//transformerDiv.onmouseout		= ES_Transformer_hide;
	
		
	ES_Drager.created = true;
	
	return  oES_DragerDiv;
}


function ES_Drager_aniHide(which,target){
	if( typeof(ES_Shadow_js)!="undefined" ){
		ES_Shadow.hide();
	}

	//which.style.display = '';
		
	if( ES_Drager.created == false ){						//--创建一个可移动的层
		var oES_DragerDiv	= ES_Drager_create();
	}else{
		var oES_DragerDiv	= document.getElementById("ES_DragerDiv");
	}
	
	oES_DragerDiv.style.display 	= "" ;
	oES_DragerDiv.style.background	= "blue";
	oES_DragerDiv.style.top 		= getRealPosition(which).offsetTop		+ "px"  ;
	oES_DragerDiv.style.left 		= getRealPosition(which).offsetLeft 	+ "px" ;
	oES_DragerDiv.style.zIndex		= target.style.zIndex+1;
	oES_DragerDiv.style.border 		= ES_Drager.border;
	
	oES_DragerDiv.style.width 		= which.offsetWidth
	oES_DragerDiv.style.height 		= which.offsetHeight
	
	if( isIE ){
		oES_DragerDiv.style.filter	= "alpha(opacity=20)"
	}else if( isFF ){
		oES_DragerDiv.style.opacity 	= "0.20"
	}
	
	var tWidth	= target.offsetWidth
	var tHeight	= target.offsetHeight
	var tLeft 	= getRealPosition(target).offsetLeft
	var tTop 	= getRealPosition(target).offsetTop
	
	//alert(tTop)
	ES_Drager_aniGo( tWidth,tHeight,tTop,tLeft )
}


//--动态弹出初始化数值
function ES_Drager_aniShow(which,target){

	if( typeof(ES_Shadow_js)!="undefined" ){
		ES_Shadow.hide();
	}

	target.style.display = '';
	
	//ES_Drag.tounchDepth ++  ;								//改变层的深度	
	//target.style.zIndex = ES_Drag.tounchDepth ;				//使被点击层为最上层	
	
	if( ES_Drager.created == false ){						//--创建一个可移动的层
		var oES_DragerDiv	= ES_Drager_create();
	}else{
		var oES_DragerDiv	= document.getElementById("ES_DragerDiv");
	}
	
	oES_DragerDiv.style.display 	= "" ;
	oES_DragerDiv.style.background	= "blue";
	oES_DragerDiv.style.top 		= getRealPosition(which).offsetTop		+ "px"  ;
	oES_DragerDiv.style.left 		= getRealPosition(which).offsetLeft 	+ "px" ;
	oES_DragerDiv.style.zIndex		= target.style.zIndex+1;
	oES_DragerDiv.style.border 		= ES_Drager.border;
	
	oES_DragerDiv.style.width 		= which.offsetWidth
	oES_DragerDiv.style.height 		= which.offsetHeight
	
	if( isIE ){
		oES_DragerDiv.style.filter	= "alpha(opacity=20)"
	}else if( isFF ){
		oES_DragerDiv.style.opacity 	= "0.20"
	}
	
	var tWidth	= target.offsetWidth
	var tHeight	= target.offsetHeight
	var tLeft 	= target.offsetLeft
	var tTop 	= target.offsetTop
	
	target.style.display = 'none';
	
	ES_Drager_aniGo( tWidth,tHeight,tTop,tLeft,target )
}

//--动态弹出
var ES_Drager_aniCP = null
var ES_Drager_aniCount = 0

function ES_Drager_aniGo(  width , height , top , left , target ){
	ES_Drager_aniCount++
	
	clearTimeout(ES_Drager_aniCP)

	var oES_DragerDiv	= document.getElementById("ES_DragerDiv");
	
	var oTarget	= target
	var oDiv	= oES_DragerDiv
	
	var oWidth 		= parseInt(oDiv.offsetWidth)-2;		//--去除2个像素边框
	var oHeight 	= parseInt(oDiv.offsetHeight)-2;	//--去除2个像素边框
	var oLeft 		= parseInt(oDiv.offsetLeft);
	var oTop 		= parseInt(oDiv.offsetTop);
	
	var offsetWidth 	= oWidth  > width  ? -1 : 1;	//--比目标大的时候，设置为递减，反则递增
	var offsetHeight 	= oHeight > height ? -1 : 1;	//--比目标大的时候，设置为递减，反则递增
	
	var setWidth 		= (oWidth != width )  			//--大小不相等时返回true
	var setHeight 		= (oHeight!= height) 			//--大小不相等时返回true
	
	
	if( setWidth ){
		if( ( oWidth < width + 11 && oWidth > width ) || (oWidth > width - 11 && oWidth < width ) ){			//--在接近目标大小时，以匀速变化
			oES_DragerDiv.style.width = ( oWidth + offsetWidth ) + "px"
		}else{
			oES_DragerDiv.style.width = ( Math.round(oWidth +(width - oWidth)/10) + offsetWidth*5 ) + "px"		//--变速改变大小
		}
	}
	

	if( setHeight ){
		if( ( oHeight < height + 11 && oHeight > height ) || (oHeight > height - 11 && oHeight < height )){	//--在接近目标大小时，以匀速变化
			oES_DragerDiv.style.height = ( oHeight + offsetHeight ) + "px"
		}else{
			oES_DragerDiv.style.height = ( Math.round(oHeight+(height - oHeight)/10) + offsetHeight*5 ) + "px"	//--变速改变大小
		}
	}
	
		
	var offsetTop	= oTop  > top  ? -1 : 1;		//--比目标大的时候，设置为递减，反则递增
	var offsetLeft 	= oLeft > left ? -1 : 1;		//--比目标大的时候，设置为递减，反则递增
	
	var setTop 		= (oTop != top)					//--坐标不相等时返回true
	var setLeft 	= (oLeft!= left) 				//--坐标不相等时返回true
	
	
	if( setLeft ){
		oES_DragerDiv.style.left = (Math.ceil(oLeft+(left - oLeft)/10) + offsetLeft) + "px"
	}
		
	if( setTop ){
		oES_DragerDiv.style.top = (Math.ceil(oTop + (top - oTop)/10) + offsetTop) + "px"
	}
	
	//document.title = "(" + oWidth +"/" + width +")" + "(" + oHeight +"/" + height +")" + "(" + oTop +"/" + top +")" + "(" + oLeft +"/" + left +")" + offsetWidth +"/"
	
	//--所有条件完成退出（循环超过50次也退出）
	if( (!setWidth && !setHeight && !setLeft && !setTop) || ES_Drager_aniCount > 50){
		clearTimeout(ES_Drager_aniCP)
		
		if( target != null ){	//--有目标对象是显示目标对象
			target.style.display = '';
			
			if( typeof(ES_Shadow_js)!="undefined" ){	//--显示阴影
				ES_Shadow.show(target);
			}
		}
		
		ES_Drager_aniCount = 0							//--初始化循环次数
		oES_DragerDiv.style.display = 'none';			//--隐藏
		
		return
	}

	
	ES_Drager_aniCP = setTimeout(function(){ ES_Drager_aniGo( width , height , top , left,target ) } , 10 )
}


function ES_Drag_setTextAreaScroll( which , overflow ){
	var obj = which.getElementsByTagName("textarea")
	for( var i=0 ; i < obj.length ; i++ ){
		obj[i].style.overflow = overflow
	}
}


