/*----------------------------------------------------------------------------
 (c) 2004 JVolution Ltd. All rights reserved. 
 $Revision: 1.1 $
<%--
 Program:   iComConnect

 History :
 ------------------
   $Log: scriptlib.js,v $
   Revision 1.1  2003/01/24 17:19:34  jeff
   Initially added to CVS .JW.
  --%>
-----------------------------------------------------------------------------*/
var testundefined ;
var isNav4, isIE4, isNav6;
var onloadFunc = null ;
var formsubmitted = false ;

function trimString (str) 
{
  str = this != window? this : str;
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}
String.prototype.trim = trimString;

if (parseInt(navigator.appVersion.charAt(0)) >= 4) 
{
  isNav6 = navigator.userAgent.indexOf("Gecko")!=-1?true:false;
  isNav4 = (navigator.appName == "Netscape") ? true && !isNav6: false;
  isIE4 = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
}
function getObj(name)
{
  var foundElement = null ;
  if (document.getElementById)
  {
  	foundElement = document.getElementById(name);
  }
  else
  if (document.all)
  {
	foundElement = document.all[name];
  }
  else
  if (document.layers)
  {
	foundElement = getObjNN4(document.forms[0],name);
  }
  return foundElement ;
}
function getObjNN4(obj,name)
{
	if (document.forms[0].name == name)
	{
		foundElement = document.forms[0];
		return foundElement ;
	}
	var x = obj.elements;
	for (var i=0;i<x.length;i++)
	{
		if (x[i] == null) continue ;
		if (x[i].name == name)	
		{
		 	foundElement = x[i];
			return foundElement ;
		}
	}
	return null ;
}
function disableAllButtons()
{
	if (formsubmitted)
	{
		alert("Please do not click button repeatedly, this form has already been submitted.") ;
		return false ;
	}
	formsubmitted = true ;
	return true ;
}
function disableButton(button)
{
	onSubmit = disableAllButtons() ;
	return true ;
}
function submitForm(formname, button)
{
    var form = getObj(formname) ;
    disableAllButtons() ;
    form.submit(form) ;
    return false ;
}
function resetForm(formname)
{
    var form = getObj(formname) ;
    form.reset(form) ;
    return false ;
}
function disableEnterKey(e)
{
     var key;

     if(window.event)
          key = window.event.keyCode;     //IE
     else
          key = e.which;     //firefox

     if(key == 13)
          return false;
     else
          return true;
}
function focusOnFirstTextField()
{
	// Focus on ALL text fields to force Javascript events
	for (var i = 0  ; i< document.forms[0].length; i++)
	{
		var element = document.forms[0].elements[i] ;
		if (element  == null) continue ;
		if (element.type != "text") continue ;
		element.focus() ;
	}
	// Start again and leave focus on first one
	for (var i = 0  ; i< document.forms[0].length; i++)
	{
		var element = document.forms[0].elements[i] ;
		if (element  == null) continue ;
		if (element.type != "text") continue ;
		element.focus() ;
		return ;
	}
}
var basename1 = "" ;
var basename2 = "" ;
var fieldname = "" ;
function checkRemaining(thisField, invalidIncreaseMsg)
{
	//alert("checkRemaining name = " + thisField.name) ;
	var remainingvalue = thisField.value ;
	var index1 = thisField.name.lastIndexOf("+") ;
	var index2 = thisField.name.lastIndexOf(".") ;
	basename1 = thisField.name.substring(0, index1) ;
//alert("basename1 = " + basename1) ;
	basename2 = thisField.name.substring(0, index2) ;
//alert("basename2 = " + basename2) ;
	fieldname = thisField.name.substring(index2) ;
//alert("fieldname = " + fieldname ) ;
	// Check that the user is not increasing the quantity
	var remainingvalue = thisField.value ;
	var newname = basename2 + ".nextcount" ;
	//alert("newname = " + newname ) ;
	var originalobj = getObj(newname) ;
	//alert("originalobj = " + originalobj) ;
	if (originalobj == null) return ;
	var originalvalue = originalobj.value  ;
	//alert("originalvalue = " + originalvalue ) ;
	remainingvalue = originalvalue - remainingvalue ;
	//alert("remainingvalue = " + remainingvalue ) ;
	if (remainingvalue < 0)
	{
		if (invalidIncreaseMsg == null || invalidIncreaseMsg == '')
			invalidIncreaseMsg = "Sorry, you are only allowed to reduce this quantity." ;
		alert(invalidIncreaseMsg) ;
		thisField.value = originalvalue ;
		return ;
	}
}
function checkAllRemainingCounts()
{
	//alert("checkAllRemainingCounts") ;
	// Go through all related text fields using basename and check to see if any remain compared with the original count

	var allnovalues = true ;
	for (i = 0 ; i < 1000 ; i ++)
	{
		var newname = basename1 + "+" + i + fieldname ;
//alert("newname = " + newname) ;
		var originalobj = getObj(newname) ;
		//alert("originalobj = " + originalobj) ;
		if (originalobj == null) break ;
		checkRemainingCounts(originalobj) ;
		var value = originalobj.value ;
//alert("value = " + value ) ;
		if (value > 0) allnovalues = false ;
	}
	if (allnovalues == true)
	{
		alert("You must set the quantity for one item.") ;
		return false ;
	}
	return true ;
}
function checkRemainingCounts(thisField)
{
	//alert("checkRemainingCounts name = " + thisField.name) ;
	var remainingvalue = thisField.value ;
	//alert("remainingvalue = " + remainingvalue ) ;
	var index = thisField.name.lastIndexOf(".") ;
	var basename = thisField.name.substring(0, index) ;
	//alert("basename = " + basename) ;
	var newname = basename + ".firstcount" ;
	//alert("newname = " + newname ) ;
	var originalobj = getObj(newname) ;
	//alert("originalobj = " + originalobj) ;
	if (originalobj == null) return ;
	var originalvalue = originalobj.value  ;
	//alert("originalvalue = " + originalvalue ) ;
	// Save first count values
	var newname1 = basename + ".originalcount" ;
	//alert("newname1 = " + newname1 ) ;
	var originalobj1 = getObj(newname1) ;
	//alert("originalobj1 = " + originalobj1) ;
	if (originalobj1 != null && originalobj1.value == "")
	{
		originalobj1.value = originalvalue ;
	}
	remainingvalue = originalvalue - remainingvalue ;
	//alert("remainingvalue = " + remainingvalue ) ;
	var newname = basename + ".noneremaining" ;
	//alert("newname = " + newname ) ;
	var newobj = getObj(newname) ;
	//alert("newobj = " + newobj ) ;
	if (newobj == null) return ;

	// If none remain set "noneremaining" field to "true" 
	// if all fields have this setting we can release the originating data 
	// and move on to next stage of workflow

	if (remainingvalue == 0) 
		newobj.value = "true" ;
	else
		newobj.value = "false" ;
	//alert("newobj.value = " + newobj.value ) ;
	newname = basename + ".nextcount" ;
	//alert("newname = " + newname ) ;
	newobj = getObj(newname) ;
	//alert("newobj = " + newobj ) ;
	if (newobj == null) return ;

	// Set the remaining value for next time this field is updated

	newobj.value = remainingvalue ;
	//alert("newobj.value = " + newobj.value ) ;
}
function removeSpaces(thisField)
{
	fieldStr = thisField.value ;
	newStrs = fieldStr.split(" ") ;
	fieldStr = ""
	for (i = 0 ; i < newStrs.length ; i++)
	{
		fieldStr = fieldStr + newStrs[i] ;
	}
	thisField.value = fieldStr ;
}
function checkForEmailField(emailField) 
//Validates email address by passing the object
{
	if (emailField.value.length < 1) return null ;
	if (-1 == emailField.value.indexOf("@")) 
	{ 
		return "must have a '@' in it." ; 
	}
	if (-1 != emailField.value.indexOf(",")) 
	{ 
		return "must not have a ',' in it."; 
	}
	if (-1 != emailField.value.indexOf("#")) 
	{ 
		return "must not have an '#' in it."; 
	}
	if (-1 != emailField.value.indexOf("!")) 
	{ 
		return "must not have a '!' in it." ; 
	}
	if (-1 != emailField.value.indexOf(" ")) 
	{ 
		return "must not have a space in it."; 
	}
	if (emailField.value.length == (emailField.value.indexOf("@")+1) ) 
	{ 
		return "must have a domain name after the '@'."; 
	}
	if (emailField.value.length == 0) 
	{ 
		return "is empty."; 
	}
	return null ;
}
function checkForTelephoneNoField(thisField)
{
	var fieldStr = thisField.value ;
	cmp = "0123456789 +" ;
  	for (j = 0 ; j < fieldStr.length ; j++)
	{
   	tst = fieldStr.substring(j, j+1)
   	if (cmp.indexOf(tst) < 0)
		{
			return false ;
		}
	}
   return true ;
}
function checkForDateField(thisField)
{
	var fieldStr = trimString(thisField.value) ;
	if (fieldStr.length != 10) return false ;
	if (fieldStr.substring(2,3) != "/"
	 || fieldStr.substring(5,6) != "/") return false ;
	cmp = "0123456789" ;
  	for (j = 0 ; j < fieldStr.length ; j++)
	{
  		if (j == 2 || j == 5) continue ;
  		tst = fieldStr.substring(j, j+1)
  		if (cmp.indexOf(tst) < 0)
		{
			return false ;
		}
	}
	return true ;
}
function checkForCurrencyField(thisField)
{
	if (false == checkForNumericField(thisField)) return false ;
	var fieldStr = trimString(thisField.value) ;
	var fieldStrs = fieldStr.split(".") ;
	if (fieldStrs.length > 2) return false ;
	var ix = fieldStr.indexOf("+") ;
	if (ix > 0) return false ;
	ix = fieldStr.indexOf("-") ;
	if (ix > 0) return false ;
	return true ;
}
function checkForNumericField(thisField)
{
	var fieldStr = trimString(thisField.value) ;
	cmp = "0123456789.-+," ;
  	for (j = 0 ; j < fieldStr.length ; j++)
	{
   	tst = fieldStr.substring(j, j+1)
   	if (cmp.indexOf(tst) < 0)
		{
			return false ;
		}
	}
	return true ;
}

function checkForIntegerField(thisField)
{
	var fieldStr = trimString(thisField.value) ;
	cmp = "0123456789-" ;
  	for (j = 0 ; j < fieldStr.length ; j++)
	{
   		tst = fieldStr.substring(j, j+1)
   		if (cmp.indexOf(tst) < 0)
		{
			return false ;
		}
	}
	return true ;
}
function checkForPositiveIntegerField(thisField)
{
	var fieldStr = trimString(thisField.value) ;
	cmp = "0123456789" ;
  	for (j = 0 ; j < fieldStr.length ; j++)
	{
   		tst = fieldStr.substring(j, j+1)
   		if (cmp.indexOf(tst) < 0)
		{
			return false ;
		}
	}
	return true ;
}
function checkForAlphabeticField(thisField)
{
	var fieldStr = thisField.value ;
	cmp = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.,-'\"`_ " ;
  	for (j = 0 ; j < fieldStr.length ; j++)
	{
   		tst = fieldStr.substring(j, j+1)
   		if (cmp.indexOf(tst) < 0)
		{
			return false  ;
		}
	}
	return true ;
}
function checkForRegExMatch(thisField, regExp)
{
	var fieldStr = thisField.value ;
	var regexpobj = new RegExp(regExp) ; 
//alert("regexpobj = " + regexpobj );
	var result = fieldStr.match(regexpobj) ;
//alert("result = " + result );
	return (result != null) ;
}
function focusOnField(field)
{
  	try {
	field.select();
	field.focus() ;
   	} catch (excep) { /* do nothing */ }
}
var newwindow;
function showDocument(docname)
{
	newwindow = window.open(docname, '', 'height=500,width=760,top=10,left=10,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes')
	if (window.focus) {newwindow.focus()}
}
function openNamedWindow(winname, docname)
{
	newwindow = window.open(docname, winname, 'height=500,width=760,top=10,left=10,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes')
	if (window.focus) {newwindow.focus()}
}
var pdfresource = '' ;
function setPDFResources(resource)
{
//alert("setPDFResources resource= " + resource) ;
	pdfresource = resource ;
}
function showPDF(pdftransform)
{
//alert("showPDF pdfresource = " + pdfresource ) ;
//alert("showPDF pdftransform = " + pdftransform) ;
	if (pdfresource == '' || pdftransform == '') return ;

	var pdfurl = "showpdf.html?xml=" + pdfresource ;
	if (pdftransform != '') pdfurl = pdfurl + "&xsl=" + pdftransform ;
	newwindow = window.open(pdfurl, 'ShowPDF', 'height=500,width=760,top=10,left=10,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes')
	if (window.focus) {newwindow.focus()}
}
function showReport(pdfreport)
{
	if (pdfresource == '' || pdfreport == '') return ;
	var pdftransform = '' ;
	var pdfxpath = '' ;
	var idx = pdfreport.indexOf("|") ;
	if (idx != -1)
	{
		pdfxpath = pdfreport.substring(0,idx) ;
		pdfreport = pdfreport.substring(idx+1,pdfreport.length) ;
	}
	idx = pdfreport.indexOf("|") ;
	if (idx != -1)
	{
		pdftransform = pdfreport.substring(idx+1,pdfreport.length) ;
		pdfreport = pdfreport.substring(0,idx) ;
	}
	var reporturl = "showreport.html?xml=" + pdfresource ;
	if (pdftransform != '') reporturl = reporturl + "&xsl=" + pdftransform ;
	if (pdfxpath != '') reporturl = reporturl + "&xpath=" + pdfxpath ;
	if (pdfreport != '') reporturl = reporturl + "&rpt=" + pdfreport ;
	newwindow = window.open(reporturl, 'ShowReport', 'height=500,width=760,top=10,left=10,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes')
	if (window.focus) {newwindow.focus()}
}
function printForm(pagename, pageformat, xmlselectkey)
{
//alert("printForm xmlselectkey = " + xmlselectkey) ;
	if (xmlselectkey == null || xmlselectkey == '')
	{
		alert("No items selected - please select one item") ;
		return ;
	}
	if (pagename == '' || pageformat == '') return ;

	var pageurl = pagename + "?xmlselectkey=" + xmlselectkey ;
	if (pageformat != '') pageurl = pageurl + "&mode=printpage&xmlprintformat=" + pageformat ;
//alert("printForm pageurl = " + pageurl ) ;
	newwindow = window.open(pageurl, 'PrintForm', 'height=500,width=760,top=10,left=10,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes')
	if (window.focus) {newwindow.focus()}
}
function getSelectedItems(xmlselectkey)
{
//alert("getSelectedItems xmlselectkey = " + xmlselectkey) ;
	var listofnames = "NOITEMS" ;
	for (var i = 0  ; i< document.forms[0].length; i++)
	{
		var element = document.forms[0].elements[i] ;
		if (element  == null) continue ;
		if (element.type != "checkbox") continue ;
		if (listofnames == "NOITEMS") listofnames = '' ;
		var elname = element.name ;
		if (xmlselectkey.length < elname.length && elname.substring(0, xmlselectkey.length) == xmlselectkey && element.checked == true)
		{
		 	listofnames = listofnames + elname + "," ;
		}
	}
	if (listofnames.length > 0) listofnames = listofnames.substring(0, listofnames.length-1) ;
//alert("listofnames = " + listofnames ) ;
	return listofnames ; 
}
function selectAll(fieldname, value)
{
	var fieldnameparts = fieldname.split("*") ;
	for (var i = 0  ; i< document.forms[0].length; i++)
	{
		var element = document.forms[0].elements[i] ;
		if (element  == null) continue ;
		if (element.type != "checkbox") continue ;
		var elname = element.name ;
		if ((fieldnameparts[0].length < elname.length && elname.substring(0, fieldnameparts[0].length) == fieldnameparts[0])
		 && (fieldnameparts.length == 1
		     || (fieldnameparts[1].length < elname.length && elname.substring(elname.length-fieldnameparts[1].length) == fieldnameparts[1])))
		{
		 	element.checked = value ;
		 	element.value = value ;
		}
	}
}
function checkAllOneFields(validationfieldArr)
{
	for (var i = 0 ; i < validationfieldArr.length ; i++)
	{
		if (validationfieldArr[i].length == null || validationfieldArr[i].length < 1) continue ;
		var subfieldArr = validationfieldArr[i].split(",") ;
		for (var j = 2 ; j < subfieldArr.length ; j++)
		{
			var field = getObj(subfieldArr[0]) ;
			if (subfieldArr[j] != "ONE") continue ;
			if (field.value != null && field.value != "" && field.value != "false" && field.value != "null") return true ;
		}
    	}
    	return false ;
}
function clearAllFields()
{
	for (var i = 0  ; i< document.forms[0].length; i++)
	{
		var element = document.forms[0].elements[i] ;
		if (element  == null) continue ;
		if (element.type != "text") continue ;
		element.value = " ";
	}
}
var validationxmlfield = null ;
var validationfieldname = null ;
var validationmessage = null ;
function validationSetMessage(xmlfield, fieldname, message)
{
validationxmlfield = xmlfield ;
validationfieldname = fieldname ;
validationmessage = message ;
//alert("validationxmlfield = " + validationxmlfield ) ;
//alert("validationfieldname = " + validationfieldname ) ;
//alert("validationmessage = " + validationmessage ) ;
}
function validationSetOnload()
{
	if (validationxmlfield == null) return true ;
onloadFunc = window.onload ;
window.onload = validateserverXmlForm ;
}
function validateserverXmlForm()
{
//alert("onloadFunc = " + onloadFunc ) ;
	if (onloadFunc != null) onloadFunc.call() ;
//alert("validationxmlfield = " + validationxmlfield ) ;
	if (validationxmlfield == null) return true ;
	var field = getObj(validationxmlfield) ;
//alert("field = " + field ) ;
	focusOnField(field) ;
	alert("Field [" + validationfieldname + "] has invalid content, " + validationmessage) ;
	return false ;
}
function validateXmlForm()
{
   try {
	var validationfields = getObj("xmlvalidation") ;
	if (validationfields == null) return true ;
	var fieldvalue = validationfields.value ;
	if (fieldvalue == null || fieldvalue.length < 1) return true ;
	var validationfieldArr = fieldvalue.split("|") ;
        var onefieldschecked = false ;
	for (var i = 0 ; i < validationfieldArr.length ; i++)
	{
		if (validationfieldArr[i].length == null || validationfieldArr[i].length < 1) continue ;
		var subfieldArr = validationfieldArr[i].split(",") ;
		for (var j = 2 ; j < subfieldArr.length ; j++)
		{
//alert("subfieldArr[j] = " + subfieldArr[j]) ;
			var field = getObj(subfieldArr[0]) ;
//alert("field = " + field) ;
//alert("subfieldArr[j].substring(0,4) = " + subfieldArr[j].substring(0,4)) ;
			if (subfieldArr[j].substring(0,4) == "RGX:")
			{

				var regexfield = subfieldArr[j].substring(4) ;
				while (j+1 < subfieldArr.length
				&& subfieldArr[j+1].substring(0,4) != "REQ:"
				&& subfieldArr[j+1].substring(0,4) != "ONE:"
				&& subfieldArr[j+1].substring(0,4) != "CUR:"
				&& subfieldArr[j+1].substring(0,4) != "NUM:"
				&& subfieldArr[j+1].substring(0,4) != "INT:"
				&& subfieldArr[j+1].substring(0,4) != "POS:"
				&& subfieldArr[j+1].substring(0,4) != "ALP:"
				&& subfieldArr[j+1].substring(0,4) != "DAT:"
				&& subfieldArr[j+1].substring(0,4) != "EMA:"
				&& subfieldArr[j+1].substring(0,4) != "TEL:")
				{
					regexfield = regexfield + "," + subfieldArr[++j];
				}
//alert("regexfield = " + regexfield  ) ;
				var regexfieldArr = regexfield.split("!") ;
//alert("regexfieldArr[0] = " + regexfieldArr[0] ) ;
//alert("regexfieldArr[1] = " + regexfieldArr[1] ) ;
//alert("field.value = " + field.value ) ;
				if (field.value != null && field.value != "" && false == checkForRegExMatch(field, regexfieldArr[0]))
				{
//alert("regexfieldArr[1] = " + regexfieldArr[1] ) ;
					if (regexfieldArr[1] == null || regexfieldArr[1] == "") regexfieldArr[1] = regexfieldArr[0] ;
					focusOnField(field) ;
					alert("Field [" + subfieldArr[1] + "] has invalid content, it does not match required format [" + regexfieldArr[1] + "]") ;
					return false ;
				}
//alert("field passed REGEX test") ;
			}
			else
			if (subfieldArr[j] == "REQ")
			{
				if (field.type == "select-one") 
				{
					if (field.options[field.selectedIndex].text == "")
					{
						field.focus() ;
						alert("Required field [" + subfieldArr[1] + "], an option has not been selected.") ;
						return false ;
					}
				}
				else
				if (field.value == null || field.value == "")
				{
					focusOnField(field) ;
					alert("Required field [" + subfieldArr[1] + "] has not been completed.") ;
					return false ;
				}
			}
			else
			if (subfieldArr[j] == "ONE" && false == onefieldschecked)
			{
                                onefieldschecked = true ;
				if (field.value == null || field.value == "" || field.value == "false" || field.value == "null") 
				{
                                        var resultone = checkAllOneFields(validationfieldArr) ;
                                        if (!resultone)
                                        {
					    alert("At least one [" + subfieldArr[1] + "] must be completed.") ;
					    return false ;
                                        }
				}
			}
			else
			if (subfieldArr[j] == "CUR")
			{
				removeSpaces(field) ;
				if (field.value != null && field.value != "" && false == checkForCurrencyField(field))
				{
					focusOnField(field) ;
					alert("Currency field [" + subfieldArr[1] + "] has invalid content, currency format required.") ;
					return false ;
				}
			}
			else
			if (subfieldArr[j] == "NUM")
			{
				removeSpaces(field) ;
				if (field.value != null && field.value != "" && false == checkForNumericField(field))
				{
					focusOnField(field) ;
					alert("Numeric field [" + subfieldArr[1] + "] has invalid content, number required.") ;
					return false ;
				}
			}
			else
			if (subfieldArr[j] == "INT")
			{
				removeSpaces(field) ;
				if (field.value != null && field.value != "" && false == checkForIntegerField(field))
				{
					focusOnField(field) ;
					alert("Numeric field [" + subfieldArr[1] + "] has invalid content, integer required.") ;
					return false ;
				}
			}
			else
			if (subfieldArr[j] == "POS")
			{
				removeSpaces(field) ;
				if (field.value != null && field.value != "" && false == checkForPositiveIntegerField(field))
				{
					focusOnField(field) ;
					alert("Numeric field [" + subfieldArr[1] + "] has invalid content, positive integer required.") ;
					return false ;
				}
			}
			else
			if (subfieldArr[j] == "ALP")
			{
				if (field.value != null && field.value != "" && false == checkForAlphabeticField(field))
				{
					focusOnField(field) ;
					alert("Alphabetic field [" + subfieldArr[1] + "] has invalid content, alphabetic characters only.") ;
					return false ;
				}
			}
			else
			if (subfieldArr[j] == "DAT")
			{
				removeSpaces(field) ;
				if (field.value != null && field.value != "" && false == checkForDateField(field))
				{
					focusOnField(field) ;
					alert("Date field [" + subfieldArr[1] + "] has invalid content, date format DD/MM/YYYY required.") ;
					return false ;
				}
			}
			else
			if (subfieldArr[j] == "EMA")
			{
				removeSpaces(field) ;
				if (field.value != null && field.value != "")
				{
					var msg = checkForEmailField(field) ;
					if (msg != null)
					{
						focusOnField(field) ;
						alert("Email field [" + subfieldArr[1] + "] " + msg ) ;
						return false ;
					}
				}
			}
			else
			if (subfieldArr[j] == "TEL")
			{
				if (field.value != null && field.value != "" && false == checkForTelephoneNoField(field))
				{
					focusOnField(field) ;
					alert("Telephone number field [" + subfieldArr[1] + "] has invalid content, not telephone number format.") ;
					return false ;
				}
			}
		}
	}
    	disableAllButtons() ;
	return true ;
   }
   catch (excep) { alert("A validation exception has occurred - form input has not been validated. " + excep) ; return true ; }
}
function addNewLine(xmlpath, formname) 
{
    if (xmlpath == " " || xmlpath == "" || xmlpath == "Select...") return false ;
    var mode = getObj("mode") ;
    if (mode != null)
        mode.value = "xmladdnewline|" + xmlpath ;
    var form = getObj(formname) ;
    if (form != null)
        form.submit() ;
window.onload="window.location.hash='data'" ;
    return true ;
}
function addItem(itemId, formname) 
{
    if (itemId == " " || itemId == "" || itemId == "Select...") return false ;
    var mode = getObj("mode") ;
    if (mode != null)
        mode.value = "xmladditem|" + itemId ;
    var form = getObj(formname) ;
    if (form != null)
        form.submit() ;
window.onload="window.location.hash='data'" ;
    return true ;
}
function selectItem(itemId, formname) 
{
    if (itemId == " " || itemId == "" || itemId == "Select...") return false ;
    var mode = getObj("mode") ;
    if (mode != null)
        mode.value = "xmlselectitem|" + itemId ;
    var form = getObj(formname) ;
    if (form != null)
        form.submit() ;
window.onload="window.location.hash='data'" ;
    return true ;
}
function removeItem(promptMessage, itemId, tag, formname) 
{
    if (false == confirm(promptMessage)) return false ;
//alert("itemId = " + itemId) ;
//alert("formname= " + formname) ;
    var mode = getObj("mode") ;
   if (mode != null)
        mode.value = "xmlremoveitem|" + itemId + "|" + tag ;
//alert("mode = " + mode ) ;
    var form = getObj(formname) ;
//alert("form = " + form ) ;
    if (form != null)
        form.submit() ;
window.onload="window.location.hash='data'" ;
    return true ;
}
function splitItem(promptMessage, itemId, tag, formname) 
{
    if (false == confirm(promptMessage)) return false ;
//alert("itemId = " + itemId) ;
//alert("formname= " + formname) ;
    var mode = getObj("mode") ;
   if (mode != null)
        mode.value = "xmlsplititem|" + itemId + "|" + tag ;
//alert("mode = " + mode ) ;
    var form = getObj(formname) ;
//alert("form = " + form ) ;
    if (form != null)
        form.submit() ;
    return true ;
}
function changeItem(olditemid, newitemid, formname)
{
    if (newitemid == " " || newitemid == "" || newitemid == "Select...") return false ;
    //alert("olditemid = " + olditemid) ;
    //alert("newitemid= " + newitemid) ;
    //alert("formname= " + formname) ;
    var mode = getObj("mode") ;
    if (mode != null)
        mode.value = "xmlchangeitem|" + olditemid + "|" + newitemid ;
    var form = getObj(formname) ;
    if (form != null)
        form.submit() ;
    return true ;
}
function refreshForm(formname)
{
    var mode = getObj("mode") ;
    if (mode != null)
        mode.value = "refresh" ;
    var form = getObj(formname) ;
    if (form != null)
        form.submit() ;
    return true ;
}
function sortList(formname, fieldname)
{
    var mode = getObj("mode") ;
//alert("mode = " + mode) ;
    if (mode != null)
    {
        mode.value = "sort:" + fieldname ;
//alert("mode.value = " + mode.value) ;
    }
    var form = getObj(formname) ;
//alert("form = " + form ) ;
    if (form != null)
        form.submit() ;
    return true ;
}
function previousPage(formname)
{
    var mode = getObj("mode") ;
    if (mode != null)
        mode.value = "previouspage" ;
    var form = getObj(formname) ;
    if (form != null)
        form.submit() ;
    return true ;
}
function nextPage(formname)
{
    var mode = getObj("mode") ;
    if (mode != null)
        mode.value = "nextpage" ;
    var form = getObj(formname) ;
    if (form != null)
        form.submit() ;
    return true ;
}
function selectPage(formname, pageNo)
{
    var mode = getObj("mode") ;
    if (mode != null)
        mode.value = "page:" + pageNo ;
    var form = getObj(formname) ;
    if (form != null)
        form.submit() ;
    return true ;
}
function filterHTML(obj) 
{ 
  var replaceNextlines = false ;

  var contents = obj.innerHTML; // ignore blank contents

  // ignore blank contents
  if (contents.toLowerCase() == '<p>&nbsp;</p>') { contents = ""; }

  // filter tag - this code is run for each HTML tag matched
  var filterTag = function(tagBody,tagName,tagAttr) {
    tagName = tagName.toLowerCase();
    var closingTag = (tagBody.match(/^<\//)) ? true : false;

    // fix placeholder URLS - remove absolute paths that IE adds
    if (tagName == 'img') { tagBody = tagBody.replace(/(src\s*=\s*.)[^*]*(\*\*\*)/, "$1$2"); }
    if (tagName == 'a')   { tagBody = tagBody.replace(/(href\s*=\s*.)[^*]*(\*\*\*)/, "$1$2"); }

    // add additional tag filtering here

    // convert to vbCode
    if      (tagName == 'b' || tagName == 'strong') {
      tagBody = ""; //if (closingTag) { tagBody = "[/b]"; } else { tagBody = "[b]"; }
    }
    else if (tagName == 'i' || tagName == 'em') {
      tagBody = ""; //if (closingTag) { tagBody = "[/i]"; } else { tagBody = "[i]"; }
    }
    else if (tagName == 'u') {
      tagBody = ""; //if (closingTag) { tagBody = "[/u]"; } else { tagBody = "[u]"; }
    }
    else {
      tagBody = ""; // disallow all other tags!
    }

    return tagBody;
  };

  // match tags and call filterTag
  RegExp.lastIndex = 0;
    var matchTag = /<\/?(\w+)((?:[^'">]*|'[^']*'|"[^"]*")*)>/g;   // this will match tags, but still doesn't handle container tags (textarea, comments, etc)

  contents = contents.replace(matchTag, filterTag);

  // remove nextlines from output (if requested)
  if (replaceNextlines) { 
    contents = contents.replace(/\r\n/g, ' ');
    contents = contents.replace(/\n/g, ' ');
    contents = contents.replace(/\r/g, ' ');
  }
  // update output with filtered content
  return contents;
}


