/*
' =============================================================================================================================================================================================================================================================================================================
' Changes to file 'MZ_Java_Client.js' for 'iknow_0521', generated 10/02/2005 8:25:56 AM
' =============================================================================================================================================================================================================================================================================================================
' 014 08/02/2005 Alexs    the mz_requirefield function did not test field + ';' so it would wrongly match against similar field names
' 013 02/02/2005 Rayp     Added mz_now(t) this returns the date and if(t) the time.
' 012 20/01/2005 Alexs    remove cursor style on the returndata function as it is not supported with ie 5.5 or below
' 011 10/01/2005 Andrewh  Improved error handling in mz_parentformrow()
' 010 10/01/2005 Andrewh  New function mz_parentformrow(oElement). Steps upward from a HTML element to find the mz_formrow that contains it.
' 009 06/01/2005 Alexs    fillmulti would fall over if the search returns no result. fixed
' 008 06/01/2005 Alexs    the fillmulti function had no order by. this has now been added
' 007 05/01/2005 Andrewh  prepend urlpath to allow mz_refreshlist to be called from any folder
' 006 05/01/2005 Alexs    the returndata function (if using xmlhttp) only returns 1 record which poses a problem for searches under autorelate tabs where it needs to return multiple items. Fixed so that the sql itself returns a comma delimited string - however this is limited to 8000 characters only.
' 005 23/12/2004 Andrewh  Replace "%2B" in mz_returndata for backward compatibility
' 004 17/12/2004 Rayp     Enhancements to print data, now support printing of tabs with page breaks
' 003 13/12/2004 Dannys   Now forces mz_returndata to always use XMLHTTP
' 002 02/12/2004 Rayp     Added support for generic popup attachment form - mz_popAttachment()
' ===============================================================================================================
' Changes to file 'MZ_Java_Client.js' for 'iknow_0520', generated 21/11/2004 10:47:51 AM
' ===============================================================================================================
' 012 16/11/2004 Andrewh  mz_select_subitem() modified to eval the parent field's onchange event
' 011 16/11/2004 Rayp     Added  function mz_printElem, this prints the contents of an element
' 010 12/11/2004 Neilm    Removed mandatory subitem selection for location dropdowns
' 009 26/10/2004 Andrewh  Don't redirect if nothing passed back from mz_mappings
' 008 25/10/2004 Rayp     Changed mz_fillmulti so that it CAST's both the code & description fields as NVARCHAR
' 007 20/10/2004 Neilm    Merged explorer and roles code into main code tree.
' 006 15/10/2004 Andrewh  Check if form dirty before displaying mz_mappings.asp
' 005 30/09/2004 Andrewh  Added function mz_showlinkeditems(qstring) to popup linked items box
' 004 23/08/2004 Andrewh  mz_returndata XMLHTTP improve return value consistency with old implementation
' 003 19/08/2004 Andrewh  Support "noresult" param in XMLHTTP mode of mz_returndata
' 002 19/08/2004 Andrewh  Add XMLHTTP mode to mz_returndata
' =================================================================================================================================================================================================================
' Changes to file 'MZ_Java_Client.js' for 'iknow_0519', generated 19/08/2004 7:17:48 AM
' =================================================================================================================================================================================================================
' 014 18/08/2004 Andrewh  Switch background colours of "display" fields correctly
' 013 17/08/2004 Andrewh  Date field validation
' 012 13/08/2004 Andrewh  Enhancements to mz_switchstyle
' 011 09/08/2004 Andrewh  Added function mz_requirefield(field, required, fieldtitle)
' 010 04/08/2004 Alexs    added new parameter autorelatepopupsavereload so that when submitting a form in the popup window (add new on a auto relate tab), the underlying form is  reloaded rather than submitted
' 009 23/07/2004 Andrewh  Extensions to mz_switchstyle() to do more field types etc
' 008 14/07/2004 Neilm    Reinstated deep link fixer
' 007 13/07/2004 Ddeleon  Added new function mz_refreshlistselected.
' 006 28/06/2004 Rayp     Changed mz_checkfields to change to white fields that were subsequently completed.
' 005 23/06/2004 Alexs    fixed issue with java table search
' 004 18/06/2004 Dannys   mzIncludeSelectedItems function fixed to work with no list past in
' 003 17/06/2004 Alexs    working on new sorting searching function
' 002 17/06/2004 Alexs    added java sorting and searching, and alt row colors on related tab lists
' =======================================================================================================================================================================
' Changes to file 'MZ_Java_Client.js' for 'iknow_0518', generated 17/06/2004 7:56:11 AM
' =======================================================================================================================================================================
' 006 09/06/2004 Andrewh  More work toward detecting deep linking
' 005 07/06/2004 Andrewh  Added alert to notify when deep linking detected (for testing purposes only)
' 004 07/06/2004 Andrewh  Added more checks to the frame forcing code to detect additional popup types.
' 003 25/05/2004 Alexs    fix issue with the new detect frame functionality to work with pages where we don't want to bring up the frame eg places that calls newWindow
' 002 24/05/2004 Andrewh  force all pages into standard frames when deep-linking
' =======================================================================================
' Changes to file 'MZ_Java_Client.js' for 'iknow_0517', generated 13/05/2004 6:37:02 AM
' =======================================================================================
' 007 12/05/2004 Rayp     Added numerous functions
' 006 04/05/2004 Dannys   Created code to handle an onclick event on the list actions
' 005 31/03/2004 Rayp     Changed mz_checkfields to highlight in yellow missing field
' 004 17/03/2004 Rayp     Added isodate()
' 002 16/03/2004 Neilm    Fixed issues created by rollover tool
' =======================================================================================
' ==================================================================================================
' Changes to file 'MZ_Java_Client.js' for 'iknow_0516', generated 16/03/2004 8:50:48 AM
' ==================================================================================================
' 007 15/03/2004 Rayp     Added mzShowHideElem(), this toggles the display property of an element.
' ==================================================================================================
*/
//--------------------------------------------------------------------------------
function showMenuMenu()
{
	var am = document.all("menuactions");
	if (am.style.display=="")
	{
		document.body.detachEvent("onclick",showMenuMenu);
		menuinterval = window.setInterval("fadeitem(document.all('menuactions'),-1)",10);
		document.all("menumenubutton").src = urlpath + 'images/menuopen.gif';
	}
	else
	{
		document.body.attachEvent("onclick",showMenuMenu);
		menuinterval = window.setInterval("fadeitem(document.all('menuactions'),1)",10);
		document.all("menumenubutton").src = urlpath + 'images/menuclose.gif';
	}
	event.cancelBubble=true;
}

//--------------------------------------------------------------------------------
function fadeitem(oItem,direction)
{
	if (direction==1)
	{
		if (oItem.style.display=="none")
		{
			oItem.style.display = "";
			oItem.style.pixelLeft = -200;
			oItem.style.pixelTop = -175;
			oItem.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 0;				
		}
				
		if (oItem.filters.item("DXImageTransform.Microsoft.Alpha").opacity > 99)
		{
			oItem.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 100;
			oItem.style.pixelLeft = 0;
			oItem.style.pixelTop = 25;
			window.clearInterval(menuinterval);
		}
		else
		{
			oItem.filters.item("DXImageTransform.Microsoft.Alpha").opacity += 5;				
			oItem.style.pixelLeft += 10;
			oItem.style.pixelTop += 10;
		}
	}
	else
	{
		if (oItem.filters.item("DXImageTransform.Microsoft.Alpha").opacity < 1)
		{
			oItem.style.display = "none";
			oItem.style.pixelLeft = -500;
			oItem.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 100;				
			window.clearInterval(menuinterval);
		}
		else
		{
			oItem.filters.item("DXImageTransform.Microsoft.Alpha").opacity -= 5;				
			oItem.style.pixelLeft -= 10;
			oItem.style.pixelTop -= 10;
		}
	}
}

function mz_hidemenu(mname)
{
	if (document.all("menu" + mname)!=null)
	{
		document.all("menu" + mname).parentElement.parentElement.parentElement.style.display = "none";
	}
}

function mz_clearmenu(mname)
{
	act = document.all("menu" + mname);
	while(act.rows.length>0)
	{
		act.deleteRow(0);
	}
}

function mz_addmenuitem(mname,imgname,linktext)
{
	act = document.all("menu" + mname);
	act.insertRow(act.rows.length);
	act.rows[act.rows.length-1].insertCell();
	var thisitem = act.rows[act.rows.length-1].cells[0];
	thisitem.className = 'submenurow';
	thisitem.innerHTML = '<table style="border-collapse:collapse;"><tr><td class="submenurow"><img src="' + urlpath + 'images/' + imgname + '"></td><td class="submenurow">' + linktext + '</td></tr></table>';
}

function mz_addmenu(mname,mtitle,curves)
{
	var newtable = document.createElement('TABLE');
	var c = 0;

	newtable.className = 'submenutable'; 
	newtable.width='95%';
	newtable.align='center';
	newtable.style.tableLayout = 'fixed';
	newtable.insertRow(0);
	if (curves)
	{
		newtable.rows[0].insertCell(0);
		newtable.rows[0].cells[0].className = 'submenu_topleft';
		c++;
	}
	newtable.rows[0].insertCell(c);
	newtable.rows[0].cells[c].className = 'submenuheader';
	newtable.rows[0].cells[c].attachEvent('onclick',mz_togglecontextmenu);
	newtable.rows[0].cells[c].innerHTML = mtitle;
	c++;
	newtable.rows[0].insertCell(c);
	newtable.rows[0].cells[c].className = 'submenubutton';
	newtable.rows[0].cells[c].attachEvent('onclick',mz_togglecontextmenu);
	newtable.rows[0].cells[c].innerHTML = '<img id=\'menu' + mname + 'button\' src=\'/canopy_0522/images/menuclose.gif\' border=\'0\'>';
	if (curves)
	{
		c++;
		newtable.rows[0].insertCell(c);
		newtable.rows[0].cells[c].className = 'submenu_topright';
		newtable.insertRow(1);
	}
	c=0;
	if (curves)
	{
		newtable.rows[1].insertCell(0);
		newtable.rows[1].cells[0].className = 'submenu_sideleft';
		c++;
	}
	newtable.rows[1].insertCell(c);
	newtable.rows[1].cells[c].colSpan='2';
	newtable.rows[1].cells[c].className = 'submenutext';

	var mtbl = document.createElement('TABLE');
	mtbl.style.borderCollapse = 'collapse';
	mtbl.style.border = 'none';
	mtbl.id = 'menu' + mname;
	mtbl.width = '100%';

	newtable.rows[1].cells[c].appendChild(mtbl);
	c++;
	if (curves)
	{
		newtable.rows[1].insertCell(2);
		newtable.rows[1].cells[2].className = 'submenu_sideright';
		newtable.insertRow(2);
		newtable.rows[2].insertCell();
		newtable.rows[2].insertCell();
		newtable.rows[2].insertCell();
		newtable.rows[2].cells[0].className = 'submenu_bottomleft';
		newtable.rows[2].cells[1].className = 'submenu_bottom';
		newtable.rows[2].cells[2].className = 'submenu_bottomright';
		newtable.rows[2].cells[1].colSpan = '2';
	}
	var tblbreak = document.createElement('BR');
	tblbreak.style.lineHeight = '5px';
	document.all('rsb').appendChild(newtable);
	document.all('rsb').appendChild(tblbreak);
}

function mz_togglecontextmenu()
{
	var src = event.srcElement;
	if (src.tagName!='TD') { src = src.parentElement;}
	var cellcount = src.parentElement.cells.length;
	
	var mtbl = src.parentElement.parentElement.parentElement.rows[1].cells[(cellcount==4?1:0)].children[0];
	var mimg = src.parentElement.cells[(cellcount==4?2:1)].children[0];
	if (mimg.src.indexOf('menuclose.gif')>0)
	{
		mimg.src = String(mimg.src).replace(/close.gif/,'open.gif');
		mtbl.style.display = 'none';
	}
	else
	{
		mimg.src = String(mimg.src).replace(/open.gif/,'close.gif');
		mtbl.style.display = '';
	}
}
function mz_getlocationpath(loccode){
	var l,p,q,sSQL,rs,rs1
	l = ''
	p = ''	
	sSQL = "select loc_name AS l,loc_parent AS p from location where loc_code = '"+ loccode +"'"	
	rs = fireSQL(urlpath+"scripts/includes/XMLdata.asp?_ref="+ dbref, sSQL, "", "", false, 1);
	if(rs.rows > 0 && rs.result){
		l = rs.table[0].l;
		p = rs.table[0].p;
		while(p != ''){
			rs1 = fireSQL(urlpath+"scripts/includes/XMLdata.asp?_ref="+ dbref, "select loc_name AS l,loc_parent AS p from location where loc_code = '"+ p +"'", "", "", false, 1);
			p = '';
			if(rs1.rows > 0 && rs1.result){				
				var r1 = rs1.table[0];
				l = r1.l +'&nbsp;/&nbsp;'+ l
				p = r1.p
			}
		}
	}
	return l
}
function mz_showNavigator(){
	if(gloginname != ''){
		var retval = window.showModalDialog('mz_history_navigator.asp?'+ extrastr,'','dialogHeight:360px;dialogWidth:700px;dialogTop:px;dialogLeft:px;edge:none;center:Yes;help:No;resizable:Yes;status:No;scroll:No;unadorned:Yes;');
		if (retval != '' && retval != undefined){      
			window.location.href = retval;
		}
	}
	else{alert('Your session has timed out, please login again and try again.')}
}

function mz_showCtrlSearch(){
	if(gloginname != ''){
		var retval = window.showModalDialog('ctrl_search.asp?'+ extrastr,'','dialogHeight:360px;dialogWidth:700px;dialogTop:px;dialogLeft:px;edge:none;center:Yes;help:No;resizable:Yes;status:No;scroll:No;unadorned:Yes;');
		if (retval != '' && retval != undefined){
			if(fnInStr(retval,'asp') > -1){      
				window.location.href = retval;
			}
			else{return retval;alert(retval)}
		}
	}
	else{alert('Your session has timed out, please login again and try again.')}
}
function mz_hsColumn(sTbl,iCol,sw) {
	if(sw == true){sw = ''}
	else{sw = 'none'}
	var tbl  = document.getElementById(sTbl);
	var rows = tbl.getElementsByTagName('tr');
	for (var row=0; row<rows.length;row++) {
		var cels = rows[row].getElementsByTagName('td')
		try{cels[iCol].style.display=sw;}
		catch(e){};
	}
}
function fnInStr(str,fnd){
	return str.toUpperCase().indexOf(fnd.toUpperCase());
}
function mz_renderDDO(obj,sql,sel,id){
	obj.length = 0;
	var dd = fireSQL(urlpath+"scripts/includes/XMLdata.asp?_ref="+ dbref, sql, "", "", false, 1);
	if(dd.rows > 0 && dd.result){		
		var newopt = document.createElement("OPTION");
			newopt.value = '';
			newopt.text = 'Select...';
			obj.options[obj.options.length] = newopt;
			for (row in dd.table){
				var r = dd.table[row]
				var newopt = document.createElement("OPTION");
					newopt.value = r.A;
					if(id){newopt.text = '['+ r.A +']'+ r.B;}
					else{newopt.text = r.B;}
					obj.options[obj.options.length] = newopt;
					if(sel==r.A){newopt.selected = true;}	
			}
	}
}
function mz_hsFieldRow(sw,fld,r){
	if(sw == true){sw = ''}
	else{sw = 'none'}
	var obj = document.getElementById(fld).parentElement.parentElement, objTxt = obj.children[0].innerText.replace(':','');
	obj.style.display = sw;	
	if(r && sw==''){	
		obj.children[0].innerHTML = '<b>'+ objTxt + '</b>';
		mz_fldreqlist = mz_fldreqlist + fld.substr(3,fld.length) +';';
		mz_fldreqtext = mz_fldreqtext + objTxt +';';
	}
	if(r && sw=='none'){
		mz_fldreqlist = mz_fldreqlist.replace(fld.substr(3,fld.length) +';','');
		mz_fldreqtext = mz_fldreqtext.replace(objTxt +';','');
	}
}
function mz_addFieldSymbol(s,fld){	
	var obj = document.getElementById(fld).parentElement, sfldHTML = obj.innerHTML;
	obj.style.paddingRight = s.length*9;
	obj.innerHTML = '<nobr>'+ s + sfldHTML +'</nobr>';
}
var mz_checkDateMArr = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
function mz_checkDate(dtStr){
	var dateExists = true;	
	var pos1=dtStr.indexOf('/')
	var pos2=dtStr.indexOf('/',pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)	
	if (!strDay || !strMonth || !strYear){return false;}
	if (strYear/4 == parseInt(strYear/4)){mz_checkDateMArr[1] = 29;}
	if (strDay > mz_checkDateMArr[strMonth-1]){dateExists = false;}	
	mz_checkDateMArr[1] = 28;	
	if (!dateExists){
		alert('Please enter a valid date in the format dd/mm/yyyy');
		return false;
	}	
	var now = new Date();
		now = now.getTime();
	var dateToCheck = new Date();
		dateToCheck.setYear(strYear);
		dateToCheck.setMonth(strMonth-1);
		dateToCheck.setDate(strDay);
	var mz_checkDate = dateToCheck.getTime();
	var futureDate = (now < mz_checkDate);
	return futureDate;
}


function fnQuery(q) {
	if(q.length > 1) this.q = q.substring(1, q.length);
	else this.q = null;
	this.keyValuePairs = new Array();
	if(q) {
		for(var i=0; i < this.q.split("&").length; i++) {
			this.keyValuePairs[i] = this.q.split("&")[i];
		}
	}
	this.getKeyValuePairs = function() { return this.keyValuePairs; }
	this.getValue = function(s) {
		for(var j=0; j < this.keyValuePairs.length; j++) {
			if(this.keyValuePairs[j].split("=")[0] == s)
				return this.keyValuePairs[j].split("=")[1];
		}
		return false;
	}
	this.getParameters = function() {
		var a = new Array(this.getLength());
		for(var j=0; j < this.keyValuePairs.length; j++) {
			a[j] = this.keyValuePairs[j].split("=")[0];
		}
		return a;
	}
	this.getLength = function() { return this.keyValuePairs.length; }	
}
function mz_queryString(key,URL){
	if(URL != ''){URL = window.location.search}
	var qs = new fnQuery(URL); 
	return unescape(qs.getValue(key)); 
}
function mz_disableField(sw,fld){
	var obj = document.getElementById(fld)
	switch(obj.type){
		case 'checkbox':
			if(obj.checked){
				obj.parentElement.innerHTML = obj.parentElement.innerHTML + obj.value;
			}
			obj.style.display = 'none';	
		break;
		case 'select-one':
			if(obj.value !=''){
				obj.parentElement.innerHTML = obj.parentElement.innerHTML + obj.options[obj.selectedIndex].text;
			}
			obj.style.display = 'none';					
		break;
		case 'select-multiple':
			var r = '', oSel = obj;					
			for (var iS = 0; iS < oSel.options.length; iS++){
				if (oSel.options[iS].selected){
					r += oSel.options[iS].text +'<br>';
				}
			}		
			obj.parentElement.innerHTML = obj.parentElement.innerHTML + r;
			obj.style.display = 'none';
		break;
		default:
			obj.readOnly = sw;
			obj.style.border = '0px';
			obj.style.background = obj.parentElement.style.background;			
		break
	}
}
function mz_disableForm(sw){
	if(sw){sVis='none';}
	else{sVis=''}
	for (var i=0;i<editform.elements.length;i++ ){		
		if(editform.elements[i].name.substr(0,3)=='fld' || editform.elements[i].name.substr(0,7)=='display'){
			switch(editform.elements[i].type){
				case 'checkbox':
					editform.elements[i].disabled = sw;
				break;
				case 'select-one':
					if(editform.elements[i].value !=''){
						editform.elements[i].parentElement.innerHTML = editform.elements[i].parentElement.innerHTML + editform.elements[i].options[editform.elements[i].selectedIndex].text
					}
					editform.elements[i].style.display = 'none';					
				break;
				case 'select-multiple':
					var r = '', oSel = editform.elements[i];					
					for (var iS = 0; iS < oSel.options.length; iS++){
						if (oSel.options[iS].selected){
							r += oSel.options[iS].text +'<br>';
						}
					}		
					editform.elements[i].parentElement.innerHTML = editform.elements[i].parentElement.innerHTML + r
					editform.elements[i].style.display = 'none';
				break;
				default:
					editform.elements[i].readOnly = sw;
					editform.elements[i].style.border = '0px';
					editform.elements[i].style.background = editform.elements[i].parentElement.style.background;
				break
			}
		}
	}
	var sImg = document.getElementsByTagName("img")
	for(i=0; i<sImg.length;i++){
		if(sImg[i].id.substr(0,3)=='img'){
			sImg[i].style.display = sVis;
		}
	}
	try{
		for (var i = 0; i < document.getElementById('editformfooterTD').children.length; i++){
			document.getElementById('editformfooterTD').children[i].style.display = sVis;
		}
	}
	catch(e){}
}
function fnAddZero(v){
	if(v < 10){v = "0"+ v;}
	return(v)
}
function mz_now(showtime,dateformat)
{
	var s="";
	var d = new Date();
	
	if (dateformat==null)
	{
	s = fnAddZero(d.getDate()) +"/"+ fnAddZero(d.getMonth() + 1) +"/"+ d.getFullYear();
		if(showtime)
		{
		s += " "+ fnAddZero(d.getHours()) +":"+ fnAddZero(d.getMinutes());
	}
	}
	else
	{
		s = "" + dateformat;
		s = s.replace(/dd/gi,"" + fnAddZero(d.getDate()));
		s = s.replace(/mm/gi,"" + fnAddZero(d.getMonth()+1));
		s = s.replace(/yyyy/gi,"" + d.getFullYear());
	}
	return(s)
}
function mz_select_subitem(oField,fieldCode,oSubField, sEvent)
{
	var fvalue = oField.value;
	if (fvalue!='')
	{
		var url = "mz_searchtree.asp?_ref=" + dbref + "&_startnode=" + escape(oField.value) + "&_field=" + fieldCode + "&_returnvalue=both&_notree=silent&_seed=" + Math.random();
		var retval = '';
		while (retval=='')
		{
			retval = window.showModalDialog(url,"","dialogHeight: 280px; dialogWidth: 350px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: Yes; status: No; scroll: No; unadorned: Yes;");
			//retval = window.showModalDialog(url,"","dialogHeight: 280px; dialogWidth: 350px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: No; status: No; scroll: No; unadorned: Yes;");
			/*
			if (retval=='')
			{
				alert("You must select a sub-item for this record");
			}
			*/
		}

		retval +='';
		var displayfield = document.all(oSubField.name + "_display");
		var changelink = document.all(oSubField.name + "_changelink");

		if (retval != 'null')
		{
			changelink.style.display = "";
			var avalues = retval.split("|");
			displayfield.innerHTML = avalues[1];
			oSubField.value = avalues[0];
		}
		else
		{
			changelink.style.display = "none";
			displayfield.innerHTML = '';
			oSubField.value = '';
		}
		
		if (sEvent != null && sEvent != '')
		{
			//alert(sEvent);
			eval(sEvent);
		}

	}
}
function mzIncludeSelectedItems(obj)
{
	if (document.all('_dlist') != null)
	{

		var sUrl = "";
		
		if (document.all('_dlist').length == undefined) 
		{
			if (document.all('_dlist').checked)
			{
				sUrl = document.all('_dlist').value;
			}
			else
			{
				sUrl = "-1";
			}
		}
		else
		{
			for (var i = 0; i < document.all('_dlist').length; i++)
			{

				if (document.all('_dlist')[i].checked)
				{
					sUrl += document.all('_dlist')[i].value + ",";
				}
			}
			if (sUrl.length = 0)
			{
				sUrl = "-1";
			}
			else
			{
				sUrl = sUrl.substr(0,sUrl.length - 1);
			}
		}
		obj.href += "&itemsselected=" + sUrl;

	}
	return false;
	
}
function mz_popAttachment(table,parentTable,parentCode,readonly){
	return showModalDialog(urlPath +"scripts/iclass/mz_popAttachment.asp?"+ extrastr +"&_table="+ table +"&parentTable="+ parentTable +"&parentCode="+ parentCode +"&readonly="+ readonly,"","dialogWidth:450px; dialogheight:280px;status:no;help:no;resizable:no;scroll:no;");
}
function mzCheckAllSelects(sw){
	for (var i=0;i<delform.elements.length;i++ ){							
		if(delform.elements[i].type == 'checkbox' && delform.elements[i].name.substr(0,6)=='_dlist'){
			delform.elements[i].checked = sw;
		}
	}
}
function mz_formatPage(sObj){
	var bHeader = true;	
	var html = '<HTML>\n<HEAD>\n';
		html += '<TI'+'TLE>'+ document.all.iseeTitle.rows[0].cells[0].innerHTML +'</TI'+'TLE>';
		if (document.getElementsByTagName != null){
		/*var headTag = document.getElementsByTagName("head");
			if (headTag.length > 0){
				for(var i=0;i<headTag.length;i++ ){
					html += headTag[i].innerHTML;
				}
			}
		*/
		var tableTag = document.getElementsByTagName("table");
		if (tableTag.length > 0){
			html += '\n<scr'+'ipt for=window event=onload>'
			var iTabprtID,sPrtHead;	
			for(var i=0;i<tableTag.length;i++ ){
				//html += tableTag[i].id;
				if(tableTag[i].id.substr(0,9) == 'mztabbody'){
					iTabprtID = tableTag[i].id.substr(9,100);
					sPrtHead='"';
					if(parseInt(iTabprtID) > 0){
						sPrtHead += '<br style=page-break-after:always;>';
					}
					if (bHeader){
						html += tableTag[i].id +'.insertAdjacentHTML("beforeBegin", "<h3>' + document.all('form_title' + document.all('_table').value).innerHTML + '</h3>");\n'
						bHeader = false;
                    } 
					sPrtHead += '<h4>"+ document.all.mztabhead'+ iTabprtID +'.innerHTML +"</h4>"';
					html += 'document.all.'+ tableTag[i].id +'.style.display = "";\n'
					html += 'document.all.'+ tableTag[i].id +'.insertAdjacentHTML("beforeBegin", '+ sPrtHead +');\n'
					html += 'document.all.mztabhead'+ iTabprtID +'.style.display = "none";\n'
					/*html += 'var rowz'+ i +' = document.createElement("<TR id=tr_'+ tableTag[i].id +'>");\n'
					html += 'var td1z'+ i +' = document.createElement("<TD class=\'subformtext\'>");\n'
					html += 'td1z'+ i +.appendChild(document.createTextNode(document.all.mztabhead'+ i +'.innerHTML));\n'
					html += 'var tbodyz'+ i +' = document.getElementById("'+ tableTag[i].id +'").getElementsByTagName("TBODY")[0];\n'
					html += 'rowz'+ i +'.appendChild(tdz'+ i +');\n'
					html += 'tbodyz'+ i +'.appendChild(rowz'+ i +');\n'
					*/
				}
			}
			bAuto = false;
			html += '\nwindow.print();\n</scr'+'ipt>';
		}	
		html += '<STYLE>';
		var styleTag = document.getElementsByTagName("style");
			if (styleTag.length > 0){html += styleTag[0].innerHTML;}
			html += '.cmdheadrow, .cmdrow{display:none;}\n</ST'+'YLE>';
	}
	//alert(html)
	html += '\n<scr'+'ipt for=window event=onerror>alert("Clicking on page elements might not work as this is not the correct processing window.\\nIf you experience an undesired event please close this window and perform the operation in the main window.");return true;</scr'+'ipt>\n</HE'+'AD>\n<BODY>\n';
	var printElem = document.getElementById(sObj);
	if (printElem != null){
		var printElemHTML = printElem.innerHTML.replace(/display:none;/gi,'display:;');
			printElemHTML = printElemHTML.replace(/onpropertychange="(.*?)"/gi,'')
			printElemHTML = printElemHTML.replace(/<TEXTAREA(.*?)>/gi,'')
			printElemHTML = printElemHTML.replace(/<\/TEXTAREA>/gi,'')
			printElemHTML = printElemHTML.replace(/\<script(\s|.)+?\<\/script\>/gi,'');
			printElemHTML = printElemHTML.replace(/overflow( )?:auto/gi,'overflow:visible');
		html += printElemHTML
	}
	else{alert("Could not find the printReady section in the HTML");return;}
	html += '\n</BO'+'DY>\n</HT'+'ML>';
	return html
}
//alert(window.location.href.substr(0,window.location.href.indexOf("scr")) + urlPath)
function mz_emailElem(sObj){
	var sTo = prompt("*Email client must support HTML, formatting will not be preserved.\nEnter recipients email address.",mzcs_emp_mailname);
	var sBody = mz_formatPage(sObj);
		//sBody = sBody.replace(/<IMG(.*?)>/gi,'');
		sBody = sBody.replace(/src=\"/gi,'src=\"'+ window.location.href.substr(0,window.location.href.indexOf("/",8)));
		sBody = sBody.replace(/src='/gi,'src=\''+ window.location.href.substr(0,window.location.href.indexOf("/",8)));
		sBody = sBody.replace(/url\("/gi,'url\("'+ window.location.href.substr(0,window.location.href.indexOf("/",8)));		
		sBody = sBody.replace(/\<script(\s|.)+?\<\/script\>/gi,'');
		sBody = sBody.replace(/'/gi,"''");
	if(sTo != null && sTo.indexOf(".") > 2 && sTo.indexOf("@") > 0){
		alert(mz_returndata("EXEC usp_send_cdosysmail '"+ mzcs_emp_mailname +"','"+ sTo +"','IQMS: "+ document.getElementById('iseeTitle').rows[0].cells[0].innerHTML.replace(/&nbsp;/gi,'') +"','"+ sBody +"'",false));
	}
}
function mz_printElem(sObj,bAuto){
	if (document.getElementById != null){			
		var printWin = window.open("","mz_print","status=no,toolbar=no,menubar=yes,location=no");
			printWin.document.open();
			printWin.document.write(mz_formatPage(sObj));
			printWin.document.close();
		if (bAuto){printWin.print();}
	}
	else{alert("Sorry, this print feature is only available to IE5 and above.");}
}
function mzShowHideElem(id,obj,find,replace){
	if(eval('document.all.'+ id +'.style.display == ""')){eval('document.all.'+ id +'.style.display="none"')}
	else {eval('document.all.'+ id +'.style.display=""')}
	if(obj != undefined && find != undefined && replace != undefined){
		try{
			if(fnInStr(obj.innerHTML,find) > -1){obj.innerHTML = obj.innerHTML.replace(find,replace);}
			else{obj.innerHTML = obj.innerHTML.replace(replace,find);}
		}
		catch(e){}
	}
}
function isInt(numIn){	var checknum = parseInt(numIn);	return !isNaN(checknum);}		
function hsFormRows(sw,f,t){
	if(sw == true){
		for(i=f; i<=t; i++){
			try{document.getElementById('mz_formrow'+ i).style.display = "block"}
			catch(e){}
		}	
	}
	else{
		for(i=f; i<=t; i++){
			try{document.getElementById('mz_formrow'+ i).style.display = "none"}
			catch(e){}
		}
	}
}
function hsFormTabs(sw,f,t,except){
	if(sw == true){
		for(i=f; i<=t; i++){
			eval('document.all.mztabhead'+ i +'.style.display = "none"');
		}
		if(isInt(except)){eval('document.all.mztabhead'+ except +'.style.display = "block"');mz_showtab(except);}	
	}
	else{
		for(i=f; i<=t; i++){
			eval('document.all.mztabhead'+ i +'.style.display = "block"');
		}
		if(isInt(except)){eval('document.all.mztabhead'+ except +'.style.display = "none"');}	
	}
}
	function animateElemASO(objWait,obj,text,length,speed){
		obj.style.color = 'red';			
		if(obj.innerHTML.length <= length){
			if(obj.innerHTML == '') obj.innerHTML = text;
			obj.innerHTML += '|'
			}
		else{obj.innerHTML = text}
		if(objWait.readyState == 4){
			obj.innerHTML = 'Done'
		}
		else{
			window.setTimeout('animateElemASO(dsxml,document.all("'+ obj.id +'"),"'+ text +'",'+ length +','+ speed +')', speed);
		}
	}
	function mz_fillmultiAdv(andor,listtarget,tblname,codefield,descfield,tabGroup,tfilter){
		var sql = 'SELECT '+ codefield +','+ descfield +' FROM '+ tblname +' WHERE '
		var dtSQL = 'SELECT TOP 1 ';
		var doSearch = false;
		andor = ' '+ andor +' ';
		for (var i=0;i<document.editform.elements.length;i++ ){							
			if(document.editform.elements[i].name.substr(0,6)=='ASfld'+ tabGroup && document.editform.elements[i].value !=''){
				dtSQL += document.editform.elements[i].name.substr(6,document.editform.elements[i].name.length) +', '					
				doSearch = true;
			}
		}
		dtSQL = dtSQL.substr(0,(dtSQL.length - 2)) +' FROM '+ tblname;			
		if(doSearch == true){
			//==================Get table definition ==========================
			dt = fireSQL(urlPath +"scripts/includes/XMLdata.asp?_ref="+ dbref,dtSQL,1,1,false,1)			
			if(dt.result){
				var x = dt.table[0]
				for (prop in x){
					//if(prop != codefield){
						formVal = eval('document.all.ASfld'+ tabGroup + prop +'.value');
						if (typeof(x[prop]) == "number" ||typeof(x[prop]) == "boolean"){
							sql += prop +' = '+ formVal + andor;
						}
						else{
							sql += prop +' LIKE \'%'+ formVal +'%\''+ andor;
						}
					//}
				}				
				sql = sql.substr(0,(sql.length - andor.length));
				if (tfilter != ""){sql += ' AND (' + tfilter + ')';}
				//============== Build Select =================================				
				document.all(listtarget +'trSS').style.display = '';
				document.all(listtarget +'divSS').innerHTML = 'Searching ';
				dsxml = fireSQL(urlPath +"scripts/includes/XMLdata.asp?_ref="+ dbref,sql,2000,1,true,2)
				//document.all(listtarget +'divSS').innerHTML = sql;								
				animateElemASO(dsxml,document.all(listtarget +'divSS'),'Searching ',50,80)					
				buildOptionsASO(dsxml,listtarget,codefield,descfield);
			}
			else{alert("Unable to query table definition, advance search will not work")}
		}
	}
	function buildOptionsASO(objWait,listtarget,codefield,descfield){
		//alert()
		if(objWait.readyState == 4){
			try{
				ds = stringToObject(unescape(objWait.responseXML.firstChild.firstChild.xml))			
				if(ds.result && ds.rows > 0){
					document.all(listtarget).options.length = 0;
					for (row in ds.table){
						var r = ds.table[row]
							var codeFLD = eval('r.'+ codefield)
							var descFLD = eval('r.'+ descfield)
							if(codeFLD!='' && descFLD!=''){
								var newopt = document.createElement("OPTION");
									newopt.value = codeFLD;
									newopt.text = '['+ codeFLD +'] '+ descFLD;
								document.all(listtarget).options[document.all(listtarget).options.length] = newopt;
							}	
					}
				}
				else{
					document.all(listtarget).options.length = 0;
				}
			}
			catch(error){
				document.all(listtarget).options.length = 0;
			}
		}
		else{
			window.setTimeout('buildOptionsASO(dsxml,"'+ listtarget +'","'+ codefield +'","'+ descfield +'")', 50);
		}
	}		
	function mz_fillmulti(listtarget,tblname,codefield,descfield,lookupmode,tfilter,searchtext)
	{
		var sql = "select cast(" + codefield + " AS NVARCHAR(100)) %2B '|' %2B CAST(" + descfield + " AS NVARCHAR(2000)) ";
		var wclause = "";
		var oclause = "";
		
		switch(lookupmode)
		{
			case "code":
				wclause = "(" + codefield + " like '%" + searchtext + "%')";
				oclause = codefield
				break;

			case "both":
				wclause = "(" + codefield + " like '%" + searchtext + "%' or " + descfield + " like '%" + searchtext + "%')";
				oclause = codefield,descfield
				break;

			case "description":
			default:
				wclause = "(" + descfield + " like '%" + searchtext + "%')";
				oclause = descfield
				break;
		}
		
		sql += " from " + tblname + " where " + wclause;
		if (tfilter != "")
		{
			sql += " and (" + tfilter + ")";
		}
		
		sql += " ORDER BY " + oclause

		//var rs = mz_returndata(sql + " SELECT @dList",false);
		var rs = mz_returndata(sql,false);
		if (rs=='' || rs == null)
		{
			alert("Your search returned no results.");
		}
		else
		{
			var rarr = rs.split(',');
			document.all(listtarget).options.length = 0;
			for (var r = 0;r < rarr.length;r++)
			{
				var iarr = rarr[r].split("|");
				var newopt = document.createElement("OPTION");
				newopt.value = '' + iarr[0];
				switch(lookupmode)
				{
					case "code":
						newopt.text = iarr[0];
						break;

					case "both":
						newopt.text = iarr[0] + ' (' + iarr[1] + ')';
						break;

					case "description":
					default:
						newopt.text = iarr[1];
						break;
				}
				if (newopt.value!='')
				{
					document.all(listtarget).options[document.all(listtarget).options.length] = newopt;
				}
			}
		}		
	}

	function mz_locationtree(fldname,tblname,tfilter,startdepth,enddepth)
	{
		var newitem = mz_searchloctree(document.all('fld' + fldname).value,tfilter,startdepth,enddepth);
		if (newitem != '' && newitem != null)
		{
			var iarr = newitem.split("|");
			document.all('fld' + fldname).value=iarr[0];
			//var itemname = mz_returndata("select loc_name from location where loc_code = '" + newitem + "'", false, false);
			document.all('display' + fldname).innerHTML = iarr[1];
		}
	}

	function mz_selectsearchtree(fldname,tblname,tfilter)
	{
		var newitem = mz_searchtree(tblname,tfilter,document.all(fldname).value);
		if (newitem != '' && newitem != null)
		{
			document.all(fldname).value=newitem;
		}
	}

	function mz_searchloctree(selecteditem,sFilter,startdepth,enddepth)
	{
	
		var url = "mz_searchloctree.asp?_startdepth=" + startdepth + "&_enddepth=" + enddepth + "&_ref=" + dbref + "&_selected=" + selecteditem + "&_filter="+ sFilter +"&_dummy=" + Math.random();
		var retval = window.showModalDialog(url,"","dialogHeight: 280px; dialogWidth: 350px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: Yes; status: No; scroll: No; unadorned: Yes;");
		return retval;
		
	}

	function mz_searchtree(tblname,filter,selecteditem)
	{
	
		var url = "mz_searchtree.asp?_ref=" + dbref + "&_filter=" + filter + "&_table=" + tblname + "&_selected=" + selecteditem + "&_dummy=" + Math.random();
		//var retval = window.showModalDialog(url,"","dialogHeight: 680px; dialogWidth: 650px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: No; status: No; scroll: No; unadorned: Yes;");
		var retval = window.showModalDialog(url,"","dialogHeight: 280px; dialogWidth: 350px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: Yes; status: No; scroll: No; unadorned: Yes;");
		return retval;
		
	}
	

	function mz_showmappings(qstring)
   {
		if (!mz_checkdirty() ||(mz_checkdirty() && confirm('You are about to create an integrated item.\n\nIf you continue, unsaved changes you have made will be lost and will not be copied to the integrated item.')))
		{ 
				mz_formdirty = false;
				mz_formdirtycheck = true;
				var url = 'mz_showpopup.asp?'+qstring+'&_mode=mappings&_seed='+timeseed;
				//alert(url);
				var retval = window.showModalDialog(url,'','dialogHeight: 600px; dialogWidth: 600px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: Yes; status: No; scroll: No; unadorned: Yes;');
				if (retval != '' && typeof(retval) != "undefined")
				{      
					window.location.href = retval;
				}
		}
   }
	
	function mz_showlinkeditems(qstring)
   {
      var url = 'mz_showpopup.asp?'+qstring+'&_mode=linkeditems&_seed='+timeseed;
      //alert(url);
      var retval = window.showModalDialog(url,'','dialogHeight: 600px; dialogWidth: 600px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: Yes; status: No; scroll: No; unadorned: Yes;');
      if (retval != '' && retval != undefined)
			{      
			window.location.href = retval;
			}
   }

	function mz_returndata(sql, noresult, useXMLHTTP)
	{
		try
		{
			sql = sql.replace(/\%2B/gi, "+");
			var oRS = fireSQL(urlPath+"scripts/includes/XMLdata.asp?_ref="+ dbref, sql, "", "", false, 1);  
			if(!noresult && oRS.result && oRS.rows > 0)  
			{   
				if(oRS.rows > 1)
				{
					var sconcat = "";
					re = /,/g
					for(var i=0;i<oRS.rows;i++)
					{
						if (oRS.table[i])
						{
							var sval = "";
							var o = oRS.table[i];
							for (prop in o)
							{
								sval += o[prop] + ",";
							}    
							if (sval.substr(sval.length-1,1)==";")
							{
								sval = sval.substr(0,sval.length-1);
							}
							sval = sval.replace(re,'');
							if(i == oRS.rows)
							{
								sconcat+= sval;
							}
							else
							{
								sconcat+= sval + ',';
							}	
						}
					}
					return sconcat;
				}
				else
				{
					if (oRS.table[0])
					{
						var o = oRS.table[0];
						for (prop in o)
						{
							return o[prop];
						}    
					}
				}
			}
		}
		catch (e)  
		{    
			alert('The following error occurred: ' + e.description);
			return null;  
		}
	}

	function mz_riskparameters(ptype,rtype,cfield,lfield,sfield)
	{
		var url = "mz_riskparameters.asp?_ref=" + dbref + "&_type=" + rtype + "&_mode=" + ptype + "&_" + ptype + "="
		if (ptype=='consequence')
		{
			url+=cfield.value;
		}
		else
		{
			url+=lfield.value;
		}
		
		//alert(url);
		retval = window.showModalDialog(url,"","dialogHeight: 300px; dialogWidth: 400px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: No; status: No; scroll: Yes; unadorned: Yes;");
		if (retval!='')
		{
			ra = retval.split("|");
			switch(ptype)
			{
				case "consequence":
					cfield.value = ra[0];
					document.all("lbl" + cfield.id).innerHTML = unescape(ra[1]);
					break;
				case "likelihood":
					lfield.value = ra[0];
					document.all("lbl" + lfield.id).innerHTML = unescape(ra[1]);
					break;
			}
			mz_getriskscore_m2(cfield,lfield,sfield);
		}
		
	}
	
	function mz_getriskscore_m2(cfield,lfield,sfield)
	{
		if (cfield.value!='0' && lfield.value!='0')
		{
			var svalue = "";
			var stext = "";
		
			var ccode = mz_returndata("select rq_desc from rm_consequences where rq_code = '" + cfield.value + "'",false,true);
			var lcode = lfield.value;
		
			var sql = "select isnull((select cast(rsc_code as varchar(5)) + '|<b>' + rsc_desc + ':</b> ' + cast(isnull(rsc_memo,'') as varchar(1000)) from rm_scores left join rm_score_matrices on rsc_code = rsm_score where rsm_severity = '" + ccode + "' and rsm_likelihood = '" + lcode + "'),'?')";
			var score = mz_returndata(sql,false,true);
			if (score=='?')
			{
				var msg = 'Warning: The system could not find a score for this combination of consequence and likelihood.\nPlease review the score matrix.';
				alert(msg);
				sfield.value = '';
				document.all("lbl" + sfield.id).innerHTML = '';
			}
			else
			{
				var sarr = score.split("|");
				svalue = sarr[0];
				stext = sarr[1];
				if (stext.substr(stext.length-6,6)==':</b> ')
				{
					stext = stext.substr(0,stext.length-6) + "</b>";
				}
				sfield.value = svalue;
				document.all("lbl" + sfield.id).innerHTML = stext;
			}
		}
	}
	
   function mz_getriskscore(fname)
   {
      var thiscon = document.all('fld' + fname + '_consequence').value;
      var thislik = document.all('fld' + fname + '_likelihood').value;
      var thistype = document.all('fld' + fname + '_matrix').value
      if (thiscon != '' && thislik != '' & thistype != '') 
      {
         var sql = "select  cast( rsc_code as nvarchar(3) ) %2B '/' %2B cast(rsc_desc as nvarchar(50)) %2B isnull(': ' %2B cast(rsc_memo as nvarchar(255)),'') from rm_scores where rsc_code = (select rsm_score from rm_score_matrices where rsm_risk_type = " + thistype + " and rsm_consequence = " + thiscon + " and rsm_likelihood = " + thislik + ")";
         //var url = "mz_returndata.asp?sql=" + escape(sql) + "&_ref="+dbref;
         //var result =  window.showModalDialog(url,"","dialogHeight: 900px; dialogWidth: 900px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: No; status: No; scroll: No; unadorned: Yes;");
         var result = mz_returndata(sql,false)    ;    
         if (result != null)
         {
            var resarr = result.split('/');
            document.all('fld' + fname + '_scoretext').innerHTML=resarr[1];
            document.all('fld' + fname + '_scorevalue').value=resarr[0];
         }
         else
         {
            document.all('fld' + fname + '_scoretext').innerHTML='';
            document.all('fld' + fname + '_scorevalue').value='';
         }
      } 
      else 
      {
         document.all('fld' + fname + '_scoretext').innerHTML='';
         document.all('fld' + fname + '_scorevalue').value='';
      }
   }
   
   function mz_changerisktype(fname)
   {
      var thistype = document.all('fld' + fname + '_matrix').value;
      if (thistype != '') 
      { 
         var sql = 'select rq_code,rq_desc from rm_consequences where rq_code in (select tcr_consequence from rm_type_consequence_rel where tcr_type = ' + thistype + ')';
         mz_refreshlist(document.all('fld' + fname + '_consequence'),sql,'description',true);
         sql = 'select rl_code,rl_desc from rm_likelihoods where rl_code in (select tlr_likelihood from rm_type_likelihood_rel where tlr_type = ' + thistype + ')'
         mz_refreshlist(document.all('fld' + fname + '_likelihood'),sql,'description',true);
      } 
      else 
      { 
         document.all('fld' + fname + '_likelihood').options.length=1;
         document.all('fld' + fname + '_consequence').options.length=1;
      } 
      document.all('fld' + fname + '_scorevalue').value='';
      document.all('fld' + fname + '_scoretext').innerHTML='';
   }
   
   function mz_mailpage(msubject)
   {
      alert('This function is not implemented yet.');
      //mailform = document.all("mz_mailform");
      //mailform.subject.value = msubject;
      //mailform.body.value = document.all('pagecellcenter').innerHTML;
      //alert(mailform.outerHTML);
      //mailform.submit();
   }
   
   function mz_switchstyle()
   {
      if (document.all('mz_style_print') != null)
      {
         if (document.all('mz_style_print').disabled)
         {
            document.all('mz_style_print').disabled = false;
            if (document.all('mz_style_page') != null)
				{
					document.all('mz_style_page').disabled = true;
				}
            
            // make all tabs visible
            var tabnum = 0;
            while (document.all('mztabbody'+tabnum) != null)
            {
               //alert(document.all('mztabbody'+tabnum).style.toSource());
               if (document.all('mztabbody'+tabnum).mz_tabvisible != 'false')
               {
					document.all('mztabbody'+tabnum).style.display = '';
               }
               tabnum++;
            }
            
            //hide the tab labels, if necessary
            if (document.all("mztabhead0") != null)
            {
					if (document.all("mztabhead0").parentElement.parentElement != null)
					{
						document.all("mztabhead0").parentElement.parentElement.style.display = "none";
					}
				}
			
			// make the pagespan box full height
            if (document.all('mz_pagespan') != null)
            {
               document.all('mz_pagespan').style.height = 'auto';
            }
            
            // fix up various things...
            for (i=0;i< document.all.length;i++)
            {
               thise = document.all(i);
               
               // remove calendar buttons
               if (thise.tagName=="IMG")
               {
                  if (thise.src.indexOf("calendar") > -1)
                  {
                     thise.style.display = 'none';
                  }
               }
               
               // replace SELECTS with text
               if (thise.tagName == "SELECT")
               {
                  if (String(thise.multiple)=="true")
                  {
                     thise.style.display = 'none';
                  }
                  else
                  {
                     thisval = thise.value
                     thistext = thise.options[thise.selectedIndex].text;
                     if (thisval != '')
                     {
                        thise.outerHTML = "<span>" + thistext + "</span>";
                     }
                     else
                     {
                        thise.style.display = 'none';
                     }
                     
                  }
               }
               
					//replace text boxes with plain text
					if (thise.tagName == "INPUT")
					{
						if (thise.type == "text")
						{
							if (thise.parentElement.parentElement.parentElement.parentElement.parentElement != null)
							{
								if (thise.parentElement.parentElement.parentElement.parentElement.parentElement.id.indexOf("mz_formfield") == 0)
								{
									thise.parentElement.parentElement.parentElement.parentElement.parentElement.innerHTML = thise.value;
								}
								else
								{
									thise.outerHTML = "<span>" + thise.value + "</span>";
								}
							}
						}
						if (thise.type == "checkbox")
						{
							if (thise.checked == true)
							{
								thise.outerHTML = "Yes";
							}
							else
							{
								thise.outerHTML = "&nbsp;";
							}
						}
					}
               
					//replace multi-line text boxes with plain text
					if (thise.tagName == "TEXTAREA")
					{
						thise.outerHTML = thise.value;
					}
					   
					if (thise.id == 'mztabspacer')
					{
					   thise.style.display = '';
					}
					   
					//replace add new links
					if (thise.tagName == "A")
					{
						if (thise.id.indexOf("addnew") == 0)
						{
							thise.style.visibility = "hidden";
						}
						else
						{
							thise.outerHTML = thise.innerHTML;
						} 
					}           
            }
         }
         else
         {
            //document.all('href_switchstyle').innerText = 'Printer Friendly';
            document.all('mz_style_print').disabled = true;
            document.all('mz_style_page').disabled = false;
         }
      }
   }
   
   function mz_showpopup(mode,item,table,parenturl,onclose)
   {
		if (onclose == null)
		{
			onclose = '';
		}
		
      var url = 'mz_showpopup.asp?'+extrastr+'&_mode=' + mode + '&_table='+table+'&_item='+item+'&_seed='+timeseed+'&_parenturl=' + parenturl + '&_onclose=' + onclose;

      var refreshflag = window.showModalDialog(url,'','dialogHeight: 600px; dialogWidth: 600px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: No; status: No; scroll: No; unadorned: Yes;');
      
      switch(refreshflag)
      {
			case "ok":
			case "savereload":
	         window.editform.submit();
				break;
			case "refresh":
				window.location.reload();
				break;
			case "":
				break;
			default:
				if(refreshflag != null){
					window.location.href = refreshflag;
				}
				break;
      }
   }
      
   function mz_treeaddsequence(tcode,itemcode,itemparent)
   {
      var url = 'mz_treesequence.asp?' + extrastr + '&treemode=true&_item=' + String(itemcode) + '&_itemparent=' + String(itemparent) + '&_table=' + String(tcode) + '&searchby=' + searchby + '&searchfor=' + escape(searchfor) + '&orderby=' + orderby + '&pagenum=' + pagenum + '&filterby=' + filterby + '';
      if (confirm('Allocate this item the next available sequence number?'))
      {
         window.location = url;
      }
   }
   
   function mz_treenodeup(oimg)
   {
      var orow = oimg.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement;
      var otbl = orow.parentElement;
      var currrow = orow.rowIndex;
      if (currrow > 0)
      {
         mz_formdirty = true;
         var crow = otbl.rows(currrow+1);
         var crowspan = 1;
         currrowid = orow.id;
         othrrowid = otbl.rows(currrow-2).id;
         document.all('seqsubmit').style.display = '';
         var schangelist = document.all('mz_sequencechanges').value;
         schangelist = schangelist + 'UP' + currrowid + ';';
         schangelist = schangelist + 'DN' + othrrowid + ';';

         document.all('mz_sequencechanges').value = schangelist;
         
         var acells = new Array();
         var ccells = new Array();
         for (var c = 0;c < orow.cells.length;c++)
         {
            acells[c] = orow.cells[c].innerHTML;
         }
         for (var c = 0;c < crow.cells.length;c++)
         {
            ccells[c] = crow.cells[c].innerHTML;
            crowspan = crow.cells[c].colSpan;
         }
         orow = '';
         otbl.deleteRow(currrow);
         otbl.deleteRow(currrow);
         currrow-=2;
         otbl.insertRow(currrow);
         for (var c = 0;c < ccells.length;c++)
         {
            ocell = otbl.rows(currrow).insertCell();
            ocell.className = 'textrow';
            ocell.innerHTML = ccells[c];
            ocell.style.width='100%';
            ocell.colSpan = crowspan;
            if (ocell.innerHTML == '&nbsp;')
            {
               ocell.style.display='none';
            }
         }
         otbl.insertRow(currrow);
         otbl.rows(currrow).id = currrowid;
         for (var c = 0;c < acells.length;c++)
         {
            ocell = otbl.rows(currrow).insertCell();
            ocell.className = 'textrow';
            ocell.innerHTML = acells[c];
            if (c < acells.length)
            {
               ocell.style.width='1%';
            }
         }
      }
   }

   function mz_treenodedown(oimg)
   {
      var orow = oimg.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement;
      var otbl = orow.parentElement;
      var currrow = orow.rowIndex;
      
      if (currrow < (otbl.rows.length-2))
      {
         mz_formdirty = true;
         var crow = otbl.rows(currrow+1);
         var crowspan = 1;
         currrowid = orow.id;
         othrrowid = otbl.rows(currrow+2).id;
         document.all('seqsubmit').style.display = '';
         var schangelist = document.all('mz_sequencechanges').value;
         schangelist = schangelist + 'DN' + currrowid + ';';
         schangelist = schangelist + 'UP' + othrrowid + ';';

         document.all('mz_sequencechanges').value = schangelist;

         document.all('seqsubmit').style.display = '';
         var acells = new Array();
         var ccells = new Array();
         for (var c = 0;c < orow.cells.length;c++)
         {
            acells[c] = orow.cells[c].innerHTML;
         }
         for (var c = 0;c < crow.cells.length;c++)
         {
            ccells[c] = crow.cells[c].innerHTML;
            crowspan = crow.cells[c].colSpan;
         }
         orow = '';
         otbl.deleteRow(currrow);
         otbl.deleteRow(currrow);
         currrow+=2;
         otbl.insertRow(currrow);
         for (var c = 0;c < ccells.length;c++)
         {
            ocell = otbl.rows(currrow).insertCell();
            ocell.className = 'textrow';
            ocell.innerHTML = ccells[c];
            ocell.style.width='100%';
            ocell.colSpan = crowspan;
            if (ocell.innerHTML == '&nbsp;')
            {
               ocell.style.display='none';
            }
         }
         otbl.insertRow(currrow);
         otbl.rows(currrow).id = currrowid;
         for (var c = 0;c < acells.length;c++)
         {
            ocell = otbl.rows(currrow).insertCell();
            ocell.className = 'textrow';
            ocell.innerHTML = acells[c];
            if (c < acells.length)
            {
               ocell.style.width='1%';
            }
         }
      }
   }
   
   function mz_expandnode(oimg,tblid,folderx,foldero)
   {
      //alert('looking for ' + tblid);
      var tobj = document.all(tblid);
      //alert('got it');
      if (tobj.style.display == '')
      {
         //alert('hiding');
         tobj.style.display = 'none';
         //alert('setting picture');
         oimg.src = folderx;
      }
      else
      {
         tobj.style.display = '';
         oimg.src = foldero;
      }
   }
   
   function mz_showcalendar(ftarget,pathprefix)
   {
      var currdate = ftarget.value;
      if (String(pathprefix)!="undefined")
      {
		var url = pathprefix + 'mz_calendar.asp?' + extrastr + '&seed=' + timeseed + '';
      }
      else
      {
		var url = urlPath +'scripts/iClass/mz_calendar.asp?' + extrastr + '&seed=' + timeseed + '';
	  }
      var newdate = window.showModalDialog(url,currdate,'dialogHeight: 191px; dialogWidth: 200px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: No; status: No; scroll: No; unadorned: Yes;');
      if (newdate != null)
      {
         ftarget.value = newdate;
      }
      else
      {
         ftarget.value = '';
      }
   
	  //fire the onblur code of the date field
	  if (ftarget)
	  {
		ftarget.focus();
		ftarget.blur();
	  }
   }
   var sSubmitBtn = '';
	function mz_reenableSubmit(){
		if(sSubmitBtn != ''){
			var oFSB = document.getElementById('MZ_FakeSaveBtn')
				oFSB.parentElement.removeChild(oFSB);
			document.getElementById(sSubmitBtn).style.display = '';
		}
	}
   function mz_checkfields()
   {
      var reqarr = mz_fldreqlist.split(';');
      var reqtxt = mz_fldreqtext.split(';');
      
      var valarr = mz_fldvallist.split(';');
      var valtxt = mz_fldvaltext.split(';');

      var chkmsg = new String('');
      var chkok = true;
      var fldval = '';
      
      for (var x = 0;x < reqarr.length;x++)
      {
         if (reqarr[x] != '')
         {
            if (document.all("fld" + reqarr[x]))
            {
               fldval = document.all("fld" + reqarr[x]).value;
               document.all("fld" + reqarr[x]).style.backgroundColor = "#ffffff";
               if (document.all("display" + reqarr[x]))
               { 
				document.all("display" + reqarr[x]).style.backgroundColor = "#ffffff";
			   }
               if (fldval == '')
               {
				  document.all("fld" + reqarr[x]).style.backgroundColor = "#FFFF50";
                  if (document.all("display" + reqarr[x]))
				  { 
 					document.all("display" + reqarr[x]).style.backgroundColor = "#FFFF50";
				  }
                  chkmsg += '- Field "' + reqtxt[x].replace(/<BR>/gi," ") + '" is a required field.\n';
                  chkok = false;
               }
            }
         }
      }

      for (var x = 0;x < valarr.length;x++)
      {
         if (valarr[x] != '')
         {
            var vf = valarr[x].split('=');
            var vname = new String(vf[0]);
            var vexp = new String(vf[1]);
            if (typeof(eval('editform.fld' + vname)) != 'undefined')
            {
               var fldval = document.all('fld' + String(vname)).value;
               eval('var r = ' + vexp + ';');
               if (!r.test(fldval)){
                  if (fldval != '')
                  {	
					var sFldName = mz_returndata("SELECT mzf_title FROM mz_fields WHERE mzf_field = '"+ String(vname) +"'",false);			
					document.all('fld' + String(vname)).style.backgroundColor = "#FFFF50";
                    chkmsg += '- Field "' + sFldName.replace(/<BR>/gi," ") + '" '+ valtxt[x] + '\n';
                    chkok = false;
                  }
               }
               else{
					document.all('fld' + String(vname)).style.backgroundColor = "#FFFFFF";                   
               }
            }
         }
      }

	  // added by nm - to allow arbitrary custom validation script      
	  if (typeof(mz_valscript)!='undefined')
	  {
		for (var x=0;x < mz_valscript.length;x++)
		{
			var thisval = eval(mz_valscript[x]);
			if (thisval != '')
			{
				chkmsg += "- " + thisval + "\n";
				chkok = false;
			}
			
		}
	  }      
      
      if (!chkok)
      {
         chkmsg = 'You cannot save yet, for the following reasons:\n\n' + chkmsg;
         alert(chkmsg);
         return false;
      }
      else
      {
        var obj = window.event.srcElement;
			obj.style.display = 'none';
			sSubmitBtn = obj.id
		var oFakeSubmit = document.createElement("<INPUT TYPE='BUTTON' ID='MZ_FakeSaveBtn' VALUE='"+ obj.value +"' style='"+ obj.style.cssText.replace('none','') +"'>");
			obj.insertAdjacentElement('AfterEnd', oFakeSubmit);
		return true;
      }
   }

   function mz_refreshlist(fld,sql,dmode,useXMLHTTP)
   {
      //fld		= select box to refresh
      //sql		= query that returns code, desc cols for the nominated select box
      //dmode	= "" | "description" | "both", controls the text shown for each item
      //		  "" | description	= output description only
      //		  "both"			= output description(code)  
      //useXMLHTTP = true;
		if (useXMLHTTP)
		{
			return mz_refreshlistXMLHTTP(fld, sql, dmode);
		}
		else
		{
			var wname = 'rlist' + String(Math.random()*1000).replace('.','');
			nw = open('',wname,'dependent=no,top=2000,left=0,width=200,height=200,maximize=no,minimize=no,scrollbars=no');
			nw.opener = self.window;
      
			//DS 11/10: REMOVE _DBREF
			//nw.location.href = 'mz_refreshlist.asp?' + extrastr + '&target=' + fld.id + '&sql=' + escape(sql) + '&_ref=' + dbref + '&displaymode=' + dmode;
			nw.location.href = urlpath + 'scripts/iclass/mz_refreshlist.asp?' + extrastr + '&target=' + fld.id + '&sql=' + escape(sql) + '&displaymode=' + dmode;
		}
   }
   
   function mz_refreshlistXMLHTTP(fld, sql, dmode,selectedItemSQL)
   {
		// clear the destination list
		fld.options.length=1;
		
		if(typeof(selectedItemSQL)!='undefined')
		{
			var sselected = mz_returndata(selectedItemSQL, false)
			if(sselected=='' || sselected== null || sselected== 'undefined')
			{
				sselected = -1
			}
			//alert(sselected);
		}
		else
		{
			sselected = -1
		}
		
		// get the new records
		try
		{
			//alert(urlpath+"scripts/includes/XMLdata.asp?_ref="+ dbref);
			//prompt('',sql);
			//alert("dbref=" + dbref);
			var oRS = fireSQL(urlpath+"scripts/includes/XMLdata.asp?_ref="+ dbref, sql, "", "", false, 1);
		} 
		catch (e)
		{
			alert("Refresh List: Error: '" + e.description + "'");
			return false;
		}
		// jam the new values in the list 
		try
		{
			//alert('mz_refreshlistXMLHTTP');
			//alert(oRS.rows)
			for (i = 0; i < oRS.rows; i++)
			{
				var oItem = document.createElement("OPTION");
				fld.options.add(oItem);
				var j = 0;
				for (var c in oRS.table[i])
				{
					//alert(oRS.table[i][c]);
					if (j == 0) 
					{ 
						oItem.value = oRS.table[i][c] 
						if (oItem.value == sselected){oItem.selected = true;}
					}
					if (j == 1) { oItem.innerText = oRS.table[i][c] }
					j++;
				}
			}
		}
		catch (e)
		{
			alert("Refresh List: Error: '" + e.description + "'");
			return false;
		}
   }

   function mz_refreshlistselected(fld,sql,dmode,selectedItemSQL,useXMLHTTP)
   {
      //fld		= select box to refresh
      //sql		= query that returns code, desc cols for the nominated select box
      //dmode	= "" | "description" | "both", controls the text shown for each item
      //		  "" | description	= output description only
      //		  "both"			= output description(code)  
      
       if (useXMLHTTP)
		{
			return mz_refreshlistXMLHTTP(fld, sql, dmode,selectedItemSQL);
		}
		else
		{
			var wname = 'rlist' + String(Math.random()*1000).replace('.','');
			nw = open('',wname,'dependent=no,top=2000,left=0,width=200,height=200,maximize=no,minimize=no,scrollbars=no');
			nw.opener = self.window;
      
			//DS 11/10: REMOVE _DBREF
			//nw.location.href = 'mz_refreshlist.asp?' + extrastr + '&target=' + fld.id + '&sql=' + escape(sql) + '&_ref=' + dbref + '&displaymode=' + dmode;
			nw.location.href = 'mz_refreshlist.asp?' + extrastr + '&target=' + fld.id + '&sql=' + escape(sql) + '&displaymode=' + dmode + '&siSQL=' + selectedItemSQL;
		}	
   }

   function mz_refreshlistmodal(fld,sql,dmode)
   {
      var wname = 'rlist' + String(Math.random()*1000).replace('.','');
      var url = 'mz_refreshlist.asp?' + extrastr + '&target=' + fld.id + '&sql=' + escape(sql) + '&displaymode=' + dmode + '&modal=true' + '&seed=' + Math.random();
      return window.showModalDialog(url,window,"dialogHeight: 1px; dialogWidth: 1px; dialogTop: -200px; dialogLeft: -200px; edge: Sunken; center: Yes; help: No; resizable: No; status: No; scroll: No; unadorned: Yes;");
   }

	function mz_RefreshValidTables(reportID, fld, dependent, selectedItemSQL)
	{
	   var wname = 'rlist' + String(Math.random()*1000).replace('.','');
	   var url = 'mz_RefreshReportTableList.asp?' + extrastr + '&target=' + fld.id + '&dep=' + dependent.id + '&report=' + reportID + '&siSQL=' + selectedItemSQL;
	   	   
	   //disable fld and dependent
	   fld.disabled = true;			//table drop-down
	   dependent.disabled = true;	//field drop-down
	   
	   nw = open(url,wname,'dependent=no,top=2000,left=0,width=200,height=200,maximize=no,minimize=no,scrollbars=no');
	   nw.opener = self.window;
	}

   
   function mz_pageresize()
   {
      mz_pagespan.style.width='95%';
   }

   function mz_togglefieldhelp(tblname)
   {
      var mztobj = document.all(tblname);
      if (mztobj.style.display == '')
      {
         mztobj.style.display = 'none';
      }
      else
      {
         mztobj.style.display = '';
      }
      return true;
   }

   function mz_reassign_listitems()
   {
      var msg = '';
      msg += 'Re-Assign all selected items?';
      if (confirm(msg))
      {
			document.all('_mode').value = 'reassign';
         delform.submit()
      }
      return false;
   }

   function mz_delete_listitems()
   {
      var msg = '';
      msg += 'Warning - This will delete all selected records permanently. If\n';
      msg += 'the records are referenced in other tables, you will be warned and\n';
      msg += 'given an opportunity to reallocate.\n\nContinue?';
      if (confirm(msg))
      {
         delform.submit()
      }
      return false;
   }

   function mz_delete_relitems()
   {
      var msg = '';
      msg += 'Warning - This will delete all selected records permanently.\n\nContinue?';
      if (confirm(msg))
      {
         delform.submit()
      }
      return false;
   }

   function mz_makedirty()
   {
      if (!mz_formdirty)
      {
         //for dirty notifications totally hidden
         document.all('mz_formstatus').style.display = '';
         //for dirty notifications just invisible
         document.all('mz_formstatus').style.visibility = 'visible';
      }
      mz_formdirty = true;
      
      // now check for auto-filtered fields...
      var thisfield = event.srcElement;
      var fkey = thisfield.id.substr(3,thisfield.id.length-3);
      if (String(mz_fldfilters[fkey])!="undefined")
      {
		thisevent = mz_fldfilters[fkey];
		eval(thisevent);
      }
   }

   function mz_checkdirty()
   {
      //alert(mz_formdirty);
      //alert(mz_formdirtycheck);
      return (mz_formdirty && mz_formdirtycheck);
   }
   
   function mz_searchremote(fdisplay,fvalue,tname,tcodefield,tdescfield,smode,cevent,cfilter,pathprefix)
   {
      cfilter = String(cfilter);
      if (cfilter =='undefined')
			{
			cfilter = '';
			}
		else	
			{
			while (cfilter.indexOf('$quote$')>-1)
				{
				   cfilter = cfilter.replace("$quote$","'");
				}
			}	
      if (String(pathprefix)=='undefined')
      {
         pathprefix = '';
      }
      var searchtxt = document.all(fdisplay).value;
      var currval = document.all(fvalue).value;

      var url = pathprefix + 'mz_searchremote.asp?' + extrastr + '&_table=' + tname + '&_codefield=';
      url += tcodefield + '&_descfield=' + tdescfield + '&_searchmode=' + smode;
      url += '&_searchtext=' + escape(searchtxt);
      url += "&_searchfilter=" + escape(cfilter) + "&dummy=" + Math.random();
      
      //alert(url);
      
      var searchresults = window.showModalDialog(url,'','dialogHeight: 100px; dialogWidth: 480px; dialogTop: px; dialogLeft: px; edge: Sunken; center: Yes; help: No; resizable: No; status: No; scroll: No; unadorned: Yes;');
      
      if (searchresults != null)
      {
         resarr = String(searchresults).split('$$');
         document.all(fdisplay).value = unescape(resarr[0]);
         document.all(fvalue).value = unescape(resarr[1]);
         //alert(searchresults + ', ' + document.all(fvalue).value);
      }
      
      var newval = document.all(fvalue).value;
      if (newval != currval)
      {
         if (cevent != null && cevent != '')
         {
            //alert(cevent);
            eval(cevent);
         }
      }
   }
   
   function mz_searchlocal(lobj,stext)
   {
      spaces = String('                                                             ')
      stext = String(stext).toLowerCase();
      if (stext.length < 1)
         return false;
      slen = stext.length;
      itop = lobj.options.length;
      ibot = 1; // avoid the first element (select...)
      steps = 0;
      while (itop > ibot)
      {
         steps++;
         imid = Math.round((itop+ibot)/2);
         
         if ((imid==itop) || (imid==ibot))
         {
            lobj.options[imid].selected=true;
            lobj.value = lobj.options[imid].value;
            return false;
         }
         
         thistext = String(lobj.options[imid].text).toLowerCase();
         thistextitem = thistext;
         if (thistext.length < stext.length)
            thistext+=spaces.substr(0,stext.length-thistext.length);
         
         if (thistext.length > stext.length)
            thistext = thistext.substr(0,stext.length);
            
         //if (!confirm('search for ' + stext + '.\nthistext=' + thistext + '. (item=' + thistextitem + ')\ntop=' + itop + '\nmid=' + imid + '\nbot=' + ibot))
         //   return false;

         if (thistext > stext)
         {
            //alert(thistext + ' is greater than ' + stext);
            itop = imid;
         }
            
         if (thistext < stext)
         {
            //alert(thistext + ' is less than ' + stext);
            ibot = imid;
         }
            
         if (thistext==stext)
         {
            //alert(thistext + ' is EQUAL to ' + stext);
            lobj.options[imid].selected = true;
            itop = ibot - 1;
         }
      }
      
   }
   function translate(str, is_binary) 
   {
   	var result = "";
   	var i = 0;
   	var x;
   	var shiftreg = 0;
   	var count = -1;
   	for (i=0; i < str.length; i++) 
   	{
   		c = str.charAt(i);
   		if ('A' <= c && c <= 'Z')
   			x = str.charCodeAt(i) - 65;
   		else if ('a' <= c && c <= 'z')
   			x = str.charCodeAt(i) - 97 + 26;
   		else if ('0' <= c && c <= '9')
   			x = str.charCodeAt(i) - 48 + 52;
   		else if (c == '+')
   			x = 62;
   		else if (c == '/')
   			x = 63;
   		else
   			continue;
   		count++;
   		switch (count % 4)
   		{
   		case 0:
   			shiftreg = x;
   			continue;
   		case 1:
   			v = (shiftreg<<2) | (x >> 4);
   			shiftreg = x & 0x0F;
   			break;
   		case 2:
   			v = (shiftreg<<4) | (x >> 2);
   			shiftreg = x & 0x03;
   			break;
   		case 3:
   			v = (shiftreg<<6) | (x >> 0);
   			shiftreg = x & 0x00;
   			break;
   		}
   		if (!is_binary && (v < 32 || v > 126) && (v != 0x0d) && (v != 0x0a)) 
   		{
   			result = result + "<";
   			result = result + "0123456789ABCDEF".charAt((v/16)&0x0F);
   			result = result + "0123456789ABCDEF".charAt((v/1)&0x0F);
   			result = result + ">";
   		}
   		else
   			result = result + String.fromCharCode(v);
   	}
   	return result.toString();
   }

	function mz_getRS(sql, dbref) {
		//get almost any rs from the server into a client side recordset object
		//	PARAMS: any sql query 
		//	RETURN: the recordset
		//
		//	NOTES:	requires both MSXML and MDAC on the CLIENT
		
		rs = new ActiveXObject("ADODB.Recordset");
		xmldoc = new ActiveXObject("Msxml2.DOMDocument");
   		var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   		xmlhttp.Open("GET", "mz_getXMLrs.asp?sql="+ escape(sql) + "&_ref=" + dbref, false);
   		xmlhttp.send();
   		xmldoc.loadXML(xmlhttp.responseText); //load the returned stream into the dom document
   		rs.Open(xmldoc); //load the dom document into the recordset
   		alert("Recordset Loaded");
		return rs;
	}

	function mz_tableSort(tbl,col,startrow)
   {
      tbl.rows(startrow-1).cells(col).style.cursor = "wait";
      var cc;
      var cr;
		
		var currimg = document.all(tbl.id + "colimg" + col).src;
		if (currimg.indexOf('images/udtsortblank.gif') == -1)
			{
			if (currimg.indexOf('images/udtsortup.gif') != -1)
				{
				currSortDir = -1
				document.all(tbl.id + "colimg" + col).src = urlpath + 'images/udtsortdown.gif';
				}
			else
				{
				currSortDir = 1
				document.all(tbl.id + "colimg" + col).src = urlpath + 'images/udtsortup.gif';
				}	
			}
		else
			{
			for (ci = 0;ci<tbl.rows(startrow-1).cells.length;ci++)
				{
				document.all(tbl.id + "colimg" + ci).src = urlpath + 'images/udtsortblank.gif';
				}
			currSortDir = 1
			document.all(tbl.id + "colimg" + col).src = urlpath + 'images/udtsortup.gif';
			}	
		
      currSortCol = col;
      numRows = tbl.rows.length;
            
      if (numRows -1> startrow)
      {
         var rowData = new Array(numRows+1);
         var firstCol = "";
               
         var hrefcol = false;
         var hreftxt = "";
         var datecol = false;
         var hrefimgcol = true;
               
         for (cr = startrow;cr<numRows;cr++)
         {
            if(tbl.rows(cr).style.display == '') //only do rows that are displayed
            {
					firstCol = tbl.rows(cr).cells(col).innerHTML;
    
					if (firstCol.substring(0,8) == '<A href=')
					{
					   // if the text is an href element
						var pidpos = firstCol.indexOf('">');
					   
					   // locate the 'code' parameter
					   var pidend = firstCol.indexOf("</A>");
					   if (pidend != -1)
					   {
					      // store the href start, middle & end strings
					      hrefcol = true;
					      hreftxt = firstCol;

					      // convert the href to a normal number (the code)
							if (firstCol.substr(pidpos+2,5) != '<IMG ')
								{
								hrefimgcol = false;
								firstCol = firstCol.substr(pidpos+2,pidend-pidpos-2);
					   
								while (hreftxt.indexOf(firstCol) > 0)
								{
								   hreftxt = hreftxt.replace(firstCol,"<-ID->");
								}
					      }
					   }
					}
					else
					{
						if(firstCol.indexOf('<') != -1) //there are html tags
						{
							firstCol = tbl.rows(cr).cells(col).innerText + '|~-|' + firstCol;
						}
					}

					//to test if it is a date
					if (isDateJava(firstCol))
					{
						//alert('is a date');
						datecol = true;
					}
					
					firstCol = firstCol.replace("&nbsp;","");
					var colLen = firstCol.length;
					if (!isNaN(firstCol))
					{
					   for (var xx=1;xx < (10 - colLen);xx++)
					   {
					      firstCol = "0" + firstCol;
					   }
					   firstCol = firstCol + "~~" + colLen;
					}

					rowData[cr] = firstCol;
					for (cc = 0;cc < tbl.rows(startrow).cells.length;cc++)
					{
					   if (cc != col)
					      rowData[cr] = rowData[cr] + "|~|" + tbl.rows(cr).cells(cc).innerHTML;
					}
            }
         }
         
         if(currSortDir == 1)
         {
            if(datecol)
				{
					rowData.sort(dateSort);
				}
				else
				{
					rowData.sort(normalSort);
				}	
         }
         else
         {	
				if(datecol)
				{
					rowData.sort(dateSortReverse);
				}
				else
				{
					rowData.sort(reverseSort);      
				}	
         }
         
         rd = -1
         
         for (cr = startrow;cr<numRows;cr++)
         {
            if(tbl.rows(cr).style.display == '') //only do rows that are displayed
            {	
					rd = rd + 1
					colData = rowData[rd].split("|~|");
					var y = colData[0].indexOf("~~");
					if (y > 0)
					{
					   var thisCol = colData[0];
					   colData[0] = thisCol.slice(0,y);
					   var colLength = new Number();
					   colLength = Number(thisCol.slice(y+2,thisCol.length));
					   colData[0] = colData[0].slice(colData[0].length - colLength,colData[0].length);
					   //window.status = thisCol + ", " + colData[0] + " " + colLength;
					}
					
					if (hrefcol)
					{
					   if(!hrefimgcol)
					   {
							var thiscolData = colData[0];
							colData[0] = hreftxt;
							while (colData[0].indexOf("<-ID->") != -1)
							{
							   colData[0] = colData[0].replace("<-ID->",thiscolData);
							}
						}
											   
					   tbl.rows(cr).cells(col).innerHTML = colData[0];
					}
					else
					{
						if(colData[0].indexOf('<') != -1)
						{
							tbl.rows(cr).cells(col).innerHTML = colData[0].substr(colData[0].indexOf('|~-|')+4);
						}
						else
						{
							tbl.rows(cr).cells(col).innerHTML = colData[0];
						}
					}
					         
					var thisCol = 1;
					for (cc = 0;cc < tbl.rows(startrow).cells.length;cc++)
					{
					   if (cc != col)
					   {
					      tbl.rows(cr).cells(cc).innerHTML = colData[thisCol];
					      thisCol++;
					   }
					}
            }
         }
      }
      tbl.rows(startrow-1).cells(col).style.cursor = "hand";
   }

   function reverseSort(a, b)
   {
      var aa = a.toLowerCase();
      var bb = b.toLowerCase();
      
      if(aa > bb)
         return -1 

      if(aa < bb)
         return 1
               
      return 0
   }
   
   function normalSort(a, b)
   {
      var aa = a.toLowerCase();
      var bb = b.toLowerCase();
      if(aa > bb)
         return 1 

      if(aa < bb)
         return -1
               
      return 0
   }
   
   function dateSort(a,b)
   {
		var aa = a.indexOf('|~|');
		var bb = b.indexOf('|~|');
		var adate = a.substring(0,aa)
		var bdate = b.substring(0,bb)
		
		var adate_f = returnDateStr(adate)
		var bdate_f = returnDateStr(bdate)

		if(adate_f > bdate_f)
			return 1
   
		if(adate_f < bdate_f)
			return -1
		
		return 0
   }
   
   function dateSortReverse(a,b)
   {
		var aa = a.indexOf('|~|');
		var bb = b.indexOf('|~|');
		var adate = a.substring(0,aa)
		var bdate = b.substring(0,bb)
		
		var adate_f = returnDateStr(adate)
		var bdate_f = returnDateStr(bdate)

		if(adate_f > bdate_f)
			return -1
   
		if(adate_f < bdate_f)
			return 1
		
		return 0
   }
   
   function returnDateStr(datestring)
		{
		var datearr = datestring.split("/");
		var yeartime = datearr[2]
		if (yeartime.indexOf(' ') != - 1 && yeartime.indexOf(':') != - 1)
			{
			//has time as well
			var theyear = yeartime.substring(0,yeartime.indexOf(' '))
			var thetime = yeartime.substring(yeartime.indexOf(' ')+1,yeartime.length)
			var timearr = thetime.split(':');
			return new Date(theyear,datearr[1]-1,datearr[0],timearr[0],timearr[1],timearr[2]);
			}
		else	
			{
			return new Date(datearr[2],datearr[1]-1,datearr[0]);
			}
		
		}
   
   function isDateJava(dateStr)
	{

		var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
		var matchArray = dateStr.match(datePat); // is the format ok?
		
		var dateTimePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
		var matchTimeArray = dateStr.match(dateTimePat); // is the format ok?

		if (matchArray == null && matchTimeArray == null)
		{
			return false;
		}
		else
		{
			return true;
		}
		
    }
    
    function mz_listsearch(startrow,searchtableid,searchchk,searchtext)
    {
		if(searchtext.length > 1)
		{
			//alert(startrow);
			//alert(searchtableid);
			//alert(searchchk);
			//alert(searchtext);
			
			//fix up reserved characters
			inisearchtext = searchtext.toLowerCase();
			myRegExp = /(\[|\]|\\|\^|\$|\.|\||\?|\*|\+|\(|\))/ig;
			searchtext = searchtext.replace(myRegExp,'\\$1');
			myRegExp = new RegExp("("+searchtext+")", "gi") 
			
			searchtbl = document.all(searchtableid)
			tblrows = searchtbl.rows.length;
			tblcols = searchtbl.rows(startrow).cells.length
			
			//loop through each row
			for(r=startrow;r<tblrows;r++)
			{
				textfoundinrow = false;
				
				//now for each row loop through each column
				for(c=0;c<tblcols;c++)
				{
					thecell = searchtbl.rows(r).cells(c)
					cellHTMLcontents = thecell.innerHTML;
					cellcontents = thecell.innerText;
					
					//clear out existing highlighted text
					if(cellHTMLcontents.indexOf('<SPAN style="BACKGROUND: yellow">') != -1)
					{
						re = /<SPAN style="BACKGROUND: yellow">/g;
						cellHTMLcontents = cellHTMLcontents.replace(re,'')
						re = new RegExp("</SPAN>", "g") 
						cellHTMLcontents = cellHTMLcontents.replace(re,'')
						thecell.innerHTML = cellHTMLcontents
					}
					
					//highlight the matched text
					//if(myRegExp.test(cellcontents)) this inbuilt java method seems to be buggy - returns false even if true
					inicellcontents = cellcontents.toLowerCase();
					if(inicellcontents.indexOf(inisearchtext) != -1)
					{
						thecell.innerHTML = cellHTMLcontents.replace(myRegExp,'<span style="background:yellow;">$1</span>')
						textfoundinrow = true;
					}
				}
				
				//show/hide matched rows only depending on selected checkbox
				if (searchchk)
				{
					if(textfoundinrow)
					{
						searchtbl.rows(r).style.display= '';
					}
					else
					{
						searchtbl.rows(r).style.display= 'none';
					}
				}
				else
				{
					searchtbl.rows(r).style.display= '';
				}
			}	
		}		
		else
		{
			alert('Please enter some search text (more than 1 character)');
		}	
    }

	// sets the "required" state of the form field
	// field = field object, or name of field to act on
	// required = boolean, true = require field
	// fieldtitle = string, optional - if passed will use, otherwise find field name from page structure
	function mz_requirefield(field, required, fieldtitle)
	{
		var FieldParamValid = (typeof(field) == 'string' || typeof(field) == 'object');
		var RequiredParamValid = (typeof(required) == 'boolean');
		var RequiredFieldListExists = (mz_fldreqlist.length > 0);
		var RequiredFieldTextExists = (mz_fldreqtext.length > 0);
		
		// validate inputs and page vars
		if (!FieldParamValid || !RequiredParamValid || !RequiredFieldListExists || !RequiredFieldTextExists)
		{
			return false;
		}
		if (typeof(field) == 'string')
		{
			oField = document.all("fld"+field);
		}
		else
		{
			oField = field;
		}
		// fail if field does not exist on the page
		if (oField == null)
		{
			return false;
		}
		else
		{
			//remove the "fld" prefix
			sField = oField.id.replace(/^fld/, "");
		}
		
		//find the "number" of this field
		var re = /^mz_formfield(\d+)/;
		var oElement = oField.parentElement;
		var sFieldNum = null;
		while (oElement != null && (sFieldNum == null))
		{			
			if (oElement.id.match(re) != null)
			{
				sFieldNum = RegExp.$1;
			}
			oElement = oElement.parentElement;
		}

		//find the title (caption) of this field
		if (fieldtitle ==null)
		{
			if (document.all("mz_formcaption"+sFieldNum) != null)
			{
				fieldtitle = document.all("mz_formcaption"+sFieldNum).innerText;
				fieldtitle = fieldtitle.replace(/:$/, "")
			}
		}
		
		if (required)
		{
			var re = new RegExp(sField+';', "ig");
			if (re.test(mz_fldreqlist))
			{
				return false;
			}
			else
			{
				mz_fldreqlist += (sField + ";");
			}
			var re = new RegExp("\r\n", "ig");
			fieldtitle = fieldtitle.replace(re,"<BR>");
			re = new RegExp(fieldtitle+';', "ig");
			if (re.test(mz_fldreqtext))
			{
				return false;
			}
			else
			{
				mz_fldreqtext += (fieldtitle + ";");
			}
			
			//enbolden the field title
			if (document.all("mz_formcaption"+sFieldNum) != null)
			{
				document.all("mz_formcaption"+sFieldNum).style.fontWeight = "bold";
			}
		}
		else
		{
			var pos = 0;
			var re = new RegExp(sField + ";", "ig");
			mz_fldreqlist = mz_fldreqlist.replace(re, "");
			var re = new RegExp("\r\n", "ig");
			fieldtitle = fieldtitle.replace(re,"<BR>");
			var re = new RegExp(fieldtitle + ";", "ig");
			mz_fldreqtext = mz_fldreqtext.replace(re, "");
			
			//un-bolden the field name
			if (document.all("mz_formcaption"+sFieldNum) != null)
			{
				document.all("mz_formcaption"+sFieldNum).style.fontWeight = "normal";
				//TODO: ensure switch back to exact original colour
				oField.style.backgroundColor = "#ffffff"; 
			}
		}
	
	}

	//This function adds the "thousands comma" separator for numbers. The 2 input paramaters are:
	//sValue or string value to add the commas e.g. editform.fldrr_cash.value or "82975.99"
	//sField or field in the form e.g. "fldrr_cash"
	//The function also takes into account the decimal point, provided its in the correct position.
	//e.g. "82975.99" would return "82,975.99" where as "829.7599" would return "8,297,599"
	//Also, any non-digit characters are stripped e.g. "123abc456def789.00" would return "123,456,789.00"
	function sAddCommas(sValue, sField){
		var sNewValue, sRegExp1, sRegExp2, iIndex, sDecimalPart;
		sNewValue = new String(sValue);
		sDecimalPart = "";

		if (sNewValue != ""){

			//check if a decimal point has been added
			iIndex = sNewValue.indexOf(".");

			//check if decimal is in the correct position
			if (iIndex == sNewValue.length-3){
				//strip out the decimal part
				sDecimalPart = sNewValue.substring(iIndex,sNewValue.length);
				sNewValue = sNewValue.substring(0,iIndex);
			}

			sRegExp1 = /\D/g;
			sNewValue = sNewValue.replace(sRegExp1, "");

			sRegExp2 = new RegExp('(-?[0-9]+)([0-9]{3})'); 

			while (sRegExp2.test(sNewValue)) { 
				sNewValue= sNewValue.replace(sRegExp2, '$1,$2'); 
			} 

			document.all(sField).value = sNewValue + sDecimalPart;
		}
	}
