/**
 * @author Acer OEM User
 */
/**
 * These are the types of node that we will encounter in the XML documents.
 */
var ELEMENT_NODE = 1;
var ATTRIBUTE_NODE = 2;
var TEXT_NODE = 3;
var CDATA_SECTION_NODE = 4;
var ENTITY_REFERENCE_NODE = 5;
var ENTITY_NODE = 6;
var PROCESSING_INSTRUCTION_NODE = 7;
var COMMENT_NODE = 8;
var DOCUMENT_NODE = 9;
var DOCUMENT_TYPE_NODE = 10;
var DOCUMENT_FRAGMENT_NODE = 11;
var NOTATION_NODE = 12;

/**
 * This function checks if the given node is a null node. A text node with
 * only a return character or blank is considered as a null node.
 * @param {Object} pNode
 * @return A boolean value true if this node is null; else a false 
 */
function isNodeNull(pNode)
{
	var lCount;
	if (pNode.nodeType == TEXT_NODE)
	{
		if (pNode.data != null)
		{
			for (lCount = 0; lCount < pNode.data.length; lCount++)
			{
				if (!(pNode.data.substr(lCount, 1) == '\n' ||
					  pNode.data.substr(lCount, 1) == '\r' ||
					  pNode.data.substr(lCount, 1) == '\t' ||
					  pNode.data.substr(lCount, 1) == ' '))
				{
				  	return false;
				}
			}
			return true;
		}
	}
	else
		return false;
}
/**
 * This function files the listing table based on the Sample Table provided
 * and the XML object returned from the server
 * @param {Object} pXMLObject - The XML Object returned from the server with
 * the list of entities to be shown to the user.
 * @param {Object} pSampleTable - The Sample table object based on which the
 * list of entities is created.
 */
function fillTable(pXMLObject, pSampleTable)
{
	var lChildNodes;
	var lCount;
	var lRoot;
	var lXMLResponse;
	var lTable;
	var lRowCount;
	var lRows;
	var lColumnCount;
	var lColumns;
	var lHeaderCount;
	var lHeaders;
	var lColumn;
	var lTextNode;
	var lTableBody;
	var lColumnValue;
	var lTableGoesHere = document.getElementById("Listing");
	var lAddEdit = document.getElementById("AddEdit");
	var lTableRow;
	var lActualColumnCount;
	var lLevel;
	var lLevelCount;
	var lLevelString;
	clearDIV("Listing");
	if (gClearAddEdit)
	{
		clearDIV("AddEdit");
	}
	lXMLResponse = pXMLObject.responseXML;
	lRoot = lXMLResponse.documentElement;
	lChildNodes = lRoot.childNodes;
	//Clone complete Table
	lTable = pSampleTable.cloneNode(true);
	//remove all rows from the body and keep a copy of one row
	lTableBody = lTable.childNodes[1];
	for (lCount = lTableBody.childNodes.length - 1; lCount >= 0; lCount--)
	{
		lTableRow = lTableBody.childNodes[lCount].cloneNode(true);
		lTableBody.removeChild(lTableBody.childNodes[lCount]);
	}
	for (lCount = 0; lCount < lChildNodes.length; lCount++)
	{
		if (!isNodeNull(lChildNodes[lCount]))
		{
			if (lChildNodes[lCount].nodeName == "ROWS")
			{
				lRows = lChildNodes[lCount].childNodes;
				for (lRowCount = 0; lRowCount < lRows.length; lRowCount++)
				{
					if (!isNodeNull(lRows[lRowCount]))
					{
						lRow = lTableRow.cloneNode(true);
						lLevel = 0;
						if (lRows[lRowCount].attributes.getNamedItem("LEVEL") != null)
						{
							lLevel = lRows[lRowCount].attributes.getNamedItem("LEVEL").value;
						}
						lColumns = lRows[lRowCount].childNodes;
						lActualColumnCount = 0;
						for (lColumnCount = 0; lColumnCount < lColumns.length; lColumnCount++)
						{
							if (!isNodeNull(lColumns[lColumnCount]))
							{
								if (lActualColumnCount == 1 && lLevel > 0)
								{
									lLevelString = "";
									for (lLevelCount = 0; lLevelCount < lLevel; lLevelCount++)
									{
										lLevelString += "-";
									}
									lColumn = lRow.childNodes[lActualColumnCount];
									lColumn.appendChild(document.createTextNode(lLevelString));
								}
								lColumnValue = getColumnValue(lColumns[lColumnCount]);
								if (lActualColumnCount < lRow.childNodes.length)
								{
									lColumn = lRow.childNodes[lActualColumnCount++];
									lColumn.appendChild(lColumnValue[0]);
									if (lColumnValue[1].length > 0)
									{
										lColumn.id = gCurrentEntityIdField + lColumnValue[1];
									}
								}
								else
								{
									lTableGoesHere.appendChild(lColumnValue[0]);
								}
							}
						}
						lTableBody.appendChild(lRow);
					}
				}
			}
		}
	}
	lTableGoesHere.appendChild(lTable);
}
/**
 * This method gets a node with the specified name and with the attribute name
 * with the requested value.
 * @param {Object} pNodeName
 * @param {Object} pAttributeName
 * @param {Object} pAttributeValue
 * @return Returns a null of no such node is found else the object of the node
 * is returned.
 */
function getNode(pNodeName, pAttributeName, pAttributeValue)
{
	var lNode;
	var lNodes;
	var lCount;
	var lAttributeCount;
	lNode = null;
	lNodes = document.getElementsByTagName(pNodeName);
	for (lCount = 0; lCount < lNodes.length; lCount++)
	{
		if (!isNodeNull(lNodes[lCount]))
		{
			if (lNodes[lCount].attributes.getNamedItem(pAttributeName) != null)
			{
				if (lNodes[lCount].attributes.getNamedItem(pAttributeName).value == pAttributeValue)
				{
					lNode = lNodes[lCount];
					break;
				}
			}
		}
	}
	return lNode;
}
/**
 * This function returns the value to be placed in the column of a listing table.
 * @param {Object} pColumnNode - The Data Node in the listing XML as returned
 * from the server.
 * @return Returns a node that can be appended to the <TD> tag in a listing
 * of entities.
 */
function getColumnValue(pColumnNode)
{
	var lAttributes;
	var lType = "TXT";
	var lName;
	var lOnClick = "";
	var lAttribute;
	var lCount;
	var lValue;
	var lColumnValue;
	var lList;
	var lReturnValue= false;
	lColumnValue = document.createTextNode("&nbsp;");
	lAttributes = pColumnNode.attributes;
	for (lCount = 0; lCount < lAttributes.length; lCount++)
	{
		lAttribute = lAttributes[lCount];
		if (!isNodeNull(lAttribute))
		{
			if (lAttribute.nodeName == "NAME")
			{
				if (lAttribute.childNodes.length > 0)
					lName = lAttribute.childNodes[0].data;
				else
					lName = "";
			}
			else if (lAttribute.nodeName == "TYPE")
			{
				if (lAttribute.childNodes.length > 0)
					lType = lAttribute.childNodes[0].data;
				else
					lType = "";
			}
			else if (lAttribute.nodeName == "VALUE")
			{
				if (lAttribute.childNodes.length > 0)
					lValue = lAttribute.childNodes[0].data;
				else
					lValue = "";
			}
			else if (lAttribute.nodeName == "ONCLICK")
			{
				if (lAttribute.childNodes.length > 0)
					lOnClick = lAttribute.childNodes[0].data;
				else
					lOnClick = "";
			}
			else if (lAttribute.nodeName == "LST")
			{
				if (lAttribute.childNodes.length > 0)
					lList = lAttribute.childNodes[0].data;
				else
					lList = "";
			}
		}
	}
	if (lType == "TXT")
	{
		lColumnValue = document.createTextNode(lValue);
	}
	else if (lType == "BTN")
	{
		if (!!document.all)
		{
			lColumnValue = document.createElement("<INPUT NAME=" + lName + " onclick=\"" + lOnClick + "\"/>");
		}
		else
		{
			lColumnValue = document.createElement("INPUT");
			lColumnValue.name = lName;
		}
		lColumnValue.type = "BUTTON";
		if (!document.all)
			lColumnValue.setAttribute("onClick", lOnClick);
	}
	else if (lType == "CHK")
	{
		if (lValue == "T" || lValue == "TRUE" || lValue == "1")
		{
			lSelected = "checked";
		}
		else
		{
			lSelected = "";
		}
		if (!!document.all)
		{
			lColumnValue = document.createElement("<INPUT NAME=" + lName + "/>");
		}
		else
		{
			lColumnValue = document.createElement("INPUT");
			lColumnValue.name = lName;
		}
		lColumnValue.type = "CHECKBOX";
		if (!document.all)
		{
			lColumnValue.setAttribute("onClick", lOnClick);
		}
		lReturnValue = true;
	}
	else if (lType == "SEL")
	{
		//Create List and Mark value as selected
	}
	else if (lType == "HID")
	{
		if (!!document.all)
		{
			lColumnValue = document.createElement("<INPUT NAME=" + lName + " />");
		}
		else
		{
			lColumnValue = document.createElement("INPUT");
			lColumnValue.name = lName;
		}
		lColumnValue.type = "HIDDEN";
		lColumnValue.value = lValue;
		if (!document.all)
		{
			lColumnValue.setAttribute("onClick", lOnClick);
		}
	}
	else if (lType == "RAD")
	{
		if (lValue == "T" || lValue == "TRUE" || lValue == "1")
		{
			lSelected = "checked";
		}
		else
		{
			lSelected = "";
		}
		if (!!document.all)
		{
			lColumnValue = document.createElement("<INPUT NAME=" + lName + " />");
		}
		else
		{
			lColumnValue = document.createElement("INPUT");
			lColumnValue.name = lName;
		}
		lColumnValue.type = "RADIO";
		lColumnValue.value = lValue;
		if (!document.all)
		{
			lColumnValue.setAttribute("onClick", lOnClick);
		}
		lReturnValue = true;
	}
	
	if (lReturnValue)
	{
		return [lColumnValue, lValue];
	}
	else
	{
		return [lColumnValue, ""];
	}
}
/**
 * This method copies a list of method returned in the XML from the server.
 * Typically this is used to copy the Listing template and the Add templates.
 * This is necessary, because even if we return a HTML from the server it is
 * not possible to append these nodes directly to a DIV element. It needs
 * to be copied as below before it can be appended to any Element.  
 * @param {Object} pNode
 * @return Returns the node object that can be appended to any HTML element
 * as required
 */
function copyNodes(pNode)
{
	var lNode;
	var lCount;
	var lChildNode;
	var lNameAttribute;
	var lEventAttribute;
	var lNodeString;

	lNode = null;
	if (!(pNode == null))
	{
		if (pNode.nodeType == TEXT_NODE)
		{
			lNode = document.createTextNode(trim(decodeURI(pNode.nodeValue)));
		}
		else if (pNode.nodeType == ELEMENT_NODE)
		{
			if (window.document.all)
			{
				if (pNode.nodeName == "style")
				{
					lNode = document.createElement("style");
					lNode.setAttribute("type", "text/css");
					lNode.styleSheet.cssText = pNode.nodeValue;
					return lNode;
				}
				else
				{
					lNameAttribute = null;
					lEventAttribute = null;
					lNodeString = "<"  + pNode.nodeName;
					if (pNode.attributes != null)
					{
						for (lCount = 0; lCount < pNode.attributes.length; lCount++)
						{
							lNodeString = lNodeString + " " + pNode.attributes[lCount].name + "=\"" +  replace(replace(decodeURI(pNode.attributes[lCount].value), "&", "&amp;"), "\"", "&quot;") + "\"";
							lNodeString = lNodeString + " " + pNode.attributes[lCount].name + "=\"" +  pNode.attributes[lCount].value + "\"";
						}
					}
					lNodeString = lNodeString + "/>";
					lNode = document.createElement(lNodeString);
					lNode.myattributes = new Array();
					if (pNode.attributes != null)
					{
						for (lCount = 0; lCount < pNode.attributes.length; lCount++)
						{
							lNode.myattributes[lCount] = pNode.attributes[lCount].name;
						}
					}
				}
			}
			else
			{
				lNode = document.createElement(pNode.nodeName);
			}
			if (pNode.childNodes != null)
			{
				for (lCount = 0; lCount < pNode.childNodes.length; lCount++)
				{
					if (!isNodeNull(pNode.childNodes[lCount]))
					{
						lChildNode = copyNodes(pNode.childNodes[lCount]);
						if (lChildNode)
						{
							lNode.appendChild(lChildNode);
						}
					}
				}
			}
			if (pNode.attributes != null && !window.document.all)
			{
				for (lCount = 0; lCount < pNode.attributes.length; lCount++)
				{
					lNode.setAttribute(pNode.attributes[lCount].name, decodeURI(pNode.attributes[lCount].value));
				}
			}
		}
		else if (pNode.nodeType == ATTRIBUTE_NODE)
		{
			lNode = document.createAttribute(pNode.name);
			lNode.value = decodeURI(pNode.value);
		}
	}
	return lNode;
}
 /**
 * This clears a specific DIV on any given HTML page.
 * @param {Object} pDivName - The name of the DIV to clear.
 */
function clearDIV(pDivName)
{
	var lDIV = document.getElementById(pDivName);
	var lCount;
	if (lDIV && lDIV.childNodes != null)
	{
		if (lDIV.childNodes.length > 0)
		{
			for(lCount = lDIV.childNodes.length - 1; lCount >= 0; lCount--)
			{
				lDIV.removeChild(lDIV.childNodes[lCount]);
			}
		}
	}
}
/**
 * This clears all the main DIVs in the Main form. Specifically
 * it clears the Search, Listing and AddEdit DIVs.
 */
function clearAllDIV()
{
	clearDIV("Listing");
	clearDIV("AddEdit");
	clearDIV("Search");
}
/**
 * This method submits a specified form to the URL specified using the method
 * specified and calls back the Handler function to handle the value returned
 * from the server.
 * @param {Object} pForm - The Form that has to be submitted.
 * @param {Object} pURL - The URL that has to be invoked
 * @param {Object} pMethod - The Method to use to post the data.
 * @param {Object} pHandler - The Handler to call back to handle the returned data.
 * @param {Object} pLoginKey - The LoginKey to be returned to the server.
 */
function submitForm(pForm, pURL, pMethod, pHandler, pLoginKey, pMoreParameters)
{
	var lRequest;
	var lAJAXInteraction;
	lRequest = getRequest(pForm, pLoginKey);
	if (pMoreParameters != null)
	{
		if (lRequest.length > 0)
		{
			lRequest += "&" + pMoreParameters;
		}
		else
		{
			lRequest = pMoreParameters;
		}
	}
	if (pMethod == "GET" || pMethod == "get")
	{
		lAJAXInteraction = new AJAXInteraction(pURL + "?" + lRequest, pHandler);
		lAJAXInteraction.doGet();
	}
	else if (pMethod == "POST" || pMethod == "post")
	{
		lAJAXInteraction = new AJAXInteraction(pURL, pHandler);
		lAJAXInteraction.doPost(lRequest);
	}
}

function submitFormSynchronous(pForm, pURL, pMethod, pHandler, pLoginKey, pMoreParameters)
{
	var lRequest;
	var lAJAXInteraction;
	lRequest = getRequest(pForm, pLoginKey);
	if (pMoreParameters != null)
	{
		if (lRequest.length > 0)
		{
			lRequest += "&" + pMoreParameters;
		}
		else
		{
			lRequest = pMoreParameters;
		}
	}
	//alert(lRequest);
	if (pMethod == "GET" || pMethod == "get")
	{
		lAJAXInteraction = new AJAXInteraction(pURL + "?" + lRequest, pHandler, true);
		lAJAXInteraction.doGet();
	}
	else if (pMethod == "POST" || pMethod == "post")
	{
		lAJAXInteraction = new AJAXInteraction(pURL, pHandler, true);
		lAJAXInteraction.doPost(lRequest);
	}
}


/**
 * This method gets the request string from the specified form.
 * @param {Object} pForm - The actual form element from which the request string is to be built.
 * @param {Object} pLoginKey - The Login Key.
 * @param pSkipKey - This will indicate if we should skip the primary key for the list.
 */
function getRequest(pForm, pLoginKey, pSkipKey)
{
	var lCount;
	var lElement;
	var lRequest;
	var lOptionCount;
	var lNumberOfExtras;
	var lMaxNumberOfExtras;
	var lValue;
	var lNames;
	var lValues;
	var lValueCount;
	var lTempValue;
	var lTempName;

	lRequest = "";
	lNumberOfExtras = 0;
	lMaxNumberOfExtras = 0;
	if (pForm)
	{
	
	for (lCount = 0; lCount < pForm.elements.length; lCount++)
	{
		lName = pForm.elements[lCount].name;
		if ((pSkipKey && lName == gEntityConfig.gCurrentEntityIdField && pForm.elements[lCount].type != "hidden")  )
		{
			
		}
		
		else
		{
			if (!pForm.elements[lCount].parameter || pSkipKey)
			{
				lValue = gUtil.getValue(pForm.elements[lCount]);
				if (lValue[0].length == 0)
				{
					lValue = lValue[1];
				}
				else
				{
					lValue = lValue[0];
				}
				if (lValue.indexOf("|") > 0)
				{
					lValues = lValue.split("|");
					lTempName = lName;
					
					if (lTempName.indexOf("S_") == 0)
					{
						lTempName = lTempName.substring(2);
					}
					if (lTempName!='recaptcha_challenge_field' && lTempName.indexOf("_") > 0)
					{
						lNames = lTempName.split("_");
						for (lValueCount = 0; lValueCount < lValues.length; lValueCount++)
						{
							lRequest += "&" + lNames[lValueCount] + "=" + encodeURIComponent(lValues[lValueCount]);
						}
					}
					else
					{
						lRequest += "&" + lName + "=" + encodeURIComponent(lValue);
					}
				}
				else if (lValue.indexOf("-") > 0)
				{
					lTempValue = lValue;
					lTempName = lName;
					
					lValues = lValue.split("-");
					if (lTempName.indexOf("S_") == 0 || lTempName.indexOf("s_") == 0)
					{
						lTempName = lTempName.substring(2);
					}
					if (lTempName!='recaptcha_challenge_field' && lTempName.indexOf("_") > 0)
					{
						lNames = lTempName.split("_");
						for (lValueCount = 0; lValueCount < lValues.length && lValueCount < lNames.length; lValueCount++)
						{
								lRequest += "&" + lNames[lValueCount] + "=" + encodeURIComponent(lValues[lValueCount]);
						}
					}
					else
					{
						lRequest += "&" + lName + "=" + encodeURIComponent(lValue);
					}
				}
				else
				{
			
					lRequest += "&" + lName + "=" + encodeURIComponent(lValue);
				}
			}
		}

		if (pForm.elements[lCount].name.indexOf("EXTVALUE") == 0)
		{
			lNumberOfExtras = pForm.elements[lCount].name.substring(8);
			lNumberOfExtras++;
			if (lNumberOfExtras > lMaxNumberOfExtras)
			{
				lMaxNumberOfExtras = lNumberOfExtras;
			}
		}
	}
	}
	if (pLoginKey != "")
	{
		lRequest += "&LK=" + encodeURIComponent(pLoginKey);
	}
	if (lMaxNumberOfExtras > 0)
	{
		lRequest += "&EXTRAS=" + encodeURIComponent(lMaxNumberOfExtras);
	}
	if (lRequest.length > 1) lRequest = lRequest.substr(1);
	return lRequest;
}

/**
 * This method returns the elements of the form with the specified name.
 * Note that typically in case of Checkboxes, and Radio Buttons there will
 * more than one element carrying the same name.
 * @param {Object} pFormName - The Name of the form from which the elements have
 * to be retrieved.
 * @param {Object} pElementName - The Name of the element that has to be retrived.
 * @return An Array of elements whose name match the requested name.
 */
function getFormElements(pFormName, pElementName)
{
	var lElements;
	var lForm;
	var lCount;
	lElements = new Array();
	lForm = eval("document." + pFormName);
	for (lCount = 0; lCount < lForm.elements.length; lCount++)
	{
		if (lForm.elements[lCount].name == pElementName)
		{
			lElements[lElements.length] = lForm.elements[lCount];
		}
	}
	return lElements;
}
/**
 * This method fills the requested form with the values in the Entity XML.
 * @param {Object} pFormName - The name of the Form that has to be filled.
 * @param {Object} pEntity - The XML of the Entity that has to be filled.
 */
function fillForm(pFormName, pEntity)
{
	var lAttributes;
	var lExtras;
	var lAttributeNodes;
	var lExtraNodes;
	var lCount;
	var lExtraId;
	var lExtraName;
	var lExtraValue;
	var lExtraRowState;
	var lAttributeCount;
	var lExtraCount;
	/*
	lExtras = null;
	for (lCount = 0; lCount < pEntity.childNodes.length; lCount++)
	{
			if (pEntity.childNodes[lCount].nodeName == "ATTRIBUTES")
			{
				lAttributes = pEntity.childNodes[lCount]; 
			}
			else if (pEntity.childNodes[lCount].nodeName == "EXTRAS")
			{
				lExtras = pEntity.childNodes[lCount];
			}
	}*/
	/*
	for (lCount = 0; lCount < pEntity.attributes.length; lCount++)
	{
		if (pEntity.attributes[lCount].name != "name" && pEntity.attributes[lCount].name != "class")
		{
			if (eval("document." + pFormName + "." + pEntity.attributes[lCount].name))
			{
				lElement = eval("document." + pFormName + "." + pEntity.attributes[lCount].name);
				if (lElement && (lElement.name || lElement.length))
				{
					gUtil.setValue(lElement, pEntity.attributes[lCount].value);
				}
			}
		}
	}
     */
		// modified by aarti... to fix MFG bug in IE8. date : 3/2/2011.
	
	var lData
	var lElement;
	for (lCount = 0; lCount < pEntity.attributes.length; lCount++) {
	    if (pEntity.attributes[lCount].name != "name" && pEntity.attributes[lCount].name != "class") {
	        lElement = jQuery('form[name="' + pFormName + '"]').find('[name="' + pEntity.attributes[lCount].name + '"]').get(0);
	        if (lElement && (lElement.name || lElement.length)) {
	            //lData = checkData(pEntity.attributes[lCount].value);
	            lData = pEntity.attributes[lCount].value;
	            gUtil.setValue(lElement, lData);
	        }
	    }
	}


	/*
	clearExtras();
	if (lExtras != null)
	{
		lExtraCount = 0;
		lExtraNodes = lExtras.childNodes;
		for (lCount = 0; lCount < lExtraNodes.length; lCount++)
		{
			if (!isNodeNull(lExtraNodes[lCount]))
			{
				lExtraId = "";
				lExtraName = "";
				lExtraValue = "";
				lExtraRowState = "";
				lAttributes = lExtraNodes[lCount].attributes;
				for (lAttributeCount = 0; lAttributeCount < lAttributes.length; lAttributeCount++)
				{
					if (lAttributes[lAttributeCount].nodeName.indexOf("ID") >= 0)
					{
						lExtraId = lAttributes[lAttributeCount].value;
					}
					else if (lAttributes[lAttributeCount].nodeName.indexOf("NAME") >= 0)
					{
						lExtraName = lAttributes[lAttributeCount].value;
					}
					else if (lAttributes[lAttributeCount].nodeName.indexOf("VALUE") >= 0)
					{
						lExtraValue = lAttributes[lAttributeCount].value;
					}
					else if (lAttributes[lAttributeCount].nodeName.indexOf("ROWSTATE") >= 0)
					{
						lExtraRowState = lAttributes[lAttributeCount].value;
					}
				}
				addMore();
				eval("document." + pFormName + ".EXTID" + lExtraCount + ".value =\"" + lExtraId + "\"");
				eval("document." + pFormName + ".EXTNAME" + lExtraCount + ".value =\"" + lExtraName + "\"");
				eval("document." + pFormName + ".EXTVALUE" + lExtraCount + ".value =\"" + lExtraValue + "\"");
				eval("document." + pFormName + ".EXTROWSTATE" + lExtraCount + ".value =\"" + lExtraRowState + "\"");
				lExtraCount++;
			}
		}
	}*/
}
/**
 * This method fills a single element of the form with the specified value.
 * @param {Object} pFormName - The name of the form in which the element is expected.
 * @param {Object} pElementName - The name of the element whose value is to be set. 
 * @param {Object} pElementValue - The value to which the element has to be set.
 */
function fillFormElement(pFormName, pElementName, pElementValue)
{
	var lFormElement;
	lFormElement = eval("document." + pFormName + "." + pElementName);
	gUtil.setValue(lFormElement, pElementValue);
}
/**
 * This method clears a specified form.
 * @param {Object} pFormName - The name of the form that is to be cleared.
 */
function clearForm(pFormName)
{
	var lForm;
	var lCount;
	var lElements;
	lForm = eval("document." + pFormName);
	if (lForm)
	{
	
	for (lCount = 0; lCount < lForm.elements.length; lCount++)
	{
		clearFormElement(pFormName, lForm.elements[lCount]);
	}
	}
}
/**
 * This function clears the element.
 * @param {Object} pElement - The element whose value is to be cleared.
 */
function clearFormElement(pFormName, pElement)
{
	var lElementType;
	var lElements;
	var lCount;
	lElementType = pElement.type;
	if (lElementType == "text" || lElementType == "textarea" ||
		lElementType == "hidden" || lElementType == "password")
	{
		pElement.value = "";
	}
	else if (lElementType == "checkbox" || lElementType == "radio")
	{
		lElements = getFormElements(pFormName, pElement.name);
		for (lCount = 0; lCount < lElements.length; lCount++)
		{
			lElements[lCount].checked = false;
		}
	}
	else if (lElementType == "select-one" || lElementType == "select-multiple")
	{
		for (lCount = 0; lCount < pElement.options.length; lCount++)
		{
			pElement.options[lCount].selected = false;
		}
	}
}
/**
 * This method is to be used to add more extra values for an entity
 * that can have extra values.
 */
function addMore()
{
	var lCount;
	var lChildNodes;
	var lExtraTable;
	var lExtraTableBody;
	var lRow;
	var lRows;
	var lNumberOfRows;
	var lInput;
	var lData;
	lExtraTable = document.getElementById("EXTRA");
	lChildNodes = lExtraTable.childNodes;
	for (lCount = 0; lCount < lChildNodes.length; lCount++)
	{
		if (lChildNodes[lCount].nodeName == "TBODY")
		{
			lExtraTableBody = lChildNodes[lCount];
		}
	}
	if (lExtraTableBody != null)
	{
		lRows = lExtraTableBody.childNodes;
		lNumberOfRows = 0;
		for (lCount = 0; lCount < lRows.length; lCount++)
		{
			if (!isNodeNull(lRows[lCount]))
			{
				if (lRows[lCount].nodeName == "TR")
				{
					lNumberOfRows++;
				}
			}
		}
		lRow = document.createElement("TR");
		lData = document.createElement("TD");
		if (!!document.all)
		{
			lInput = document.createElement("<INPUT TYPE=\"HIDDEN\" NAME=\"EXTID" + lNumberOfRows + "\" />");
			lData.appendChild(lInput);
			lInput = document.createElement("<INPUT TYPE=\"HIDDEN\" NAME=\"EXTROWSTATE" + lNumberOfRows + "\" />");
			lData.appendChild(lInput);
			lInput = document.createElement("<INPUT TYPE=\"TEXT\" NAME=\"EXTNAME" + lNumberOfRows + "\" />");
			lData.appendChild(lInput);
			lRow.appendChild(lData);
			lData = document.createElement("TD");
			lInput = document.createElement("<INPUT TYPE=\"TEXT\" NAME=\"EXTVALUE" + lNumberOfRows + "\" />");
			lData.appendChild(lInput);
			lRow.appendChild(lData);
		}
		else
		{
			lInput = document.createElement("INPUT");
			lInput.name = "EXTID" + lNumberOfRows;
			lInput.type = "HIDDEN"
			lData.appendChild(lInput);
			lInput = document.createElement("INPUT");
			lInput.name = "EXTROWSTATE" + lNumberOfRows;
			lInput.type = "HIDDEN"
			lData.appendChild(lInput);
			lInput = document.createElement("INPUT");
			lInput.name = "EXTNAME" + lNumberOfRows;
			lInput.type = "TEXT"
			lData.appendChild(lInput);
			lRow.appendChild(lData);
			lData = document.createElement("TD");
			lInput = document.createElement("INPUT");
			lInput.name = "EXTVALUE" + lNumberOfRows;
			lInput.type = "TEXT"
			lData.appendChild(lInput);
			lRow.appendChild(lData);
		}
		lExtraTableBody.appendChild(lRow);
	}
}
function clearExtras()
{
	var lExtraTable;
	var lChildNodes;
	var lExtraTableBody;
	lExtraTable = document.getElementById("EXTRA");
	if (lExtraTable != null)
	{
		lChildNodes = lExtraTable.childNodes;
		for (lCount = 0; lCount < lChildNodes.length; lCount++)
		{
			if (lChildNodes[lCount].nodeName == "TBODY")
			{
				lExtraTableBody = lChildNodes[lCount];
				lChildNodes = lExtraTableBody.childNodes;
				for (lCount = lChildNodes.length - 1; lCount >= 0; lCount --)
				{
					lExtraTableBody.removeChild(lChildNodes[lCount]);
				}
				break;
			}
		}
	}
}
function showEntity(pEntity)
{
	var lSearchElement;
	var lSearch;
	var lEntityConfiguration;
	var lRequest;
	var lXMLResponse;
	var lRoot;
	
	gEntityConfig = eval("entityConfiguration." + pEntity);	
	lEntityConfiguration = gEntityConfig;
	gCurrentEntity = lEntityConfiguration.entity;
	gCurrentApplicationId = lEntityConfiguration.applicationId;
	gCurrentSearchTemplate = lEntityConfiguration.searchTemplate;
	gCurrentAddEditTemplate = lEntityConfiguration.addEditTemplate;
	gCurrentListTemplate = lEntityConfiguration.listTemplate;
	gCurrentViewTemplate = lEntityConfiguration.viewTemplate;
	gCurrentEntityIdField = lEntityConfiguration.entityIdField;
	gCurrentEntityListURL = lEntityConfiguration.URLForEntityList;
	gCurrentEntityPreEditURL = lEntityConfiguration.URLForEntityPreEdit;
	gCurrentEntitySaveURL = lEntityConfiguration.URLForEntitySave;
	gCurrentEntityPreURL = lEntityConfiguration.URLForPreFetch;
	gCurrentEntityDeleteURL = lEntityConfiguration.URLForEntityDelete;
	gPostAddEdit = lEntityConfiguration.postAddEdit;
	gPostSearch = lEntityConfiguration.postSearch;
	gPostEdit = lEntityConfiguration.postEdit;
	gPostList = lEntityConfiguration.postList;
	gBeforeHeader = lEntityConfiguration.beforeHeaderRowAdd;
	gClearAddEdit = true;
	gafterRowAdd = lEntityConfiguration.afterRowAdd;
	//Check if the search element for the entity is available in Cache.
	//lSearchElement = gCache.get(pCurrentEntity + "SEARCH");
	lSearchElement = null;
	if (lSearchElement == null)
	{
		//if it is not available then fetch the template from the server.
		var lAJAXInteraction = new AJAXInteraction(gCurrentSearchTemplate, null, true);
		lRequest = lAJAXInteraction.doPost('LK=' + gLoginKey);
		lXMLResponse = lRequest.responseXML;
		lRoot = lXMLResponse.documentElement;
		lSearchElement = copyNodes(lRoot);
		//Add the template received to the cache and show the search area.
		//gCache.add(gCurrentEntity + "SEARCH", lSearchElement);
	}
	showSearch(lSearchElement);
}

function showOnlyEntity(pEntity)
{
	var lEntityConfiguration;
	
	gEntityConfig = eval("entityConfiguration." + pEntity);	
	lEntityConfiguration = gEntityConfig;
	gCurrentEntity = lEntityConfiguration.entity;
	gCurrentApplicationId = lEntityConfiguration.applicationId;
	gCurrentSearchTemplate = lEntityConfiguration.searchTemplate;
	gCurrentAddEditTemplate = lEntityConfiguration.addEditTemplate;
	gCurrentListTemplate = lEntityConfiguration.listTemplate;
	gCurrentViewTemplate = lEntityConfiguration.viewTemplate;
	gCurrentEntityIdField = lEntityConfiguration.entityIdField;
	gCurrentEntityListURL = lEntityConfiguration.URLForEntityList;
	gCurrentEntityPreEditURL = lEntityConfiguration.URLForEntityPreEdit;
	gCurrentEntitySaveURL = lEntityConfiguration.URLForEntitySave;
	gCurrentEntityPreURL = lEntityConfiguration.URLForPreFetch;
	gCurrentEntityDeleteURL = lEntityConfiguration.URLForEntityDelete;
	gPostAddEdit = lEntityConfiguration.postAddEdit;
	gPostSearch = lEntityConfiguration.postSearch;
	gPostEdit = lEntityConfiguration.postEdit;
	gPostList = lEntityConfiguration.postList;
	gBeforeHeader = lEntityConfiguration.beforeHeaderRowAdd;
	gClearAddEdit = true;
	//Check if the search element for the entity is available in Cache.
	//lSearchElement = gCache.get(pCurrentEntity + "SEARCH");
}
function showUpdateSearch()
 {
	 lSearchElement = null;
	if (lSearchElement == null)
	{
		//if it is not available then fetch the template from the server.
		var lAJAXInteraction = new AJAXInteraction(gCurrentSearchTemplate, null, true);
		lRequest = lAJAXInteraction.doPost('LK=' + gLoginKey);
		lXMLResponse = lRequest.responseXML;
		lRoot = lXMLResponse.documentElement;
		lSearchElement = copyNodes(lRoot);

		//Add the template received to the cache and show the search area.
		//gCache.add(gCurrentEntity + "SEARCH", lSearchElement);
	}

 }
/**
 * This function shows the search area to the user.
 * @param pSearchElement - The Search element that should be used to fill the Search DIV.
 */
function showSearch(pSearchElement)
{
	var lSearch;
	clearDIV("Search");
	clearDIV("AddEdit");
	clearDIV("Listing");
	lSearch = document.getElementById("Search");
	lSearch.appendChild(pSearchElement);
	getPreEntity();
	if (gPostSearch != null)
	{
		eval(gPostSearch);
	}
	clearForm("LIST");
	enableDisable(document.SEARCH);
	//showEntityList();
}
/**
 * This function is used to show the Add Edit area of the screen for
 * the entity in the Add mode. 
 */
function showEntityAdd()
{
	//enableDisable();
	//Set the current entity to be edited as blank as we need
	//to show an empty form.
	gClearAddEdit = true;
	gCurrentEntityIdForEdit = "";
	showEntityAddEdit();
}
/**
 * This function is used to show the Add Edit area of the screen for
 * the entity in the Edit mode. 
 */
function showEntityEdit()
{
	//Get the Id of the entity selected for Edit.
	var lCount;
	var lForm;
	var lElementExists;
	var lSelectedValue;
	var lElement;
	lElement = eval("document.LIST." + gCurrentEntityIdField);
	if (!lElement)
	{
		alert("Please select a value to edit.");
		return;
	}
	gClearAddEdit = true;
	lSelectedValue = gUtil.getValue(lElement);
	if (gUtil.trim(lSelectedValue[0]).length > 0 || gUtil.trim(lSelectedValue[1]).length > 0)
	{
		//alert("Selected Value after trim"+lSelectedValue);
	}
	else
	{
		alert("Please select a value to edit.");
		return;
	}
	showEntityAddEdit();
	submitForm(document.LIST, gCurrentEntityPreEditURL, "POST", showEdit, gLoginKey, null);
}
/**
  * This function checks for the availability of the Add template for the
  * current entity. If this exists this invokes the ShowAddEdit else
  * it submits a request for fetching the template from the server.
  */
function showEntityAddEdit()
{
	var lAddEditElement;
	var lRoot;
	var lAddEditElement;
	var lRequest;
	//lAddEditElement = gCache.get(gCurrentEntity + "ADDEDIT");
	lAddEditElement = null;
	if (lAddEditElement == null)
	{
		var lAJAXInteraction = new AJAXInteraction(gCurrentAddEditTemplate, null, true);
		lRequest = lAJAXInteraction.doPost("LK=" + gLoginKey);
		lXMLResponse = lRequest.responseXML;
		lRoot = lXMLResponse.documentElement;
		lRoot = copyNodes(lRoot);
		lAddEditElement = lRoot.childNodes[1];
		//gCache.add(gCurrentEntity + "ADDEDIT", lAddEditElement);
	}
	showAddEdit(lAddEditElement);
}
/**
 * This function shows the AddEdit are and if it is an edit request
 * it posts a request to the edit URL for the entity.
 * @param pAddEditElement - The Add Edit Element that is to be
 * shown in the AddEdit DIV.
 */
function showAddEdit(pAddEditElement)
{
	var lAddEdit;
	clearDIV("AddEdit");
	lAddEdit = document.getElementById("AddEdit");
	lAddEdit.appendChild(pAddEditElement);
	clearForm("AddEdit");
	clearExtras();
	getPreEntity();
	if (gEntityConfig.postAddEdit != null)
	{
		eval(gEntityConfig.postAddEdit + "()");
	}

}
/**
 * This function shows the details of the entity as retrieved from
 * the server.
 * @param pXMLObject - The XMLObject returned from the server.
 */
function showEdit(pXMLObject)
{
	var lXMLResponse;
	var lBaseEdit;
	var lEntity;
	var lData;
	var lLists;
	var lChildren;
	var lCount;
	var lSuccess;
	lXMLResponse = pXMLObject.responseXML;
	lBaseEdit = lXMLResponse.documentElement;
	lBaseEdit = copyNodes(lBaseEdit);
	lSuccess = handleResult(lBaseEdit.childNodes[0]);
	if (lSuccess)
	{
		lChildren = lBaseEdit.childNodes;
		lLists = null;
		for (lCount = 1; lCount < lChildren.length; lCount++)
		{
			if (!isNodeNull(lChildren[lCount]))
			{
					if (lChildren[lCount].nodeName == "DATA")
				{
						lData = lChildren[lCount];
				}
				else if (lChildren[lCount].nodeName == "LISTS")
				{
					lLists = parseLists(lChildren[lCount]);
				}
			}
		}
		
		gCurrentEntityIdForEdit = "";
		if (lLists != null)
		{
			fillSelectsInForm(document.AddEdit, lLists);
		}
			for (lCount = 0; lCount < lData.childNodes.length; lCount++)
			{
				fillForm("AddEdit", lData.childNodes[lCount]);
			}
		if (gEntityConfig.postAddEdit!= null)
		{
			eval (gPostEdit + "(pXMLObject)");
		}
	}
}

/**
 * This function will be used to show the list of entities requested
 * from the server.
 */
function showEntityList(isSave)
{
	var lListElement;
	var lRoot;
	var lListElement;
	var lRequest;
	requestList(isSave);
}

/**
 * This function requests for the list of entities based on the filter
 * options specified by the user from the server.
 */
function requestList(isSave)
{
	var lRequest;
	var lAJAXInteraction;
	var lXMLObject;
	//try{
	//	lRequest = getRequest(document.LIST, gLoginKey);
		//document.SEARCH.gEntityConfig.entityIdField = eval("document.LIST." + gEntityConfig.entityIdField);
	//	}
	//	catch(Exception )
	//	{
	//		
	//	}
		lRequest = getRequest(document.SEARCH, gLoginKey);
		lRequest+= "&Save=" + isSave;
		//submitForm(document.SEARCH, gCurrentEntityListURL, "POST", null, gLoginKey, null);
		lAJAXInteraction = new AJAXInteraction(gCurrentEntityListURL, null, true);
		lXMLObject = lAJAXInteraction.doPost(lRequest);
		showListing(lXMLObject);
		

}
/**
 * This function shows the list of entities retrieved from the server.
 * @param pXMLObject - The XMLObject returned from the server.
 */
function showList(pXMLObject)
{
	var lListElement;
	//lListElement = gCache.getListing(gCurrentEntity);
	fillTable(pXMLObject, lListElement);
	if (gPostList != null)
	{
		eval(gPostList);
	}
}
/**
 * This method submits the AddEdit for to save the entity to the server.  
 */
function saveEntity()
{
	submitForm(document.AddEdit,gCurrentEntitySaveURL, "POST", handleSave, gLoginKey, null);
}
/**
 * This function handles the response to the save request for any entity.
 * @param pXMLObject - The XMLObject returned from the server.
 */
function handleSave(pXMLObject)
{
	var lXMLResponse;
	var lRoot;
	var lStatus;
	var lResult;
	var lStatus;
	var lResponse;
	var lCount;
	var lFocusField;
	var lCount;
	var lSuccess;
	lXMLResponse = pXMLObject.responseXML;
	lRoot = lXMLResponse.documentElement;
	lRoot = copyNodes(lRoot);
	lResult = lRoot.childNodes[0];
	lSuccess = handleResult(lResult, "AddEdit");
	if (lSuccess)
	{
		clearForm("AddEdit");
		lAddEdit = document.getElementById("AddEdit");
		if (lAddEdit.childNodes != null)
		{
			for (lCount = lAddEdit.childNodes.length - 1; lCount >= 0; lCount--)
			{
				lAddEdit.removeChild(lAddEdit.childNodes[lCount]);
			}
		}
		//showEntityList(true);
		//showUpdateSearch();
	}
}
function handleResult(pResult, pFormName)
{
	var lSuccess;
	var lStatus;
	var lMessage;
	var lParam;
	var lFocusField;
	var lCount;
	lSuccess = false;
	if (pResult.attributes != null)
	{
		lStatus = null;
		lMessage = null;
		lStatus = pResult.attributes.getNamedItem("STATUS").value;
		if (pResult.attributes.getNamedItem("MESSAGE") != null)
		{
			lMessage = decodeURI(pResult.attributes.getNamedItem("MESSAGE").value);
		}
		
		if (lStatus != null)
		{
			lSuccess = (lStatus == "0");
			if (lMessage != null)
			{
				if(lStatus == "1")
				{
					
				}
				if(lStatus == "2")
				{
					clearDIV("Listing");
					clearDIV("AddEdit");
				}
				showFailureMessage(lMessage);//showMessage(lMessage);
				if(lSuccess)
				{
					if (lMessage != null)
					{
					    showSuccessMessage(lMessage);
					}
				}
				else
				{
					if (lMessage != null)
						{
						   showFailureMessage(lMessage);
						}
				}
			}
			if(lStatus != "2")
			{
				if (pResult.attributes.getNamedItem("FOCUS") != null)
				{
					lFocusField = pResult.attributes.getNamedItem("FOCUS").value;
				}
				if (lFocusField != null)
				{
					if (trim(lFocusField).length > 0)
					{
						//If the field to focus on exists then set the focus to the field.
						if ("document." + pFormName + "." + lFocusField)
						{
							eval("document." + pFormName + "." + lFocusField + ".focus()");
						}
					}
				}
			}
		}
	}
	return lSuccess;
}

function showSuccessMessage(pMessage){

//alert("inside showsuccessmessg");
 var scrollX, scrollY;
      
      if (document.all)
      {
         if (!document.documentElement.scrollLeft)
            scrollX = document.body.scrollLeft;
         else
            scrollX = document.documentElement.scrollLeft;
               
         if (!document.documentElement.scrollTop)
            scrollY = document.body.scrollTop;
         else
            scrollY = document.documentElement.scrollTop;
      }   
      else
      {
         scrollX = window.pageXOffset;
         scrollY = window.pageYOffset;
      }

	var lMessageDiv;
	var lNewDiv;
	var  lSpan;
	var lText;
	var lBold;

	var lInfoDiv = document.getElementById("INFODIV");
	if (lInfoDiv)
	{
		clearDIV("INFODIV");
		var lHtmlString = "<table><tbody><tr><td><ul class='err_green'><li onclick='clearDIV(\"INFODIV\")'>"+pMessage+"</li></ul></td></tr></tbody></table>";
		lInfoDiv.innerHTML=lHtmlString;
		lInfoDiv .style.position = "fixed";
		lInfoDiv .style.visibility = "visible";
		
	}
	else
	{
	    lMessageDiv = document.getElementById("MESSAGEDIV");
		lMessageDiv.innerHTML = "<table><tr><td>" + pMessage + "</td><td><span id='CLOSE' onClick='hideMessage()'><sup>x</sup></span></td></tr></table>";
		lMessageDiv.style.position = "fixed";
		lMessageDiv.style.top = windowHeight() - 25;
		lMessageDiv.style.left = 0;
		lMessageDiv.style.backgroundColor = "#FFFF99";
		lMessageDiv.style.visibility = "visible";	
		timer = setTimeout("hideMessage()", 10000);
	}
}
function  showFailureMessage(pMessage)
{
	var scrollX, scrollY;
    if (document.all)
    {
        if (!document.documentElement.scrollLeft)
            scrollX = document.body.scrollLeft;
        else
            scrollX = document.documentElement.scrollLeft;
               
        if (!document.documentElement.scrollTop)
            scrollY = document.body.scrollTop;
        else
            scrollY = document.documentElement.scrollTop;
    }   
    else
    {
        scrollX = window.pageXOffset;
        scrollY = window.pageYOffset;
    }
	var lMessageDiv;
	var lNewDiv;
	var  lSpan;
	var lText;
	var lInfoDiv = document.getElementById("INFODIV");

	if (lInfoDiv)
	{
		clearDIV("INFODIV");
		var lHtmlString = "<table><tbody><tr><td nowrap ><ul class='err_red'><li onclick='clearDIV(\"INFODIV\")'>"+pMessage+"</li></ul></td></tr></tbody></table>";
		lInfoDiv.innerHTML=lHtmlString;
		lInfoDiv .style.position = "fixed";
		lInfoDiv .style.top = scrollY+75;
		lInfoDiv .style.visibility = "visible";
	}
	else
	{
	    lMessageDiv = document.getElementById("MESSAGEDIV");
		lMessageDiv.innerHTML = "<table><tbody><tr><td>" + pMessage + "</td><td><span id='CLOSE' onClick='hideMessage()'><sup>x</sup></span></td></tr></tbody></table>";
		lMessageDiv.style.position = "fixed";
		lMessageDiv.style.top = windowHeight() - 25;
		lMessageDiv.style.left = 0;
		lMessageDiv.style.backgroundColor = "#FFFF99";
		lMessageDiv.style.visibility = "visible";	
		timer = setTimeout("hideMessage()", 10000);
	}
}
function fnMessageClose()
{

	if(!(document.getElementById(document.getElementById("INFODIV"),"DIV")))
	{
		clearDIV("INFODIV");
    }
}
function showMessage(pMessage)
{
	var lMessageDiv;
	lMessageDiv = document.getElementById("MESSAGEDIV");
	lMessageDiv.innerHTML = "<table><tr><td>" + pMessage + "</td><td><span id='CLOSE' onClick='hideMessage()'><sup>x</sup></span></td></tr></table>";
	lMessageDiv.style.position = "fixed";
	lMessageDiv.style.top = windowHeight() - 25;
	lMessageDiv.style.left = 0;
	lMessageDiv.style.backgroundColor = "#FFFF99";
	lMessageDiv.style.visibility = "visible";
	timer = setTimeout("hideMessage()", 10000);

}


function hideMessage()
{
	var lMessageDiv;
	if (timer)
	{
		clearTimeout(timer);
	}
	lMessageDiv = document.getElementById("MESSAGEDIV");
	lMessageDiv.style.visibility = "hidden";
}
function windowWidth()
{
	if (window.innerWidth)
	    return (window.innerWidth);                     // Mozilla
    if (document.documentElement.clientWidth)
	    return document.documentElement.clientWidth;    // IE6
    if (document.body.clientWidth)
	    return document.body.clientWidth;               // IE DHTML-compliant any other
}
function windowHeight()
{
	if (window.innerHeight)
	    return (window.innerHeight);                     // Mozilla
    else if (document.documentElement.clientHeight)
	    return document.documentElement.clientHeight;    // IE6
    else if (document.body.clientHeight)
	    return document.body.clientHeight;               // IE DHTML-compliant any other
}
/**
 * This function will cancel the Add or Edit process.
 */
function cancelAddEdit()
{
	var lAddEdit;
	clearForm("AddEdit");
	lAddEdit = document.getElementById("AddEdit");
	for (lCount = lAddEdit.childNodes.length - 1; lCount >= 0; lCount--)
	{
		lAddEdit.removeChild(lAddEdit.childNodes[lCount]);
	}
}
/**
 * This function should get the list of lists required for searching
 * or adding or editing the entity. Typically for the Project we will
 * need the list of Project Statuses, Project Types, and Clients to be
 * shown for user selection for filtering and for adding or editing.
 * For Editing the lists required will be returned with the entity being
 * edited.
 */
function getPreEntity()
{
	if (gEntityConfig.URLForPreFetch != null)
	{
		var lAJAXInteraction;
		lAJAXInteraction = new AJAXInteraction(gEntityConfig.URLForPreFetch, null,true);
		handlePreEntity(lAJAXInteraction.doPost('LK=' + gLoginKey));
	}
}
/**
 * This method will get the Lists for the entity to be used
 * to fill the various select options in the search and/or
 * the Add/Edit form.
 * @param {Object} pXMLObject
 */
function handlePreEntity(pXMLObject)
{
	var lXMLResponse;
	var lRoot;
	var lLists;
	var lCount;
	var lElementCount;
	var lOptionCount;
	var lForm;
	var lOptions;
	var lSuccess;
	lXMLResponse = pXMLObject.responseXML;
	lRoot = lXMLResponse.documentElement;
	lSuccess = handleResult(lRoot.childNodes[0], null);
	if (lSuccess)
	{
		lLists = parseLists(lRoot.childNodes[1]);
		lForm = document.SEARCH;
		fillSelectsInForm(lForm, lLists);
		lForm = document.AddEdit;
		fillSelectsInForm(lForm, lLists);
	}
}
/**
 * This method fills the Select controls in the form based on the values
 * in the Lists.
 * @param {Object} pForm - The Form in which the Selects have to be filled.
 * @param {Object} pLists - The Lists from which the Selects have to be filled.
 */
function fillSelectsInForm(pForm, pLists)
{
	var lCount;
	var lElementCount;
	var lOptionCount;
	var lList;
	var lOptions;
	var lSearch;
	for (lElementCount = 0; lElementCount < pForm.elements.length; lElementCount++)
	{
		if (pForm.elements[lElementCount].type == "select-one" || pForm.elements[lElementCount].type == "select-multiple")
		{
			fillFromList(pForm.elements[lElementCount], pLists);
		}
	}
}
/**
 * This method fills the select option field based on the lists returned from the server.
 * @param {Object} pSelect - The Select Element to be filled
 * @param {Object} pLists - The List of Lists returned from the server.
 */
function fillFromList(pSelect, pLists)
{
	var lCount;
	var lSearch;
	var lList;
	var lOptions;
	for (lCount = 0; lCount < pLists.length; lCount++)
	{
		lSearch = false;
		pSelect.name  = Url.decode(pSelect.name);
		pLists[lCount].name = Url.decode(pLists[lCount].name);
		if (pSelect.name == pLists[lCount].name || pSelect.name == ("S_" + pLists[lCount].name) || startsWith(pSelect.name, pLists[lCount].name))
		{
			lList = pLists[lCount];
			clearSelect(pSelect);

			lOptions = pSelect.options;
			if (pSelect.name == ("S_" + pLists[lCount].name) || pSelect.name == (pLists[lCount].name))
			{
				lOptions[lOptions.length] = new Option("-- Select --", "-1");
				lSearch = true; 
			}
			for (lOptionCount = 0; lOptionCount < lList.listItemDisplays.length; lOptionCount++)
			{
				if ((lSearch && lList.listItemValues[lOptionCount].length != 0) || !lSearch)
				{
					lOptions[lOptions.length] = new Option(Url.decode(lList.listItemDisplays[lOptionCount]), Url.decode(lList.listItemValues[lOptionCount]));
				}
			}
			if (lOptions.length > 0)
			{
				lOptions[0].selected = true;
			}
			break;
		}
	}
}
/**
 * This method copies the options in one select box to another.
 * @param {Object} pFillSelect - This is the Select element to be filled.
 * @param {Object} pFromSelect - This is the Select element from which the data needs to be copied.
 */
function fillSelectFromSelect(pFillSelect, pFromSelect)
{
	var lCount;
	clearSelect(pFillSelect);
	for (lCount = 0; lCount < pFromSelect.options.length; lCount++)
	{
		pFillSelect.options[lCount] = new Option(pFromSelect.options[lCount].text, pFromSelect.options[lCount].value);
	}
}
/**
 * This method clears all the selection in a select element.
 * @param {Object} pSelect
 */
function clearSelect(pSelect)
{
	var lCount;
	for (lCount = pSelect.options.length - 1; lCount >= 0; lCount--)
	{
		pSelect.options[lCount] = null;
	}
}
/**
 * This method checks if the Element Name starts with the List Name.
 * @param {Object} pElementName
 * @param {Object} pListName
 */
function startsWith(pElementName, pListName)
{
	var lStartsWith = false;
	var lAppendage;
	var lCount;
	if (pElementName.indexOf(pListName) == 0)
	{
		lAppendage = pElementName.substr(pListName.length);
		if (lAppendage.length == 0)
		{
			lStartsWith = true;
		}
		else
		{
			if (!isNumeric(lAppendage))
			{
				lStartsWith = false;
			}
			else
			{
				lStartsWith = true;
			}
		}
	}
	return lStartsWith;
}
/**
 * Given a XML Node/Document of name LISTS this function will return an
 * array of lists available in the XML.
 * @param {Object} pXMLNode - The XMLNode of Lists.
 */
function parseLists(pXMLNode)
{
	var lLists;
	var lXMLLists;
	var lXMLItems;
	var lCount = 0;
	var lItemValue;
	var lItemDisplay;
	var lItemValues;
	var lItemDisplays;
	var lListNode;
	var lListName;
	var lAttributes;
	var lItemCount;
	var lAttributeCount;
	var lItemNode;
	var lList;

	lLists = new Array();
	lXMLLists = pXMLNode.childNodes;
	for (lCount = 0; lCount < lXMLLists.length; lCount++)
	{
		lListNode = lXMLLists[lCount];
		if (!isNodeNull(lListNode))
		{
			if (lListNode.nodeName == "LIST")
			{
				lAttributes = lListNode.attributes;
				for (lAttributeCount = 0; lAttributeCount < lAttributes.length; lAttributeCount++)
				{
					lAttribute = lAttributes[lAttributeCount];
					if (!isNodeNull(lAttribute))
					{
						if (lAttribute.nodeName == "NAME")
						{
							lListName = lAttribute.childNodes[0].data;
						}
					}
				}
				lXMLItems = lListNode.childNodes;
				lItemValues = new Array();
				lItemDisplays = new Array();
				for (lItemCount = 0; lItemCount < lXMLItems.length; lItemCount++)
				{
					lItemNode = lXMLItems[lItemCount];
					if (!isNodeNull(lItemNode))
					{
						lAttributes = lItemNode.attributes;
						lItemValue = "";
						lItemDisplay = "";
						for (lAttributeCount = 0; lAttributeCount < lAttributes.length; lAttributeCount++)
						{
							lAttribute = lAttributes[lAttributeCount];
							if (!isNodeNull(lAttribute))
							{
								if (lAttribute.nodeName == "ID")
								{
									lItemValue = lAttribute.childNodes[0].data;
								}
								else if (lAttribute.nodeName == "DISPLAY")
								{
									lItemDisplay = lAttribute.childNodes[0].data;
						
								}
							}
						}
						if (lItemValue == "" && lItemDisplay != "")
							lItemValue = lItemDisplay;
						if (lItemValue != "" && lItemDisplay == "")
							lItemDisplay = lItemValue;
						if (lItemValue != "" && lItemDisplay != "")
						{
							lItemValues[lItemValues.length] = lItemValue;
							lItemDisplays[lItemDisplays.length] = lItemDisplay;
						}
					}
				}
				lList = new List(lListName, lItemValues, lItemDisplays);
				lLists[lLists.length] = lList;
			}
		}
	}
	return lLists;
}
/**
 * This method copies the specified node and all the nodes under the specified node
 * to a new node object.
 * @param {Object} pNode
 */
function copyElement(pNode)
{
	var lNewNode;
	var lNewChildNode;
	var lAttributes;
	var lAttributeCount;
	var lAttribute;
	var lAttributeString;
	var lCount;
	if (pNode.nodeType == TEXT_NODE)
	{
		lNewNode = document.createTextNode(pNode.data);
	}
	else
	{
		if (!document.all)
		{
			lNewNode = document.createElement(pNode.nodeName);
			lAttributes = pNode.attributes;
			if (lAttributes != null)
			{
				for (lAttributeCount = 0; lAttributeCount < lAttributes.length; lAttributeCount++)
				{
					lAttribute = lAttributes[lAttributeCount];
					lNewNode.setAttribute(lAttribute.name, lAttribute.value);
				}
			}
		}
		else
		{
			lAttributeString = "";
			lAttributes = pNode.attributes;
			if (lAttributes != null)
			{
				for (lAttributeCount = 0; lAttributeCount < lAttributes.length; lAttributeCount++)
				{
					lAttribute = lAttributes[lAttributeCount];
					lAttributeString += " " + lAttribute.name + "=\"" + lAttribute.value + "\"";
				}
			}
			lAttributeString = "<" + pNode.nodeName + " " + lAttributeString + "/>";
			lNewNode = document.createElement(lAttributeString);
		}
		for (lCount = 0; lCount < pNode.childNodes.length; lCount++)
		{
			if (!isNodeNull(pNode.childNodes[lCount]))
			{
				lNewChildNode = copyElement(pNode.childNodes[lCount]);
				lNewNode.appendChild(lNewChildNode);
			}
		}
	}
	return lNewNode;
}
function split(pString, pSplitAt)
{
	var lTokens;
	var lFoundAt;
	lTokens = new Array();
	lFoundAt = pString.indexOf(pSplitAt);
	if (lFoundAt >= 0)
	{
		lTokens[lTokens.length] = pString.substring(0, lFoundAt)
		pString = pString.substring(lFoundAt + 1);
	}
	lFoundAt = pString.indexOf(pSplitAt);
	if (lFoundAt >= 0)
	{
		lTokens[lTokens.length] = pString.substring(0, lFoundAt)
	}
	else
	{
		lTokens[lTokens.length] = pString;
	}
	return lTokens;
}
function isNumeric(pValue)
{
	var lCount;
	var lNumbers = "0123456789";
	var lIsNumeric = true;
	if (pValue != null)
	{
		for (lCount = 0; lCount < pValue.length && lIsNumeric; lCount++)
		{
			if (lNumbers.indexOf(pValue.substr(lCount, 1)) < 0)
			{
				lIsNumeric = false;
			}
		}
	}
	else
	{
		lIsNumeric = false;
	}
	return lIsNumeric;
}
function isSomethingChecked(pElement)
{
	var lCount;
	var lIsChecked;
	lIsChecked = false;
	for (lCount = 0; lCount < pElement.length && !lIsChecked; lCount++)
	{
		lIsChecked = pElement[lCount].checked;
	}
	return lIsChecked;
}
function getHoursMinutesAsInteger(pTime)
{
	var lFoundAt;
	var lTime;
	lTime = pTime;
	lFoundAt = lTime.indexOf(":");
	if (lFoundAt >= 0)
	{
		lTime = lTime.substr(0, lFoundAt) + lTime.substr(lFoundAt + 1);
	}
	return parseInt(lTime);
}
function timeDiff(pEndTime, pStartTime)
{
	var lFoundAt;
	var lStartTime;
	var lEndTime;
	var lStartHour;
	var lStartMinutes;
	var lEndHour;
	var lEndMinutes;
	var lDifference;
	lStartTime = getHoursMinutesAsInteger(pStartTime);
	lEndTime = getHoursMinutesAsInteger(pEndTime);
	lStartTime = lStartTime + "";
	lEndTime = lEndTime + "";
	lStartHour = lStartTime.substr(0, (lStartTime.length - 2));
	lStartMinute = lStartTime.substr(lStartTime.length - 2);
	lEndHour = lEndTime.substr(0, lEndTime.length - 2);
	lEndMinute = lEndTime.substr(lEndTime.length - 2);
	lDifference = (lEndHour - lStartHour) * 60;
	lDifference += (lEndMinute - lStartMinute);

	return lDifference;
}
function handleHTMLResponse(pXMLObject)
{
	var lCount;
	if (pXMLObject.getResponseHeader("Content-Type").indexOf("text/html") == 0)
	{
		if (pXMLObject.responseText.indexOf("<TITLE>Login</TITLE>") > 0)
		{
			window.location.href = "/TCSFramework/jsp/global/AccessDenied.jsp";
			return false;
		}
	}
	return true;
}
function showListing(pXMLObject)
{
	var lXMLResponse;
	var lRoot;
	var lSuccess;
	var lHeaderNodes;
	var lHeader;
	var lList;
	var lCount;
	var lRowCount;
	var lTable;
	var lTablePre;
	var lTableHead;
	var lTableBody;
	var lListDiv;
	var lHasKeyValue;
	var lElement;
	var lRow;
	var lCell;
	var lTablePreHead;
	
	lXMLResponse = pXMLObject.responseXML;
	lRoot = lXMLResponse.documentElement;
	lRoot = copyNodes(lRoot);
	lSuccess = handleResult(lRoot.childNodes[0], "SEARCH");
	if (lSuccess)
	{
		if (lRoot.childNodes.length == 2)
		{
			lList = lRoot.childNodes[1];
			lHeader = gCache.get(gCurrentEntity + "HEADER");
		}
		else
		{
			//lHeaderNodes = copyNodes(lRoot.childNodes[1]);
			lHeaderNodes = lRoot.childNodes[1];
			
			lHeader = new Header();
			lHeader.parse(lHeaderNodes);
		
			//gCache.add(gCurrentEntity + "HEADER", lHeaderNodes);
			lList = lRoot.childNodes[2];
		}
		
		//for tabs
		lTableTab = gDOM.createNewElement("TABLE", [{name:"BORDER", value:"0"},{name:"width", value:"99%"},{name:"align", value:"center"},{name:"cellspacing", value:"0"}]);
		lTableTabHead = gDOM.createNewElement("THEAD",null);
		lTableTab.appendChild(lTableTabHead);
		
		//for preheader
		lTablePre = gDOM.createNewElement("TABLE", [{name:"BORDER", value:"0"},{name:"width", value:"98%"},{name:"align", value:"center"},{name:"class", value:"border"},{name:"cellpadding", value:"4"},{name:"cellspacing", value:"0"}]);
		lTablePreHead = gDOM.createNewElement("THEAD",null);
		lTablePre.appendChild(lTablePreHead);
		
		//clearDIV("Listing");
		lTable = gDOM.createNewElement("TABLE", [{name:"BORDER", value:"0"},{name:"width", value:"98%"},{name:"align", value:"center"},{name:"class", value:"border"},{name:"cellpadding", value:"4"},{name:"cellspacing", value:"0"}]);
		lTableHead = gDOM.createNewElement("THEAD", [{name:"class", value:"tableheader"}]);
		lTable.appendChild(lTableHead);
		//check if we have a key value
		lHasKeyValue = false;
		if (lList.childNodes.length > 0)
		{			
			if (lList.childNodes[0].attributes.getNamedItem("KEYVALUE"))
			{
				lHasKeyValue = true;
				if (lList.childNodes[0].attributes.getNamedItem("KEYVALUE").value=="")
				{
					lHasKeyValue = false;
				}
			}
		}
		showTabs(lTableTab, lTableTabHead);
		showPreHeader(lTablePre, lTablePreHead);
		showHeader(lTableHead, lHeader, lHasKeyValue);
		lTableBody = gDOM.createNewElement("TBODY", null);
		lTable.appendChild(lTableBody);
		for (lCount = 0, lRowCount = 0; lCount < lList.childNodes.length; lCount++)
		{
			if (!isNodeNull(lList.childNodes[lCount]))
			{
				showListItem(lTableBody, lList.childNodes[lCount], lHeader, lRowCount);
				lRowCount++;
			}
		}
		clearDIV("Listing");
		clearDIV("AddEdit");
		if(lRowCount == 0)
		{
			var lMessage = "NO RECORD EXISTS";
			lListDiv = document.getElementById("Listing");
			lTable = gDOM.createNewElement("TABLE", [{name:"BORDER", value:"0"},{name:"width", value:"98%"},{name:"align", value:"center"},{name:"class", value:"tableheader"},{name:"cellpadding", value:"0"},{name:"cellspacing", value:"0"}]);
			lListDiv.appendChild(lTable);
			lTableBody = gDOM.createNewElement("TBODY", null);
			lTable.appendChild(lTableBody);
			lRow = gDOM.createNewElement("TR", null);
			lTableBody.appendChild(lRow);
			lRow = gDOM.createNewElement("TR", null);
			lTableBody.appendChild(lRow);
			lCell = gDOM.createNewElement("TD", [{name:"width", value:"98%"},{name:"align", value:"center"}]);
			lRow.appendChild(lCell);
			lTextNode = document.createTextNode(lMessage);
			lCell.appendChild(lTextNode);
			
			//lListDiv.innerHTML = "<table align=center><br><br><tr><td align=center class=tableheader><b>" + lMessage + "</b></td><td></table>";
			//lListDiv.style.position = "absolute";
		}
		else
		{
			lListDiv = document.getElementById("Listing");
			lListDiv.appendChild(lTableTab);
			lListDiv.appendChild(lTablePre);
			lListDiv.appendChild(lTable);
			//Append buttons for first, previous, next and last
			lTable = gDOM.createNewElement("TABLE", [{name:"BORDER", value:"0"},{name:"width", value:"98%"},{name:"align", value:"center"},{name:"class", value:"border"},{name:"cellpadding", value:"0"},{name:"cellspacing", value:"0"}]);
			lListDiv.appendChild(lTable);
			lTableBody = gDOM.createNewElement("TBODY", null);
			lTable.appendChild(lTableBody);
			
			lRow = gDOM.createNewElement("TR", [{name:"class", value:"text"},{name:"width", value:"98%"}]);
			lTableBody.appendChild(lRow);
			
			lRow = gDOM.createNewElement("TR", null);
			lTableBody.appendChild(lRow);
	
			lCell = gDOM.createNewElement("TD", [{name:"align", value:"center"}]);
			lRow.appendChild(lCell);

			
	
			/*lListDiv.appendChild(lTable);
			lCell = gDOM.createNewElement("TR", null);
			lListDiv.appendChild(lCell);
			lCell = gDOM.createNewElement("TD", null);
			lListDiv.appendChild(lCell);
			*/
			
			if (lList.attributes.getNamedItem("P"))
			{
				if (lList.attributes.getNamedItem("P").value == "Y")
				{
					lElement = gDOM.createNewElement("INPUT", [{name:"type", value:"button"},{name:"value", value:"First"},{name:"class", value:"button"},{name:"onclick", value:"pageToFirst()"}]);
					lCell.appendChild(lElement);
					lElement = gDOM.createNewElement("INPUT", [{name:"type", value:"button"},{name:"value", value:"Previous"},{name:"class", value:"button"},{name:"onclick", value:"pageToPrevious()"}]);
					lCell.appendChild(lElement);
				}
			}
			
			if (lList.attributes.getNamedItem("M"))
			{
				if (lList.attributes.getNamedItem("M").value == "Y")
				{
					lElement = gDOM.createNewElement("INPUT", [{name:"type", value:"button"},{name:"value", value:"Next"},{name:"class", value:"button"},{name:"onclick", value:"pageToNext()"}]);
					lCell.appendChild(lElement);
					lElement = gDOM.createNewElement("INPUT", [{name:"type", value:"button"},{name:"value", value:"Last"},{name:"class", value:"button"},{name:"onclick", value:"pageToLast()"}]);
					lCell.appendChild(lElement);
					
				}
			}
			lRow = gDOM.createNewElement("TR", [{name:"class", value:"text"},{name:"width", value:"98%"}]);
			lTableBody.appendChild(lRow);
		
			/*lRow = gDOM.createNewElement("TR", null);
			lTableBody.appendChild(lRow);
			lCell = gDOM.createNewElement("TD", null);
			lRow.appendChild(lCell);
	
			lRow = gDOM.createNewElement("TR", [{name:"class", value:"text"},{name:"width", value:"98%"}]);
			lTableBody.appendChild(lRow);
			
			lRow = gDOM.createNewElement("TR", null);
			lTableBody.appendChild(lRow);
			lCell = gDOM.createNewElement("TD", null);
			lRow.appendChild(lCell);
			*/
			//Append Hidden Elements
			//Start Key
			if ((lList.attributes.getNamedItem("P").value != "Y") &&(lList.attributes.getNamedItem("M").value != "Y"))
			{
				lListDiv.removeChild(lTable);
			}
			lElement = gDOM.createNewElement("INPUT", [{name:"type", value:"hidden"},{name:"name", value:"SK"}]);
			//lListDiv.appendChild(lElement);
			if (lList.attributes.getNamedItem("SK"))
			{
				lElement.value = lList.attributes.getNamedItem("SK").value;
			}
			//End Key
			lListDiv.appendChild(lElement);
			//lCell.appendChild(lElement);
			lElement = gDOM.createNewElement("INPUT", [{name:"type", value:"hidden"},{name:"name", value:"EK"}]);
			if (lList.attributes.getNamedItem("EK"))
			{
				lElement.value = lList.attributes.getNamedItem("EK").value;
			}
			lListDiv.appendChild(lElement);
			//lCell.appendChild(lElement);
			//Start Row
			lElement = gDOM.createNewElement("INPUT", [{name:"type", value:"hidden"},{name:"name", value:"FR"}]);
			if (lList.attributes.getNamedItem("FR"))
			{
				lElement.value = lList.attributes.getNamedItem("FR").value;
			}
			lListDiv.appendChild(lElement);
			//lCell.appendChild(lElement);
			//End Row
			lElement = gDOM.createNewElement("INPUT", [{name:"type", value:"hidden"},{name:"name", value:"LR"}]);
			if (lList.attributes.getNamedItem("LR"))
			{
				lElement.value = lList.attributes.getNamedItem("LR").value;
			}
			lListDiv.appendChild(lElement);
			//lCell.appendChild(lElement);
			//Total Rows
			lElement = gDOM.createNewElement("INPUT", [{name:"type", value:"hidden"},{name:"name", value:"TR"}]);
			if (lList.attributes.getNamedItem("TR"))
			{
				lElement.value = lList.attributes.getNamedItem("TR").value;
			}
			lListDiv.appendChild(lElement);
			//lCell.appendChild(lElement);
		}
		setParametersForList(lListDiv, lRoot.childNodes[3].childNodes); 
	}
}
function showHeader(pTableHead, pHeader, pHasKeyValue)
{
	var lCount;
	var lHide;
	var lElement;
	var lRow;
	var lCell;
	var lDisplay;
	var lColumnCount;
	var lAttributeCount;
	var lCellNode;
	var lColumn;
	var lAttributes;
	var lAttributesHeader;
	var lRowHeader;
	var lCellHeader;
	lAttributes = null;
	if (gEntityConfig.headerRowAdd != null)
	{
		eval("lAttributes = " + gEntityConfig.headerRowAdd + "(pHeader)");
	}
	
	lRow = gDOM.createNewElement("TR", lAttributes);
	if (pHasKeyValue)
	{
		lCell = gDOM.createNewElement("TD", lAttributes);
		lCell.appendChild(document.createTextNode(" "));
		lRow.appendChild(lCell);
	}
	for (lCount = 0, lColumnCount = 0; lCount < pHeader.numberOfColumns; lCount++)
	{
		lAttributes = null;
		lColumn = pHeader.columns[lCount];
		if (lColumn.hide != "1")
		{
			if (gEntityConfig.headerCellAdd != null)
			{
				eval("lAttributes = " + gEntityConfig.headerCellAdd + "(pHeader, lCount)");
			}
			if (lAttributes == null)
			{
				lAttributes = new Array();
			}
			for (lAttributeCount = 0; lAttributeCount < lColumn.myattributes.length; lAttributeCount++)
			{
				lAttributes[lAttributes.length] = lColumn.myattributes[lAttributeCount];
			}
			lCell = gDOM.createNewElement("TD", lAttributes);
			lCell.appendChild(document.createTextNode(lColumn.display));
			lRow.appendChild(lCell);
		}
		lColumnCount++;
	}
	pTableHead.appendChild(lRow);
}

function showPreHeader(pTablePre, pTablePreHead)
{
	var lRowHeader;
	var lCellHeader;
	var lCellInput;
	if (gBeforeHeaderMessage != null)
	{
		lRowHeader = gDOM.createNewElement("TR", null);
		lCellHeader = gDOM.createNewElement("TD", [{name:"class", value:"header_topic_small"}]);
		lCellInput = document.createTextNode(Url.decode(gBeforeHeaderMessage));
		lCellHeader.appendChild(lCellInput);
		lRowHeader.appendChild(lCellHeader);
		pTablePreHead.appendChild(lRowHeader);
		
	}
	gBeforeHeaderMessage = null;
}
function showListItem(pBody, pListItem, pHeader, pRowCount)
{
	var lRow;
	var lCell;
	var lHide;
	var lCount;
	var lCellNode;
	var lKeyValue;
	var lColumn;
	var lAttributes;
	var lElement;
	var lValue;
	var lDecodedlValue;
	var lKeyValue;
	lAttributes = null;
	if (gEntityConfig.rowAdd != null)
	{
		eval("lAttributes = " + gEntityConfig.rowAdd + "(pHeader, pListItem, pRowCount)");
	}
	if (lAttributes == null)
	{
		lAttributes = new Array();
	}
	if(pRowCount % 2 == 0){
		lRow = gDOM.createNewElement("TR", [{name:"class", value:"tablerowcolour_even"}], lAttributes);
	}else{
		lRow = gDOM.createNewElement("TR", [{name:"class", value:"tablerowcolour_odd"}], lAttributes);
	}
	pBody.appendChild(lRow);
	lCell = null;
	if (pListItem.attributes.getNamedItem("KEYVALUE"))
	{
		if (pListItem.attributes.getNamedItem("KEYVALUE").value != "")
		{
			lValue = pListItem.attributes.getNamedItem("KEYVALUE").value;
			lKeyValue =lValue;
			lCell = gDOM.createNewElement("TD",null);
			lRow.appendChild(lCell);
			lElement = gDOM.createNewElement("input", [{name:"type",value:"radio"}, {name:"name",value:gEntityConfig.entityIdField}, {name:"value",value:lValue}]);
			lCell.appendChild(lElement);
		}
	}

	for (lCount = 0; lCount < pHeader.columns.length; lCount++)
	{
		lAttributes = new Array();
		lColumn = pHeader.columns[lCount];
		if (lColumn.hide != "1")
		{
			if (gEntityConfig.beforeCellAdd != null)
			{
				eval("lAttributes = " + gEntityConfig.cellAdd + "(pHeader, pListItem, pRowCount, lColumnCount)");
			}
			if (lAttributes == null)
			{
				lAttributes = new Array();
			}
			for (lAttributeCount = 0; lAttributeCount < lColumn.myattributes.length; lAttributeCount++)
			{
				lAttributes[lAttributes.length] = lColumn.myattributes[lAttributeCount];
			
			}
			lCell = gDOM.createNewElement("TD", lAttributes);
			lRow.appendChild(lCell);
			lValue = eval("pListItem.attributes.COL" + lCount + ".value");

			//alert("lValue1"+lValue);
			lDecodedlValue = Url.decode(lValue);
			if (lColumn.type == "")
			{
				lCell.appendChild(document.createTextNode(Url.decode(lValue)));
				//Assumption that the first column will never be a hidden column
				//lCell.appendChild(gDOM.createNewElement("input", lAttributes));
				

			}
			else if (lColumn.type == "href")
			{

				var lahrefValue = document.createElement("a");
				//alert("lKeyValue"+lKeyValue);
				//link.setAttribute("href","javascript:onclick=ItemDescriptionClose('"+ItemID+"');");
				var func = "javascript:onclick=showDFEdit12('"+lKeyValue+"');";
				lahrefValue.setAttribute("href", func);
				//{name:"name",value:gEntityConfig.entityIdField}, {name:"value",value:lValue}
				lahrefValue.setAttribute("name",gEntityConfig.entityIdField);
				lahrefValue.setAttribute("value",lValue);
				var lText= document.createTextNode(Url.decode(lValue));
				lahrefValue.appendChild(lText);
				lCell.appendChild(lahrefValue);
			
			}
			else
			{
				lAttributes = new Array();
				eval("lAttributes[0] = {name:\"name\",value:\"" + lColumn.name + "\"}");
				eval("lAttributes[1] = {name:\"value\",value:\"" + Url.decode(lValue) + "\"}");
				eval("lAttributes[2] = {name:\"type\",value:\"" + lColumn.type + "\"}");
				lCell.appendChild(gDOM.createNewElement("input", lAttributes));
			
				//lCell.appendChild(gDOM.createNewElement("input", [{name:"name",value:lColumn.name},{},{}]));
			}
			lRow.appendChild(lCell);
			

		}
		else if (lColumn.type)
		{
			lValue = eval("pListItem.attributes.COL" + lCount + ".value");
			lDecodedlValue = Url.decode(lValue);
			if (lColumn.type.length > 0)
			{
				lAttributes = new Array();
				eval("lAttributes[0] = {name:\"name\",value:\"" + lColumn.name + "\"}");
				eval("lAttributes[1] = {name:\"value\",value:\"" + Url.decode(lValue) + "\"}");
				eval("lAttributes[2] = {name:\"type\",value:\"" + lColumn.type + "\"}");
				lCell.appendChild(gDOM.createNewElement("input", lAttributes));
				
			}
		}
	}
	try{
	if(gafterRowAdd != null)
	{
		//alert("gafterRowAdd "+gafterRowAdd);
		//alert("lKeyValue in gafterRowAdd "+lKeyValue);
		var lNewCell = eval(gafterRowAdd+"("+lKeyValue+ ")");
		lRow.appendChild(lNewCell);
		
	}
	}catch(Exception){}

}

function setParametersForList(pParentNode, pParameters)
{
var lCount;
var lParameter;
var lName;
var lValue;
var lElement;
var lAttribute;
var lName;
var i=0;
for (lCount = 0; lCount < pParameters.length; lCount++)
{
lParameter = pParameters[lCount];
lElement = gDOM.createNewElement("input", [{name:"type",value:"hidden"},{name:"name",value:lParameter.attributes.getNamedItem("name").value}]);
lElement.value = lParameter.attributes.getNamedItem("value").value;
pParentNode.appendChild(lElement);
lElement.parameter = true;
}
}


function showEntityView()
{
	var lViewElement;
	var lRoot;
	var lRequest;
	var lAddEdit;
	var lElement;
	var lSelectedValue;
	lElement = eval("document.LIST." + gEntityConfig.entityIdField);
	if (!lElement)
	{
		alert("Please select a value to View.");
		return;
	}
	gClearAddEdit = true;
	lSelectedValue = gUtil.getValue(lElement);
	if (gUtil.trim(lSelectedValue[0]).length > 0 || gUtil.trim(lSelectedValue[1]).length > 0)
	{
		//alert("Selected Value after trim"+lSelectedValue);
	}
	else
	{
		alert("Please select a value to View.");
		return;
	}

	lViewElement = gCache.get(gEntityConfig.CurrentEntity + "VIEW");
	lViewElement = null;
	if (lViewElement == null)
	{
		var lAJAXInteraction = new AJAXInteraction(gEntityConfig.viewTemplate, null, true);
		lRequest = lAJAXInteraction.doPost("LK=" + gLoginKey);
		lXMLResponse = lRequest.responseXML;
		lRoot = lXMLResponse.documentElement;
		lRoot = copyNodes(lRoot);
		lViewElement = lRoot.childNodes[1];
		gCache.add(gCurrentEntity + "VIEW", lViewElement);
	}
	clearDIV("AddEdit");
	lAddEdit = document.getElementById("AddEdit");
	lAddEdit.appendChild(lViewElement);
	clearExtras();
	if (gEntityConfig.postViewTemplate != null)
	{
		eval(gEntityConfig.postViewTemplate);
	}
	submitForm(document.LIST, gEntityConfig.URLForEntityPreEdit, "POST", showView, gLoginKey, null);
}
/**
 * This function shows the details of the entity as retrieved from
 * the server.
 * @param pXMLObject - The XMLObject returned from the server.
 */
function showView(pXMLObject)
{
	var lXMLResponse;
	var lBaseEdit;
	var lEntity;
	var lData;
	var lLists;
	var lChildren;
	var lCount;
	var lSuccess;
	lXMLResponse = pXMLObject.responseXML;
	lBaseEdit = lXMLResponse.documentElement;
	lBaseEdit = copyNodes(lBaseEdit);
	lSuccess = handleResult(lBaseEdit.childNodes[0]);
	if (lSuccess)
	{
		lChildren = lBaseEdit.childNodes;
		lLists = null;
		for (lCount = 1; lCount < lChildren.length; lCount++)
		{
			if (!isNodeNull(lChildren[lCount]))
			{
					if (lChildren[lCount].nodeName == "DATA")
				{
						lData = lChildren[lCount];
				}
				else if (lChildren[lCount].nodeName == "LISTS")
				{
					lLists = parseLists(lChildren[lCount]);
				}
			}
		}
		for (lCount = 0; lCount < lData.childNodes.length; lCount++)
		{
			fillView(lData.childNodes[lCount]);
		}
		if (gEntityConfig.postView != null)
		{
			eval (gEntityConfig.postView + "(pXMLObject)");
		}
	}
}
function fillView(pEntity)
{
	var lCount;
	var lSpan;
	for (lCount = 0; lCount < pEntity.attributes.length; lCount++)
	{
		lSpan = document.getElementById(pEntity.attributes[lCount].name);
		if (lSpan)
		{
			if (!!document.all)
			{
				lSpan.innerText =Url.decode(pEntity.attributes[lCount].value);
			}
			else
			{
				clearDIV(pEntity.attributes[lCount].name);
				lSpan.appendChild(document.createTextNode(Url.decode(pEntity.attributes[lCount].value)));
			}
		}
	}
}
function pageToFirst()
{
	var lRequest;
	var lAJAXInteraction;
	var lXMLObject;
	//lRequest = getRequest(document.SEARCH, gLoginKey);
	lRequest = getRequest(document.LIST, gLoginKey,true);
	lRequest += "&PN=F";
	lAJAXInteraction = new AJAXInteraction(gEntityConfig.URLForEntityList, null, true);
	lXMLObject = lAJAXInteraction.doPost(lRequest);
	showListing(lXMLObject);
}
function pageToLast()
{
	var lRequest;
	var lAJAXInteraction;
	var lXMLObject;
	lRequest = getRequest(document.LIST, gLoginKey,true);
	lRequest += "&PN=L";
	lAJAXInteraction = new AJAXInteraction(gEntityConfig.URLForEntityList, null, true);
	lXMLObject = lAJAXInteraction.doPost(lRequest);
	showListing(lXMLObject);
}
function pageToNext()
{
	var lRequest;
	var lAJAXInteraction;
	var lXMLObject;
	lRequest = getRequest(document.LIST, gLoginKey,true);
	lRequest += "&PN=N";
	//alert("lRequest::"+lRequest);
	//lRequest += "&PN=N&SK=" + document.LIST.SK.value + "&EK=" + document.LIST.EK.value + "&FR=" + document.LIST.FR.value + "&LR=" + document.LIST.LR.value;
	lAJAXInteraction = new AJAXInteraction(gEntityConfig.URLForEntityList, null, true);
	lXMLObject = lAJAXInteraction.doPost(lRequest);
	showListing(lXMLObject);
}
function pageToPrevious()
{
	var lRequest;
	var lAJAXInteraction;
	var lXMLObject;
	lRequest = getRequest(document.SEARCH, gLoginKey,true);
	lRequest += "&PN=P";
	//lRequest += "&PN=P&SK=" + document.LIST.SK.value + "&EK=" + document.LIST.EK.value + "&FR=" + document.LIST.FR.value + "&LR=" + document.LIST.LR.value;
	lAJAXInteraction = new AJAXInteraction(gEntityConfig.URLForEntityList, null, true);
	lXMLObject = lAJAXInteraction.doPost(lRequest);
	showListing(lXMLObject);
}
function trim (pValue)
{
	pValue = pValue.replace(/^\s+/,""); // Left trim
	pValue = pValue.replace(/\s+$/,""); // Right trim
	return pValue;
}

 function deleteEntity(pShowAlert)
{
	var lCount;
	var lForm;
	var lElementExists;
	var lSelectedValue;
	var lElement;
	var lEntity;
	var lRegularEntityList;
	lElement = eval("document.LIST." + gCurrentEntityIdField);
	if (!lElement)
	{
		alert("Please select value to delete.");
		return;
	}
	gClearAddEdit = true;
	lSelectedValue = gUtil.getValue(lElement);
	if (gUtil.trim(lSelectedValue[0]).length > 0 || gUtil.trim(lSelectedValue[1]).length > 0)
	{
		//alert("Selected Value after trim"+lSelectedValue);
	}
	else
	{
		alert("Please select value to delete.");
		return;
	}

	ans = confirm("Are you sure you want to delete?");
	if(ans)
	{
		//submitForm(document.LIST, gCurrentEntityDeleteURL , "POST", handleDelete, gLoginKey, null);
		var lRequest;
		var lAJAXInteraction;
		var lXMLObject;
		lRequest = getRequest(document.LIST, gLoginKey);
		lAJAXInteraction = new AJAXInteraction(gCurrentEntityDeleteURL, null, true);
		lXMLObject = lAJAXInteraction.doPost(lRequest);
		lXMLResponse = lXMLObject.responseXML;
		lRoot = lXMLResponse.documentElement;
		lRoot = copyNodes(lRoot);
		lResult = lRoot.childNodes[0];
		handleResult(lResult, "SEARCH");
		handleDelete();
		
	}
	return;

}

function handleDelete()
{
	showEntityList();
	showUpdateSearch();
}

function enableDisable(pForm)
{
	 var lElementCount ;
 	var lId;
	
 		 	try{
			for (lElementCount = 0; lElementCount < pForm.elements.length; lElementCount++)
			{
				if (pForm.elements[lElementCount].type == "select-one" || pForm.elements[lElementCount].type == "select-multiple")
				{
					continue;
				}
				else if(pForm.elements[lElementCount].type == "button" || pForm.elements[lElementCount].type == "BUTTON")
				{
					 lId = pForm.elements[lElementCount].attributes.getNamedItem("ID").value;
					 if (!(eval("allPermissions."+gEntityConfig.applicationId+"_"+gEntityConfig.entity+ "." + lId) == '1'))
						{
					 		pForm.elements[lElementCount].disabled = "true";
						 }
				}
			}
			}catch(Exception)
			{
			}
			
}

function getHelp(pFieldId, pAppId)
{
		var lAJAXInteraction = new AJAXInteraction(gHelpUrl , showHelp, true);
		lRequest = lAJAXInteraction.doPost('LK=' + gLoginKey + "&pFieldId=" + pFieldId + "&pAppId=" + pAppId);
} 

function showHelp(pXMLObject)
{
	var lXMLResponse;
	var lBaseEdit;
	var lEntity;
	var lData;
	var lLists;
	var lChildren;
	var lCount;
	var lSuccess;
	var	lAttribute;
	var lHelpDiv;
	var lHelpDivBody;
	var lHelp;

	lXMLResponse = pXMLObject.responseXML;
	lBaseEdit = lXMLResponse.documentElement;
	//lBaseEdit = copyNodes(lBaseEdit);
	lSuccess = handleResult(lBaseEdit.childNodes[0]);
	if (lSuccess)
	{
		lChildren = lBaseEdit.childNodes;
		for (lCount = 1; lCount < lChildren.length; lCount++)
		{
			if (!isNodeNull(lChildren[lCount]))
			{
				if (lChildren[lCount].nodeName == "DATA")
				{
					lData = lChildren[lCount];
					lDataChild  = lData.childNodes;
					for (lInnerCount = 0; lInnerCount < lDataChild.length; lInnerCount++)
					{
						if (!isNodeNull(lDataChild[lInnerCount]))
						{
							if (lDataChild[lInnerCount].nodeName == "HELP")							
								lHelp = lDataChild[lInnerCount].attributes.getNamedItem("VALUE").value;
						}
					}
				}
			}
		}
		
	}


	lHelpDiv = document.getElementById("help_box");
	lHelpDiv.innerHTML = "<table ><tr><td><div align='right'><a href='#' onclick = 'hideHelp()'><img src='/TCSFramework/images/deactivated.jpg' border='0' /></a></div></td></tr><tr><td>"+ lHelp +"</td></tr></table>";
	lHelpDiv.style.position = "absolute";
	lHelpDiv.style.right = 0;
	lHelpDiv.style.border = 1;
	lHelpDiv.style.backgroundColor = "#FFFF99";
	lHelpDiv.style.visibility = "visible";

	lHelpDivBody =document.getElementById("help_body");
	//lHelpDivBody.innerHtml="<p>"+"This indicates who completed the time.  As an adminstrator, you may enter time for any of your workers, but it will default to enter time for yourself.  Workers with standard access may only enter time for themselves."+"</p>";
	//timer = setTimeout("hideHelp()", 100000);
}
function hideHelp()
{
	var lHelpDiv;
	
	lHelpDiv = document.getElementById("help_box");
	lHelpDiv.style.visibility = "hidden";
}









function showTabs(pTableTab, pTableTabHead)
{
	var lRowHeader;
	var lCellHeader;
	var lListButton;
	try{
		
			
			if(gBeforeHeaderButton != null)
			{
				lRowHeader = gDOM.createNewElement("TR", null);
				lCellHeader = gDOM.createNewElement("TD");				
				lListButton = eval(gBeforeHeaderButton);
				lCellHeader.innerHTML = lListButton;
				lRowHeader.appendChild(lCellHeader);
				pTableTabHead.appendChild(lRowHeader);
			}
	}
	catch(Exception )
	{
		
		
	}
}


function decodeURI(pString)
{
	var lString;
	var lNumbers = "0123456789";
	var lChars = "abcdef";
	var lUpperChars = "ABCDEF";
	lString = "";
	for (lCount = 0; lCount < pString.length; lCount++)
	{
		if (pString.charAt(lCount) == "%")
		{
			if (pString.length >= lCount + 3)
			{
				if ( (lNumbers.indexOf(pString.charAt(lCount + 1)) >= 0 && lNumbers.indexOf(pString.charAt(lCount + 2)) >= 0) ||
					 (lNumbers.indexOf(pString.charAt(lCount + 1)) >= 0 && lChars.indexOf(pString.charAt(lCount + 2)) >= 0) ||
					 (lNumbers.indexOf(pString.charAt(lCount + 1)) >= 0 && lUpperChars.indexOf(pString.charAt(lCount + 2)) >= 0) ||
					 (lNumbers.indexOf(pString.charAt(lCount + 2)) >= 0 && lChars.indexOf(pString.charAt(lCount + 1)) >= 0) ||
					 (lNumbers.indexOf(pString.charAt(lCount + 2)) >= 0 && lUpperChars.indexOf(pString.charAt(lCount + 1)) >= 0) ||
					 (lUpperChars.indexOf(pString.charAt(lCount + 2)) >= 0 && lChars.indexOf(pString.charAt(lCount + 1)) >= 0) ||
					 (lChars.indexOf(pString.charAt(lCount + 2)) >= 0 && lUpperChars.indexOf(pString.charAt(lCount + 1)) >= 0) ||
					 (lUpperChars.indexOf(pString.charAt(lCount + 2)) >= 0 && lUpperChars.indexOf(pString.charAt(lCount + 1)) >= 0) ||
					 (lChars.indexOf(pString.charAt(lCount + 2)) >= 0 && lChars.indexOf(pString.charAt(lCount + 1)) >= 0))
				{
					lString += pString.charAt(lCount);
				}
				else
				{
					lString += "%25";
				}
			}
			else
			{
				lString += "%25";
			}
		}
		else
		{
			lString += pString.charAt(lCount);
		}
	}
	return decodeURIComponent(lString);
}
function replace(pInString, pThis, pByThis)
{
	var lReplaceString = new RegExp(pThis, "g");
	return pInString.replace(lReplaceString, pByThis);
}
/*
function showDFEdit12(pKeyValue)
{

alert("pKeyValue"+pKeyValue);
}
*/

