﻿/////////////////////////////////////////
// *** OCFrontEnd version 5.2.3005.0 ***
/////////////////////////////////////////

var rm_PL_Focused;
var rm_PL_ToolHovered;
var rm_PL_RowHovered;
var rm_PL_RowSelected;


function RM_ProjectListKeyDown(pEvent)
{
	if(pEvent.keyCode == 38  ||  pEvent.keyCode == 40) // up/down arrow
	{
		var rowElem;
		if(rm_PL_Focused)
		{
			rowElem = RM_FindAncestor(rm_PL_Focused, "tr");
		}
		else
		{
			rowElem = rm_PL_RowHovered;
		}

		if(rowElem)
		{
			var rowSibling;
			switch(pEvent.keyCode)
			{
				case 38: // up arrow
					rowSibling = RM_FindSiblingPrevious(rowElem, rowElem.nodeName);
					break;
				case 40: // down arrow
					rowSibling = RM_FindSiblingNext(rowElem, rowElem.nodeName);
					break;
			}

			if(rowSibling)
			{
				var toFocus = RM_FindDescendantByCustomName(rowSibling,
					(rm_PL_Focused ? rm_PL_Focused.name : (rm_PL_ToolHovered ? rm_PL_ToolHovered.name : "RM_PL_AncBullet")));
				if(toFocus)
				{
					RM_TryFocus(toFocus);
				}
			}
		}
		return RM_CancelEventDefault(pEvent); // to prevent the vertical scrollbar from catching the event
	}
}

function RM_ProjectListFocus(pElem, pOver)
{
	if(pOver)
	{
		rm_PL_Focused = pElem;
	}
	else
	{
		if(rm_PL_Focused == pElem)
		{
			rm_PL_Focused = null;
		}
	}

	var rowElem = RM_FindAncestor(pElem, "tr");
	if(pOver  ||  rowElem != rm_PL_RowHovered) // (preserve selection if focus leaving the moused row)
	{
		RM_ProjectListMarkRow(rowElem, pOver);
	}
}


function RM_ProjectListHoverTool(pElem, pOver)
{
	if(pOver)
	{
		rm_PL_ToolHovered = pElem;
	}
	else
	{
		if(rm_PL_ToolHovered == pElem)
		{
			rm_PL_ToolHovered = null;
		}
	}
	RM_ProjectListHover(pElem, pOver);
}

function RM_ProjectListHover(pElem, pOver)
{
	var cellElem = RM_FindAncestor(pElem, "td");
	var rowElem = RM_FindAncestor(cellElem, "tr");

	if(pOver)
	{
		rm_PL_RowHovered = rowElem;
	}
	else
	{
		if(rm_PL_RowHovered == rowElem)
		{
			rm_PL_RowHovered = null;
		}
	}

	var cellFocus; var rowFocus;
	if(rm_PL_Focused)
	{
		cellFocus = RM_FindAncestor(rm_PL_Focused, "td");
		rowFocus = RM_FindAncestor(cellFocus, "tr");
	}

	if(pOver  ||  rowElem != rowFocus) // (preserve selection if mouse leaving the focused row)
	{
		RM_ProjectListMarkRow(rowElem, pOver);
	}

	if(pOver)
	{
		if(rm_PL_Focused  &&  cellElem != cellFocus) // focus is set, mouse over non-focused cell
		{
			var mToBlur = rm_PL_Focused;
			RM_TryBlur(mToBlur);
			if(rm_PL_Focused == mToBlur) // not changed by any "onblur" handler
			{
				rm_PL_Focused = null;
			}
		}

		if( ! rm_PL_Focused)
		{
			var blindName;
			if(rm_PL_ToolHovered)
			{
				blindName = rm_PL_ToolHovered.name + "_Blind";
			}
			else
			{
				blindName = "RM_PL_AncBullet_Blind";
			}
			RM_TryFocus(RM_FindDescendantByCustomName(rowElem, blindName)); // make the table able to receive keystrokes like up/down arrows, and set starting point for subsequent TAB
		}
	}
}

function RM_ProjectListMarkRow(rowElem, pOver)
{
	if(pOver)
	{
		if(rm_PL_RowSelected  &&  rowElem != rm_PL_RowSelected)
		{
			RM_InnerHover(rm_PL_RowSelected, false);
			rm_PL_RowSelected = null;
		}

		if( ! rm_PL_RowSelected)
		{
			RM_InnerHover(rowElem, true);
			rm_PL_RowSelected = rowElem;
		}
	}
	else
	{
		RM_InnerHover(rowElem, false);
		if(rm_PL_RowSelected == rowElem)
		{
			rm_PL_RowSelected = null;
		}
	}

	function RM_InnerHover(pInnerRow, pInnerOver)
	{
		if(pInnerRow  &&  pInnerRow.childNodes)
		{
			var mChild;
			for(var i=0; i<pInnerRow.childNodes.length; i++)
			{
				mChild = pInnerRow.childNodes[i];
				if(mChild.nodeType == 1) // Element node
				{
					if(mChild.nodeName  &&  mChild.nodeName.toLowerCase() == "td")
					{			
						eval("mChild."
							+ (pInnerOver ? RM_InlineStyle_ProjectListHover_On : RM_InlineStyle_ProjectListHover_Off )
							+ ";");
						// applying ".style. ...", not "className", because of bad performance of "className" for more than 1000 rows in IE
					}
				}
			}
		}
	}
}


function RM_DeleteProject(projectID)
{
	if(com_resultmaker_CanOpenLink)
	{
		if(confirm(com_resultmaker_AskIfDeleteProject))
		{
			com_resultmaker_CanOpenLink = false;
			com_resultmaker_Form.elements["NextAction"].value = "DeleteProject";
			var mElem = com_resultmaker_Form.elements["RM_DeleteProjectID"];
			mElem.value = projectID;
			mElem.disabled = false;
			com_resultmaker_Form.submit();
		}
	}
}

function RM_StartProject(OriginalSource, prefillSourceProjectID) // prefillSourceProjectID is optional
{
	if(com_resultmaker_CanOpenLink)
	{
		com_resultmaker_CanOpenLink = false;
		com_resultmaker_Form.elements["NextAction"].value = "StartProject";
		com_resultmaker_Form.elements["StartProjectSource"].value = OriginalSource;
		if(prefillSourceProjectID  &&  prefillSourceProjectID > 0)
		{
			var mElem = com_resultmaker_Form.elements["RM_PrefillSourceProjectID"];
			mElem.value = prefillSourceProjectID;
			mElem.disabled = false;
		}
		com_resultmaker_Form.submit();
	}
}

function RM_StartProjectCell(OriginalSource, pEvent)
{
	RM_CancelEventDefault(pEvent); // block default action on "<a>"
	RM_StartProject(OriginalSource);
	return false;
}

function RM_StartWithPrefill(OriginalSource, prefillSourceProjectID)
{
	RM_StartProject(OriginalSource, prefillSourceProjectID);
}


function RM_ResumeProject(projectID)
{
	if(com_resultmaker_CanOpenLink)
	{
		com_resultmaker_CanOpenLink = false;
		com_resultmaker_Form.elements["NextAction"].value = "ResumeProject";
		var mElem = com_resultmaker_Form.elements["RM_ResumeProjectID"];
		mElem.value = projectID;
		mElem.disabled = false;
		com_resultmaker_Form.submit();
	}
}

function RM_ResumeProjectCell(projectID, pEvent)
{
	RM_CancelEventDefault(pEvent); // block default action on "<a>"
	RM_ResumeProject(projectID);
	return false;
}


function RM_CloneProject(projectID)
{
	if(com_resultmaker_CanOpenLink)
	{
		com_resultmaker_CanOpenLink = false;
		com_resultmaker_Form.elements["NextAction"].value = "ResumeFromClone";
		var mElem = com_resultmaker_Form.elements["RM_ResumeProjectID"];
		mElem.value = projectID;
		mElem.disabled = false;
		com_resultmaker_Form.submit();
	}
}


function RM_OpenPending(pUrl)
{
	if(com_resultmaker_CanOpenLink)
	{
		com_resultmaker_CanOpenLink = false;
		window.open(pUrl, "_self", null, false);
	}
}

function RM_OpenPendingCell(pUrl, pEvent)
{
	RM_CancelEventDefault(pEvent); // block default action on "<a>"
	RM_OpenPending(pUrl);
	return false;
}


// project menu functions:

function RM_ProjectListMenuClick(pItem)
{
	if(com_resultmaker_CanOpenLink)
	{
		com_resultmaker_CanOpenLink = false;
		var sNextAction = "";
		if(pItem)
		{
			sNextAction = "ProjectList";
			com_resultmaker_Form.elements["RM_ProjectListType"].value = pItem;
			com_resultmaker_Form.elements["StartProjectSource"].value = "";
			com_resultmaker_Form.elements["RM_ProjectListPageNumber"].value = "1";
		}
		else // current project
		{
			sNextAction = "GetNextActivity";
		}
		com_resultmaker_Form.elements["NextAction"].value = sNextAction;
		com_resultmaker_Form.submit();
	}
}

function RM_ProjectListGoPage(pPageNum)
{
	if(com_resultmaker_CanOpenLink)
	{
		com_resultmaker_CanOpenLink = false;
		com_resultmaker_Form.elements["RM_ProjectListPageNumber"].value = pPageNum;
		com_resultmaker_Form.elements["NextAction"].value = "ProjectList";
		com_resultmaker_Form.submit();
	}
}

function RM_ProjectListSortBy(pName)
{
	if(com_resultmaker_CanOpenLink)
	{
		com_resultmaker_CanOpenLink = false;
		var elSortBy = com_resultmaker_Form.elements["RM_ProjectListSortBy"];
		elSortBy.value = pName;
		elSortBy.disabled = false;
		com_resultmaker_Form.submit();
	}
}

function RM_OpenProjectStartDataSelector(appName, PickerURL)
{
	var fieldMapString = "RM_DataSelector_ProjectToStart|UnitID|";
	try
	{
		var adjustedUrl = RM_GetUrlWithProperProtocol(PickerURL);
		RunDataSelector(adjustedUrl, appName, fieldMapString, 780, 580);
	}
	catch(e)
	{
		if(RM_JavaScriptDebug)
		{
			alert("Alert for the form designer:\n\n"
					+ "Error opening DataSelector in RM_OpenProjectStartDataSelector():\n"
					+ e.description);
		}
	}
}

function RM_StartProjectFromPicker()
{
	var mElem = document.getElementById("RM_DataSelector_ProjectToStart");
	if(mElem  &&  mElem.value  &&  mElem.value.length > 0)
	{
		RM_StartProject(mElem.value);
	}
}

