/* Scripts to support dynamic moving about of navigation items */

var isDragging = 0;
var isMouseDown = 0;
var currentTR = "";
var originalTR = "";

// getID ()
// in:  name of row
// out: id of row
function getID (myrow) {
	/*if (myrow == "")
		return "";
	return myrow.split("_")[0];*/
	return myrow;

}

// getParent ()
// in:  name of row
// out: parent id of row
function getParent (myrow) {
	if (myrow == "")
		return "";
	/*return myrow.split("_")[1];
	*/
	var returnval = document.getElementById(myrow).getAttribute("parent");
//	alert(returnval);
	if (returnval)
		return returnval;
	else
		return "";
}

// getOrder ()
// in:  name of row
// out: parent id of row
function getOrder (myrow) {
	if (myrow == "")
		return "";
/*	return myrow.split("_")[2];*/
	var returnval = document.getElementById(myrow).getAttribute("order");	
	if (returnval)
	{
		return returnval;
	}
	else
	{
		return "";
	}
}

// doHoverCheck ()
// in:  name of table row to (possibly) highlight
// out: highlights row if necessary
function doHoverCheck (obj) {
//	alert("movingmouse");
//	window.status = (document.getElementById(obj).order);
	if (isDragging && obj != originalTR && getParent (obj) == getParent(originalTR)) {
			
			var objTR = document.getElementById(obj);
			var boolIsParent = false;
			if (objTR.parentNode.firstChild == objTR)
				boolIsParent = true;
			
			if (boolIsParent && getOrder(obj) > getOrder(originalTR))
				objTR = objTR.parentNode.lastChild;	
			for ( var i = 0; i < objTR.childNodes.length; i++)
			{
				if (getOrder(obj) < getOrder(originalTR) )
				{
//					objTR.childNodes[i].style.borderTop = "1px solid black";
					objTR.childNodes[i].className = "blacktopline";
				} else {
//					objTR.childNodes[i].style.borderBottom = "1px solid black";
					objTR.childNodes[i].className = "blackbottomline";
				}

				objTR.childNodes[i].style.cursor = "move";	
			}
			
		currentTR = obj;
	}
	return true;
}
	
// doUnHoverCheck ()
// in:  name of table row to (possibly) unhighlight
// out: unhighlights row if necessary
function doUnHoverCheck (obj) {

	// if mouse is down, we are now dragging
	if (isMouseDown && !isDragging) {
		isDragging = 1;
		originalTR = obj;
	}

	if (isDragging) {

		var objTR = document.getElementById(obj);
		var boolIsParent = false;
		if (objTR.parentNode.firstChild == objTR)
			boolIsParent = true;
		
		if (boolIsParent && getOrder(obj) > getOrder(originalTR))
		{
			
			objTR = objTR.parentNode.lastChild;
		}
		for ( var i = 0; i < objTR.childNodes.length; i++)
		{
			//objTR.childNodes[i].style.borderBottom = "1px solid silver";
			//objTR.childNodes[i].style.borderTop = "1px solid #CCCCCC";
			objTR.childNodes[i].className = "movebottomline";
			objTR.childNodes[i].style.cursor = "";	
		}
	}

	currentTR = "";
	//window.status = "moving" + obj;
	return true;
}

// doWatchMouse () 
// in:  nothin'
// out: turns on a flag when mouse is clicked inside a row
function doWatchMouse () {
	//alert("watching mouse");
	//window.status = "Watching Mouse";
	isMouseDown = 1;
	return true;
}

function moveElement(srcElement, to, before)
// in:  srcElement (ElementNode)
// 	to (ElementNode)
//	before (bool)
// out : element moved to a new location
/* Created by Michael P. Schmidt to move one element "srcElement" 
	before or after (true |  false ) another element "to"
    this will be used mainly for moving Table Rows or Table Bodies 
    but can be used for almost any element.
  if an element is moved to another element it isn't supposed to be inside it may disapear.
*/
{
  if (before)
  {
   // InsertBefore will remove the "srcElement" on insertion
   //	alert(to.parentNode.innerHTML);
   to.parentNode.insertBefore(srcElement, to);
   } else {
   // if there is a sibbling after the to object then insertBefore that sibling else don't
     if (to.nextSibling)
     {
        to.parentNode.insertBefore(srcElement, to.nextSibling);
     } else {
     // appendChild will remove the "srcElement" on the append
        to.parentNode.appendChild(srcElement);
     }
  }	
}

// clearMouse ()
// in:  nothin'
// out: resets the isMouseDown flag
function clearMouse () {
	if (currentTR != originalTR && getParent (currentTR) == getParent(originalTR)) {		
		var boolIsParent = true;
		if ( getParent(originalTR) != "")
		{
			boolIsParent = false;
		}
		var new_currentTR = currentTR;
		var new_originalTR = originalTR;


		var oCurrentTR = document.getElementById(new_currentTR);
		var oOriginalTR = document.getElementById(new_originalTR);
		var before = false;
		if (getOrder(new_originalTR) > getOrder(new_currentTR) )
		{
			before = true;
		} 

		if ( !(oCurrentTR && oOriginalTR) )
		{
			isDragging = 0;
			isMouseDown = 0;
			currentTR = "";
			originalTR = "";
			return			
		}
		
		if (boolIsParent)
		{
			// insert the current TBodies before the other one
			var objCurrentTBody = oCurrentTR.parentNode;
			var objOriginalTBody = oOriginalTR.parentNode;
			var objParent = oCurrentTR.parentNode.parentNode;
			moveElement(objOriginalTBody, objCurrentTBody, before);
		} else {		
			moveElement(oOriginalTR, oCurrentTR, before);
		}
		
		
		doUnHoverCheck (new_currentTR);
		
/* ReOrder Items by looping over all the children of the parent Node */
		if (boolIsParent)
		{
			var objToReorder = oCurrentTR.parentNode.parentNode;
			for ( var i = 1; i < objToReorder.childNodes.length; i++)
			{
				//var currentVal = getID (objToReorder.childNodes[i].firstChild.id) + "_" + getParent(objToReorder.childNodes[i].firstChild.id) + "_" + (i);				
				if (objToReorder.childNodes[i].firstChild)
				{
					objToReorder.childNodes[i].firstChild.setAttribute("order", i);	
				}
				//alert(objToReorder.childNodes[i].firstChild.outerHTML);				
//				objToReorder.childNodes[i].firstChild.id = currentVal;				
			}
		} else {
			 var objToReorder = oCurrentTR.parentNode;
			for ( var i = 1; i < objToReorder.childNodes.length; i++)
			{
//				var currentVal = getID (objToReorder.childNodes[i].id) + "_" + getParent(objToReorder.childNodes[i].id) + "_" + (i);
				//objToReorder.childNodes[i].id = currentVal;
				objToReorder.childNodes[i].setAttribute("order", i);	
			}			 
		}
		
		// document.body.innerHTML = document.body.innerHTML;

		var id = getID(oOriginalTR.id);			
		var order = getOrder(oOriginalTR.id);
		var parentID = getParent(oOriginalTR.id);
	//	alert(oOriginalTR.getAttribute("parent"));
/*		try
		{
			KnowledgeNetChangeOrder(Id, parentId, order);
		} catch(e) {
			alert("(Development Error) Function KnowledgeNetChangeOrder must be defined!");
		}*/
		//alert(order);
		KnowledgeNetChangeOrder(id, parentID, order);
		/*
			if Parent
				Currenttr.parentNode.parentNode
				loop over all children	
				{
					and change order id to i = 1 ... last child
				}
			else 
				CurrentTr.parentNode
				loop over all children
				{
					and change order id to i = 1 ... last child
				}
			end if
		
		
		
		*/
	// Function to update  passing in CurrentItem and NewLoc
	}
	isDragging = 0;
	isMouseDown = 0;
	currentTR = "";
	originalTR = "";
}


function zapMoves () {
	//window.status = "Clear Mouse" + new Date();
	return false;
}

function isAncestor(srcElement, parent)
{
	
	try
	{
		objElement = srcElement;
		while (objElement && objElement != window )
		{
			if (objElement == parent) 
				return true;
			else 
				objElement = objElement.parentNode;
		}
	} catch (e)
	{
		window.status = e;
	}
	return false;
}

function zap2Moves()
{
	try 
	{
//	return true;
	isInside = isAncestor(event.srcElement, document.getElementById("itemList"));
	if (isInside)
	{
			if ( event.y < 20 ) 
			{
				window.scrollBy(0, -10);
			}
			
			if ( ( event.y + 40 ) > document.body.offsetHeight )
			{
				window.scrollBy(0, 10);
			}
			return false;
	} else if (isDragging == 1)	{
			if ( event.y < 20 ) 
			{
				window.scrollBy(0, -10);
			}
			
			if ( ( event.y + 40 ) > document.body.offsetHeight )
			{
				window.scrollBy(0, 10);
			}
			return false;
	}	else 	{
		return true;
	}	
	} catch (e)
	{
		return true;
	}

}

document.onmousemove = zap2Moves;

document.onmouseup = clearMouse;
/****************************************************************
document.onmousemove = zapMoves;

***************************************************************/


