/*--- Created by GeoNorth, LLC -----------------------------
************************************************************
This template is part of the Project Database code base.
************************************************************
 
FileName: functions_projectdb.js

Purpose:  Provides JavaScript single form processing 
           functions.

Revision History
Date        By             Description  
08/17/2001  GeoNorth, LLC  Initial Coding
  
Copyright © 2002-2004 Denali Commission.

**********************************************************/

var isSaving = false;

function getObjectByName( which ) {
	if ( !document.getElementById | document.all ) {
		return null;
	}	else {
		if ( document.getElementById ) {
			return eval( "document.getElementById('" + which + "')" );
		}	else {
			return eval ("document.all." + which);
		}
	}
}

function hide( which ) {
	oWhich = getObjectByName( which );

	if ( oWhich != null ) {
		window.focus();
		oWhich.style.display = "none";
	}
}

function show( which ) {
	oWhich = getObjectByName( which );

	if ( oWhich != null ) {
		window.focus();
		oWhich.style.display = "";
	}
}

function hideshow( which ) {
	oWhich = getObjectByName( which );

	if ( oWhich != null ) {
		if ( isVisible( oWhich ) ) {
			hide( which );
		}	else {
			show( which );
		}
	}
}

function isVisible( oWhich ) {
	return ( oWhich.style.display != "none" );
}

function toggleChild(expandImgPath, collapseImgPath, srcImg, which) {
	oWhich = getObjectByName( which );

	if ( oWhich != null ) {
		if ( isVisible( oWhich ) ) {
			hide( which );
			srcImg.src = collapseImgPath;
		}	else {
			srcImg.src = expandImgPath;
			show( which );
		}
	}		
}

function toggleContactDetail(imageID, detailID) {
  toggleChild('Images/icon-Expanded.gif', 'Images/icon-Collapsed.gif', imageID, detailID);
}

function IsSaving()
{
	isSaving = true;
}
function IsNotSaving()
{
	isSaving = false;
}
function PromptForSave(nestedTemplate)
{
	el = document.activeElement;
	if(el)
		if(el.id.toLowerCase().substr(0,3)=='top' && el.skipValidate == 'Y') return;
	
	var retCode;
	
	switch (nestedTemplate)
	{
		// The following forms are currently being checked for unsaved changes or unnecessary saves
		
		// Admin screens
		case 'dsp_frm_settings.cfm':
		case 'dsp_frm_communities.cfm':
		case 'dsp_frm_contacts.cfm':
		case 'dsp_frm_users.cfm':
		case 'dsp_frm_default_milestones.cfm':
		case 'dsp_frm_events.cfm':		
		case 'dsp_frm_fundingsources.cfm':
		case 'dsp_frm_lookupvalues.cfm':
		case 'dsp_frm_resolutions.cfm':
		case 'dsp_frm_tablesids.cfm':
		case 'dsp_frm_userattributes.cfm':
		case 'dsp_frm_usersubclass.cfm':		
		
		// Project screens
		case 'dsp_frm_project.cfm':
		case 'dsp_frm_projectattachments.cfm':
		case 'dsp_frm_projectcontacts.cfm':
		case 'dsp_frm_projectdrawdowns.cfm':
		case 'dsp_frm_projectfunding.cfm':
		case 'dsp_frm_projectmilestones.cfm':
		case 'dsp_frm_projectnotes.cfm':		
		case 'dsp_frm_projectnotesattachments.cfm':
		case 'dsp_frm_recipientreporting.cfm': 
		case 'dsp_frm_recipientreportlist.cfm': 
		case 'dsp_frm_reportingschedule.cfm': 
		case 'dsp_frm_projectstatus.cfm': 
		case 'dsp_frm_projectworkforce.cfm':

		// AWSC-specific screens
		case 'dsp_frm_fundingcontacts.cfm':
		case 'dsp_frm_grantors.cfm':
		case 'dsp_frm_program.cfm':
		case 'dsp_frm_programattachments.cfm':
		case 'dsp_frm_programcontacts.cfm':
		case 'dsp_frm_programtdrawdowns.cfm':
		case 'dsp_frm_programgrants.cfm':
		case 'dsp_frm_programnotes.cfm':		
		case 'dsp_frm_programnotesattachments.cfm':
		case 'dsp_frm_programstatus.cfm': 
			break;
		default:
			return
	}
	
	if (isSaving == false)
	{
		if (document.forms.length && isNaN(retCode = ValidateForm()))
		{
			window.event.returnValue = retCode + '...Any unsaved data will be lost!';				
		}
		else if (retCode == 1)
		{
			window.event.returnValue = 'Any unsaved data will be lost!';			
		}
	}
}
function IsModified(controlType, controlID)
{
	switch (controlType)
	{
		case 'input' :
		case 'textarea' :
			if (GetDefaultFormValue(controlID) != GetFormValue(controlID))
			{
				//alert(GetDefaultFormValue(controlID) + ' != ' + GetFormValue(controlID));
				return true;
			}													
			break;
		case 'inputwquote' :
			if (GetDefaultFormValue(controlID).replace('/&quot;/g', '"') != 
				  GetFormValue(controlID).replace('/&quot;/g', '"'))
			{
				//alert(GetDefaultFormValue(controlID).replace('/&quot;/g', '"') + ' != ' + 
				//  GetFormValue(controlID).replace('/&quot;/g', '"'));
				return true;
			}													
			break;
		case 'select' :
			if (GetFormValue('default_' + controlID) != GetSelectedFormValue(controlID))
			{
				//alert(controlID + '  ' + GetFormValue('default_' + controlID) + ' != ' + GetSelectedFormValue(controlID));
				return true;
			}
			break;
		case 'multiselect' :
			if (GetFormValue('default_' + controlID) != GetMultiSelectedFormValue(controlID))
			{
				//alert(GetFormValue('default_' + controlID) + ' != ' + GetMultiSelectedFormValue(controlID));
				return true;
			}
			break;
		case 'checkbox' :
			if (GetFormChecked(controlID) != GetFormDefaultChecked(controlID))
			{
				//alert(GetFormChecked(controlID) + ' != ' + GetFormDefaultChecked(controlID));
				return true;
			}													
			break;
		case 'yesno' : // A Y/N checkbox with Y as the checked value
			if (GetFormValue('default_' + controlID) != GetFormYesNo(controlID))
			{
				//alert(GetFormValue('default_' + controlID) + ' != ' + GetFormYesNo(controlID));
				return true;
			}													
			break;
		case 'file' : 
			if (GetFormValue('default_' + controlID) != GetFormValue(controlID))
			{
				//alert(GetFormValue('default_' + controlID) + ' != ' + GetFormValue(controlID));
				return true;
			}													
			break;
		default :
			alert('IsModified(): Undefined data type, ' + controlType + '!');
	}
} 
function notDefault(sel, str)
{
	if (sel.options[sel.selectedIndex].value == '?')
	{
		alert(str + ' needs to be selected');
		return false;
	}
	else
	{
		return true;
	}
}		
function GetForm(formName)
{
	if (formName == null)
	{
		return document.forms[0];
	}
	else
	{
		return eval('document.forms["' + formName + '"]');		
	}
}
function SubmitForm(formName)
{
	GetForm(formName).submit();
}
function ResetForm(formName)
{
	GetForm(formName).reset();
}	
function SetAction(targetTemplate, formName)
{
	GetForm(formName).action = targetTemplate;
}
function SetFormFocus(controlID)
{
	GetControl(controlID).focus();
}
function GetFormControl(controlID, formName)
{
	var aForm = GetForm(formName);
	
	formControlID = 'aForm.' + controlID;
	formControl = eval(formControlID);
	return formControl;	
}
function GetFormValue(controlID, formName)
{
	return GetFormControl(controlID, formName).value;
}
function GetFormChecked(controlID, formName)
{
	return GetFormControl(controlID, formName).checked;
}
function GetFormDefaultChecked(controlID, formName)
{
	return GetFormControl(controlID, formName).defaultChecked;
}
function GetFormYesNo(controlID, formName)
{
	var control = GetFormControl(controlID, formName);
	if (control.checked == true)
	{
		return 'Y'
	}
	else
	{
		return 'N';
	}
}
function GetDefaultFormValue(controlID, formName)
{
	return GetFormControl(controlID, formName).defaultValue;
}
function GetSelectedFormValue(controlID, formName)
{
	var control = GetFormControl(controlID, formName);
	var selectedRow = control.selectedIndex;
	
	if (selectedRow >= 0)
	{
		return control.options[selectedRow].value;
	}
	else
	{
		return '';
	}
}	
function GetSelectedFormText(controlID, formName)
{
	var control = GetFormControl(controlID, formName);
	var selectedRow = control.selectedIndex;
	if (selectedRow >= 0)
	{
		return control.options[selectedRow].text;
	}
	else
	{
		return '';
	}
}	
function GetMultiSelectedFormValue(controlID, formName)
{
	var selectedList = '';
	var control = GetFormControl(controlID, formName);
	
	for (var i = 0; i < control.options.length; i++)
	{
		if (control.options[i].selected)
		{
			if (selectedList != '')
			{
				selectedList += ',';
			}
			selectedList += control.options[i].value;			
		}
	}
	return selectedList;
}	
function GetMultiSelectedFormText(controlID, formName)
{
	var selectedList = '';
	var control = GetFormControl(controlID, formName);
	
	for (var i = 0; i < control.options.length; i++)
	{
		if (control.options[i].selected)
		{
			if (selectedList != '')
			{
				selectedList += ',';
			}
			selectedList += control.options[i].text;			
		}
	}
	return selectedList;
}	
function SetSelectedFormValue(controlID, newValue, formName)
{
	var control = GetFormControl(controlID, formName);

	for (var i = 0; i < control.options.length; i++)
	{
		if (control.options[i].value == newValue)
		{
			control.options[i].selected = true;
			return i;
		}
	}
	return -1;
}	
function DisplayFormattedValue(displayType, controlID, formatBlank)
{
	var unformattedValue = GetFormValue(controlID);
	var formattedValue = "";
	
	if ((formatBlank == true) || (Trim(unformattedValue).length > 0))
	{
		if (displayType == "Date")
		{
			formattedValue = FormatDate(unformattedValue);
		}
		else if (displayType == "Integer")
		{
			formattedValue = FormatIntegerNoCommas(unformattedValue);
		}
		else if (displayType == "Integer w/Commas")
		{
			formattedValue = FormatInteger(unformattedValue);
		}
		else if (displayType == "Decimal")
		{
			formattedValue = FormatDecimalNoCommas(unformattedValue);
		}
		else if (displayType == "Decimal w/Commas")
		{
			formattedValue = FormatDecimal(unformattedValue);
		}
		else if (displayType == "Currency")
		{
			formattedValue = "$" + FormatDecimalNoCommas(unformattedValue);
		}
		else if (displayType == "Currency w/Commas")
		{
			formattedValue = "$" + FormatDecimal(unformattedValue);
		}
		else 
		{
			alert("Invalid Display Type: " + displayType + ".");
			return false;
		}
	}
	SetFormValue(controlID, formattedValue);
	return true;
}
function FormatDate(passedDate)
{
	var dateString = '';
	var tempDate = new Date();
	
	if (passedDate != '')
	{
		if (GetListLen(passedDate, "/") == 2)
		{
	  	passedDate += ('/' + tempDate.getFullYear());
		}
		var dateValue = new Date(passedDate);
		if (!isNaN(dateValue))
		{
			var tempYear = tempDate.getFullYear();
			var dateYear = dateValue.getFullYear();
			if ((tempYear - dateYear) > 50)
			{
				dateValue = new Date(tempYear.toString().substr(0, 2) + dateYear.toString().substr(2, 2), dateValue.getMonth(), dateValue.getDate());
			}
		}
		if ((!isNaN(dateValue.getMonth())) && (!isNaN(dateValue.getDate())) && (!isNaN(dateValue.getFullYear())))
		{
			dateString = FormatZeroPadded((dateValue.getMonth() + 1), 2);
		  dateString += ('/' + FormatZeroPadded(dateValue.getDate(), 2));
	  	dateString += ('/' + dateValue.getFullYear());
		}
		else if ((!isNaN(dateValue.getMonth())) && (!isNaN(dateValue.getDate())))
		{
			dateString = FormatZeroPadded((dateValue.getMonth() + 1), 2);
		  dateString += ('/' + FormatZeroPadded(dateValue.getDate(), 2));
	  	dateString += ('/' + tempDate.getFullYear());
		}
	}
	return dateString;
}
function FormatZeroPadded(num, digits)
{
	var newNum = String(num);
	while (newNum.length < digits)
	{
		newNum = '0' + newNum;
	}
	return newNum;
}
function FormatDecimal(num) 
{
	var newNum = FormatDecimalNoCommas(num);
	var cents = '00';
	if (GetListLen(newNum, '.') > 1)
	{
		cents = GetListLast(newNum, '.');
	}
	var sign = '';
	
	newNum = GetListFirst(newNum, '.');
	if (newNum.substring(0, 1) == '-')
	{
		sign = '-';
		newNum = newNum.substring(1);
	}

	for (var i = 0; i < Math.floor((newNum.length - (1 + i)) / 3); i++)
	{
		newNum = newNum.substring(0, newNum.length - (4 * i + 3)) + ',' + newNum.substring(newNum.length - (4 * i + 3));
	}
	if (newNum.substring(0, 1) == ',')
	{
		newNum = newNum.substring(1);
	} 
	return (sign + newNum + '.' + cents);
}  
function FormatDecimalNoCommas(num) 
{
	var newNum = num.toString().replace(/\$|\%|\,/g,'');
	var cents;
	
	if (isNaN(newNum))
	{
		newNum = '0';
		sing = 1;
	}
	else if (newNum < 0)
	{
		sign = -1;
	}
	else
	{
		sign = 1;
	}
	newNum = newNum * sign; // Convert number to positive
	cents = Math.round(newNum * 100) % 100;
	newNum = ((Math.round(newNum * 100) - cents)/ 100).toString();
	if (cents < 10)
	{ 
		cents = '0' + cents.toString();
	}
	else
	{
		cents.toString();
	}
	return (sign * (newNum + '.' + cents));
}  	
function FormatInteger(num, roundTo)
{
	var newNum = FormatIntegerNoCommas(num, roundTo);
	var sign = '';
	
	if (newNum.substring(0, 1) == '-')
	{
		sign = '-';
		newNum = newNum.substring(1);
	}
	for (var i = 0; i < Math.floor((newNum.length - (1 + i)) / 3); i++)
	{
		newNum = newNum.substring(0, newNum.length - (4 * i + 3)) + ',' + newNum.substring(newNum.length - (4 * i + 3));
	}
	return (sign + newNum);
}
function FormatIntegerNoCommas(num, roundTo)
{
	var newNum = num.toString().replace(/\$|\%|\,/g,'');
	
	if (isNaN(newNum))
	{
		newNum = '0';
	}
	else
	{
		if ((isNaN(roundTo)) || (roundTo == null))
		{
			roundTo = 1;
		}
		newNum = String(Math.round(newNum / roundTo) * roundTo);
	}
	return newNum.toString();
}
function SetFormValue(controlID, newValue, formName)
{
	GetFormControl(controlID, formName).value = newValue;
}
function SetFormYesNo(controlID, newValue, formName)
{
	GetFormControl(controlID, formName).checked = (newValue == 'Y');
}
function SetSelectedFormText(controlID, textValue, formName)
{
	var control = GetFormControl(controlID, formName);

	for (var i = 0; i < control.options.length; i++)
	{
		if (control.options[i].text == textValue)
		{
			control.options[i].selected = true;
			return i;
		}
	}
}
function GetTable(tableName)
{
	<!--- return eval('document.all.' + tableName); --->
	return document.getElementById(tableName);
}

function GetRowIndex(currentTableName, currentID)
{
	var currentTable = GetTable(currentTableName);
	
   for (var i = 0; i < currentTable.rows.length; i++) 
	{
		if (currentTable.rows[i].id == currentID)
		{
			return i;
		} 
   }
	return -1;
}	

function GetCell(currentTableName, currentRowIndex, currentID)
{
	var currentTable = GetTable(currentTableName);
		
   for (var i = 0; i < currentTable.rows[currentRowIndex].cells.length; i++) 
	{
		if (currentTable.rows[currentRowIndex].cells[i].id == currentID)
		{
			return currentTable.rows[currentRowIndex].cells[i];
		} 
   }
}

function SetCellValue(cellObject, newValue)
{
	cellObject.innerHTML = newValue;
}	

function SaveAll(leavePopup)
{
	var retCode = 0;
	
	if (isSaving == false)
	{
		ShowPopup();
		if (document.forms.length && isNaN(retCode = ValidateForm()))
		{
			ClosePopup();
			retCode = -1;				
		}
		else if (retCode == 1)
		{	
			IsSaving();
			SubmitForm();
		}
		else if (leavePopup == null)
		{
			ClosePopup();
		}
	}
	
	return retCode;
}

function ShowPopup(passedText, passedTitle, passedTimeout, passedWidth, passedHeight) 
{
  return;
	var text = passedText;
	var title = passedTitle;
	var timeout = passedTimeout;
	var width = passedWidth;
	var height = passedHeight;
	
	if (text == null) text = 'Please wait...';
	if (title == null) title = 'Processing';
	if (timeout == null) timeout = 0;
	if (width == null) width = 300;
	if (height == null) height = 100;
	
	var winLeft = (screen.width - width) / 2;
	var winTop = (screen.height - height) / 2;
	var winProps = 'height='+height+',width='+width+',top='+winTop+',left='+winLeft+',titlebar=no';

	syntax =  '<html>\n<head>\n<title>' + title + '</title>\n<body onBlur="javascript: window.focus();" style="cursor: wait;" bgcolor="LightGoldenrodYellow">\n';
	syntax += '<center>\n<br>';
	syntax += '<h2>' + text + '</h2>';
	syntax += '</center>\n</body>\n</html>\n';

	popupWindow = window.open('','popupWindow',winProps);
	popupWindow.document.write(syntax);
	popupWindow.focus();
	if ((timeout != null) && (timeout > 0))
	{
		var milliseconds = (timeout * 1000);
		
		setTimeout('ClosePopup()', milliseconds);	// delay before closing
	}
	return popupWindow;
}

function ClosePopup() 
{
	var winProps = 'height=0,width=0,top='+(screen.height-1)+',left='+(screen.width-1)+',titlebar=no';
	
	popupWindow = window.open('','popupWindow',winProps);
	popupWindow.close();
}
function GetListFirst(list, delimiter)
{
	return GetListAt(list, 1, delimiter);
}
function GetListLast(list, delimiter)
{
	return GetListAt(list, -1, delimiter);
}
function GetListAt(list, position, delimiter)
{
	var listAsArray = GetListAsArray(list, delimiter);
	
	if ((listAsArray.length > 0) && (position == -1))
	{
		return listAsArray[listAsArray.length - 1];
	}
	else if ((listAsArray.length > 0) && (listAsArray.length >= position))
	{
		return listAsArray[position - 1];
	}
	else
	{
		return '';
	}
}
function GetListRest(list, delimiter)
{
	var newList = '';
	var listAsArray = GetListAsArray(list, delimiter);
		
	for (var i = 1; i < listAsArray.length;i++)
	{
		newList += listAsArray[i];
		if (i != (listAsArray.length - 1))
		{
			newList += delimiter;
		}
	}
}	
function GetListContainsNoCase(list, searchString, delimiter)
{
	return GetListContains(list.toLowerCase(), searchString.toLowerCase(), delimiter);
}	
function GetListContains(list, searchString, delimiter)
{
	var listAsArray = GetListAsArray(list, delimiter);
		
	for (var i = 0; i < listAsArray.length;i++)
	{
		if (listAsArray[i].indexOf(searchString) >= 0)
		{
			return i + 1;
		}
	}
	return -1;
}	
function GetListFindNoCase(list, searchString, delimiter)
{
	return GetListFind(list.toLowerCase(), searchString.toLowerCase(), delimiter);
}	
function GetListFind(list, searchString, delimiter)
{
	var listAsArray = GetListAsArray(list, delimiter);
		
	for (var i = 0; i < listAsArray.length;i++)
	{
		if(listAsArray[i] == searchString)
		{
			return i + 1;
		}
	}
	return -1;
}	
function GetListLen(list, delimiter)
{
	var listAsArray = GetListAsArray(list, delimiter);

	return listAsArray.length;	
}
function GetListAsArray(list, delimiter)
{
	var newList = new String(list);
	if (newList != '')
	{
		if (delimiter == null)
		{
			delimiter = ',';
		}
		return newList.split(delimiter);
	}
	else
	{
		return new Array();
	}
}
function GetListAppend(list,newString,delimiter)
{
	if (list != '')
	{
		if (delimiter == null)
		{
			delimiter = ',';
		}
		return (list + delimiter + newString);
	}
	else
	{
		return newString;
	}
}
function Trim(stringWithSpaces)
{
	return RTrim(LTrim(stringWithSpaces));
}

function LTrim(stringWithSpaces)
{
	var newString = stringWithSpaces;
	
	while (newString.substr(0,1) == ' ')
	{
		newString = newString.substr(1);
	}
	return newString;
}

function RTrim(stringWithSpaces)
{
	var newString = stringWithSpaces;
	
	while (newString.substr(newString.length - 1) == ' ')
	{
		newString = newString.substr(0, newString.length - 1);
	}
	return newString;
}
