/*  Copyright (c) 2000, 2009, Oracle. All rights reserved.
    ToolsRel: 8.50-807-R1 */
// JScript File
/* Constructor */

function PT_gridDD()
{
	var mouse_x;
	var mouse_y;	
	var el_x;
	var el_y;
	// var ddTimer;               // comment out ddTimer code
	var idDragged;
	var CloneArr;
	var srcArr;
	var trgArr;
	var cZIndex;
	// var okToStart;            // comment out okToStart code
	var slideBack;
	var bMove;                  // mousemove flag while mouse is being pressed down; set in onmousemove event
	var bMousedown;             // mousedown flag set in onmousedown event
    var idMousedown;            // mousedown element id
}

PT_gridDD.prototype = {
    init : function()
	{
		if(!this.srcArr || !this.trgArr) return;
		this.cZIndex = 10000;
		//this.ddTimer = -1;                        // comment out ddTimer code
		this.idDragged = false;	
		this.__initDragDropScript();	
		// this.okToStart = true;                   // comment out okToStart code
		this.slideBack = true;
		this.bMove = false;                         // set mousemove flag to false
		this.bMousedown = false;                    // set mousedown flag to false
        this.idMousedown="";
	},
	addSource : function(obj,slideBackAfterDrop,xAxis,yAxis,dragOnlyWithinElId,functionToCallOnDrag)
	{
		if(!functionToCallOnDrag)functionToCallOnDrag=false;
		if(!this.srcArr)this.srcArr = new Array();
		if(!this.CloneArr)this.CloneArr = new Array();
		if(!obj) return;
		
		if(xAxis!==false)xAxis = true;
		if(yAxis!==false)yAxis = true;
		var no = this.srcArr.length;		
		this.srcArr[no]  = [obj,slideBackAfterDrop,xAxis,yAxis,dragOnlyWithinElId,functionToCallOnDrag];	
		obj.style.top = ptCommonObj.getTopPos(obj) + 'px';
		obj.style.left = ptCommonObj.getLeftPos(obj) + 'px';
		obj.onmousedown =this.__initDragDropElement;
		obj.setAttribute('dragableElement',no);
		this.CloneArr[no] = obj; 
		
	},
	addTarget : function(targetId,functionToCallOnDrop)
	{
		if(!this.trgArr)this.trgArr = new Array();
		if(!document.getElementById(targetId)) return;
		var obj = document.getElementById(targetId);
		this.trgArr[this.trgArr.length]  = [obj,functionToCallOnDrop];		
	},
	setSlide : function(slide)
	{
		this.slideBack = slide;	
		
	},
	__initDragDropScript : function()
	{
		var refToThis = this;
		var obj = document.getElementById('PAGECONTAINER');
		if (!obj) return;
		obj.onmouseout = this.__resetCursor;		
		obj.onmousemove = this.__moveDragableElement;
		obj.onmouseup = this.__stop_dragDropElement;
		obj.onselectstart = function() { return refToThis.__cancelSelectionEvent(false,this) };
		objondragstart = function() { return ptCommonObj.cancelEvent(false,this) };	
		
		obj = document.getElementById('popupContentModal');
		if (obj && obj.innerHTML) {
		obj.onmouseout = this.__resetCursor;		
		obj.onmousemove = this.__moveDragableElement;
		obj.onmouseup = this.__stop_dragDropElement;
		obj.onselectstart = function() { return refToThis.__cancelSelectionEvent(false,this) };
		objondragstart = function() { return ptCommonObj.cancelEvent(false,this) };		
        }	
	},
	__resetCursor : function(e)  // onmouseout
	{
	var eObj = ptCommonObj.getEO(e);
	if (eObj && eObj.style.cursor=="not-allowed")
	    eObj.style.cursor="";
	},
	__initDragDropElement : function(e)  // onmousedown event
	{
		if (!e && window.event)
            e = window.event;
		if (e.button == 2) return;	
		// if(!ptGridDDObj_win0.okToStart)return;  // comment out okToStart code
		//     ptGridDDObj_win0.okToStart = false;   // comment out okToStart code
		// setTimeout('ptGridDDObj_win0.okToStart = true;',100);  // comment out okToStart code
		ptGridDDObj_win0.bMousedown = true;  // set mousedown flag
        ptGridDDObj_win0.idMousedown = this.id;  // element id mousedown event happened
		ptGridDDObj_win0.idDragged = this.getAttribute('dragableElement');
		ptGridDDObj_win0.idDragged = ptGridDDObj_win0.idDragged + '';
		if(ptGridDDObj_win0.idDragged=='')ptGridDDObj_win0.idDragged = this.dragableElement;
		// ptGridDDObj_win0.ddTimer=0;  // comment out ddTimer code
		
		ptGridDDObj_win0.mouse_x = e.clientX;
		ptGridDDObj_win0.mouse_y = e.clientY;
		
		ptGridDDObj_win0.cZIndex = ptGridDDObj_win0.cZIndex + 1;
		
		ptGridDDObj_win0.CloneArr[ptGridDDObj_win0.idDragged].style.zIndex = ptGridDDObj_win0.cZIndex;
		
		ptGridDDObj_win0.currentEl_allowX = ptGridDDObj_win0.srcArr[ptGridDDObj_win0.idDragged][2];
		ptGridDDObj_win0.currentEl_allowY = ptGridDDObj_win0.srcArr[ptGridDDObj_win0.idDragged][3];

		var parentEl = ptGridDDObj_win0.srcArr[ptGridDDObj_win0.idDragged][4];
		ptGridDDObj_win0.drag_minX = false;
		ptGridDDObj_win0.drag_minY = false;
		ptGridDDObj_win0.drag_maxX = false;
		ptGridDDObj_win0.drag_maxY = false;
		if(parentEl){
			var obj = document.getElementById(parentEl);
			if(obj){
				ptGridDDObj_win0.drag_minX = ptCommonObj.getLeftPos(obj);
				ptGridDDObj_win0.drag_minY = ptCommonObj.getTopPos(obj);
				ptGridDDObj_win0.drag_maxX = ptGridDDObj_win0.drag_minX + obj.clientWidth;
				ptGridDDObj_win0.drag_maxY = ptGridDDObj_win0.drag_minY + obj.clientHeight;				
			}		
		}
		// Reposition dragable element
		if(ptGridDDObj_win0.srcArr[ptGridDDObj_win0.idDragged][1]){
			ptGridDDObj_win0.CloneArr[ptGridDDObj_win0.idDragged].style.top = ptCommonObj.getTopPos(ptGridDDObj_win0.srcArr[ptGridDDObj_win0.idDragged][0]) + 'px';
			ptGridDDObj_win0.CloneArr[ptGridDDObj_win0.idDragged].style.left = ptCommonObj.getLeftPos(ptGridDDObj_win0.srcArr[ptGridDDObj_win0.idDragged][0]) + 'px';
		}
		ptGridDDObj_win0.el_x = ptGridDDObj_win0.CloneArr[ptGridDDObj_win0.idDragged].style.left.replace('px','')/1;
		ptGridDDObj_win0.el_y = ptGridDDObj_win0.CloneArr[ptGridDDObj_win0.idDragged].style.top.replace('px','')/1;
		//  ptGridDDObj_win0.__timerDragDropElement();   
		return false;
	},
	__timerDragDropElement : function()
	{
		window.thisRef = this;
		// if(this.ddTimer>=0 && this.ddTimer<5){                         // comment out ddTimer code
		//	this.ddTimer = this.ddTimer + 1;                          // comment out ddTimer code
		//	setTimeout('window.thisRef.__timerDragDropElement()',2);  // comment out ddTimer code
		//	return;			                                  // comment out ddTimer code
		//}
		// if(this.ddTimer>=5){                                           // comment out ddTimer code
		
		this.srcArr[this.idDragged][0].style.visibility = 'hidden';		
		if(this.srcArr[ptGridDDObj_win0.idDragged][5]){
			var id1 = this.CloneArr[this.idDragged].id + '';
			var id2 = this.srcArr[this.idDragged][0].id + '';
			var string = this.srcArr[ptGridDDObj_win0.idDragged][5] + '("' + id1 + '","' + id2 + '")';
			eval(string);
			}			
		//}	                                                          // comment out ddTimer code	
	},	
	__cancelSelectionEvent : function()
	{
        if (ptGridDDObj_win0.bMousedown) return false;  
		// if(this.ddTimer>=0)return false;                              // comment out ddTimer code
		return true;
	},
	__moveDragableElement : function(e)  // onmousemove
	{
		if (!e && window.event)
            e = window.event;
		// if(ptGridDDObj_win0.ddTimer<1)return;	                // comment out ddTimer code
		var xdiff=0, ydiff=0;                                           // x and y mouse coordinates
		if (ptGridDDObj_win0.bMousedown)                                // mouse is being pressed down
		{
		    xdiff=e.clientX - ptGridDDObj_win0.mouse_x;                 // mouse x position difference
		    ydiff=e.clientY - ptGridDDObj_win0.mouse_y;                 // mouse y position difference
		    if (xdiff != 0 || ydiff != 0) {
		        ptGridDDObj_win0.bMove=true;    // set mousemove flag to true when mouse moves
		        ptGridDDObj_win0.__timerDragDropElement();   
		        //window.status="__moveDragableElement running";       // debug
		    }
		    else return;
		}
		else return;
		var dragObj = ptGridDDObj_win0.CloneArr[ptGridDDObj_win0.idDragged];
		if(ptGridDDObj_win0.currentEl_allowX && xdiff != 0){  		
			var leftPos = (xdiff+ ptGridDDObj_win0.el_x);
			if(ptGridDDObj_win0.drag_maxX){
				var tmpMaxX = ptGridDDObj_win0.drag_maxX - dragObj.offsetWidth;
				if(leftPos > tmpMaxX)leftPos = tmpMaxX
				if(leftPos < ptGridDDObj_win0.drag_minX)leftPos = ptGridDDObj_win0.drag_minX;				
			}
			dragObj.style.left = leftPos + 'px'; 
		}	
		if(ptGridDDObj_win0.currentEl_allowY && ydiff !=0){  
			var topPos = (ydiff+ ptGridDDObj_win0.el_y);
			if(ptGridDDObj_win0.drag_maxY){	
				var tmpMaxY = ptGridDDObj_win0.drag_maxY - dragObj.offsetHeight;		
				if(topPos > tmpMaxY)topPos = tmpMaxY;
				if(topPos < ptGridDDObj_win0.drag_minY)topPos = ptGridDDObj_win0.drag_minY;	
			}			
			
			dragObj.style.top = topPos + 'px'; 
		}
  	    oDragTxt = document.getElementById("pt_dragtxt"); 
  	    oDragTxt.innerHTML = dragObj.innerHTML;
	    oDragTxt.style.display="block"; 
  	    oDragTxt.style.zIndex="999";
	    oDragTxt.style.width=dragObj.parentNode.width;
	    oDragTxt.style.left = e.clientX + Math.max(document.body.scrollLeft,document.documentElement.scrollLeft);
	    oDragTxt.style.top = e.clientY + Math.max(document.body.scrollTop,document.documentElement.scrollTop)-20;
	    var srcId = dragObj.id.split("_")[0];		    
	    var trgNo=ptGridDDObj_win0.getValidTargetNo(srcId,e); 
	},
    getValidTargetNo : function(srcId,e)
	{ 
	var dragObj = ptGridDDObj_win0.CloneArr[ptGridDDObj_win0.idDragged];
	var srcId = dragObj.id.split("@")[0];
	var srcGId = dragObj.id.split("#")[0]; 
	var oDragTxt = document.getElementById("pt_dragtxt");
    var eObj = ptCommonObj.getEO(e);
	var leftPosMouse = e.clientX;
	var topPosMouse = e.clientY;
		
	if(!ptGridDDObj_win0.trgArr)ptGridDDObj_win0.trgArr = new Array();
	// Loop through drop targets and check if the coordinate of the mouse is over it. If it is, call specified drop function.
    for(var no=0;no<ptGridDDObj_win0.trgArr.length;no++){
	    var trgId=ptGridDDObj_win0.trgArr[no][0].id.split("@")[0];
	    trgId = trgId.substring(2,trgId.length);
		var trgGId = trgId.split("#")[0];
		if (srcGId!=trgGId) continue;
		var tObj = document.getElementById(ptGridDDObj_win0.trgArr[no][0].id);			
		var leftPosEl = ptCommonObj.getLeftPos(tObj);
		var topPosEl = ptCommonObj.getTopPos(tObj);
		var widthEl = tObj.offsetWidth;
		var heightEl = tObj.offsetHeight;
		var sObj = document.getElementById(trgId); 		
		if(leftPosMouse > leftPosEl+3 && leftPosMouse < (leftPosEl + widthEl)+3 && topPosMouse > topPosEl+3 && topPosMouse < (topPosEl + heightEl)+3){
			if(ptGridDDObj_win0.trgArr[no][1]) { 
			//	oDragTxt.innerHTML = dragObj.id+' '+dragObj.innerHTML+' '+no+' '+trgId+' '+leftPosEl+' '+topPosEl+' '+widthEl+' '+heightEl;	    
			    if (srcGId!=trgGId || trgId==srcId) {	              
	                eObj.style.cursor="not-allowed";	         
	                return -1;
	                }
	            else
				return no;
			}
			break;
		}	
	}
	eObj.style.cursor="not-allowed";
	return -1;	
	},

    __getSortJScript : function(sId)  // retrieve column sort javascript to be run
	{
		var sScript=ptGridObj_win0.doSort(sId);
		return sScript;
	},

	__stop_dragDropElement : function(e)  // onmouseup event
	{
	    if (!ptGridDDObj_win0.bMove) {                               // mouse didn't move
	        //window.status="__stop_dragDropElement: bMove is false";     // use for debug only
            if (ptGridDDObj_win0.bMousedown) {                       // call sort routine
	            ptGridDDObj_win0.bMousedown = false;                 // reset mousedown flag
                var idMousedwn= ptGridDDObj_win0.idMousedown;
                ptGridDDObj_win0.idMousedown = "";
                var tmp_js = ptGridDDObj_win0.__getSortJScript(idMousedwn);
                if (tmp_js != "") 
                     eval(tmp_js);
                }
	        return;   
	        }
		// if(ptGridDDObj_win0.ddTimer<5)                             // remove ddTimer code
		//   return;                                                  // remove ddTimer code
	    ptGridDDObj_win0.bMousedown = false;                          // reset mousedown flag
	    ptGridDDObj_win0.bMove = false;                               // reset mousemove flag
        ptGridDDObj_win0.idMousedown = "";                            // empty mousedown id
		if (!e && window.event)
            e = window.event;
			
		// Dropped on which element
		dropDestination = ptCommonObj.getEO(e);
		if (dropDestination.nodeType == 3) // defeat Safari bug
			dropDestination = dropDestination.parentNode;
		var trgNo=ptGridDDObj_win0.getValidTargetNo(ptGridDDObj_win0.srcArr[ptGridDDObj_win0.idDragged][0].id,e);
		if (trgNo!=-1)	
		   eval(ptGridDDObj_win0.trgArr[trgNo][1] + '("' + ptGridDDObj_win0.srcArr[ptGridDDObj_win0.idDragged][0].id + '","' + ptGridDDObj_win0.trgArr[trgNo][0].id + '",' + e.clientX + ',' + e.clientY + ')');
	    else 
		   ptGridDDObj_win0.__slideElementBackIntoItsOriginalPosition(ptGridDDObj_win0.idDragged);
		
		// Variable cleanup after drop
		// ptGridDDObj_win0.ddTimer = -1;           // remove ddTimer code
		ptGridDDObj_win0.idDragged = false;
		oDragTxt = document.getElementById("pt_dragtxt");
		oDragTxt.innerHTML = "";
	    oDragTxt.style.display="none";
        //window.status="end __stop_dragDropElement";  // debug
									
	},
	__slideElementBackIntoItsOriginalPosition : function(numId)
	{
		// Coordinates current element position
		var currentX = this.CloneArr[numId].style.left.replace('px','')/1;
		var currentY = this.CloneArr[numId].style.top.replace('px','')/1;
		
		// Coordinates - where it should slide to
		var targetX = ptCommonObj.getLeftPos(ptGridDDObj_win0.srcArr[numId][0]);
		var targetY = ptCommonObj.getTopPos(ptGridDDObj_win0.srcArr[numId][0]);;
		
		if(this.slideBack){
			// Call the step by step slide method
			this.__processSlide(numId,currentX,currentY,targetX,targetY);
		}else{
			this.srcArr[numId][0].style.visibility = 'visible';			
		}
			
	},
	__processSlide : function(numId,currentX,currentY,targetX,targetY)
	{				
		// Find slide x value
		var slideX = Math.round(Math.abs(Math.max(currentX,targetX) - Math.min(currentX,targetX)) / 10);		
		// Find slide y value
		var slideY = Math.round(Math.abs(Math.max(currentY,targetY) - Math.min(currentY,targetY)) / 10);
		
		if(slideY<3 && Math.abs(slideX)<10)slideY = 3;	// 3 is minimum slide value
		if(slideX<3 && Math.abs(slideY)<10)slideX = 3;	// 3 is minimum slide value
		
		
		if(currentX > targetX) slideX*=-1;	// If current x is larger than target x, make slide value negative<br>
		if(currentY > targetY) slideY*=-1;	// If current y is larger than target x, make slide value negative
		
		// Update currentX and currentY
		currentX = currentX + slideX;	
		currentY = currentY + slideY;

		// If currentX or currentY is close to targetX or targetY, make currentX equal to targetX(or currentY equal to targetY)
		if(Math.max(currentX,targetX) - Math.min(currentX,targetX) < 4)currentX = targetX;
		if(Math.max(currentY,targetY) - Math.min(currentY,targetY) < 4)currentY = targetY;

		// Update CSS position(left and top)
		this.CloneArr[numId].style.left = currentX + 'px';
		this.CloneArr[numId].style.top = currentY + 'px';	
		
		// currentX different than targetX or currentY different than targetY, call this function in again in 5 milliseconds
		if(currentX!=targetX || currentY != targetY){
			window.thisRef = this;	// Reference to this dragdrop object
			setTimeout('window.thisRef.__processSlide("' + numId + '",' + currentX + ',' + currentY + ',' + targetX + ',' + targetY + ')',5);
		}else{	// Slide completed. Make absolute positioned element invisible and original element visible
			this.srcArr[numId][0].style.visibility = 'visible';
		}		
	}
}
var ptGridDDObj_win0 = null;


var preID_win0=null;  // save highlighted row id
var orgColor_win0="white";  // default color
var frozn_win0="f";   // table <TR> id for frozen column row starts with "ftr".  Otherwise, it starts with "tr"
var rowSelColor_win0=""; // row select background color  

function resetVars_win0()
{
  if(typeof(preID_win0)!='undefined' && preID_win0 != null)
     HighLightTR(rowSelColor_win0, orgColor_win0, preID_win0, 1);  // pass "1" as last parameter to force "HighLightTR" to run
}

function HighlightDone(sId)
{
  if(typeof(preID_win0)!='undefined' && preID_win0 != null)   
  {
     var saveID = preID_win0;
     var newID = sId;
     if (preID_win0.substr(0,1).indexOf(frozn_win0)==0)  // frozen column row
         saveID = preID_win0.substr(1);
     if (sId.substr(0,1).indexOf(frozn_win0)==0)  // frozen column row
         newID = sId.substr(1);
     if (saveID.length == newID.length && saveID.indexOf(newID) >=0) // the same row already highlighted
         return true;
  }

  //window.status= "HighlightDone: " + "no";
  return false;
}

function HighLightTR(sRowSelColor, sRowOrgColor, sId, bRun)    
{
  if (typeof(bRun)=='undefined')
      {
      if (HighlightDone(sId))
          return;
      }
  
  if (rowSelColor_win0=="") 
      rowSelColor_win0 = sRowSelColor;

  // loop through twice because new grid may have frozen and unfrozen sections 
  for (var i=0;i<2;i++)  // unhighlight the previous highlighted row
  {
     var obj;
     if (i== 0)
         obj=document.getElementById(preID_win0);
     else if (preID_win0.substr(0,1).indexOf(frozn_win0)==0)  // frozen column row
         obj=document.getElementById(preID_win0.substr(1));        // get unfrozen column row
     else
         obj=document.getElementById(frozn_win0.concat(preID_win0)); // get frozen column row

     if(typeof(obj) =='undefined' || obj==null)
         break;

     var x = obj.childNodes;
     for (var j=0;j<x.length;j++)
     {
        if((x[j].nodeName).indexOf("TD")==0 && (x[j].parentNode.nodeName).indexOf("TR") == 0)
            x[j].style.backgroundColor=orgColor_win0;  // restore the original background color
     }
  }
  
  for (var i=0;i<2;i++)  // highlight the currect onclick row
  {
       var obj;
       if (i== 0)
           obj=document.getElementById(sId);
       else if (sId.substr(0,1).indexOf(frozn_win0)==0)
           obj=document.getElementById(sId.substr(1));
       else
           obj=document.getElementById(frozn_win0.concat(sId));

       if(typeof(obj) =='undefined' || obj==null)
           break;
       var y = obj.childNodes;
       for (var j=0;j<y.length;j++)
       {
           if( (y[j].nodeName).indexOf("TD")==0 && (y[j].parentNode.nodeName).indexOf("TR") == 0)
                 y[j].style.backgroundColor=rowSelColor_win0;
       }
  }
  preID_win0 = sId;  // save id associated with the highlighed row
  orgColor_win0 = sRowOrgColor;
}

function hoverLightTR(sRowHoverColor, sRowOrgColor, bReset, sId)  
{
  if (HighlightDone(sId))
      return;

  for (var i=0;i<2;i++)  // loop through twice because new grid may have frozen and unfrozen sections
  {
      var obj;
      if (i== 0)
          obj=document.getElementById(sId);
      else if (sId.substr(0,1).indexOf(frozn_win0)==0)  // frozen column row
          obj=document.getElementById(sId.substr(1));        // get unfrozen column row
      else
          obj=document.getElementById(frozn_win0.concat(sId)); // get frozen column row

      if(typeof(obj) =='undefined' || obj==null)
          break;
      var x = obj.childNodes;
      for (var j=0;j<x.length;j++)
      {
          if((x[j].nodeName).indexOf("TD")==0 && (x[j].parentNode.nodeName).indexOf("TR") == 0)
          {
              if (bReset)  // onmouseout event, reset background color to the original background color
                  x[j].style.backgroundColor=sRowOrgColor;
              else
                  x[j].style.backgroundColor=sRowHoverColor;
          }
      }
  }
}
