var dragManager = new Array();

function registerDrag(prop){
   prop = getCommonProperty(prop,{
      id:"",
      maxX:1024,
      maxY:720,
      minX:0,
      minY:0,
	  mode:"both",
	  position:"absolute"
   });

   var drag = document.getElementById(prop.id);
   if(drag){

	  var rect = getRealClientBound(drag); 
	  if(prop.maxX == "parent"){
	     var r = getRealClientBound(drag.parentNode);  
	     prop.maxX = r.right - r.left;
	  }
	  if(prop.maxY == "parent"){
	     var r = getRealClientBound(drag.parentNode);		 
	     prop.maxY = r.bottom;
	  }
	  if(prop.minX == "parent"){
		 var r = getRealClientBound(drag.parentNode);
		 prop.minX = r.left;
	  }
	  if(prop.minY == "parent"){
		 var r = getRealClientBound(drag.parentNode);
	     prop.minY = r.top;
	  }
	  drag.getYPercent = function(){
		 var s = getScrollXY();
		 var rect = {top:myParseInt(drag.style.top),bottom:myParseInt(drag.style.top)+myParseInt(drag.style.height)} ;
		 return (100 - (rect.top-drag.dragMinY ) / ((drag.dragMaxY-drag.dragMinY) - (rect.bottom - rect.top))*100 );
	  }
	  drag.style.position = prop.position;
      drag.style.width = (rect.right - rect.left) + "px";
      drag.style.height = (rect.bottom - rect.top ) + "px";
      drag.style.top = rect.top + "px";
      drag.style.left = rect.left + "px";
      drag.dragOn = false;
      drag.dragX = rect.left;
      drag.dragY = rect.top;
      drag.mode = "move";
	  drag.dragStatus = "enddrag";
	  drag.dragMode = prop.mode;
      drag.dragMaxX = prop.maxX;
      drag.dragMaxY = prop.maxY-1;
      drag.dragMinX = prop.minX;
      drag.dragMinY = prop.minY-1;
	  if(navigator.appName == "Microsoft Internet Explorer"){
	     drag.dragMinY = prop.minY-3;	
		 drag.dragMaxY = prop.maxY-3;
	  }
	  else{
		 drag.dragMinY = prop.minY-3;
		 drag.dragMaxY = prop.maxY-5;
		 
	  }
      drag.onDrag = function(){};
      drag.onBeforeDrag = function(){};
      drag.onDraging = function(){};
      dragManager[dragManager.length] = drag;
   }
   return drag;
}

function onDragDown(element,x,y){
   for(var i=0;i<dragManager.length;i++){
	  if(element.id == dragManager[i].id && dragManager[i].mode == "move"){
         dragManager[i].onBeforeDrag();
         dragManager[i].dragOn = true;
         dragManager[i].dragX = x - parseInt(dragManager[i].style.left);
         dragManager[i].dragY = y - parseInt(dragManager[i].style.top);
		 dragManager[i].dragStatus = "dragging";
	  }
   }
}
function onDragUp(element,x,y){
   for(var i=0;i<dragManager.length;i++){
      if(dragManager[i].dragOn){
         dragManager[i].dragOn = false;
         dragManager[i].onDrag(element,x,y);
		 dragManager[i].dragStatus = "enddrag";
      }
   }
}
function onDragMove(element,x,y){
   for(var i=0;i<dragManager.length;i++){
      if(dragManager[i].dragOn == true && dragManager[i].mode == "move"){
         var nextX = x - dragManager[i].dragX;
         var nextY = y - dragManager[i].dragY;
         var width = parseInt(dragManager[i].style.width);
         var height = parseInt(dragManager[i].style.height);

	     if(dragManager[i].dragMode == "both" || dragManager[i].dragMode == "horizontal"){
			 if(nextX + width> dragManager[i].dragMaxX){
				dragManager[i].style.left = dragManager[i].dragMaxX - width + "px";
			 }
			 else if(nextX < dragManager[i].dragMinX){
				
				dragManager[i].style.left = dragManager[i].dragMinX + "px";
			 }
			 else{
				dragManager[i].style.left = nextX + "px";
			 }
		 }
		 if(dragManager[i].dragMode == "both" || dragManager[i].dragMode == "vertical"){
			 if(nextY + height > dragManager[i].dragMaxY){
				dragManager[i].style.top = dragManager[i].dragMaxY - height + "px";
			 }
			 else if(nextY < dragManager[i].dragMinY){ 
				dragManager[i].style.top = dragManager[i].dragMinY + "px";
			 }
			 else{
				dragManager[i].style.top = nextY + "px";
			 }
		 }
         dragManager[i].onDraging(x,y,dragManager[i].dragX,dragManager[i].dragY);
      }
   }
}

