/*
 || $Id: ajaxprocessor.js,v 1.28 2008/09/12 16:21:41 kharris Exp $
*/
var myPath  = getBasePath();
var scriptPath = myPath + '/scripts';

if ( typeof ( processor ) != "string" )
{
	alert ( "no processor defined" );
}
else
{
	processor = myPath + processor;
}

include ( scriptPath + '/ajax/ajaxobj.js' );
include ( scriptPath + '/ajax/ajaxstatus.js' );
if ( typeof ( verify ) != "function" || typeof ( fillFormById ) != "function" )
{
	include ( scriptPath + '/formutils.js' );
}
if ( typeof ( createMessageArea ) != "function" )
{
	include ( scriptPath + '/message.js' );
}
delay (500);

function getBaseListName ()
{
	var myListName = listname.replace ( / /, '' );;
	var tmp = '';
	var myTables = document.getElementsByTagName("table");
	if ( myTables != null )
	{
		var pos = -1;
		for ( var i = 0; i < myTables.length; i++ )
		{
			if (( pos = myTables[i].id.indexOf("-table")) != -1 )
			{
				tmp = myTables[i].id.substr(0, pos );
			}
		}
	}
	if ( tmp == '' )
	{
		var myListDivs = document.getElementsByTagName("div");
		if ( myListDivs != null )
		{
			var pos = -1;
			for ( var i = 0; i < myListDivs.length; i++ )
			{
				if (( pos = myListDivs[i].id.indexOf("-options")) != -1 )
				{
					tmp = myListDivs[i].id.substr(0, pos );
				}
			}
		}
	}
	if ( tmp != '' )
	{
		myListName = tmp;
	}
	return myListName;
}

/*
 || Processor Functions
*/
function formAddEdit (e)
{
	var obj = null;
	if ( e.srcElement != null )
	{
		obj = e.srcElement;
	}
	else
	{
		obj = e.target;
	}
	if ( obj != null )
	{
		var updForm = obj.form;
		if ( verify( updForm ))
		{
			var qryStr = buildQueryFromForm ( updForm.id );
			ajaxProcessor ( "update", qryStr );
		}
	}
}

function noEnter (e)
{
	var retVal = checkEnter(e);
	if ( retVal )
	{
		stopEvent(e);
	}
	return !retVal;
}
/*
 || Override functions
*/
function overrideListAddEditClick (e)
{
	var obj = null;
	if ( e.srcElement != null )
	{
		obj = e.srcElement;
	}
	else
	{
		obj = e.target;
	}
	if ( obj != null )
	{
		var process = true;
		stopEvent (e);
		var pos   = -1;
		var nextPage = obj.getAttribute("href");
		var parameters = "";
		if (( pos = nextPage.lastIndexOf("/")) != -1 )
		{
			nextPage = nextPage.substring(pos+1);
		}
		pos = -1;
		if (( pos = nextPage.indexOf("?")) != -1 )
		{
			var tmpStr = nextPage;
			nextPage = nextPage.substring(0,pos);
			tmpStr   = "&" + tmpStr.substr(pos+1);
			tmpStr += "&nextpage=" + nextPage; 
			var myQry = "?ajaction=addedit" + tmpStr + "&ts=" + new Date().getTime();
			//alert ( myQry );
			var loader = new net.ContentLoader( processor, myQry, "POST", processAjaxResponse );
		}
	}
}

function overrideAddEditClick (e)
{
	var obj = null;
	if ( e.srcElement != null )
	{
		obj = e.srcElement;
	}
	else
	{
		obj = e.target;
	}
	if ( obj != null )
	{
		stopEvent (e);
		var myForm = document.getElementById("recAddEdit");
		if ( myForm != null )
		{
			clearFormError ( myForm.id );
			clearFormById ( myForm.id, true );
		}
		var myArea = document.getElementById("listAction");
		if ( myArea != null )
		{
			removeClass ( myArea, "displayoff" );
		}
		var myArea = document.getElementById("listSearch");
		if ( myArea != null )
		{
			addClass ( myArea, "displayoff" );
		}
		var myArea = document.getElementById("listDiv");
		if ( myArea != null )
		{
			addClass ( myArea, "displayoff" );
		}

		if ( hrefIsImage (obj ))
		{
			obj = obj.parentNode;
		}
		var pos = 0;
		var inQry = obj.getAttribute("href");
		var msgArea = document.getElementById("listReturn");
		if ( msgArea != null )
		{
			clearArea ( "listReturn" );
			var rtnLink = document.createElement("a");
			rtnLink.setAttribute ( "href", "javascript:resetListAreas()" );
			rtnLink.setAttribute ( "id", "rtnList" );
			rtnLink.setAttribute ( "Title", "Return To List" );
			rtnLink.appendChild ( document.createTextNode("Return To List" ));
			msgArea.appendChild(rtnLink);
		}
		
		var curValue = document.getElementById("addupdate").value;
		if ( curValue.indexOf("Add") == -1 && curValue.indexOf("Edit") != -1 )
		{
			var newValue = curValue.replace( /Edit/, "Add" );
			document.getElementById("addupdate").value = newValue;
		}
		if (( pos = inQry.indexOf("_id=")) != -1 )
		{
			var idValue = inQry.substr ( pos + 4 );
			if (( pos = idValue.indexOf("&")) != -1 )
			{
				idValue = idValue.substr ( 0, pos );
			}
			if ( !isNaN ( idValue ) && idValue != 0 )
			{
				if ( curValue.indexOf("Add") != -1 )
				{
					var newValue = curValue.replace( /Add/, "Edit" );
					document.getElementById("addupdate").value = newValue;
				}
				var myParams = createParmsString ( inQry, "edit" );
				ajaxProcessor ( "edit", myParams );
			}
		}
	}
}

function overrideDeleteClick (e)
{
	var obj = null;
	if ( e.srcElement != null )
	{
		obj = e.srcElement;
	}
	else
	{
		obj = e.target;
	}
	if ( obj != null )
	{
		stopEvent (e);
		var msg = "                 -----[[ NOTICE ]]-----\n";
		msg += "\n========================================\n";
		msg += "Are you sure you want to delete this record?\n";
		msg += "Press Ok to delete the record\n";
		msg += "Press Cancel to keep the record\n";
		msg += "\n========================================\n";
		if ( confirm ( msg ))
		{
			// code here to send delete request to processor
			var myQry = buildQueryFromHref ( obj.href );
			if ( myQry.indexOf("ajaction") == -1 )
			{
				myQry += "&ajaction=remove";
			}
			myQry += "&ts=" + new Date().getTime();
			createAJLoaderArea ();
			var loader = new net.ContentLoader( processor, myQry, "POST", processAjaxResponse );
		}
	}
}

function overrideNavigation (e)
{
	var obj = null;
	if ( e.srcElement != null )
	{
		obj = e.srcElement;
	}
	else
	{
		obj = e.target;
	}
	if ( obj != null )
	{
		stopEvent (e);
		if ( hrefIsImage ( obj ))
		{
			obj = obj.parentNode;
		}
		var action = "prnlist";
		var inQry = obj.getAttribute("href");
		if ( inQry != null )
		{
			if ( inQry.indexOf("ajax=1") != -1 )
			{
				var pos = -1;
				var myPage = null;
				if (( pos = inQry.indexOf("?")) != -1 )
				{
					var myPage = inQry.substr(0, pos );
				}
				if ( obj.id.indexOf("lselect") != -1 )
				{
					action ="select";
				}
				if ( obj.id.indexOf("lsearch") != -1 )
				{
					action = "newsearch";
				}
				if (( start = obj.href.indexOf("ajaction=")) != -1 )
				{
					var myQuery = obj.href;
					var term = "&";
					idStr = myQuery.substr ( start + 9 );
					var end  = idStr.indexOf ( term );
					if ( end > 0 )
					{
						idStr = idStr.substr ( 0, end );
					}
					action = idStr;
				}
				if (( start = obj.href.indexOf("processor=")) != -1 )
				{
					var myQuery = obj.href;
					var term = "&";
					idStr = myQuery.substr ( start + 10 );
					var end  = idStr.indexOf ( term );
					if ( end > 0 )
					{
						idStr = idStr.substr ( 0, end );
					}
					processor = idStr;
				}
				var myParams = createParmsString ( inQry );
				if ( myPage != null )
				{
					myParams += (myParams = "" ? "?" : "&") + "pagename=" + myPage;
				}
				myParams += "&ajaction=" + action;
				var loader = new net.ContentLoader( processor, myParams, "POST", processAjaxResponse );
			}
			else
			{
				document.location = obj.href;
			}
		}
	}
}

function overridePageSelect (e)
{
	var obj = null;
	if ( e.srcElement != null )
	{
		obj = e.srcElement;
	}
	else
	{
		obj = e.target;
	}
	if ( obj != null )
	{
		stopEvent (e);
		var myParams = "";
		var myInput = document.getElementById("lpage");
		if ( myInput != null )
		{
			var pageNo = myInput.value;
			myParams = "?laction=prnlist&lpage=" + pageNo;
			createAJLoaderArea ();
			ajaxProcessor ( "prnlist", myParams )
		}
	}
}

/*
 || List Processors
*/

/*
 ||****************************************************************************
 || FUNCTION: ajaxProcessor
 ||****************************************************************************
 || Inputs:
 || ajaction  - Ajax Action: add, edit, delete, option, select
 || parameters  - parameter string to pass to server.
 || Global:
 || processor - Name of the server processor
 ||****************************************************************************
 || Description 
 || This function receives all 'action links' from list and determines how to 
 || process based on the information received.
 ||****************************************************************************
*/
function ajaxProcessor ( ajaction, parameters )
{
	// Build the querystring
	if ( ajaction == "delete" )
	{
		var msg = "Are you sure you want to delete this record?\n";
		var msg = msg + "Press Ok to delete";
		if ( !confirm ( msg ))
		{
			return;
		}
	}
	var pos = 0;
	if (( pos = parameters.indexOf ( "&" )) == 0 )
	{
		parameters = "?" + parameters;
	}
	if (( pos = parameters.indexOf ( "?" )) == -1 )
	{
		parameters = "?" + parameters;
	}
	createMessageArea ( "sysmessage", "Processing Request, Please Wait..." );
	parameters += "&ajaction=" + ajaction + "&ts=" + new Date().getTime();
	var loader = new net.ContentLoader( processor, parameters, "POST", processAjaxResponse );
}

function processAjaxResponse ()
{
	if ( typeof ( removeMessageArea ) == "function" )
	{
		removeMessageArea (  "sysmessage" );
		removeMessageArea ( "sysloader"  );
	}
	if ( this.req != null )
	{
		var respType = 'text';
		if ( this.req.getResponseHeader ( "Content-Type" ) != null &&
			 this.req.getResponseHeader ( "Content-Type" ).indexOf ( "xml" ) != -1 )
		{
			respType = 'xml';
		}
		if ( respType == "xml" )
		{
			var XML = this.req.responseXML;
			if ( XML != null )
			{
				var myRoot  = XML.documentElement;
				if ( !checkStatus ( XML ))
				{ 
					processError ( XML );
				}
				else
				{
					var xStatusMsg =getStatusMessage ( XML );
					var xNav = myRoot.getElementsByTagName("navigation")[0];
					if ( xNav != null )
					{
						var action = xNav.getElementsByTagName("action")[0];
						if ( action != null && action.firstChild != null )
						{
							action = action.firstChild.nodeValue;
						}
						else
						{
							action = "";
						}
						switch ( action )
						{
							case "add":
							case "updated":
								resetListAreas ();
								var msg = (xStatusMsg != "Ok") ? xStatusMsg : "Record updated successfully";
								if ( typeof ( createMessageArea ) == "function" )
								{
									createMessageArea ( "sysmessage", msg );
								}
								else
								{
									alert ( msg );
								}
								var params = "";
								var xRecords = myRoot.getElementsByTagName("records")[0];
								if ( xRecords != null && xRecords.firstChild != null )
								{
									var myRecord = xRecords.getElementsByTagName("record")[0];
									if ( myRecord != null )
									{
										var recId = myRecord.getElementsByTagName("recid")[0];
										if ( recId != null && recId.firstChild != null )
										{
											var prmLabel = "rec_id";
											var recLbl = myRecord.getElementsByTagName("reclbl")[0];
											if ( recLbl != null && recLbl.firstChild != null )
											{
												prmLbl = recLbl.firstChild.nodeValue;
											}
											params = "?" + prmLbl + "=" + recId.firstChild.nodeValue;
										}
									}
								}
								var nxtAction = "search";
								var nxtActionFld = xNav.getElementsByTagName("ajaction")[0];
								if ( nxtActionFld != null && nxtActionFld.firstChild != null )
								{
									nxtAction = nxtActionFld.firstChild.nodeValue;
								}
								if ( nxtAction != 'noaction' )
								{
									ajaxProcessor ( nxtAction, params );
								}
								break;
								
							case "edit":
								if ( typeof ( fillFormById ) == "function" )
								{
									var xNav = myRoot.getElementsByTagName("navigation");
									if ( xNav != null )
									{
										var formId = xNav.getElementsByTagName("formid")[0];
										if ( formId != null && formId.firstChild != null )
										{
											if ( typeof ( fillFormById ) == "function" )
											{
												var formXML = myRoot.getElementsByTagName("records");
												fillFormById ( formXML, formId.firstChild.nodeValue );
											}
										}
									}
								}
								else
								{
									alert ( "Form Functions not loaded, unable to fill form" );
								}
								break;
								
							case "delete":
								resetListAreas ();
								var msg = "Record deleted successfully";
								if ( xStatusMsg != "" )
								{
									msg = xStatusMsg;
								}
								if ( typeof ( createMessageArea ) == "function" )
								{
									createMessageArea ( "sysmessage", msg, true );
								}
								else
								{
									alert ( msg );
								}
								ajaxProcessor ( "updlist", "" );
								break;
								
						case "login":
							var myRoot  = XML.documentElement;
							var xNav = myRoot.getElementsByTagName("navigation")[0];
							if ( xNav != null )
							{
								var nextPage = "";
								var respPage = xNav.getElementsByTagName("nextpage")[0];
								if ( respPage != null && respPage.firstChild != null )
								{
									nextPage = respPage.firstChild.nodeValue;
								}
								if ( nextPage != '' )
								{
									document.location.replace(nextPage);
								}			
							}
							break;
							
						/*
						 * This action allows HTML to be printed in any area on 
						 * the current page.  A "type" is passed (form, html,
						 * list) to determine if further action is needed.
						 * Formdata is passed as part of the form record and, 
						 * if present, is used to fill the form.
						 */
						case "prnareahtml":
							var process = false;
							var myRoot  = XML.documentElement;
							var xRecords = myRoot.getElementsByTagName("records")[0];
							if ( xRecords != null && xRecords.hasChildNodes )
							{
								var xRecord = xRecords.firstChild;
								if ( xRecord.nodeName == "#text" )
								{
									xRecord = xRecord.nextSibling;
								}
								while ( xRecord )
								{
									var myId = "listAction";
									var mySection = xRecord.getElementsByTagName("sectionid")[0];
									if ( mySection != null && mySection.firstChild != null )
									{
										myId = mySection.firstChild.nodeValue;
									}
									var responseDiv = document.getElementById ( myId );
									if ( responseDiv != null )
									{
										var sectionType = "";
										var xType = xRecord.getElementsByTagName("sectiontype")[0];
										if ( xType != null && xType.firstChild != null )
										{
											sectionType = xType.firstChild.nodeValue;
										}
										
										var xData = xRecord.getElementsByTagName("data")[0];
										if ( xData != null && xData.firstChild != null )
										{
											clearArea ( myId );
											responseDiv.innerHTML = xData.firstChild.nodeValue;
											removeClass ( responseDiv, "displayoff" );
										}											
										switch ( sectionType )
										{
											case 'document':
												var xData = xRecord.getElementsByTagName("data")[0];
												if ( xData != null && xData.hasChildNodes )
												{
													var xNode = xData.firstChild;
													while ( xNode )
													{
														if ( xNode.nodeName == "#text" )
														{
															xNode = xNode.nextSibling;
															continue;
														}
														var nodeItem = "";
														var nodeValue = "";
														var xNodeType = xNode.getElementsByTagName("dtype")[0];
														if ( xNodeType != null && xNodeType.firstChild != null )
														{
															nodeItem = xNodeType.firstChild.nodeValue;
														}
														var xNodeValue = xNode.getElementsByTagName("ddata")[0];
														if ( xNodeValue != null && xNodeValue.firstChild != null )
														{
															nodeValue = xNodeValue.firstChild.nodeValue;
														}
														if ( nodeItem != "" && nodeValue != "" )
														{
															var dataType = "text";
															var xDataType = xNode.getElementsByTagName("dtype")[0];
															if ( xDataType != null && xDataType.firstChild != null )
															{
																dataType = xDataType.firstChild.nodeValue;
															}
															var docItem = document.createElement(nodeItem);
															if ( dataType == "text" )
															{
																docItem.appendChild(document.createTextNode(nodeValue));
															}
															else
															{
																docItem.innerHTML = nodeValue;
															}
															responseDiv.appendChild(docItem);
														}
														xNode = xNode.nextSibling;
													}
												}
											case "form":
												var formId = "";
												var xForm = xRecord.getElementsByTagName("form")[0];
												if ( xForm != null && xForm.firstChild != null )
												{
													var xId = xForm.getElementsByTagName("formid")[0];
													if ( xId != null && xId.firstChild != null )
													{
														formId = xId.firstChild.nodeValue;
													}
													if ( formId != "" )
													{
														if ( typeof ( fillFormById ) == "function" )
														{
															var xFormData = xForm.getElementsByTagName("formdata")[0];
															if ( xFormData != null && xFormData.firstChild != null )
															{
																fillFormById ( xFormData, formId );
															}
														}
													}
												}
												if ( typeof ( localFormHandlers ) == "function" )
												{
													localFormHandlers ( XML, formId );
												}
												break;
												
											case "html":
												if ( typeof ( localHTMLHandlers ) == "function" )
												{
													localHTMLHandlers ( XML );
												}
												break;
												
											case "list":
												if ( typeof ( setupListHandlers ) == "function" )
												{
													setupListHandlers ( XML );
												}
												break;
												
											case "hide":
												clearArea ( myId );
												addClass ( responseDiv, "displayoff" );
												break;
												
											default:
												break;
										}
									} // End of have response Area
									xRecord = xRecord.nextSibling;
									if ( xRecord != null && xRecord.nodeName == "#text" )
									{
										xRecord = xRecord.nextSibling;
									}
								}
							}
							break;
								
							case "newpage":
 								var newPage = xNav.getElementsByTagName("pagename")[0];
								if ( newPage != null && newPage.firstChild != null )
								{
									var useForm = false;
									var xUseForm = xNav.getElementsByTagName("useform")[0];
									if ( xUseForm != null && xUseForm.firstChild != null && xUseForm.firstChild.nodeValue == "Yes" )
									{
										useForm = true;
									}
									newPage = newPage.firstChild.nodeValue;
									var strQuery = '';
									var xRecords = myRoot.getElementsByTagName("records")[0];
									if ( xRecords != null && xRecords.firstChild != null )
									{
										if ( useForm )
										{
											var myForm = document.createElement("form");
											if ( myForm != null )
											{
												myForm.setAttribute ( "method", "post" );
												myForm.setAttribute ( "action", newPage );
											}
											else
											{
												useForm = false;
											}
										}
										var xQuery = xRecords.firstChild;
										while ( xQuery )
										{
											if ( xQuery.nodeName == "#text" )
											{
												xQuery = xQuery.nextSibling;
												if ( xQuery == null )
												{
													break;
												}
											}
											var myLabel = '';
											var myValue = '';
											
											var xLabel = xQuery.getElementsByTagName("qlabel")[0];
											if ( xLabel != null && xLabel.firstChild != null )
											{
												myLabel = xLabel.firstChild.nodeValue;
											}
											var xValue = xQuery.getElementsByTagName("qvalue")[0];
											if ( xValue != null && xValue.firstChild != null )
											{
												myValue = xValue.firstChild.nodeValue;
											}
											
											if ( myLabel != "" && myValue != "" )
											{
												if ( useForm )
												{
													var myInput = createInputNode ( "hidden", myLabel, myLabel, myValue );
													myForm.appendChild ( myInput );
												}
												else
												{
													var myQry = myLabel + "=" + myValue;
													strQuery += ((strQuery) ? '&' : '?') + myQry;
												}
											}
											xQuery = xQuery.nextSibling;
										}
									}
									if ( useForm )
									{
										var myBody = document.getElementsByTagName("body")[0];
										myBody.appendChild(myForm);
										myForm.submit();
									}
									else
									{
										location.href = newPage + strQuery;
									}
								}
								break;
								
							case "newwindow":
								var newWindow = xNav.getElementsByTagName("pagename")[0];
								if ( newWindow != null && newWindow.firstChild != null )
								{
									newWindow = newWindow.firstChild.nodeValue;
									if ( typeof ( windowSize ) == "function" )
									{
										windowSize(newWindow);
									}
									else
									{
										var newWin = window.open ( newWindow, "documentView" );
									}
								}
								break;
								
							case "select":
								break;
								
							case "showmessage":
								if ( document.getElementById ( "listDiv" ) != null )
								{
									removeClass ( document.getElementById ( "listDiv" ), "displayoff" );
								}
								if ( xStatusMsg != "" )
								{
									if ( typeof ( createMessageArea ) == "function" )
									{
										createMessageArea ( "syserror", xStatusMsg, true );
									}
									else
									{
										alert ( xStatusMsg );
									}
								}
								break;
			
							case "sort":
								break;
								
							case "noop":
								break;
								
							default:
								if ( typeof ( localListResponse ) == "function" )
								{
									localListResponse ( action, XML );
								}
								break;
						}
					}
				}
			} // End XML parsed
		}
		else
		{
			/*
			 || This is 'old style' and error prone. Use XML and prnlist action
			*/
			var HTML = this.req.responseText;
			var listDiv = "listDiv";
			var responseDiv = document.getElementById ( listDiv );
			if ( HTML.indexOf ( "listId" ) != -1 )
			{
				// Encoded response: The format is "listID::idName"
				var arTxt = HTML.split ( '::' );
				listDiv = arTxt[0].substr(7);
				HTML = arTxt[1];
			}
	
			var responseDiv = document.getElementById ( listDiv );
			if ( responseDiv == null )
			{
				var docBody = document.getElementById("content-interior");
				if ( docBody != null )
				{
					responseDiv = document.createElement("div");
					responseDiv.id = listDiv;
					docBody.appendChild(responseDiv);
				}
			}
			if ( responseDiv != null )
			{
				clearArea ( listDiv );
				if ( HTML.indexOf ( "ERROR" ) != -1 )
				{
					// Encoded response: The format is "ERROR: <msg>::processor"
					var myResponse = HTML.split ( '::' );
					createMessageArea ( "syserror", myResponse[0], true );
				}
				else
				{
					responseDiv.innerHTML = HTML;
					removeClass ( responseDiv, "displayoff" );
					//rowHighlight();
				}
				if ( typeof ( setupListHandlers ) == "function" )
				{
					setupListHandlers ();
				}			
			}
			else
			{
				createMessageArea ( "syserror", "Oops?\n(html)The list area [" + listDiv + "] does not exist on this page.", true );
			}		
		} // End Text Parsed
	}
	else
	{
		alert ( "No discernable response from server." );
	}
}

function resetListAreas ()
{
	/*
	 || Now set up the list areas
	*/
	var myArea = document.getElementById("listAction");
	if ( myArea != null )
	{
		addClass ( myArea, "displayoff" );
	}
	var myArea = document.getElementById("listSearch");
	if ( myArea != null )
	{
		addClass ( myArea, "displayoff" );
	}
	var myArea = document.getElementById("listDiv");
	if ( myArea != null )
	{
		removeClass ( myArea, "displayoff" );
	}
}
/*
 || Handler Functions
*/
function setupFormHandlers (e)
{
	var mySubmit = document.getElementById("subAddEdit");
	if ( mySubmit != null )
	{
		var myForm = mySubmit.form;
		if ( myForm != null )
		{
			myForm.onsubmit = null;
			myForm.onsubmit = function () { return false };
		}
		addEvent ( mySubmit, "click", formAddEdit, false );
	}
	/*
	 || Add any local list handlers
	*/
	if ( typeof ( localFormHandlers ) == "function" )
	{
		localFormHandlers (e);
	}
}

function setupHTMLHandlers ()
{
	if ( typeof ( localHTMLHandlers ) == "function" )
	{
		localHTMLHandlers ();
	}
}
function setupListHandlers ( XML )
{
	var myListName = getBaseListName ();
	var tableid = myListName + '-table';
	var headid  = myListName + '-head';
	var optsid   = myListName + '-list';
	var bodyid  = myListName + '-body';
	var optsDiv = document.getElementById(optsid);
	if ( optsDiv != null )
	{
		// Search link
		var lstSrch = document.getElementById("lsearchlink");
		if ( lstSrch != null )
		{
			lstSrch.onclick = function () { return false };
			addEvent ( lstSrch, 'click', overrideNavigation, false );
		}
		
		// Add link
		var lstAdd = document.getElementById("laddnewlink_1");
		if ( lstAdd != null )
		{
			if ( lstAdd.href.indexOf ( "ajax=1" ) != -1 )
			{
				lstAdd.onclick = function () { return false };
				addEvent ( lstAdd, "click", overrideListAddEditClick, false );
			}
		}		
	}
	
	var lstTable = document.getElementById(tableid);
	if ( lstTable != null )
	{
		// Navigation is done in a paragraph before the table.
		var navForm = document.getElementById("lnavajax");
		if ( navForm != null )
		{
			addEvent ( navForm, "submit", returnFalse, false );
			var lstInput = document.getElementById("lpage");
			if ( lstInput != null )
			{
				lstInput.onsubmit = function () { return false };
				addEvent ( lstInput, "submit", overridePageSelect, false );
			}
			
			var navLinks = navForm.getElementsByTagName("a");
			if ( navLinks != null )
			{
				for ( var i = 0; i < navLinks.length; i++ )
				{
					navLinks[i].onclick = function () { return false };
					addEvent ( navLinks[i], 'click', overrideNavigation, false );
				}
			}
		}

		// Sort Links are done in the header.
		var lstHeader = document.getElementById(tableid);
		if ( lstHeader != null )
		{
			var lstSorts = lstHeader.getElementsByTagName("a");
			var hrefId = null;
			for ( var i = 0; i < lstSorts.length; i++ )
			{
				hrefId = lstSorts[i].getAttribute ( "id" );
				if ( hrefId != null && hrefId != '' && hrefId.indexOf ( "lsortlink" ) != -1 )
				{			
					if ( lstSorts[i].href.indexOf ( "ajax=1" ) != -1 )
					{
						lstSorts[i].onclick = function () { return false };
						addEvent ( lstSorts[i], 'click', overrideNavigation, false );
					}
				}
			}
		}
		
		// Add, Edit, Delete, Options and Selects are done in the body.
		var lstBody = document.getElementById(bodyid);
		if ( lstBody != null )
		{
			var lstOptions = lstBody.getElementsByTagName("a");
			var hrefId = null;
			for ( var i = 0; i < lstOptions.length; i++ )
			{
				if ( lstOptions[i].href.indexOf ( "ajax=1" ) != -1 )
				{
					hrefId = lstOptions[i].getAttribute ( "id" );
					if ( hrefId != null && hrefId != '' && hrefId.indexOf ( "lselectlink" ) != -1 )
					{			
						lstOptions[i].onclick = function () { return false };
						addEvent ( lstOptions[i], 'click', overrideNavigation, false );
					}
					if ( hrefId != null && hrefId != '' && hrefId.indexOf ( "leditlink" ) != -1 )
					{			
						lstOptions[i].onclick = function () { return false };
						addEvent ( lstOptions[i], 'click', overrideListAddEditClick, false );
					}
					if ( hrefId != null && hrefId != '' && hrefId.indexOf ( "ldeletelink" ) != -1 )
					{
						lstOptions[i].onclick = function () { return false };
						addEvent ( lstOptions[i], 'click', overrideDeleteClick, false );
					}
					if ( hrefId != null && hrefId != '' && hrefId.indexOf ( "loptionlink" ) != -1 )
					{			
						lstOptions[i].onclick = function () { return false };
						addEvent ( lstOptions[i], 'click', overrideNavigation, false );
					}
				}
			}
		}
		
		var updateForm = document.getElementById("recAddEdit");
		if ( updateForm != null )
		{
			updateForm.onsubmit = function () { return false };
			addEvent ( updateForm, "submit", returnFalse, false );
			
			var updBtn = document.getElementById("addupdate");
			if ( updBtn != null )
			{
				updBtn.onclick = function () { return false };
				addEvent ( updBtn, "click", formAddEdit, false );
			}
		}
	}
	/*
	 || Add any local list handlers
	*/
	if ( typeof ( localListHandlers ) == "function" )
	{
		localListHandlers ( XML );
	}
}

//addEvent ( window, "load", setupListHandlers, false );
