
// What browser are we using?  We will need to know to overcome any browser specific oddities
function Browser()
{

  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
	this.isIE = true;
	this.version = parseFloat(ua.substr(i + s.length));
	return;
  }

  s = "Opera";
  if ((i = ua.indexOf(s)) >= 0) {
	this.isIE = true;
	this.version = parseFloat(ua.substr(i + s.length));
	return;
  }
  
  s = "Netscape6/";
    if ((i = ua.indexOf(s)) >= 0) {
  	this.isNS = true;
  	this.version = parseFloat(ua.substr(i + s.length));
  	return;
  }


  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
	this.isNS = true;
	this.version = 6.1;
	return;
  }
}

var browser = new Browser();

var dragObj = new Object();
dragObj.zIndex = 0;

function dragStart(event, id)
{

  var drag_me = "";
 
  if(id.indexOf("dc_movable_") == -1)
  {
  	if(document.getElementById('enable_drag').checked)
  	{
  		drag_me = 'yes';
  	}
  	else
  	{
  		drag_me = 'no';
  	}
  }
  else
  {
  	drag_me = 'yes';
  }
  
  
  if (drag_me == 'yes')
  {
	  var el;
	  var x, y;

	  // If an element id was given, find it. Otherwise use the element being
	  // clicked on.

	  if (id)
		dragObj.elNode = document.getElementById(id);
	  else {
		if (browser.isIE)
		  dragObj.elNode = window.event.srcElement;
		if (browser.isNS)
		  dragObj.elNode = event.target;

		// If this is a text node, use its parent element.

		if (dragObj.elNode.nodeType == 3)
		  dragObj.elNode = dragObj.elNode.parentNode;
	  }

	  // Find out where we moved the mouse pointer in terms of left and top CSS positioning

	  if (browser.isIE) {
		x = window.event.clientX + document.documentElement.scrollLeft
		  + document.body.scrollLeft;
		y = window.event.clientY + document.documentElement.scrollTop
		  + document.body.scrollTop;
	  }
	  if (browser.isNS) {
		x = event.clientX + window.scrollX;
		y = event.clientY + window.scrollY;
	  }

	  // Save starting positions of the mouse pointer and the element we want to move

	  dragObj.cursorStartX = x;
	  dragObj.cursorStartY = y;
	  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
	  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

	  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
	  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

	  // Turn on a dashed border to highlight the scope of what we are moving.
	  // Make sure we find out if a border is already on so we can set it back when we are done.


	  var backup_border_style = dragObj.elNode.style.borderStyle.value;
	  var backup_border_width = dragObj.elNode.style.borderWidth.value;
	  var backup_border_color = dragObj.elNode.style.borderColor.value;

	  //dragObj.elNode.style.borderStyle = 'dashed';
	  //dragObj.elNode.style.borderWidth = '1px';
	  //dragObj.elNode.style.borderColor = 'black';

	// Change the z-index so it is on top of anything it may have been behind when we clicked it.

	  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

	  // Capture mousemove and mouseup events on the page.

	  if (browser.isIE) {
		document.attachEvent("onmousemove", dragGo);
		document.attachEvent("onmouseup",   dragStop);
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	  }
	  if (browser.isNS) {
		document.addEventListener("mousemove", dragGo,   true);
		document.addEventListener("mouseup",   dragStop, true);
		event.preventDefault();
	  }
  }
}

function dragGo(event)
{

  var x, y;

  // Find out where we moved the mouse pointer in terms of left and top CSS positioning

  if (browser.isIE) {
	x = window.event.clientX + document.documentElement.scrollLeft
	  + document.body.scrollLeft;
	y = window.event.clientY + document.documentElement.scrollTop
	  + document.body.scrollTop;
  }
  if (browser.isNS) {
	x = event.clientX + window.scrollX;
	y = event.clientY + window.scrollY;
  }

  // Now move the element to the same place the mouse pointer is.

  //dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  //dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";
  
  var startLeft = dragObj.elStartLeft;
  var startTop  = dragObj.elStartTop;
  
  var stopLeft = (dragObj.elStartLeft + x - dragObj.cursorStartX)
  var stopTop  = (dragObj.elStartTop  + y - dragObj.cursorStartY)
  
  dragObj.elNode.style.left = stopLeft + "px";
  dragObj.elNode.style.top  = stopTop + "px";
  

  if (browser.isIE) {
	window.event.cancelBubble = true;
	window.event.returnValue = false;
  }
  if (browser.isNS)
	event.preventDefault();
}

function getMoveValueFromStartStopData(in_start,in_stop)
{

	return (in_stop - in_start);
	
}

function moveGroupedObjects(in_leftDifferential,in_topDifferential,inMasterObj)
{
	var this_obj;
	var curLeft = 0;
	var curTop  = 0;
	var newTop  = 0;
	var newLeft = 0;
	    
	
	if(document.getElementById('groupMove').value != '')
	{
		document.getElementById('field_hover_me').style.display = 'none';
		
		split_wrappers = document.getElementById('groupMove').value.split(",");
		for(i=0; i < split_wrappers.length; i++)
		{
			this_obj = split_wrappers[i]
			if(this_obj != inMasterObj && this_obj != '')
			{

				curTop  = parseInt(document.getElementById(this_obj).style.top, 10);
				curLeft = parseInt(document.getElementById(this_obj).style.left, 10);

				newTop  = (curTop + in_topDifferential);
				newLeft = (curLeft + in_leftDifferential);

				document.getElementById(this_obj).style.top  = newTop + "px";
				document.getElementById(this_obj).style.left = newLeft + "px";

				document.getElementById('pos_top_' + this_obj).value  = newTop;
				document.getElementById('pos_left_' + this_obj).value = newLeft;

				curTop  = 0;
				curLeft = 0;
				newTop  = 0;
				newLeft = 0;
			}
		}
	}
}



function dragStop(event) {


// Retrieve new positioning values at the end of a drag drop so we can save them

  if (browser.isIE) {
	x = window.event.clientX + document.documentElement.scrollLeft
	  + document.body.scrollLeft;
	y = window.event.clientY + document.documentElement.scrollTop
	  + document.body.scrollTop;
  }
  if (browser.isNS) {
	x = event.clientX + window.scrollX;
	y = event.clientY + window.scrollY;
  }

  var stopLeft = (dragObj.elStartLeft + x - dragObj.cursorStartX)
  var stopTop  = (dragObj.elStartTop  + y - dragObj.cursorStartY)
  
  
  var stop_left = stopLeft + "px";
  var stop_top = stopTop + "px";
  
  var check_element_id = dragObj.elNode.id;
  
  //if (dragObj.elNode.id != 'tzjrwgvejc')
  if(check_element_id.indexOf("dc_movable_") == -1)
  {
	  if(document.getElementById('moveAll').checked)
	  {
		moveGroupedObjects(getMoveValueFromStartStopData(dragObj.elStartLeft,(dragObj.elStartLeft + x - dragObj.cursorStartX)),getMoveValueFromStartStopData(dragObj.elStartTop,(dragObj.elStartTop  + y - dragObj.cursorStartY)),dragObj.elNode.id);
	  }
  }
  

  // Stop capturing mousemove and mouseup events.

  if (browser.isIE) {
	document.detachEvent("onmousemove", dragGo);
	document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
	document.removeEventListener("mousemove", dragGo,   true);
	document.removeEventListener("mouseup",   dragStop, true);
  }
  
    recordCoords(dragObj.elNode.id,stop_left,stop_top);
    
    dragObj.elNode.style.zIndex = ++dragObj.zIndex;
  
}

function recordCoords(inObjId,inStopLeft,inStopTop)
{
	//if (inObjId == 'tzjrwgvejc')
	if(inObjId.indexOf("dc_movable_") != -1)
	{
		// Do nothing, this is the utility ID on the public facing site.
	}
	else
	{
		if (inObjId == 'toolpack')
		{
		  //Store the position of the toolpack for updating during a canvas reload

		  document.canvas.toolpack_pos_top.value = inStopTop;
		  document.canvas.toolpack_pos_left.value = inStopLeft;

		}   
		else
		{
		  //Store the position of the moved object for updating during a canvas save

		  document.i_forms['pos_top_' + inObjId].value = inStopTop;
		  document.i_forms['pos_left_' + inObjId].value = inStopLeft;

		}
		lightActiveField(inObjId.replace(/wrapper/g,"field"));
	}
}

