var oldGanttImages=false;
var ganttDragActive=false;
var ganttDragSourceRow=0;
var ganttDragSourceColumn=0;
var ganttBarStartIndex=0;
var ganttBarEndIndex=0;
var ganttBarLength=0;
var ganttShadowStart=0;
var ganttShadowEnd=0;
var ganttDragOffset=0;
var dragRowTolerance=2;
var firstValidGanttDragRow=1;
function ganttDragStart()
{
	var clickedCell=getParentTableCell(event.srcElement);
	var clickedRow=getParentWithTagName(clickedCell, "TR");
	if (clickedRow.getAttribute("dragDisabled")=="true")
	{
		ganttDragActive=false;
		event.returnValue=false;
		return;
	}
	ganttDragSourceColumn=clickedCell.cellIndex;
	ganttDragSourceRow=clickedRow.rowIndex;
	getGanttBarMetricsForThisRow(clickedRow);
	if ((ganttDragSourceColumn>=ganttBarStartIndex)&&(ganttDragSourceColumn<=ganttBarEndIndex))
	{
		ensureTransparentDragImageChildren(clickedRow);
		ganttDragActive=true;
		event.returnValue=true;
	}
	else
	{
		ganttDragActive=false;
		event.returnValue=false;
	}
}
function ganttDragEnter()
{
	if (ganttDragActive==false)
	{
		return false;
	}
	var clickedCell=getParentTableCell(event.srcElement);
	var clickedRow=getParentWithTagName(clickedCell, "TR");
	currentColumnIndex=clickedCell.cellIndex;
	currentRowIndex=clickedRow.rowIndex;
	var ganttDragSourceRowObject=getParentWithTagName(clickedRow, "TABLE").rows[ganttDragSourceRow];
	if (Math.abs(currentRowIndex-ganttDragSourceRow)>dragRowTolerance || currentRowIndex < firstValidGanttDragRow )
	{
		restoreOriginalGanttBar(ganttDragSourceRowObject);
		return false;
	}
	ganttDragOffset=currentColumnIndex - ganttDragSourceColumn;
	drawGanttDisplaced(ganttDragSourceRowObject, ganttDragOffset);
}
function ganttDrop(offsetControl, tpIdControl, startControl, finishControl, submitCommand)
{
	if (ganttDragActive==false)
	{
		return;
	}
	var clickedCell=getParentTableCell(event.srcElement);
	var clickedRow=getParentWithTagName(clickedCell, "TR");
	currentColumnIndex=clickedCell.cellIndex;
	currentRowIndex=clickedRow.rowIndex;
	var ganttDragSourceRowObject=getParentWithTagName(clickedRow, "TABLE").rows[ganttDragSourceRow];
	if (Math.abs(currentRowIndex-ganttDragSourceRow)>dragRowTolerance || currentRowIndex < firstValidGanttDragRow || ganttDragOffset==0)
	{
		restoreOriginalGanttBar(ganttDragSourceRowObject);
		return;
	}
	var tpId=ganttDragSourceRowObject.getAttribute("tpId");
	var originalTaskStartDate=ganttDragSourceRowObject.getAttribute("originalTaskStartDate");
	var originalTaskFinishDate=ganttDragSourceRowObject.getAttribute("originalTaskFinishDate");
	offsetControl.innerText=ganttDragOffset;
	tpIdControl.innerText=tpId;
	startControl.innerText=originalTaskStartDate;
	finishControl.innerText=originalTaskFinishDate;
	eval(submitCommand);
}
function ganttDragEnd()
{
	if (ganttDragActive==false)
	{
		return;
	}
	var sourceRow=getParentWithTagName(event.srcElement, "TR");
	ganttDragActive=false;
}
function getParentWithTagName(sourceObject, objectTagName)
{
	var currentObject=sourceObject;
	while (currentObject !=null && currentObject.tagName !=objectTagName)
	{
		currentObject=currentObject.parentElement;
	}
	return currentObject;
}
function getParentTableCell(sourceObject)
{
	var currentObject=sourceObject;
	while (currentObject !=null && currentObject.tagName !="TD" && currentObject.tagName !="TH")
	{
		currentObject=currentObject.parentElement;
	}
	return currentObject;
}
function getGanttBarMetricsForThisRow(row)
{
	var ganttFoundStart=false;
	var ganttFoundEnd=false;
	for (var i=0; i<row.cells.length; i++)
	{
		var currentCell=row.cells(i);
		if (currentCell.firstChild!=null && currentCell.firstChild.tagName=="IMG")
		{
			if (ganttFoundStart==false)
			{
				ganttBarStartIndex=i;
				ganttFoundStart=true;
			}
		}
		else
		{
			if ((ganttFoundStart==true)&&(ganttFoundEnd==false))
			{
				ganttBarEndIndex=i-1;
				ganttFoundEnd=true;
				break;
			}
		}
		if (ganttFoundEnd==false)
		{
			ganttBarEndIndex=i-1;
		}
		ganttBarLength=ganttBarEndIndex - ganttBarStartIndex+1;
	}
}
function getChildWithClassName(object, className)
{
	for (var i=0; i < object.children.length; i++)
	{
		if (object.children(i).className==className)
		{
			return object.children(i);
		}
	}
	return;
}
function drawGanttDisplaced(row, offset)
{
	for (var i=1; i < row.cells.length; i++)
	{
		var currentCell=row.cells(i);
		var currentTransparentImageCell=getChildWithClassName(currentCell, "ms-ganttTransparentImage");
		currentTransparentImageCell.style.visibility="hidden";
		sourceCellOffset=i - offset;
		if (sourceCellOffset > 0 && sourceCellOffset < row.cells.length)
		{
			var sourceImage=getChildWithClassName(row.cells(sourceCellOffset),"ms-ganttNonTransparentImage");
			if (sourceImage !=null)
			{
				currentTransparentImageCell.src=sourceImage.src;
				currentTransparentImageCell.style.visibility="visible";
			}
		}
	}
}
function ensureTransparentDragImageChildren(row)
{
	if (row.cells.length > 1)
	{
		var imageTop=row.cells(1).offsetTop+(row.cells(1).offsetHeight - 20) / 2;
		for (var i=1; i < row.cells.length; i++)
		{
			var cellHasTransparentImage=false;
			var cellHasNonTransparentImage=false;
			var currentCell=row.cells(i);
			var currentImage=null;
			for (var ii=0; ii < currentCell.children.length; ii++)
			{
				var oCurrentObject=currentCell.children.item(ii);
				if (oCurrentObject.tagName=="IMG")
				{
					if (oCurrentObject.className=="ms-ganttTransparentImage")
					{
						cellHasTransparentImage=true;
					}
					else if (oCurrentObject.className=="ms-ganttNonTransparentImage")
					{
						cellHasNonTransparentImage=true;
						currentImage=oCurrentObject;
					}
				}
			}
			if (cellHasTransparentImage==false)
			{
				var oTransparentImage=document.createElement("IMG");
				oTransparentImage.className="ms-ganttTransparentImage";
				oTransparentImage.style.position="absolute";
				oTransparentImage.style.top=imageTop;
				if (cellHasNonTransparentImage==true)
				{
					oTransparentImage.style.left=currentImage.offsetLeft;
				}
				oTransparentImage.style.visibility="hidden";
				currentCell.appendChild(oTransparentImage);
			}
		}
	}
}
function restoreOriginalGanttBar(row)
{
	for (var i=1; i < row.cells.length; i++)
	{
		var currentCell=row.cells(i);
		getChildWithClassName(currentCell,"ms-ganttTransparentImage").style.visibility="hidden";
	}
}


