function popupPage(URL,w,h,sb) {
	var windowprops = "location=no,scrollbars="+sb+",menubars=no,toolbars=no,resizable=yes,left=10,top=10,width="+w+",height="+h;
	popup = window.open(URL,"Details",windowprops);
}

//********************* Dialog Functions ***********************

var dialogwindow = null;
var returnedname = null;
var returnedvalue = null;

function setfocus() {
	self.focus();
}

function focusDialog() {
	if (dialogwindow != null) {
		if (dialogwindow.closed)
			dialogwindow = null;
		else
			dialogwindow.focus();
	}
}

function calldialog(target,Other,pHeight,pWidth) {
	var url = "dialog.php?target=" + target + Other;
	dialogwindow = window.open(url,"_blank","alwaysRaised=yes,titlebar=no,dependent=yes,height=" + pHeight + ",width=" + pWidth + ",scrollbars,titlebar=no");
	dialogwindow.focus();
}

function getDialog (Sec1,Sec2) {
	var val = calldialog(Sec1,Sec2);
	if ((val == 0) || (val == null)) val = "";
	return val;
}

function setpair (n,v, closewindow) {
	returnedname = n;
	returnedvalue = v;
	if(closewindow || closewindow == null) {
		closewindow();
	}
	displaypair();
}

function setrow (RowCols) {
	var returnedvalue = new Array();
	returnedvalue = RowCols;
	closewindow();
	displayrow(returnedvalue);
}

function closewindow() {
	if (dialogwindow != null) {
		dialogwindow.close();
		dialogwindow = null;
	}
}

//********************* TextArea Counter ***********************


/*Function for use with textareas to limit the amount of characters allowed*/

function textCounter( field, maxlimit ) {
	if ( field.value.length >= maxlimit ){
		field.value = field.value.substring( 0, maxlimit-1 );
		return false;
	}
}

//********************* Screenload placeholder ***********************

function loadproc () {
}



//********************* Helper functions *****************************

function mandatory() {
	return "<font class='ast'>*</font>";
}

// helper function to save typing document.getElementById
// e.g. $('vAction').value = 'delete';
function $(element){
	return document.getElementById(element);
}




//********************* Listings Tables functions *****************************

// Change the sort order of a list, defaulted to first sort Ascending
function SetFilter(pSubValue, pOrderName, pDirName) {
	var vOrder = document.getElementById(pOrderName);
	var vAscDesc = document.getElementById(pDirName);
	if (!vOrder.value) {
		vOrder.value = 0;
	}
	if (vOrder.value == pSubValue) {
		vAscDesc.value = (vAscDesc.value == 1)? 0 : 1;
	} else {
		//vAscDesc.value = 0;
		vOrder.value = pSubValue;
	}
	vOrder.form.submit();
}

// change the page being displayed
function SubmitPagination(pPageVarName, pPage) {
	var vPageVar = document.getElementById(pPageVarName);
	vPageVar.value = pPage;
	vPageVar.form.submit();
}

function checkall(pName, pflag) {
	var vInputNameStr;
	var vInputs = document.getElementsByTagName('input');

	//alert('Hey');
	for (var i = 0; i < vInputs.length; i++) {
		vInputNameStr = new String(vInputs[i].name);
/*		if (vInputs[i].type == 'checkbox') {
			alert('vInputs[i].name='+vInputs[i].name+'\nReplace='+vInputNameStr.replace(/\[.*\]/, '')+'Comparing to pName='+pName);
			break;
		}*/

		if (vInputs[i].type == 'checkbox'
				&& (vInputs[i].name == pName
					|| vInputNameStr.replace(/\[.*\]/, '') == pName)) {
			vInputs[i].checked = pflag;
		}
	}
}



//********************* List Select functions ********************

function addtolist() {
// (dynamiclistname, feederval, feedername, item)
	var dynamiclistname = addtolist.arguments[0];
	if (document.all) {
		var vBrowser = 'IE';
	}
	else {
		var vBrowser = 'NS';
	}
	if ('IE' != vBrowser) {
		var dynamiclist = document.getElementById(dynamiclistname);
	}
	else {
		var dynamiclist = eval(dynamiclistname);
	}
	var numrows = dynamiclist.rows.length;
	var numselects = (addtolist.arguments.length - 1) / 3;
	var idname = new Array(numselects);
	var ListSelect = new Array(numselects);
	var ListText = new Array(numselects);
	var val = new Array(numselects);
	var nonzero = true;
	for (i = 0; i < numselects; i++) {
		idname[i] = addtolist.arguments[(i*3) + 3];
		if ('IE' != vBrowser) {
			ListSelect[i] = document.getElementById(addtolist.arguments[(i*3) + 1]);
			ListText[i] = eval("document."+addtolist.arguments[(i*3) + 2]);
		}
		else {
			ListSelect[i] = eval("document.mainform." + addtolist.arguments[(i*3) + 1]);
			ListText[i] = eval("document." + addtolist.arguments[(i*3) + 2]);
		}
		val[i] = ListSelect[i].value;
		var myString = '';
		if (val[i] == 0) {
			nonzero = false;
		}
	}
	if (nonzero) {
		var nodup = true;
		//alert("Replacing | with ' ' ");
		for (i = 1; i < numrows; i++) {
			var matched = true;
			for (j = 0; j < numselects; j++) {
				if (vBrowser == 'IE') {
					if (val[j] != eval("dynamiclist.rows[i].cells[j].all." + idname[j] + ".value")) {
						matched = false;
					}
				}
				else {
					if (val[j] != document.getElementById(idname[j]).value) {
						matched = false;
					}
				}

			}
			if (matched) nodup = false;
		}
		if (nodup) {
			var cls = (numrows % 2)? "listings": "listings";
			var x=dynamiclist.insertRow(numrows);
			for (i = 0; i < numselects; i++) {
				var y=x.insertCell(i);
				y.className = cls;
				y.innerHTML = ListText[i] + "<input type='hidden' id='" + idname[i] + "' name='" + idname[i] + "[]' value='" + val[i] + "'>";
				var z=x.insertCell(numselects);
				z.className = cls;
				z.innerHTML = "<table class='linkgroup'><tr><td><a href=# onclick='removefromlist((this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.rowIndex)," + '"' + dynamiclistname + '"' + ")'>Remove</a></td></tr></table>";
				setlistrowclasses(dynamiclist);
			}
		} else {
			var txt = ""; var sep = "";
			for (i = 0; i < numselects; i++) {
				txt += sep + ListText[i];
				sep = ", ";
			}
			alert (txt + " has already been selected");
		}
	}
}






function addtotable() {
// (dynamiclistname, RowCols)
// This function takes in the the id of the table and the
// array containing the column names and values
// It checks the list that is there already and adds to it.
// Etienne (07/03/2005) : 	I added a third argument to add a row before a total row, third arg should be 1
//									If no third arg, it is assumed to be 0, and the row is inserted at the end of the table

	var dynamiclistname = addtotable.arguments[0];
	var dynamiclist = eval(dynamiclistname);
	var numrows = dynamiclist.rows.length;
	var numselects = 1;
	var val = new Array(numselects);
	// To add a row before the end of the table, third arg is the number of rows before the end of the table
	if (addtotable.arguments[2]) {
		var rowPosition = addtotable.arguments[2];
	}
	else {
		var rowPosition = 0;
	}

	for (i = 0; i < numselects; i++) {
		val[i] = addtotable.arguments[1];
		var x=dynamiclist.insertRow(numrows-rowPosition);
		for (i = 0; i < numselects; i++) {
			var RowCols = new Array();
			RowCols = val[i];
			var SubTotal = 0;
			for (vCount = 0; vCount < RowCols.length; vCount++) {
				//Loop through the array or the row that was passed in.
				var y=x.insertCell(vCount);
				if ("Tasklist" == dynamiclistname && ((RowCols[vCount][0] == "PRC_OTHER_DESCRIPTION") || (RowCols[vCount][0] == "PRC_TASK_TITLE"))) {
				}
				else {
					if (!isNaN(RowCols[vCount][1])) {
						SubTotal += (RowCols[vCount][1] * 1);
						SubTotal = Math.round(SubTotal*Math.pow(10,2))/Math.pow(10,2);
					}
				}
				var position;
				position = numrows-1;
				if ("PRR_RAT_ID" == RowCols[vCount][0]) {
					y.innerHTML = RowCols[vCount][2] + "<input type='hidden' id='" + RowCols[vCount][0] + "[]' name='" + RowCols[vCount][0] + "[]' value='" + RowCols[vCount][1] + "'>";
				}
				else{
					y.innerHTML = RowCols[vCount][1] + "<input type='hidden' id='" + RowCols[vCount][0] + "[]' name='" + RowCols[vCount][0] + "[]' value='" + RowCols[vCount][1] + "'>";
				}
			}
			//create the SubTotal only if the table name is Tasklist
			if (dynamiclistname == "Tasklist") {
				var z=x.insertCell(vCount);
				z.innerHTML = SubTotal + "<input type='hidden' id='SUB_TOTAL[]' name='SUB_TOTAL[]' value='" + SubTotal + "'>";
				vCount ++;
			}
			//create the Delete Button
			var y=x.insertCell(vCount);
			if (dynamiclistname != "MeasureList" && dynamiclistname != "Tasklist" ) {
				y.innerHTML = "<table class=linkgroup><tr><td><a href=# onclick='removefromlist((this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.rowIndex)," + '"' + dynamiclistname + '"' + ");return false;'>Remove</a></td></tr></table>";
			}
			else if (dynamiclistname == "MeasureList") {
				y.innerHTML = "<table class=linkgroup><tr><td><a href=# onclick='removemeasure((this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.rowIndex)," + '"' + dynamiclistname + '"' + ");return false;'>Remove</a></td></tr></table>";
			}
			else if (dynamiclistname == "Tasklist") {
				y.innerHTML = "<table class=linkgroup><tr><td><a href=# onclick='removetask((this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.rowIndex)," + '"' + dynamiclistname + '"' + ");return false;'>Remove</a></td></tr></table>";
			}
		}
	}

}

function removefromlist(rowIndex,dynamiclistname) {
	//var dynamiclist = eval(dynamiclistname);
	var dynamiclist = document.getElementById(dynamiclistname);
	dynamiclist.deleteRow(rowIndex);
	setlistrowclasses(dynamiclist);
}

function setlistrowclasses(dynamiclist) {
	for (i = 1; i < dynamiclist.rows.length; i++) {
		cls = (i % 2)? "listitem1": "listitem2";
		dynamiclist.rows[i].cells[0].className = cls;
		dynamiclist.rows[i].cells[1].className = cls;
	}
}


// Added by SR

function CheckReturn() {
	return (window.event.keyCode == 13);
}


function AddRowTotal(dynamiclistname, pText, pCols) {
	var dynamiclistname = AddRowTotal.arguments[0];
	var dynamiclist = eval(dynamiclistname);
	var totals = new Array();
	for (i = pCols;i < dynamiclist.rows.length; i++) {
		for (j = 0; j < dynamiclist.rows(i).cells.length; j++) {
			if (isNaN(totals[j])) totals[j] = 0;
			if ("Tasklist" == dynamiclistname && dynamiclist.rows(i).cells(j) == 8) {
			}
			else {
				if (!isNaN(dynamiclist.rows(i).cells(j).innerText)) {
					totals[j] += dynamiclist.rows(i).cells(j).innerText * 1;
				}
				else {
					totals[j] = '';
				}
			}
		}
	}
	// if no more row for the cumulative total
	if ("MeasureList" == dynamiclistname && dynamiclist.rows.length == 2) {
		for (i = 2;i <= 11; i++) {
			totals[i] = 0;
		}
	}
	var rowTotal = dynamiclist.insertRow();
	var rowCell = rowTotal.insertCell();
	var cls = "rowbold";
	rowCell.className = cls;
	rowTotal.cells(0).innerText = pText;
	rowTotal.cells(0).colSpan = pCols;

	for (j=pCols; j < totals.length-1;j++) {
		rowCell = rowTotal.insertCell();
		rowCell.className = cls;
		var total = totals[j];
		if ("Tasklist" == dynamiclistname && j == 7){
			total = "";
		}
		tempstring = new String(total);
		if(tempstring.indexOf('.') < 0) {
		}
		else {
			total = 0+total.toFixed(2);
		}
		if ("MeasureList" == dynamiclistname && j > 3) {
			total = " ";
		}
		rowCell.innerText = total;
		if ("Tasklist" == dynamiclistname) {
			if (j == totals.length-2) {
				rowCell.innerHTML = total + "<input type='hidden' id='vTotalCost' name='vTotalCost' value='" + total + "'>";
			}
		}
	}
	rowCell = rowTotal.insertCell();
	rowCell.className = cls;
	rowCell.innerText = '';
}


function ShowFullText(i,w,h) {
	var vText = document.vMainForm['pText' + i].value;
	var windowprops = 'location=no,menubars=no,scrollbars=yes,toolbars=no,resizable=yes,width='+w+',height='+h;
	popup = window.open('','FullText',windowprops);
	popup.document.open();
	popup.document.writeln("<html>\n<head>\n<title>SEI Grant Management System</title>\n<link href='includes/SEI.css' rel='styleSheet' type='text/css' />\n</head>\n<body>\n");
	popup.document.writeln(vText.replace(/(\\)([\\\'\"])/g,"$2"));
	popup.document.writeln("<br /><div align='center'><a class='submitbutton' href='javascript:self.close()'>close</a></div>");
	popup.document.writeln("\n<body>\n<html>");
	popup.document.close();
}

// Clear values entered in a form (pFormName)
// doesn't clear hidden, button, image values
// just text, password, textarea, checkbox, radio, select, select multiple, file
// REMEMBER TO CLEAR HIDDEN VARS YOU ADDED WITH JAVASCRIPT!!
function ClearForm(pFormName) {
	var x = document.getElementById(pFormName).elements;
	document.getElementById(pFormName).reset();
	for (var i in x) {
		if (x[i] && x[i].type) {
			switch (x[i].type) {
				case 'text' :
				case 'password' :
				case 'textarea' :
					x[i].value='';
				break;
				case 'checkbox' :
					x[i].checked = false;
				break;
				case 'radio' :
					x[i].checked = false;
				break;
				case 'select-one' :
				case 'select-multiple' :
					x[i].selectedIndex=0;
				break;
				default : break;
			}
		}
	}
	return false;
}


// Function to set display style of a box to inline
function ShowBoxInline(pBoxID) {
   var vBox;
   if (vBox = document.getElementById(pBoxID)) {
     vBox.style.display = 'inline';
   }
}
// Function to set display style of a box to block
function ShowBoxBlock(pBoxID) {
   var vBox;
   if (vBox = document.getElementById(pBoxID)) {
     vBox.style.display = 'block';
   }
}

// Function to set display style of a box to none
function HideBox(pBoxID) {
	var vBox;
	if (vBox = document.getElementById(pBoxID)) {
		vBox.style.display = 'none';
	}
}

// Function to set display style of boxes called like 'BOXPREFIX0,BOXPREFIX1,...BOXPREFIXn' to none
function HideAllBoxes(pBoxPrefix) {
	var vBox;
	var i=0;
	while (vBox = document.getElementById(pBoxPrefix + '' + i)) {
		vBox.style.display = 'none';
		i++;
	}
}

// Function to set display style of boxes called like 'BOXPREFIX0,BOXPREFIX1,...BOXPREFIXn' to inline
function ShowAllBoxesInline(pBoxPrefix) {
	var vBox;
	var i=0;
	while (vBox = document.getElementById(pBoxPrefix + '' + i)) {
		vBox.style.display = 'inline';
		i++;
	}
}

// Function to set display style of boxes called like 'BOXPREFIX0,BOXPREFIX1,...BOXPREFIXn' to block
function ShowAllBoxesBlock(pBoxPrefix) {
	var vBox;
	var i=0;
	while (vBox = document.getElementById(pBoxPrefix + '' + i)) {
		vBox.style.display = 'block';
		i++;
	}
}


//Returns the query string with the selected ids and descriptions:
function DrawMultipleSelectQueryString(pName, pDescription) {
	var vStr = '';

	for (i=0; i < document.getElementById(pName).length; i++) {
		if (document.getElementById(pName).options[i].selected) {
			if (vStr.length > 0) {
				vStr = vStr + '&';
			}
			vStr = vStr + pName + '=' + encodeURIComponent(document.getElementById(pName).options[i].value);
			vStr = vStr + '&' + pDescription + '=' + encodeURIComponent(document.getElementById(pName).options[i].innerHTML);
		}
	}
	return vStr;
}

/**
 * htmlEntities
 *
 * Convert all applicable characters to HTML entities
 *
 * object string
 * return string
 *
 * example:
 * test = '���'
 * test.htmlEntities() //returns '&auml;&ouml;&uuml;'
 */

String.prototype.htmlEntities = function()
{
var chars = new Array ('&','�','�','�','�','�','�','�','�','�','�',
'�','�','�','�','�','�','�','�','�','�','�',
'�','�','�','�','�','�','�','�','�','�','�',
'�','�','�','�','�','�','�','�','�','�','�',
'�','�','�','�','�','�','�','�','�','�','�',
'�','�','�','�','�','�','�','�','\"','�','<',
'>','�','�','�','�','�','�','�','�','�','�',
'�','�','�','�','�','�','�','�','�','�','�',
'�','�','�','�','�','�','�','�');

var entities = new Array ('amp','agrave','aacute','acirc','atilde','auml','aring',
'aelig','ccedil','egrave','eacute','ecirc','euml','igrave',
'iacute','icirc','iuml','eth','ntilde','ograve','oacute',
'ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc',
'uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc',
'Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute',
'Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde',
'Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave',
'Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig',
'lt','gt','cent','pound','curren','yen','brvbar','sect','uml',
'copy','ordf','laquo','not','shy','reg','macr','deg','plusmn',
'sup2','sup3','acute','micro','para','middot','cedil','sup1',
'ordm','raquo','frac14','frac12','frac34');

newString = this;
for (var i = 0; i < chars.length; i++)
{
myRegExp = new RegExp();
myRegExp.compile(chars[i],'g')
newString = newString.replace (myRegExp, '&' + entities[i] + ';');
}
return newString;
}