
//this script contains the following control scripts
/*
bevel.js, calendar.js, chart.js, coolbar.js, datagrid.js, dropdown.js, form.js, formsupportjs.js, frame.js,
htmlblock.js, hyperlink.js, imageurl.js, popup.js, slider.js, tabsheet.js, toolbar.js, xmllabel.js, xmltextbox.js,
xmlbutton.js, xmltextarea.js, xmlradiobuttonset.js, xmlcheckbox.js, xmldso.js
*/

//bevel.js
function _5(HTMLControlID) {
	Panel_Initialise(HTMLControlID);
}

function Panel_Initialise(HTMLControlID){
	var xmlTagValues = document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(HTMLControlID, "Panel", "Initialise","Invalid TagValue ID:'" + HTMLControlID + "' specified.");
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(HTMLControlID, "Panel", "Initialise", "TagValue Error: " + xmlTagValues.parseError.reason);
		return;
	}	
	var PanelID = xmlTagValues.selectSingleNode("//root/ID").text;
	var Panel = document.all(PanelID);
	if(!Panel){
		alertErr(PanelID, "Panel", "Initialise","Invalid Panel ID:'" + PanelID + "' specified.");
		return;
	}
	Panel.tagValues = xmlTagValues;
	Panel.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	Panel.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	
	
	var cssClass=(document.all(HTMLControlID).selectNodes("//cssClass").length > 0) ? document.all(HTMLControlID).selectSingleNode("//cssClass").text : "";
	document.all(PanelID).className=cssClass;

	if (document.all("lblHeader_" + PanelID)) {
		Panel.Label = document.all("lblHeader_" + PanelID)
		if (Panel.tagValues.selectNodes("//Caption").length > 0) {
			var sInnerHTML = unescape(Panel.tagValues.selectSingleNode("//Caption").text);
			Panel.Label.innerHTML = sInnerHTML;
			
		}
		
		if (Panel.tagValues.selectNodes("//Display").length > 0) {
			var sDisplay = Panel.tagValues.selectSingleNode("//Display").text;
			Panel.Label.style.display = sDisplay
		}
		if (Panel.tagValues.selectNodes("//Visibility").length > 0) {
			var sVisibility = Panel.tagValues.selectSingleNode("//Visibility").text;
			Panel.Label.style.visibility = sVisibility
		}
		if (Panel.tagValues.selectNodes("//Background-Color").length > 0) {
			var sBackgroundColor = Panel.tagValues.selectSingleNode("//Background-Color").text;
			Panel.Label.style.backgroundColor = sBackgroundColor
		}		
		if (Panel.tagValues.selectNodes("//Font-Name").length > 0) {
			var sFontName = Panel.tagValues.selectSingleNode("//Font-Name").text;
			Panel.Label.style.fontFamily = sFontName
		}
		if (Panel.tagValues.selectNodes("//Font-Style").length > 0) {
			var sFontStyle = Panel.tagValues.selectSingleNode("//Font-Style").text;
			Panel.Label.style.fontStyle = sFontStyle
		}
		if (Panel.tagValues.selectNodes("//Font-Size").length > 0) {
			var sFontSize = Panel.tagValues.selectSingleNode("//Font-Size").text;
			Panel.Label.style.fontSize = sFontSize
		}		
		if (Panel.tagValues.selectNodes("//Font-Weight").length > 0) {
			var sFontWeight = Panel.tagValues.selectSingleNode("//Font-Weight").text;
			Panel.Label.style.fontWeight = sFontWeight
		}		
		if (Panel.tagValues.selectNodes("//Font-Color").length > 0) {
			var sFontColor = Panel.tagValues.selectSingleNode("//Font-Color").text;
			Panel.Label.style.color = sFontColor
		}
				
		if (Panel.Label.innerHTML == "") {
			Panel.Label.style.backgroundColor = "";
		} else {
			if (Panel.style.backgroundColor == "") {
				Panel.Label.style.backgroundColor = document.body.style.backgroundColor;		
			} 
		
		}
		Panel.Label.style.position = "absolute"
		Panel.Label.style.posTop = Panel.style.posTop - 7;
		Panel.Label.style.posLeft = Panel.style.posLeft + 10;
		Panel.Label.style.zIndex = Panel.style.zIndex + 1;

	}
	
	Panel.SetTop = new Function("TopValue", "PanelID", "return Panel_SetTop(TopValue, '" + PanelID + "');");
	Panel.SetLeft = new Function("LeftValue", "PanelID", "return Panel_SetLeft(LeftValue, '" + PanelID + "');");
}

function Panel_SetTop(TopValue, PanelID)
{
	var Panel = document.all(PanelID);
	if(!Panel)return;
	var PanelLabel = Panel.Label;
	if(!PanelLabel)return;
	
	Panel.style.top = TopValue;
	PanelLabel.style.top = (TopValue - 7);
}

function Panel_SetLeft(LeftValue, PanelID)
{
	var Panel = document.all(PanelID);
	if(!Panel)return;
	var PanelLabel = Panel.Label;
	if(!PanelLabel)return;
	
	Panel.style.left = LeftValue;
	PanelLabel.style.left = (LeftValue + 10);
}


//calendar.js
function i2(HTMLControlID) {
	Calendar_Initialise(HTMLControlID)
}

function _2(HTMLControlID) {
	Calendar_Initialise(HTMLControlID)
}

function Calendar_Initialise(HTMLControlID){	
	var xmlTagValues = document.all(HTMLControlID)
	
	var CalendarID = xmlTagValues.selectSingleNode("//ID").text;
	if(!CalendarID)return;
	var Calendar = document.all(CalendarID);	
	document.all("txtCalendar" + HTMLControlID).Calendar = Calendar;
	document.all("btnCalendar" + HTMLControlID).Calendar = Calendar;	
	Calendar.TextBox = document.all("txtCalendar" + HTMLControlID)
	Calendar.Button = document.all("btnCalendar" + HTMLControlID)
	Calendar.tagValues = xmlTagValues;
	Calendar.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	Calendar.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	
	var FormatType = Calendar.fType;
	//var FormatType=(xmlTagValues.documentElement.selectNodes("FormatType").length > 0) ? (xmlTagValues.documentElement.selectSingleNode("FormatType").text) : ("");
	switch (FormatType) {
		case 1:
		case "1":
		case 2:
		case "2": 
		case 3:
		case "3":
		case 4:
		case "4":
		case 5:
		case "5":
		case 8:
		case "8":
		case 9:
		case "9":
		case 11:
		case "11":
				Calendar.TextBox.maxLength = 10;
			break;
		
		case 0:
		case "0":
		case 6:
		case "6":
		case 12:
		case "12":
				Calendar.TextBox.maxLength = 11;
			break;
			
		case 7: 
		case "7":
				Calendar.TextBox.maxLength = 12;
			break;
		
		case 13:
		case "13":
				Calendar.TextBox.maxLength = 18;
			break;
		
		case 10:
		case "10":
				Calendar.TextBox.maxLength = 20;
			break;
	}
	Calendar.GetDate = new Function("CalendarID", "return Calendar_GetDate('" + CalendarID + "');");
	Calendar.RefreshCalendar = new Function("CalendarID", "return Calendar_RefreshCalendar('" + CalendarID + "');");
	Calendar.ShowCalendar = new Function("CalendarID", "return Calendar_ShowCalendar('" + CalendarID + "');");
	Calendar.SetDate = new Function("DateValue", "CalendarID", "return Calendar_SetDate(DateValue, '" + CalendarID + "');");
	Calendar.onkeypress = new Function("CalendarID", "return Calendar_onkeypress('" + CalendarID + "');");
	
	
	document.all("txtCalendar" + HTMLControlID).onblur = new Function("HTMLControlID", "Calendar_onblur('" + HTMLControlID + "');");
	document.all("txtCalendar" + HTMLControlID).onfocus = new Function("HTMLControlID", "Calendar_onfocus('" + HTMLControlID + "');");
	document.all("txtCalendar" + HTMLControlID).onpropertychange = new Function("HTMLControlID","Calendar_UpdateRawDate('" + HTMLControlID + "');");
	
	document.all("btnCalendar" + HTMLControlID).onblur = new Function("HTMLControlID", "Calendar_onblur('" + HTMLControlID + "');");
	document.all("btnCalendar" + HTMLControlID).onfocus = new Function("HTMLControlID", "Calendar_onfocus('" + HTMLControlID + "');");
	
	
	
	//document.all("txtCalendar" + HTMLControlID).onchange = new Function("CalendarID","Calendar_RefreshCalendar('" + CalendarID + "');");
	Calendar.RefreshCalendar();	
}


//function Calendar_ValidateRange(HTMLControlID) {
	/*var MaxDateUsed=false,MinDateUsed=false;
	var xmlTagValues=document.all(HTMLControlID)
	if (!xmlTagValues) return;
	var ControlID=(xmlTagValues.documentElement.selectNodes("ID").length > 0) ? xmlTagValues.documentElement.selectSingleNode("ID").text : null;
	if (!ControlID) return;
	var Control=document.all(ControlID);
	if (!Control) return;
	var MaxDate = xmlTagValues.documentElement.selectSingleNode("MaxValue").text;
	var MinDate = xmlTagValues.documentElement.selectSingleNode("MinValue").text;
	var CurrentDate=Control.RawDate;
	if (MaxDate.length > 0) MaxDateUsed=true;
	if (MinDate.length > 0) MinDateUsed=true;
	if ((CurrentDate.length == 0) && (Control.TextBox.value.length != 0)) {*/
		//alert("Invalid date format entered.");
	/*}
	var Difrence=VBDateDiff();*/
	
//}

function Calendar_UpdateRawDate(HTMLControlID) {
	if(event.propertyName != "value")
		return;
	var xmlTagValues=document.all(HTMLControlID)
	var ControlID=(xmlTagValues.documentElement.selectNodes("ID").length > 0) ? (xmlTagValues.documentElement.selectSingleNode("ID").text) : ("");
	var Control=document.all(ControlID);
	if (!Control) return false;
	if (!Control.TextBox) return false;
	var Value=Control.TextBox.value;
	var FormatType = Control.fType;
	//var FormatType=(xmlTagValues.documentElement.selectNodes("FormatType").length > 0) ? (xmlTagValues.documentElement.selectSingleNode("FormatType").text) : ("");
	var RawDateValue=Calendar_TranslateTexttoRAW(Value,FormatType);
	//alert(RawDateValue);
	Control.RawDate=RawDateValue;
	return true;
}

function Calendar_ReformatDateToRaw(IncomingDate,Format,Devider) {
	var arrMonths=new Array(
					new Array("January","Jan"),
					new Array("February","Feb"),
					new Array("March","Mar"),
					new Array("April","Apr"),
					new Array("May","May"),
					new Array("June","Jun"),
					new Array("Jully","Jul"),
					new Array("August","Aug"),
					new Array("September","Sep"),
					new Array("October","Oct"),
					new Array("November","Nov"),
					new Array("December","Dec")
				);
	var arrDate=IncomingDate.split(Devider);
	var arrDateFormat=Format.split(Devider);
	if (arrDate.length != 3) return "";
	if (arrDateFormat.length != 3) return "";
	
	var FoundYear=false,FoundMonth=false,FoundDay=false,YearType="",MonthType="";
	var mm,dd,yyyy;
	for (var i=0;i<3;i++) {
		var Value=arrDate[i];
		switch(arrDateFormat[i]) {
			case "[yy]yy":
					FoundYear=true;
					YearType=2;
					yyyy=Value;
				break;
			
			case "yyyy":
					FoundYear=true;
					YearType=1;
					yyyy=Value;
				break;
				
			case "mm":
					FoundMonth=true;
					MonthType=1;
					mm=Value;
				break;
				
			case "Mon":
					FoundMonth=true;
					MonthType=2;
					mm=Value;
				break;
				
			case "Month":
					FoundMonth=true;
					MonthType=3;
					mm=Value;
				break;
			
			case "dd":
					FoundDay=true;
					dd=Value;
				break;
		}
	}
	
	if ((!FoundYear) || (!FoundMonth) || (!FoundDay)) return "";
	
	if (YearType==1) {
		if (yyyy.length < 4) {
			var NeededZeros=4 - yyyy.length;
			for (var i=0; i < NeededZeros;i++) {
				yyyy="0" + "" + yyyy;
			}
		}
	}
	if (YearType==2) {
		if (yyyy.length < 4) {
			var Diffrence=yyyy.length;
			var ThisYear=new Date();
			var Extension=new String(ThisYear.getYear());
			Extension=Extension.substr(0,Extension.length - Diffrence);
			yyyy = Extension + "" + yyyy;
		}
	}
	if (MonthType==2) {
		var FoundResult=false;
		for (var i=0;i<arrMonths.length;i++) {
			if (mm.toLowerCase() == arrMonths[i][1].toLowerCase()) {
				FoundResult=true;
				mm=i+1;
				break;
			}
		}
		if (!FoundResult) return "";
	}
	if (MonthType==3) {
		var FoundResult=false;
		for (var i=0;i<arrMonths.length;i++) {
			if (mm.toLowerCase() == arrMonths[i][0].toLowerCase()) {
				FoundResult=true;
				mm=i+1;
				break;
			}
		}
		if (!FoundResult) return "";
	}
	
	if (isNaN(dd)) return "";
	if (isNaN(mm)) return "";
	if (isNaN(yyyy)) return "";
	if ((dd > 31) || (dd < 1)) return "";
	if ((mm > 12) || (mm < 1)) return "";
	mm = mm - 1;
	var DateTest=new Date();
	DateTest.setDate(1);
	DateTest.setMonth(mm);
	DateTest.setYear(yyyy);
	DateTest.setDate(dd);
	var DateTestdd=DateTest.getDate();
	if (DateTestdd != dd) return "";
	return dd + "-" + arrMonths[mm][1] + "-" + yyyy;
}

function Calendar_TranslateTexttoRAW(Text,FormatType) {
	switch (FormatType) {
		case 0:
		case "0":
				return Calendar_ReformatDateToRaw(Text,"Mon dd yyyy"," ");
			break;
			
		case 1:
		case "1":
				return Calendar_ReformatDateToRaw(Text,"mm/dd/[yy]yy","/");
			break;
		
		case 2:
		case "2": 
				return Calendar_ReformatDateToRaw(Text,"[yy]yy.mm.dd",".");
			break;
		
		case 3:
		case "3":
				return Calendar_ReformatDateToRaw(Text,"dd/mm/[yy]yy","/");
			break;
		
		case 4:
		case "4":
				return Calendar_ReformatDateToRaw(Text,"dd.mm.[yy]yy",".");
			break;
		
		case 5:
		case "5":
				return Calendar_ReformatDateToRaw(Text,"dd-mm-[yy]yy","-");
			break;
		
		case 6:
		case "6":
				return Calendar_ReformatDateToRaw(Text,"dd Mon [yy]yy"," ");
			break;
		
		case 7: //Mon dd, [yy]yy
		case "7":
				var arrDate=Text.split(" ");
				if (arrDate.length !=3) return "";
				var arrDaySplit=arrDate[1].split(",");
				if (arrDaySplit.length !=2) return "";
				arrDate[1]=arrDaySplit[0];
				var dd=arrDate[1],mm=arrDate[0],yyyy=arrDate[2];
				return Calendar_ReformatDateToRaw(dd + "," + mm + "," + yyyy,"dd,Mon,yyyy",",");
			break;
			
		case 8:
		case "8":
				return Calendar_ReformatDateToRaw(Text,"mm-dd-[yy]yy","-");
			break;
		
		case 9:
		case "9":
				return Calendar_ReformatDateToRaw(Text,"[yy]yy/mm/dd","/");
			break;
		
		case 10: //ISO Format yyyymmdd
		case "10":
				if (Text.length < 4) return "";
				if (Text.length < 8) {
					var NeededZeros=8 - Text.length;
					for (var i=0; i < NeededZeros;i++) {
						Text="0" + "" + Text;
					}
				}
				var dd=Text.substr(Text.length-2,2) ,mm=Text.substr(Text.length-4,2) ,yyyy=Text.substr(0,Text.length-4);
				return Calendar_ReformatDateToRaw(dd + "," + mm + "," + yyyy,"dd,mm,yyyy",",")
			break;
		
		case 11:
		case "11":
				return Calendar_ReformatDateToRaw(Text,"yyyy-mm-dd","-");
			break;
		
		case 12:
		case "12":
				return Calendar_ReformatDateToRaw(Text,"Mon dd mm"," ");
			break;
		
		case 13: //Month dd, yyyy
		case "13":
				var arrDate=Text.split(" ");
				if (arrDate.length !=3) return "";
				var arrDaySplit=arrDate[1].split(",");
				if (arrDaySplit.length !=2) return "";
				arrDate[1]=arrDaySplit[0];
				var dd=arrDate[1],mm=arrDate[0],yyyy=arrDate[2];
				return Calendar_ReformatDateToRaw(dd + "," + mm + "," + yyyy,"dd,Month,yyyy",",");
			break;
	}
	return "";
}

function Calendar_onfocus(HTMLControlID){
	var TagValues = document.all(HTMLControlID);
	if(!TagValues){
		alertErr("", "Calendar", "Calendar_onfocus", "Invalid TagValue ID:'" + HTMLControlID + "' specified.");		
		return;
	}
	if(TagValues.parseError != 0){
		alertErr("", "Calendar", "Calendar_onfocus", "TagValue Error: " + TagValues.parseError.reason);
		return;
	}
	var CalendarID = (TagValues.selectNodes("//root/ID").length > 0)?(TagValues.selectSingleNode("//root/ID").text):("");
	var Calendar = document.all(CalendarID);
	if(!Calendar){
		alertErr(CalendarID, "Calendar", "Calendar_onfocus", "Invalid Calendar ID:'" + CalendarID + "' specified.");		
		return;
	}
	var onFocusScript = (TagValues.selectNodes("//root/onFocus").length > 0)?(TagValues.selectSingleNode("//root/onFocus").text):("");	
	try {
		debugWrite(CalendarID + ".onfocus",new Array(HTMLControlID,"onfocus"),"callstack");
		eval(onFocusScript);
	}
	catch(err){
		alertErr(CalendarID, "Calendar", "onfocus", err.description);
	}
	
}

function Calendar_onblur(HTMLControlID){
	//Calendar_ValidateRange(HTMLControlID);
	var TagValues = document.all(HTMLControlID);
	if(!TagValues){
		alertErr("", "Calendar", "Calendar_onblur", "Invalid TagValue ID:'" + HTMLControlID + "' specified.");		
		return;
	}
	if(TagValues.parseError != 0){
		alertErr("", "Calendar", "Calendar_onblur", "TagValue Error: " + TagValues.parseError.reason);
		return;
	}
	var CalendarID = (TagValues.selectNodes("//root/ID").length > 0)?(TagValues.selectSingleNode("//root/ID").text):("");
	var Calendar = document.all(CalendarID);
	if(!Calendar){
		alertErr(CalendarID, "Calendar", "Calendar_onblur", "Invalid Calendar ID:'" + CalendarID + "' specified.");		
		return;
	}
	var onBlurScript = (TagValues.selectNodes("//root/onBlur").length > 0)?(TagValues.selectSingleNode("//root/onBlur").text):("");
	try {
		debugWrite(CalendarID + ".onblur",new Array(HTMLControlID,"onblur"),"callstack");
		eval(onBlurScript);
	}
	catch(err){
		alertErr(CalendarID, "Calendar", "onblur", err.description);
	}	
}

function Calendar_RefreshCalendar(CalendarID){
	
	var Calendar = document.all(CalendarID);
	var CalendarTextbox = Calendar.TextBox;
	var xmlTagValues = document.all(Calendar.HTMLControlID);
	if((!Calendar)||(!xmlTagValues))return;
	//---Bound Control Implementation---
	cssClass=(document.all(Calendar.HTMLControlID).selectNodes("//cssClass").length > 0) ? document.all(Calendar.HTMLControlID).selectSingleNode("//cssClass").text : "";
	document.all(CalendarID).className=cssClass;
	//Calendar.TextBox.tabIndex = Calendar.Button.tabIndex;
	//document.all(CalendarID).TextBox.className=cssClass;
	//document.all(CalendarID).Button.className=cssClass;
	//--
	//alert(xmlTagValues.selectSingleNode("//root/Disabled").text)
	
	var sDisabled=(xmlTagValues.selectSingleNode("//root/Disabled") != null) ? xmlTagValues.selectSingleNode("//root/Disabled").text : "";
	if(sDisabled == 1 || sDisabled == true || sDisabled != "" && sDisabled != "false")
	{		
		Calendar.disabled = true
		Calendar.TextBox.disabled = true 
		Calendar.Button.disabled = true
		//Calendar.children[0].children[0].children[0].children[0].children[0].disabled=true
		//Calendar.children[0].children[0].children[0].children[1].children[0].disabled=true
		
	}
	
	if(sDisabled == 0 || sDisabled == false || sDisabled == "")
	{		
		Calendar.disabled = false
		Calendar.TextBox.disabled = false
		Calendar.Button.disabled = false
		//Calendar.children[0].children[0].children[0].children[0].children[0].disabled=false
		//Calendar.children[0].children[0].children[0].children[1].children[0].disabled=false
	}
	//--
	
	var BoundControlID = (xmlTagValues.selectNodes("//BoundControlID").length > 0)?(xmlTagValues.selectSingleNode("//BoundControlID").text):("");
	var BoundControl = document.all(BoundControlID);
	if(BoundControl){
		Calendar.SetDate(BoundControl.value);
	}
	//---Bound Control Implementation---
	
	
	var xmlRecordsetID = Calendar.dataSrc;
	//var xmlRecordsetID = (xmlTagValues.selectSingleNode("//dataSrc") != null) ? xmlTagValues.selectSingleNode("//dataSrc").text : "";
	var xmlRecordset = document.all(xmlRecordsetID);
	if (!xmlRecordset) {
		var sValue=(xmlTagValues.selectSingleNode("//Value") != null) ? xmlTagValues.selectSingleNode("//Value").text : "";
		if ((xmlTagValues.selectSingleNode("//ID").text).length != 0 && sValue.length != 0)
		{
			CalendarTextbox.value = sValue;
		}
		return;
	}
	if (xmlRecordset.LastErrorCode != 0)
		return;
	var xmlRecordsetField = Calendar.dataFld;
	//var xmlRecordsetField = (xmlTagValues.selectSingleNode("//dataFld") != null) ? xmlTagValues.selectSingleNode("//dataFld").text : "";
	if (xmlRecordset.GetCurrentRecordFieldValue(xmlRecordsetField) != null) {
		CalendarTextbox.value = xmlRecordset.GetCurrentRecordFieldValue(xmlRecordsetField);
	} else {
		CalendarTextbox.value = "";
	}
	
}

function Calendar_GetDate(CalendarID){
	var Calendar = document.all(CalendarID);
	if(!CalendarID)return;
	return Calendar.TextBox.value;
}

//<Function that opens up the calendar control>
function Calendar_ShowCalendar(CalendarID){	
	var Calendar = document.all(CalendarID);
	var xmlTagValues = document.all(Calendar.HTMLControlID);
	if((!Calendar)||(!xmlTagValues))
		return;
		
	var FormatType = Calendar.fType;
	//var FormatType = (xmlTagValues.selectNodes("//FormatType").length > 0)?(xmlTagValues.selectSingleNode("//FormatType").text):("");
	var ActionURL = "htmlcontrols/calendar/calendar.htm";
	var xmlCalendar = "<root>\n";
	var MinDate = (xmlTagValues.documentElement.selectNodes("MinValue").length > 0) ? xmlTagValues.documentElement.selectSingleNode("MinValue").text : "";
	var MaxDate = (xmlTagValues.documentElement.selectNodes("MaxValue").length > 0) ? xmlTagValues.documentElement.selectSingleNode("MaxValue").text : "";
	xmlCalendar    += "	<RawDate>" + Calendar.RawDate + "</RawDate>\n";
	xmlCalendar    += "	<DateFormat>" + EscapeHTML(FormatType) + "</DateFormat>\n";
	xmlCalendar    += "	<MinDate>" + MinDate + "</MinDate>\n";
	xmlCalendar    += "	<MaxDate>" + MaxDate + "</MaxDate>\n";
	xmlCalendar    += "</root>";
	var hwndCalendar = window.showModalDialog(ActionURL, xmlCalendar,"Toolbar:NO; Status:NO; resizable:No; center:yes; dialogHeight:248px; dialogWidth:255px; help:NO;");
	if(hwndCalendar == null)
		return;
	var xmlReturnValue = new ActiveXObject("Microsoft.xmlDOM");
	xmlReturnValue.loadXML(hwndCalendar);	
	var sFormated=(xmlReturnValue.selectSingleNode("//formated") != null) ? xmlReturnValue.selectSingleNode("//formated").text : "";
	Calendar.SetDate(sFormated);
	
	//---Bound Control Implementation---
	var BoundControlID = (xmlTagValues.selectNodes("//BoundControlID").length > 0)?(xmlTagValues.selectSingleNode("//BoundControlID").text):("");
	var BoundControl = document.all(BoundControlID);
	if(BoundControl){		
		var sRAW=(xmlReturnValue.selectSingleNode("//raw") != null) ? xmlReturnValue.selectSingleNode("//raw").text : "";
		BoundControl.value = sRAW;
	}
	//---Bound Control Implementation---
	delete xmlReturnValue;
}

function Calendar_SetDate(DateValue, CalendarID){
	var Calendar = document.all(CalendarID);
	var xmlTagValues = document.all(Calendar.HTMLControlID);
	if( (!Calendar)||(!xmlTagValues) )return;
	var CalendarTextbox = Calendar.TextBox;
	var onBeforeDateChange = (xmlTagValues.documentElement.selectNodes("//onBeforeDateChange").length > 0)?(xmlTagValues.documentElement.selectSingleNode("//onBeforeDateChange").text):("");
	/*
	var oMin = Calendar_TranslateTexttoRAW(xmlTagValues.documentElement.selectSingleNode("MinValue").text, 10);
	var oMax = Calendar_TranslateTexttoRAW(xmlTagValues.documentElement.selectSingleNode("MaxValue").text, 10);
	var oD = Calendar_TranslateTexttoRAW(DateValue, 10);
	
	alert(oMin > oD);
	alert(oM > oD);
	*/
	Calendar.CancelDateChange = false;
	try{
		if (onBeforeDateChange != "") {
			debugWrite(CalendarID + ".onBeforeDateChange",new Array(document.all(CalendarID).HTMLControlID,"onBeforeDateChange"),"callstack");
			eval(onBeforeDateChange);
		}
	}
	catch(err){
		alertErr(CalendarID,"Calendar","onBeforeDateChange","User onBeforeDateChange event error #" + err.number + ": " + err.description + "\n" + onBeforeDateChange);
		//alert("Calander:'" + CalendarID + "'\nonBeforeDateChange: \n" + err.description);
	}
	if (Calendar.CancelDateChange)return
	
	CalendarTextbox.value = DateValue;
	/*
	var xmlRecordsetID = xmlTagValues.documentElement.selectSingleNode("//dataSrc").text;
	var xmlRecordsetField = xmlTagValues.documentElement.selectSingleNode("//dataFld").text
	if( (xmlRecordsetID.length == 0)&&(xmlRecordsetField.length == 0) )return;
	var xmlRecordset = document.all(xmlRecordsetID);
	if(!xmlRecordset)return;
	xmlRecordset.SetCurrentRecordFieldValue(xmlRecordsetField, DateValue);	
	*/
	var onAfterDateChange = (xmlTagValues.documentElement.selectNodes("//onAfterDateChange").length > 0)?(xmlTagValues.documentElement.selectSingleNode("//onAfterDateChange").text):("");
	try{
		if (onAfterDateChange != "") {
			debugWrite(CalendarID + ".onBeforeDateChange",new Array(document.all(CalendarID).HTMLControlID,"onAfterDateChange"),"callstack");
			eval(onAfterDateChange);
		}
	}
	catch(err){
		alertErr(CalendarID,"Calendar","onAfterDateChange","User onAfterDateChange event error #" + err.number + ": " + err.description + "\n" + onAfterDateChange);
		//alert("Calander:'" + CalendarID + "'\nonAfterDateChange: \n" + err.description);
	}
}
//</Function that opens up the calendar control>

function Calendar_onkeypress(CalendarID) {
	if(event.srcElement.type.toLowerCase() == "button")
		return;
	switch(event.keyCode){
		case 13:
			Calendar_ShowCalendar(CalendarID);
		break;
	}
}


//chart.js
function _38(HTMLControlID){
	Graph_Initialise(HTMLControlID);
}

function Graph_Initialise(HTMLControlID){	
	var GraphID = document.all(HTMLControlID).selectSingleNode("//ID").text;
	var Graph = document.all(GraphID);
	if(!Graph)
		return;	
	var TagValues = document.all(HTMLControlID);
	Graph.TagValues = TagValues;	
	Graph.tagValues = TagValues;
	Graph.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	Graph.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	

	Graph.Refresh = new Function("HTMLControlID", "return Graph_Refresh('" + HTMLControlID + "')");
	Graph.SeriesDisplay = new Function("sField", "bDisplay", "HTMLControlID", "return Graph_SeriesDisplay(sField, bDisplay, '" + HTMLControlID + "')");
	Graph.AllSeriesDisplay = new Function("bDisplay", "HTMLControlID", "return Graph_AllSeriesDisplay(bDisplay, '" + HTMLControlID + "')");
	var FieldList = TagValues.selectNodes("//root/GraphSpec/Graph[@Active != 0]/Field");
	var Field;
	for(var i = 0; i < FieldList.length; i++)
	{
		Field = FieldList.nextNode();
		if(!Field.getAttribute("display"))
			Field.setAttribute("display", -1);
	}
	Graph.Refresh();
}

function Graph_AllSeriesDisplay(bDisplay, HTMLControlID)
{
	var TagValues = document.all(String(HTMLControlID));
	if(!TagValues){
		alertErr("", "Chart", "SeriesDisplay","Invalid TagValue ID:'"	+ HTMLControlID + "' specified.");
		return false;
	}
	var ChartID = TagValues.selectSingleNode("//root/ID").text;
	var Chart = document.all(ChartID);
	if(!Chart){
		alertErr(ChartID, "Chart", "SeriesDisplay","Invalid WebService ID:'"	+ ChartID + "' specified.");
		return false;
	}	
	switch(bDisplay.toString().toLowerCase())
	{
		case "false":
		case "0":
			bDisplay = 0;
		break;
		
		default:
			bDisplay = -1;
		break;
	}
	var FieldList = TagValues.selectNodes("//root/GraphSpec/Graph[@Active != 0]/Field");
	var Field;
	for(var i = 0; i < FieldList.length; i++)
	{
		Field = FieldList.nextNode();
		Field.setAttribute("display", bDisplay);
	}
	Chart.Refresh();
	return true
}

function Graph_SeriesDisplay(sField, bDisplay, HTMLControlID)
{
	sField = Encode(sField);
	var TagValues = document.all(String(HTMLControlID));
	if(!TagValues){
		alertErr("", "Chart", "SeriesDisplay","Invalid TagValue ID:'"	+ HTMLControlID + "' specified.");
		return false;
	}
	var ChartID = TagValues.selectSingleNode("//root/ID").text;
	var Chart = document.all(ChartID);
	if(!Chart){
		alertErr(ChartID, "Chart", "SeriesDisplay","Invalid WebService ID:'"	+ ChartID + "' specified.");
		return false;
	}	
	if(TagValues.selectNodes("//root/GraphSpec/Graph[@Active != 0]/Field[@name = '" + sField + "']").length == 0){
		alertErr(ChartID, "Chart", "SeriesDisplay","Invalid Field:'"	+ sField + "' specified.");
		return false;
	}	
	var Series = TagValues.selectSingleNode("//root/GraphSpec/Graph[@Active != 0]/Field[@name = '" + sField + "']");	
	if (Series == null) return false;
	switch(bDisplay.toString().toLowerCase())
	{
		case "false":
		case "0":
			bDisplay = 0;
		break;
		
		default:
			bDisplay = -1;
		break;
	}
	Series.setAttribute("display", bDisplay);
	Chart.Refresh();
	return true
}

function Graph_Refresh(HTMLControlID)
{
	//var StartTime = new Date();
	var GraphID = document.all(HTMLControlID).selectSingleNode("//ID").text;
	cssClass=(document.all(HTMLControlID).selectNodes("//cssClass").length > 0) ? document.all(HTMLControlID).selectSingleNode("//cssClass").text : "";
	document.all(GraphID).className=cssClass;
	
	var Graph = document.all(GraphID);
	if(!Graph)
		return;	
	Graph.HTMLString = "";
	Graph.innerHTML = "";
	var DataSourceID = (Graph.TagValues.selectSingleNode("//dataSrc") != null) ? Graph.TagValues.selectSingleNode("//dataSrc").text : "";
	var DataSource = document.all(VBReplace(DataSourceID, "#", ""));
	if(!DataSource){
		//alertErr(GraphID,"Chart","Refresh","Invalid DataSource '" + DataSourceID + "' specified.");
		return;
	}
	Graph.DataSource = DataSource;
			
	var ActiveGraph = (Graph.TagValues.selectNodes("//root/GraphSpec/Graph[@Active != 0]").length)?(Graph.TagValues.selectSingleNode("//root/GraphSpec/Graph[@Active != 0]")):(null);	
	Graph.ActiveGraph = ActiveGraph;
	if(!ActiveGraph)
		return;
	var GraphType = ActiveGraph.getAttribute("Type");		
	switch(GraphType.toString().toLowerCase()){
		case "1":
			//Graph_InitType1(Graph);
		break;
		
		case "2":
			//Graph_InitType2(Graph);
		break;
		
		case "3":
			Graph_InitType3(Graph);
		break;
		
		case "4":
			Graph_InitType4(Graph);
		break;
		
		case "5":
			//Graph_InitType5(Graph);
		break;
	}
	Graph.innerHTML = Graph.HTMLString;
	//var EndTime = new Date();	
	//alert("StartTime: " + StartTime + "\nEndTime: " + EndTime);
}

//---Start - Graph Type 3:Bar Chart----------------------------
function Graph_InitType3(Graph){
	if(!Graph){
		alertErr(Graph.id, "Chart", "InitType1", "Invalid Oref");
		//alert("Graph_InitType1() error:\n____________________________________________________\n\nInvalid Oref.\n____________________________________________________");
		return;
	}	
	if(!Graph.ActiveGraph)
		return;
		
	var FieldList = Graph.ActiveGraph.selectNodes("Field");
	var arrFieldNames = new Array();
	var Field, FieldName, FieldValue;
	var LeftMargin = 55;
	for(x = 0; x < FieldList.length; x++){
		Field = FieldList.nextNode();		
		arrFieldNames[x] = Field;		
	}
	GrapthType3_DrawYScale(Graph);	
	var xAxis = Graph.xAxis;	
	var BarItem, BarFill, BarExt, BarHeight;	
	
	var TopMargin = xAxis;
	var ScaleValue;
	var LineWidth = Graph.offsetWidth;
	Graph.HTMLString += "<v:line unselectable='on' from='" + (Graph.yAxis - 5) + "px," + xAxis + "px' to='" + parseInt(LineWidth) + "px," + xAxis + "px'></v:line>";	
	var GraphRange = Graph.unitvalue * (Graph.RangeValue / Graph.unit);
	
	LeftMargin = Graph.yAxis;
	var GraphWidth = Graph.offsetWidth - LeftMargin;
	var RecordCount = Graph.DataSource.documentElement.childNodes.length;
	var BarCount = RecordCount * arrFieldNames.length;	
	var BarWidth = parseInt(GraphWidth / BarCount) - 1;
	var BarGap = 1;
	var BarTotal = (BarGap * BarCount) + (BarWidth * BarCount);
	
	if(BarWidth > 10)
	{
		BarGap = (parseInt(BarWidth * 0.3) >= 1)?(parseInt(BarWidth * 0.3)):(1) ;		
		BarWidth -= BarGap;
	}
	var BarTotal = (BarGap * BarCount) + (BarWidth * BarCount);	
	BarWidth += (BarTotal < GraphWidth)?(parseInt((GraphWidth - BarTotal) / BarCount)):(BarWidth);	
	BarWidth = (BarWidth <= 0)?(1):(BarWidth);
	BarTotal = (BarGap * BarCount) + (BarWidth * BarCount);
	LeftMargin += (parseInt(GraphWidth - BarTotal) >= 0)?(parseInt(GraphWidth - BarTotal) / 2):(0);
	
	if(Graph.ActiveGraph.getAttribute("XMajorLines") != 0)
	{
		var LineTop = 0;
		var LineBottom = Graph.offsetHeight;
	}
	else
	{
		var LineTop = Graph.xAxis - 5;
		var LineBottom = Graph.xAxis + 5;
	}
	var LineStyle = (Graph.ActiveGraph.getAttribute("XMajorLines") != 0)?(Graph.ActiveGraph.getAttribute("XMajorLineStyle")):("Solid");
	var LineColor = (Graph.ActiveGraph.getAttribute("XMajorLineColor"))?(Graph.ActiveGraph.getAttribute("XMajorLineColor")):("Black");
	var Record, temp;
	var xFieldName = VBTrim(Graph.ActiveGraph.getAttribute("XField")).toString();		
	var BarColor;		
	for(var i = 0; i < RecordCount; i++){
		Record = Graph.DataSource.documentElement.childNodes(i);		
		switch(xFieldName){
			case "":
				FieldValue = "";
			break;
			
			case "SYS__RecordNo":
				FieldValue = i + 1;
			break;
			
			default:
				FieldValue = (Record.selectNodes(xFieldName).length > 0)?(Record.selectSingleNode(xFieldName).text):("");
			break;
		}
		temp = (BarWidth * arrFieldNames.length) + (BarGap * arrFieldNames.length);
		Graph.HTMLString += "<DIV unselectable='on' title='" + FieldValue + "' nowrap style='CURSOR:default; TEXT-ALIGN:center; LEFT:" + LeftMargin + "; TOP:" + (xAxis + 2) + "px; POSITION:absolute; FONT-FAMILY:arial; FONT-SIZE:7pt; OVERFLOW:hidden; WIDTH:" + temp + ";'>" + FieldValue + "</DIV>"
		
		
			
		for(x = 0; x < arrFieldNames.length; x++){			
			FieldName = arrFieldNames[x].getAttribute("name");						
			FieldValue = (Record.selectNodes(FieldName).length > 0)?(Record.selectSingleNode(FieldName).text):("");				
			if(isNaN(FieldValue))
				FieldValue = 0;
			BarHeight = ((Math.abs(FieldValue) / Graph.RangeValue) * 100) * (GraphRange / 100);
			TopMargin = (FieldValue > 0)?(xAxis - BarHeight):(xAxis);		
			BarColor = (FieldValue > 0)?(arrFieldNames[x].getAttribute("PosColor")):(arrFieldNames[x].getAttribute("NegColor"))
			Graph.HTMLString += "<v:rect unselectable='on' FieldName=\"" + escapex(FieldName) + "\" FieldValue=\"" + escapex(FieldValue) + "\" RecordNo=\"" + (i + 1) + "\" onclick=\"Graph_BarOnClick(" + Graph.HTMLControlID + ");\" ondblclick=\"Graph_BarOnDblClick(" + Graph.HTMLControlID + ");\" onmouseover=\"Graph_BarOnMouseOver(" + Graph.HTMLControlID + ");\" onmouseout=\"Graph_BarOnMouseOut(" + Graph.HTMLControlID + ");\" title='" + FieldValue + "' style='POSITION:absolute;left:" + LeftMargin + "px;Top:" + TopMargin + "px; width:" + BarWidth + "px;height:" + BarHeight + "px;' ><v:fill Type='Solid' Color='" + BarColor + "' /><o:extrusion Render='Render' Color='" + BarColor + "' Backdepth='10pt'/></v:rect>";
			//Graph.HTMLString += "<v:rect unselectable='on' FieldName=\"" + escapex(FieldName) + "\" FieldValue=\"" + escapex(FieldValue) + "\" RecordNo=\"" + (i + 1) + "\" onclick=\"Graph_BarOnClick(" + Graph.HTMLControlID + ");\" ondblclick=\"Graph_BarOnDblClick(" + Graph.HTMLControlID + ");\" onmouseover=\"Graph_BarOnMouseOver(" + Graph.HTMLControlID + ");\" onmouseout=\"Graph_BarOnMouseOut(" + Graph.HTMLControlID + ");\" title='" + FieldValue + "' style='POSITION:absolute;left:" + LeftMargin + "px;Top:" + TopMargin + "px; width:" + BarWidth + "px;height:" + BarHeight + "px;' ><v:fill Type='Solid' Color='" + BarColor + "' /><o:extrusion Render='Render' Color='" + BarColor + "' Backdepth='10pt'/></v:rect>";
			LeftMargin += BarWidth + BarGap;
		}
		temp = LeftMargin - parseInt(BarGap / 2);		
		Graph.HTMLString += "<v:line unselectable='on' title='" + (i + 1) + "' from='" + temp + "px," + LineTop + "px' to='" + temp + "px," + LineBottom + "px'><v:stroke DashStyle='" + LineStyle + "' Color='" + LineColor + "'/></v:line>";	
	}		
}

function GrapthType3_DrawYScale(Graph){	
	SetGraphRange(Graph);		
	var LeftMargin = Math.max(Math.abs(Graph.ubound), Math.abs(Graph.lbound));
	LeftMargin = LeftMargin.toString().length * 6;	
	Graph.yAxis = LeftMargin + 8;	
	var LineLeft = Graph.yAxis - 5;
	var LineRight = (Graph.ActiveGraph.getAttribute("YMajorLines") != 0)?(Graph.offsetWidth):(Graph.yAxis + 5);	
	
	var LineStyle = (Graph.ActiveGraph.getAttribute("YMajorLines") != 0)?(Graph.ActiveGraph.getAttribute("YMajorLineStyle")):("Solid");
	var LineColor = (Graph.ActiveGraph.getAttribute("YMajorLineColor"))?(Graph.ActiveGraph.getAttribute("YMajorLineColor")):("Black");	
	Graph.HTMLString += "<v:line unselectable='on' from='" + Graph.yAxis + "px,0px' to='" + Graph.yAxis + "px," + parseInt(Graph.offsetHeight) + "px'></v:line>";		
	var units = Graph.ubound / Graph.unit;		
	var unitvalue = Graph.unitvalue;
	var unitfraction = (unitvalue - (parseInt(unitvalue))) * units;	
	var i, X = Graph.xAxis;	
	for(i = 1; i <= units; i++){							
		X = X - Math.abs(unitvalue);		
		Graph.HTMLString += "<v:line unselectable='on' title='" + parseInt(Graph.unit * i) + "' from='" + LineLeft + "px," + X + "px' to='" + LineRight + "px," + X + "px'><v:stroke DashStyle='" + LineStyle + "' Color='" + LineColor + "'/></v:line><DIV unselectable='on' nowrap style='POSITION:absolute; LEFT:0px; TOP:" + parseInt(X - 5) + "px; TEXT-ALIGN:right; WIDTH:" + LeftMargin + "px; FONT-FAMILY:arial; FONT-SIZE: 7pt;'>" + parseInt(Graph.unit * i) + "</DIV>";						
	}	
	X = Graph.xAxis;
	units = Math.abs(Graph.lbound) / Graph.unit;				
	for(i = 1; i <= units; i++){		
		X = X + Math.abs(unitvalue);				
		Graph.HTMLString += "<v:line unselectable='on' title='-" + parseInt(Graph.unit * i) + "' from='" + LineLeft + "px," + X + "px' to='" + LineRight + "px," + X + "px'><v:stroke DashStyle='" + LineStyle + "' Color='" + LineColor + "'/></v:line><DIV unselectable='on' nowrap style='POSITION:absolute; LEFT:0px; TOP:" + parseInt(X - 5) + "px; TEXT-ALIGN:right; WIDTH:" + LeftMargin + "px; FONT-FAMILY:arial; FONT-SIZE: 7pt;'>-" + parseInt(Graph.unit * i) + "</DIV>";				
	}
	Graph.HTMLString += "<DIV unselectable='on' nowrap style='POSITION:absolute; LEFT:0px; TOP:" + parseInt(Graph.xAxis - 6) + "px; TEXT-ALIGN:right; WIDTH:" + LeftMargin + "px; FONT-FAMILY:arial; FONT-SIZE: 7pt;'>0</DIV>";
}

function SetGraphRange(Graph){
	var DataSource = Graph.DataSource;
	var ubound = 0, lbound = 0;
	var FieldList = Graph.ActiveGraph.selectNodes("Field[@display = '-1']");
	var FieldName;
	for(x = 0; x < FieldList.length; x++){
		Field = FieldList.nextNode();		
		FieldName = Field.getAttribute("name");		
		while(DataSource.selectNodes("//Record/" + FieldName + "[. > " + ubound + "]").length > 0){
			ubound = parseFloat(DataSource.selectSingleNode("//Record/" + FieldName + "[. > " + ubound + "]").text);
		}
		while(DataSource.selectNodes("//Record/" + FieldName + "[. < " + lbound + "]").length > 0){
			lbound = parseFloat(DataSource.selectSingleNode("//Record/" + FieldName + "[. < " + lbound + "]").text);
		}
	}
	
	
	var HighestNumber = ubound;
	var LowestNumber = lbound;
	var ubound_unit = Math.pow(10, (Math.abs(parseInt(ubound)).toString().length) - 1);
	var lbound_unit = Math.pow(10, (Math.abs(parseInt(lbound)).toString().length) - 1);
	
	//---	
	if( (ubound%ubound_unit == 0)||((ubound_unit / ubound) > 0.6) ){		
		if (ubound / (ubound_unit * 0.2) <= 10)
		{//---20%
			ubound_unit = (ubound_unit * 0.2);						
		}
		else if (ubound / (ubound_unit * 0.5) <= 10)
		{//---50%
			ubound_unit = (ubound_unit * 0.5);	
		}
	}
	//---
	
	//---		
	if( (Math.abs(lbound)%lbound_unit == 0)||((lbound_unit / Math.abs(lbound)) > 0.6) ){				
		if (Math.abs(lbound) / (lbound_unit * 0.2) <= 10)
		{//---20%
			lbound_unit = (lbound_unit * 0.2);			
		}
		else if (Math.abs(lbound) / (lbound_unit * 0.5) <= 10)
		{//---50%
			lbound_unit = (lbound_unit * 0.5);				
		}
	}	
	//---
		
	var GraphUnit = Math.max(ubound_unit, lbound_unit);	
	if(ubound == 0){	
		ubound = ubound_unit;
	}
	else {			
		ubound = (parseInt((ubound + ubound_unit) / ubound_unit)) * ubound_unit;						
		if(ubound%GraphUnit != 0)
			ubound = (parseInt(ubound / GraphUnit) * GraphUnit) + GraphUnit;
		if(ubound == HighestNumber)
			ubound += GraphUnit;		
		if(ubound < 0)
			ubound = 0;
	}
	
	if(lbound != 0){		
		lbound = (parseInt((lbound - lbound_unit) / lbound_unit)) * lbound_unit;			
		if(lbound%GraphUnit != 0)			
			lbound = (parseInt(lbound / GraphUnit) * GraphUnit) - GraphUnit;
		if(lbound == LowestNumber)
			lbound -= GraphUnit;
		if(lbound > 0)
			lbound = 0;	
	}
	Graph.ubound = ubound;
	Graph.lbound = lbound;	
	Graph.RangeValue = Math.abs(Graph.lbound) + Math.abs(Graph.ubound);
	Graph.unit = GraphUnit;	
	var units = Graph.RangeValue / Graph.unit;
	Graph.unitvalue = Math.round((Graph.offsetHeight - 30) / units);	
	Graph.xAxis = (Graph.ubound / Graph.unit) * Graph.unitvalue + 15;		
}

function Graph_BarOnClick(HTMLControlID)
{		
	if (window.event.altKey) 
		return;
	var currObject = event.srcElement;
	var FieldName = currObject.FieldName;	
	var FieldValue = currObject.FieldValue;
	var RecordNo = currObject.RecordNo;
	var ChartID = document.all(HTMLControlID.toString()).selectSingleNode("//root/ID").text.toString();	
	var Chart = document.all(ChartID);
	if(!Chart){
		alertErr(ChartID, "Chart", "BarOnClick", "Invalid Chart ID:'" + ChartID + "' specified.");
		//alert("Graph_BarOnClick() error:\n____________________________________________________\n\nInvalid Chart ID:'" + ChartID + "' specified.\n____________________________________________________");
		return;
	}	
	var onClickScript = (Chart.ActiveGraph.selectNodes("*[@name = '" + FieldName + "']/onclick").length > 0)?(Chart.ActiveGraph.selectSingleNode("*[@name = '" + FieldName + "']/onclick").text):("");
	try
	{
		if (onClickScript !="") {
			debugWrite(ChartID + ".GraphBaronClick",new Array(HTMLControlID,"GraphBaronClick"),"callstack");
			eval(onClickScript);
		}
	}
	catch(err)
	{
		alertErr(ChartID, "Chart", "BarOnClick", err.description);
		//alert("Graph_BarOnClick() Script error:\n____________________________________________________\n\n" + err.description + "\n____________________________________________________");
		return;
	}	
}

function Graph_BarOnDblClick(HTMLControlID)
{	
	if (window.event.altKey) 
		return;
	var currObject = event.srcElement;
	var FieldName = currObject.FieldName;
	var FieldValue = currObject.FieldValue;
	var RecordNo = currObject.RecordNo;
	var ChartID = document.all(HTMLControlID.toString()).selectSingleNode("//root/ID").text.toString();	
	var Chart = document.all(ChartID);
	if(!Chart){
		alertErr(ChartID, "Chart", "BarOnDblClick", "Invalid Chart ID:'" + ChartID + "' specified.");
		//alert("Graph_BarOnDblClick() error:\n____________________________________________________\n\nInvalid Chart ID:'" + ChartID + "' specified.\n____________________________________________________");
		return;
	}	
	var onDblClickScript = (Chart.ActiveGraph.selectNodes("*[@name = '" + FieldName + "']/ondblclick").length > 0)?(Chart.ActiveGraph.selectSingleNode("*[@name = '" + FieldName + "']/ondblclick").text):("");
	try
	{
		if (onDblClickScript != "") {
			debugWrite(ChartID + ".GraphBaronDBLClick",new Array(HTMLControlID,"GraphBaronDBLClick"),"callstack");
			eval(onDblClickScript);
		}
	}
	catch(err)
	{
		alertErr(ChartID, "Chart", "BarOnDblClick", err.description);
		//alert("Graph_BarOnDblClick() Script error:\n____________________________________________________\n\n" + err.description + "\n____________________________________________________");
		return;
	}	
}

function Graph_BarOnMouseOver(HTMLControlID)
{	
	if (window.event.altKey) 
		return;
	var currObject = event.srcElement;
	var FieldName = currObject.FieldName;
	var FieldValue = currObject.FieldValue;
	var RecordNo = currObject.RecordNo;
	var ChartID = document.all(HTMLControlID.toString()).selectSingleNode("//root/ID").text.toString();	
	var Chart = document.all(ChartID);
	if(!Chart){
		alertErr(ChartID, "Chart", "BarOnMouseOver", "Invalid Chart ID:'" + ChartID + "' specified.");
		//alert("Graph_BarOnMouseOver() error:\n____________________________________________________\n\nInvalid Chart ID:'" + ChartID + "' specified.\n____________________________________________________");
		return;
	}	
	var onMouseOverScript = (Chart.ActiveGraph.selectNodes("*[@name = '" + FieldName + "']/onmouseover").length > 0)?(Chart.ActiveGraph.selectSingleNode("*[@name = '" + FieldName + "']/onmouseover").text):("");
	try
	{
		if (onMouseOverScript != "") {
			debugWrite(ChartID + ".GraphBaronMouseOver",new Array(HTMLControlID,"GraphBaronMouseOver"),"callstack");
			eval(onMouseOverScript);
		}
	}
	catch(err)
	{
		alertErr(ChartID, "Chart", "BarOnMouseOver", err.description);
		//alert("Graph_BarOnMouseOver() Script error:\n____________________________________________________\n\n" + err.description + "\n____________________________________________________");
		return;
	}	
}

function Graph_BarOnMouseOut(HTMLControlID)
{	
	if (window.event.altKey) 
		return;
	var currObject = event.srcElement;
	var FieldName = currObject.FieldName;
	var FieldValue = currObject.FieldValue;
	var RecordNo = currObject.RecordNo;
	var ChartID = document.all(HTMLControlID.toString()).selectSingleNode("//root/ID").text.toString();	
	var Chart = document.all(ChartID);
	if(!Chart){
		alertErr(ChartID, "Chart", "BarOnMouseOut", "Invalid Chart ID:'" + ChartID + "' specified.");
		//alert("Graph_BarOnMouseOut() error:\n____________________________________________________\n\nInvalid Chart ID:'" + ChartID + "' specified.\n____________________________________________________");
		return;
	}	
	var onMouseOutScript = (Chart.ActiveGraph.selectNodes("*[@name = '" + FieldName + "']/onmouseout").length > 0)?(Chart.ActiveGraph.selectSingleNode("*[@name = '" + FieldName + "']/onmouseout").text):("");
	try
	{
		if (onMouseOutScript != "") {
			debugWrite(ChartID + ".GraphBaronMouseOut",new Array(HTMLControlID,"GraphBaronMouseOut"),"callstack");
			eval(onMouseOutScript);
		}
	}
	catch(err)
	{
		alertErr(ChartID, "Chart", "BarOnMouseOut", err.description);
		//alert("Graph_BarOnMouseOut() Script error:\n____________________________________________________\n\n" + err.description + "\n____________________________________________________");
		return;
	}	
}

//---End - Graph Type 3:Bar Chart----------------------------


//---Start - Graph Type 4:Line Chart----------------------------
function Graph_InitType4(Graph){
	if(!Graph){
		alertErr(Graph.id, "Chart", "InitType4", "Invalid Oref.");
		//alert("Graph_InitType4() error:\n____________________________________________________\n\nInvalid Oref.\n____________________________________________________");
		return;
	}	
	if(!Graph.ActiveGraph)
		return;
		
	var FieldList = Graph.ActiveGraph.selectNodes("Field[@display = '-1']");
	var arrFieldNames = new Array();
	var Field, FieldName, FieldValue;
	var LeftMargin = 55;	
	var arrPath = new Array();
	for(x = 0; x < FieldList.length; x++){
		Field = FieldList.nextNode();		
		arrFieldNames[x] = Field;		
		//arrPath[x] = "m 0," + Graph.xAxis + " l ";
		arrPath[x] = "";
	}
	GrapthType3_DrawYScale(Graph);	
	var PlotWidth = Graph.offsetWidth - Graph.yAxis;
	var PlotHeight = Graph.offsetHeight - 30;	
	var xAxis = Graph.xAxis;	
	var BarItem, BarFill, BarExt, BarHeight;	
	
	var TopMargin = xAxis;
	var ScaleValue;
	var LineWidth = Graph.offsetWidth;
	Graph.HTMLString += "<v:line unselectable='on' from='" + (Graph.yAxis - 5) + "px," + xAxis + "px' to='" + parseInt(LineWidth) + "px," + xAxis + "px'></v:line>";	
	var GraphRange = Graph.unitvalue * (Graph.RangeValue / Graph.unit);
	
	LeftMargin = Graph.yAxis;
	var GraphWidth = Graph.offsetWidth - LeftMargin;
	var RecordCount = Graph.DataSource.documentElement.childNodes.length;
	var BarCount = RecordCount * arrFieldNames.length;	
	var RecordWidth = parseInt(GraphWidth / RecordCount);				
	RecordWidth -= RecordWidth%2;	
	if(Graph.ActiveGraph.getAttribute("XMajorLines") != 0)
	{
		var LineTop = 0;
		var LineBottom = Graph.offsetHeight;
	}
	else
	{
		var LineTop = Graph.xAxis - 5;
		var LineBottom = Graph.xAxis + 5;
	}
	var LineStyle = (Graph.ActiveGraph.getAttribute("XMajorLines") != 0)?(Graph.ActiveGraph.getAttribute("XMajorLineStyle")):("Solid");
	var LineColor = (Graph.ActiveGraph.getAttribute("XMajorLineColor"))?(Graph.ActiveGraph.getAttribute("XMajorLineColor")):("Black");
	var Record, temp;
	var xFieldName = VBTrim(Graph.ActiveGraph.getAttribute("XField")).toString();		
	var BarColor;	
	var LeftPoint = 0, TopPoint;	
	for(var i = 0; i < RecordCount; i++){
		Record = Graph.DataSource.documentElement.childNodes(i);		
		LeftPoint += parseInt(RecordWidth / 2);
		switch(xFieldName){
			case "":
				FieldValue = "";
			break;
			
			case "SYS__RecordNo":
				FieldValue = i + 1;
			break;
			
			default:
				FieldValue = (Record.selectNodes(xFieldName).length > 0)?(Record.selectSingleNode(xFieldName).text):("");
			break;
		}		
		Graph.HTMLString += "<DIV unselectable='on' title='" + EscapeHTML(FieldValue) + "' nowrap style='CURSOR:default; TEXT-ALIGN:center; LEFT:" + LeftMargin + "; TOP:" + (xAxis + 2) + "px; POSITION:absolute; FONT-FAMILY:arial; FONT-SIZE:7pt; OVERFLOW:hidden; WIDTH:" + RecordWidth + ";'>" + EscapeHTML(FieldValue) + "</DIV>"		
		
		for(x = 0; x < arrFieldNames.length; x++){			
			FieldName = arrFieldNames[x].getAttribute("name");						
			FieldValue = (Record.selectNodes(FieldName).length > 0)?(Record.selectSingleNode(FieldName).text):("");				
			if(isNaN(FieldValue))
				FieldValue = 0;
			BarHeight = ((Math.abs(FieldValue) / Graph.RangeValue) * 100) * (GraphRange / 100);
			TopMargin = (FieldValue > 0)?(xAxis - BarHeight):(xAxis + BarHeight);		
			BarColor = (FieldValue > 0)?(arrFieldNames[x].getAttribute("PosColor")):(arrFieldNames[x].getAttribute("NegColor"))	
			TopPoint = parseInt(TopMargin);			
			arrPath[x] += LeftPoint + ", " + TopPoint + " m " +  LeftPoint + ", " + TopPoint + " l "						
		}
		LeftPoint += RecordWidth / 2;
		LeftMargin += RecordWidth;		
		Graph.HTMLString += "<v:line unselectable='on' title='" + (i + 1) + "' from='" + LeftMargin + "px," + LineTop + "px' to='" + LeftMargin + "px," + LineBottom + "px'><v:stroke DashStyle='" + LineStyle + "' Color='" + LineColor + "'/></v:line>";	
	}
	
	var PathAlert = "";
	var LinePoint, LineStyle;
	for(x = 0; x < arrPath.length; x++){
		arrPath[x] += "e";	
		FieldName = arrFieldNames[x].getAttribute("name");
		LinePoint = (arrFieldNames[x].getAttribute("LinePoints"))?(arrFieldNames[x].getAttribute("LinePoints")):("");
		LineStyle = (arrFieldNames[x].getAttribute("LineStyle"))?(arrFieldNames[x].getAttribute("LineStyle")):("");				
		if(VBInstring(Graph.DataSource.Schema, "|" + FieldName + "|")){			
			Graph.HTMLString += "<v:shape FieldName=\"" + escapex(FieldName) + "\" onclick=\"Graph_BarOnClick(" + Graph.HTMLControlID + ");\" ondblclick=\"Graph_BarOnDblClick(" + Graph.HTMLControlID + ");\" onmouseover=\"Graph_BarOnMouseOver(" + Graph.HTMLControlID + ");\" onmouseout=\"Graph_BarOnMouseOut(" + Graph.HTMLControlID + ");\" unselectable='on' style='POSITION:absolute; Left: " + Graph.yAxis + "; width:" + PlotWidth + "px;height:" + PlotHeight + "px' coordsize='" + PlotWidth + "," + PlotHeight + "' path='" + arrPath[x] + "'><v:fill Opacity='0'/><v:stroke Color='" + arrFieldNames[x].getAttribute("PosColor") + "'  StartArrowWidth='Narrow' StartArrowLength='Narrow' EndArrowWidth='Narrow' EndArrowLength='Narrow' StartArrow='" + LinePoint + "'  EndArrow='" + LinePoint + "' /><v:stroke DashStyle='" + LineStyle + "'/></v:shape>";			
		}		
	}
}
//---End - Graph Type 4:Line Chart----------------------------


//---Start - Graph Type 5:Line Chart----------------------------
function Graph_InitType5(Graph){
	if(!Graph){
		alertErr(Graph.id, "Chart", "InitType5", "Invalid Oref.");
		alert("Graph_InitType5() error:\n____________________________________________________\n\nInvalid Oref.\n____________________________________________________");
		return;
	}	
	if(!Graph.ActiveGraph)
		return;	
	
	var GraphWidth = Graph.offsetWidth;
	var GraphHeight = Graph.offsetHeight;
	var Diameter = Math.min(GraphWidth, GraphHeight) - 30;	
	var Radius = parseInt(Diameter / 2);
	var PieTop = parseInt((GraphHeight / 2) - Radius);
	var PieLeft = parseInt((GraphWidth / 2) - Radius);	
	var PieCenterTop = parseInt(PieTop + Radius);
	var PieCenterLeft = parseInt(PieLeft + Radius);
	
	var PointCenterLeft = parseInt(GraphWidth / 2);
	var PointCenterTop = parseInt(GraphHeight / 2);
	var PieData = Graph.ActiveGraph.getAttribute("PieData");
	Graph.Radius = Radius;
	Graph.PieCenterTop = PieCenterTop;
	Graph.PieCenterLeft = PieCenterLeft;
	var PiePath = "m " + PointCenterLeft + " " + PointCenterTop + " l ";
	PiePath += " " + (Graph.PieCenterLeft) + " " + (Graph.PieCenterTop - Graph.Radius) + " L";
	switch(PieData)
	{
		case "Record":
			PiePath += GetRecordPiePath(Graph);
		break;
	}
	
	alert(PiePath);
	
	//alert("ubound: " + ubound + "\nlbound: " + lbound);
	
	/*
	PiePath += "m " + PointCenterLeft + " " + PointCenterTop + " l ";	
	var A = 180;
	var c = Radius;
	var a = c * Math.sin(A / 57.2957795786);	
	var b = Math.sqrt(Math.pow(Radius, 2) - Math.pow(a, 2));
	var PerimeterX = a;
	var PerimeterY = b;	
	PiePath += " " + parseInt(PointCenterLeft + PerimeterX)  + " " + parseInt(PointCenterTop - PerimeterY) + " e ";	
	*/
	
	Graph.HTMLString += "<v:oval coordsize='' style='POSITION:absolute; Left:" + PieLeft + "; Top:" + PieTop + "; width:" + Diameter + "px; height:" + Diameter + "px'></v:oval>";	
	Graph.HTMLString += "<v:shape unselectable='on' style='POSITION:absolute; Left:0px; Height:0px; width:" + GraphWidth + "px;height:" + GraphHeight + "px' coordsize='" + GraphWidth + "," + GraphHeight + "' path='" + PiePath + "'><v:fill Color=red /><v:stroke Color='red'  StartArrowWidth='Narrow' StartArrowLength='Narrow' EndArrowWidth='Narrow' EndArrowLength='Narrow' StartArrow=''  EndArrow='' DashStyle='solid'/></v:shape>";			
	
}

function GetRecordPiePath(Graph)
{
	var DataSource = Graph.DataSource;
	var ubound = 0, lbound = 0;
	var FieldList = Graph.ActiveGraph.selectNodes("Field");
	var FieldName, FieldValue;
	var Record = DataSource.documentElement.childNodes(DataSource.recordset.absolutePosition - 1);
	if(!Record)
	{
		alert("No Record");
		return false;
	}
	
	for(x = 0; x < FieldList.length; x++){
		Field = FieldList.nextNode();		
		FieldName = Field.getAttribute("name");		
		while(Record.selectNodes(FieldName + "[. > " + ubound + "]").length > 0){
			ubound = parseFloat(Record.selectSingleNode(FieldName + "[. > " + ubound + "]").text);
		}
		while(DataSource.selectNodes(FieldName + "[. < " + lbound + "]").length > 0){
			lbound = parseFloat(Record.selectSingleNode(FieldName + "[. < " + lbound + "]").text);
		}
	}
	Graph.RangeValue = 0;	
	FieldList.reset();	
	for(x = 0; x < FieldList.length; x++){
		Field = FieldList.nextNode();		
		FieldName = Field.getAttribute("name");		
		FieldValue = Record.selectSingleNode(FieldName).text;
		Graph.RangeValue += Math.abs(FieldValue);
	}
	//alert(Graph.RangeValue);
	var PiePath = "";
	var A = 0;
	FieldList.reset();
	for(x = 0; x < FieldList.length; x++){
		Field = FieldList.nextNode();		
		FieldName = Field.getAttribute("name");		
		FieldValue = Record.selectSingleNode(FieldName).text;
		//alert(FieldValue);
		A += (360 / 100) * ((FieldValue / Graph.RangeValue) * 100);				
		//alert("FieldValue: " + FieldValue + "\nPerc: " + A);
		var c = Graph.Radius;
		var a = c * Math.sin(A / 57.2957795786);	
		var b = Math.sqrt(Math.pow(c, 2) - Math.pow(a, 2));
		var PerimeterX = Math.abs(a);
		var PerimeterY = Math.abs(b);	
		//alert(PerimeterX);
		PiePath += " m " + Graph.PieCenterLeft + " " + Graph.PieCenterTop + " L";
		if(x < FieldList.length - 1){
			if((A >= 180)&&(A <= 360))				
				PerimeterX = -PerimeterX;
			if(((A >= 0)&&(A <= 90))||((A >= 270)&&(A <= 360))) 
				PerimeterY = -PerimeterY;
			PiePath += " " + parseInt(Graph.PieCenterLeft + PerimeterX) + " " + parseInt(Graph.PieCenterTop - PerimeterY) + " L";						
		}	
	}
	

	//alert(FieldValue);
	//PiePath += "m " + Graph.PieCenterLeft + " " + (Graph.PieCenterTop - Graph.Radius) + " L";
		
		
	//PiePath += " " + (Graph.PieCenterLeft) + " " + (Graph.PieCenterTop - Graph.Radius) + " L";
	/*
	var A = 180;
	var c = Graph.Radius;
	var a = c * Math.sin(A / 57.2957795786);	
	var b = Math.sqrt(Math.pow(c, 2) - Math.pow(a, 2));
	var PerimeterX = a;
	var PerimeterY = b;	
	
	PiePath += "m " + Graph.PieCenterLeft + " " + Graph.PieCenterTop + " L";
	PiePath += " " + parseInt(Graph.PieCenterLeft + PerimeterX) + " " + parseInt(Graph.PieCenterTop - PerimeterY) + " L";
	*/
	
	
	Graph.ubound = ubound;
	Graph.lbound = lbound;
	//alert("ubound: " + ubound + "\nlbound: " + lbound);
	
	
	return PiePath;
}
//---End - Graph Type 5:Line Chart----------------------------
function Graph_InitType1(Graph){
	if(!Graph){
		alertErr(Graph.id, "Chart", "InitType1", "Invalid Oref.");
		//alert("Graph_InitType1() error:\n____________________________________________________\n\nInvalid Oref.\n____________________________________________________");
		return;
	}	
	Graph.innerHTML = "";
	var DataSourceID = (Graph.TagValues.selectSingleNode("//dataSrc") !=null) ? Graph.TagValues.selectSingleNode("//dataSrc").text : "";	
	var DataSource = document.all(VBReplace(DataSourceID, "#", ""));
	Graph.DataSource = DataSource;
	
	var BarTable = document.createElement("TABLE");
	BarTable.style.fontFamily = "arial";
	BarTable.style.fontSize = "8pt";
	BarTable.border = 0;
	BarTable.width = "100%";
	BarTable.height = "100%";
	var BarDiv, BarCell, BarRow = BarTable.insertRow();
	var InputItem, InputList = Graph.getElementsByTagName("INPUT");
	
	var Schema = Graph.DataSource.Schema;
	var ColSpecList = Graph.TagValues.selectNodes("//ColSpec/Col");	
	//Schema = Schema.split("|");
	
	var FieldName, NewInput, Col, BarColor;
	for(var i = 0; i < ColSpecList.length; i++){
		Col = ColSpecList.nextNode();
		FieldName = Col.getAttribute("field");
		BarColor = Col.getAttribute("color");
		BarCell = BarRow.insertCell();
		BarCell.vAlign = "bottom";
		BarCell.innerHTML = "<BUTTON style='WIDTH:100%; Border-Bottom: solid threeddarkshadow 1px; Border-Left: solid threeddarkshadow 1px; Border-Top: solid threedhighlight 1px; Border-Right: solid threedhighlight 1px; BACKGROUND-COLOR:" + escape(BarColor) + "'></BUTTON>";
		
		NewInput = document.createElement("INPUT");
		NewInput.type = "hidden";
		NewInput.dataSrc = "#" + Graph.DataSource.id;		
		NewInput.dataFld = FieldName;
		NewInput.BarCell = BarCell;
		BarCell.BarInput = NewInput;
		//NewInput.onpropertychange = new Function("HTMLControlID", "BarGraph_RecalcBars(" + Graph.HTMLControlID + ");");				 
		Graph.appendChild(NewInput);		
	}
	/*
	ColSpecList.reset();
	var Caption;
	BarRow = BarTable.insertRow();
	for(var i = 0; i < ColSpecList.length; i++){
		Col = ColSpecList.nextNode();
		Caption = Col.getAttribute("caption");
		BarCell = BarRow.insertCell();
		BarCell.innerText = Caption;
	}
	*/
	Graph.appendChild(BarTable);	
}

function Graph_InitType2(Graph){
	if(!Graph){
		alertErr(Graph.id, "Chart", "InitType2", "Invalid Oref.");
		//alert("Graph_InitType1() error:\n____________________________________________________\n\nInvalid Oref.\n____________________________________________________");
		return;
	}	
	if(!Graph.ActiveGraph)
		return;	
	
	var xAxis = Graph.ActiveGraph.getAttribute("x");
	xAxis = (Graph.offsetHeight / 100) * xAxis;
	
		
	var RecordList = Graph.DataSource.documentElement.selectNodes("//root/Record");
	var Record;
	var FieldList = Graph.ActiveGraph.selectNodes("Field");
	var arrFieldNames = new Array();
	var Field, FieldName, FieldValue;
	var LeftMargin = 10;
	for(x = 0; x < FieldList.length; x++){
		Field = FieldList.nextNode();		
		arrFieldNames[x] = Field;
		Graph.HTMLString += "<v:line unselectable='on' from='" + LeftMargin + "px,0px' to='" + LeftMargin + "px," + parseInt(Graph.offsetHeight) + "px'></v:line>";
		GrapthType2_DrawYScale(Graph,Field, xAxis, LeftMargin);
		LeftMargin += 10;
	}
	//Graph.innerHTML += "<v:line from='0px," + xAxis + "px' to='" + parseInt(LineWidth - 5) + "px," + xAxis + "px'></v:line>";
	
	var BarItem, BarFill, BarExt, BarHeight;	
	
	var TopMargin = xAxis;
	var ScaleValue;
	for(var i = 0; i < RecordList.length; i++){
		Record = RecordList.nextNode();
		for(x = 0; x < arrFieldNames.length; x++){			
			FieldName = arrFieldNames[x].getAttribute("name");						
			FieldValue = (Record.selectNodes(FieldName).length > 0)?(Record.selectSingleNode(FieldName).text):("");			
			if(isNaN(FieldValue))
				FieldValue = 0;
			//BarHeight = (arrFieldNames[x].getAttribute("scale") / 100) * ((arrFieldNames[x].getAttribute("ubound") / FieldValue) * 100)
			BarHeight = Math.abs(FieldValue / arrFieldNames[x].getAttribute("ubound")) * 100;
			BarHeight = (arrFieldNames[x].getAttribute("scale") / 100) * BarHeight;
			TopMargin = (FieldValue > 0)?(xAxis - BarHeight):(xAxis);//GetScaleValue(FieldValue, arrFieldNames[x], xAxis);
			BarWidth = parseInt(arrFieldNames[x].getAttribute("width"));
			Graph.HTMLString += "<v:rect unselectable='on' title='" + FieldValue + "' style='POSITION:absolute;left:" + LeftMargin + "px;Top:" + TopMargin + "px; width:" + BarWidth + "px;height:" + BarHeight + "px;' ><v:fill Type='Solid' Color='" + arrFieldNames[x].getAttribute("color") + "' /><o:extrusion Render='Render' Color='#0e5' /></v:rect>";
			LeftMargin += BarWidth + 4;
		}		
		LeftMargin += 5;
	}
	var LineWidth = (Graph.scrollWidth > Graph.offsetWidth)?(Graph.scrollWidth):(Graph.offsetWidth);
	Graph.HTMLString += "<v:line unselectable='on' from='0px," + xAxis + "px' to='" + parseInt(LineWidth - 5) + "px," + xAxis + "px'></v:line>";
	Graph.HTMLString += "<v:line unselectable='on' from='30px,0px' to='30px," + parseInt(Graph.offsetHeight - 5) + "px'></v:line>";
}

function GrapthType2_DrawYScale(Graph, Field, X, Y){	
	var min = parseInt(Field.getAttribute("min"));
	var max = parseInt(Field.getAttribute("max"));
	var units = Field.getAttribute("units");
	var unitvalue = 1, unitrepeat = 1, unitfraction = 0;	
	var NegY = Graph.offsetHeight - X - 10;
	var PosY = X - 10;
	var Color = Field.getAttribute("color");
	if(Math.abs(min) >= Math.abs(max)){
		unitvalue = Math.abs((NegY / Math.abs((min / units))));
		unitrepeat = Math.round(NegY / unitvalue);		
		unitfraction = unitvalue - (parseInt(unitvalue));
		NegY = NegY - (unitfraction * unitrepeat);
		PosY = PosY - (unitfraction * unitrepeat);
		var PosY = X - 10;		
		for(var i = 1; i < unitrepeat + 1; i++){
			Graph.HTMLString += "<v:line unselectable='on' title='-" + parseInt(units * i) + "' from='" + parseInt(Y - 5) + "px," + parseInt(X + (unitvalue * i)) + "px' to='" + parseInt(Y + 5) + "px," + parseInt(X + (unitvalue * i)) + "px'><v:stroke Color='" + Color + "'/></v:line>";
			Graph.HTMLString += "<v:line unselectable='on' title='" + parseInt(units * i) + "' from='" + parseInt(Y - 5) + "px," + parseInt(X - (unitvalue * i)) + "px' to='" + parseInt(Y + 5) + "px," + parseInt(X - (unitvalue * i)) + "px'><v:stroke Color='" + Color + "'/></v:line>";
		}	
		Field.setAttribute("ubound", Math.abs(min));	
	}
	
	if(Math.abs(min) < Math.abs(max)){		
		unitvalue = Math.abs((PosY / (Math.abs(max / units))));
		unitrepeat = Math.round(PosY / unitvalue);	
		unitfraction = unitvalue - (parseInt(unitvalue));
		NegY = NegY - (unitfraction * unitrepeat);
		PosY = PosY - (unitfraction * unitrepeat);
		for(var i = 1; i < unitrepeat + 1; i++){
			Graph.HTMLString += "<v:line unselectable='on' title='-" + parseInt(units * i) + "' from='" + parseInt(Y - 5) + "px," + parseInt(X + (unitvalue * i)) + "px' to='" + parseInt(Y + 5) + "px," + parseInt(X + (unitvalue * i)) + "px'><v:stroke Color='" + Color + "'/></v:line>";
			Graph.HTMLString += "<v:line unselectable='on' title='" + parseInt(units * i) + "' from='" + parseInt(Y - 5) + "px," + parseInt(X - (unitvalue * i)) + "px' to='" + parseInt(Y + 5) + "px," + parseInt(X - (unitvalue * i)) + "px'><v:stroke Color='" + Color + "'/></v:line>";
		}
		Field.setAttribute("ubound", Math.abs(max));
	}
	Field.setAttribute("scale", PosY);
	//alert(Field.getAttribute("scale"));
}


//coolbar.js
function i45(HTMLControlID) {

	CoolBar_Initialise(HTMLControlID)
}

function _45(HTMLControlID) {
	CoolBar_Initialise(HTMLControlID)
}

function CoolBar_Initialise(HTMLControlID){
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var coolbar = document.all(ControlID);
	coolbar.tagValues = document.all(HTMLControlID);
	coolbar.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+document.body.HTMLControlID+"');");
	coolbar.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+document.body.HTMLControlID+"');");	
	var data = new ActiveXObject("Microsoft.XMLDOM");
	coolbar.data = data;

	if (coolbar.tagValues.selectNodes("//root/Disabled").length > 0) {
		coolbar.disabled = (coolbar.tagValues.selectSingleNode("//root/Disabled").text == "true")?(true):(false);
	} else {
		coolbar.disabled = false
	}
	
	if (coolbar.tagValues.selectNodes("//root/backgroundColor").length > 0) {
		coolbar.backgroundColor = coolbar.tagValues.selectSingleNode("//root/backgroundColor").text;
	} else {
		coolbar.backgroundColor = "buttonface";	
	}
	if (coolbar.tagValues.selectNodes("//root/stuckColor").length > 0) {
		coolbar.stuckColor = coolbar.tagValues.selectSingleNode("//root/stuckColor").text;
	} else {
		coolbar.stuckColor = "buttonface";		
	}
	
	
	coolbar.refresh = new Function("HTMLControlID", "ControlID", "Coolbar_Refresh('" + HTMLControlID + "', '" + ControlID + "');");
	coolbar.refreshHTML = new Function("HTMLControlID", "ControlID", "Coolbar_refreshHTML('" + HTMLControlID + "', '" + ControlID + "');");
	coolbar.refreshNode = new Function("oNode","HTMLControlID", "ControlID", "Coolbar_RefreshNode(oNode,'" + HTMLControlID + "', '" + ControlID + "');");
	coolbar.disableBar = new Function("bDisabled","HTMLControlID", "ControlID", "Coolbar_SetDisabled(bDisabled,'" + HTMLControlID + "', '" + ControlID + "');");
	coolbar.setBackgroundColor = new Function("sValue", "HTMLControlID", "ControlID", "return Coolbar_SetBackgroundColor(sValue,'" + HTMLControlID + "', '" + ControlID + "');");
	coolbar.setStuckColor = new Function("sValue","HTMLControlID", "ControlID",  "return Coolbar_SetStuckColor(sValue,'" + HTMLControlID + "', '" + ControlID + "');");
	coolbar.setDataSource = new Function("sDataFile","HTMLControlID", "Coolbar_SetDataFile(sDataFile,'" + HTMLControlID + "');");
	if (coolbar.tagValues.selectNodes("//root/datasrcfile").length > 0) {
		coolbar.datasrcfile = coolbar.tagValues.selectSingleNode("//root/datasrcfile").text;
	}
	coolbar.refresh();

	try {
		coolbar.disableBar(coolbar.disabled);
	} catch (err) {}
}

function Coolbar_SetDisabled(bDisabled, HTMLControlID, ControlID) {

	//Disabled/Enable the coolbar depeneding on the value passed in 
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var coolbar = document.all(ControlID);
	if (bDisabled == true || bDisabled == "true") {
		coolbar.children(0).children(0).disabled = true;
		coolbar.style.filter = "progid:DXImageTransform.Microsoft.BasicImage(opacity=.35)";
		coolbar.disabled = true;

	} else if (bDisabled == false || bDisabled == "") {
		coolbar.children(0).children(0).disabled = false;
		coolbar.disabled = false;
		coolbar.style.filter = "";
	} else {
		return;
	}
}

function Coolbar_SetBackgroundColor(sValue, HTMLControlID, ControlID) {
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var coolbar = document.all(ControlID);
	coolbar.backgroundColor = sValue;
	coolbar.style.backgroundColor = sValue;
	Coolbar_refreshHTML(HTMLControlID);
}

function Coolbar_SetStuckColor(sValue,HTMLControlID, ControlID) {
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var coolbar = document.all(ControlID);
	coolbar.stuckColor = sValue;
	Coolbar_refreshHTML(HTMLControlID)
}

//-----Rotation-----

/* Not being used as the filers slow down the control
function getRotation() {
	return rotation;
}

function setRotation(iRotation) {
	//Change the orentation of the coolbar
	switch (iRotation) {
		case 1:
			this.style.filter="progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
		break;
		case 2:
			this.style.filter="progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
		break;
		case 3:
			this.style.filter="progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
		break;
		case 0:		
		default:	
			this.style.filter="progid:DXImageTransform.Microsoft.BasicImage(rotation=0)";
		break;
	}
}
*/

function Coolbar_Refresh(HTMLControlID) {
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var coolbar = document.all(ControlID);
	tagValues = document.all(HTMLControlID);

	if(coolbar.datasrcfile == "" || coolbar.datasrcfile == null) {
		return;
	} 
	coolbar.data.async = false;
	coolbar.data.load(coolbar.datasrcfile);
	if(coolbar.data.parseError != 0)
	{
		alert("Error initializing coolbar " + ControlID + ". " + coolbar.data.parseError.reason);
		return;
	}
	
	Coolbar_refreshHTML(HTMLControlID)

}
//-----Refresh Method-----

//Used to build up the main	table's items
function Coolbar_refreshHTML(HTMLControlID) {
	//Rebuild the coolbar's HTML
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	
	var coolbar = document.all(ControlID);
	var	tagValues = document.all(HTMLControlID);
	
	if(coolbar.data.parseError != 0) {
		alert("Error initializing coolbar " + ControlID + ". " + coolbar.data.parseError.reason);
		return;
	}
	//---Create Outer Coolbar Table
	var oTable = document.createElement("TABLE");
	oTable.unselectable = "on";
	oTable.className = "tblCoolbar";		
	var oTR = oTable.insertRow();
	
	//---Insert Coolbar Items
	var oCoolbarItems = coolbar.data.documentElement.selectNodes("Node");
	var oCoolbarItemData, oTD, oIMG, sImage;
	var oItemTable, oItemRow, oItemCell;
	for(var i = 0; i < oCoolbarItems.length; i++) {

		oCoolbarItemData = oCoolbarItems.nextNode();
		//----------Create Outer Item Cell----------
		oTD = oTR.insertCell();
		oTD.unselectable = "on";
		oTR.appendChild(oTD);
		oTD.oNodeData = oCoolbarItemData;
		Coolbar_createItem(oTD, HTMLControlID);		
	}
	oTD = oTR.insertCell();
	oTD.unselectable = "on";	
	oTD.innerHTML = "&nbsp;";
	oTD.style.width = "100%";	
	coolbar.innerHTML = "";
	coolbar.appendChild(oTable);
}
//-----Refresh HTML Method-----/

//-----Refresh Node Method-----
//Find and update the Node
function Coolbar_RefreshNode(oNode,HTMLControlID) {
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	
	var coolbar = document.all(ControlID);

	var oItem = "";
	for(var i = 0; i < (coolbar.children(0).children(0).children(0).children.length - 1); i++) {

		if (oNode == coolbar.children(0).children(0).children(0).children(i).oNodeData) {
			oItem = coolbar.children(0).children(0).children(0).children(i);
			break;
		}
	}
	
	if(!oItem) return;
	
	oItem.innerHTML = ""; 
	Coolbar_createItem(oItem,HTMLControlID); //Create the cell's innerHTML
}
//-----Refresh Node Method-----/
//=====Public Methods=====/

//=====Addition Methods=====
//-----Create Item Method-----
function Coolbar_createItem(oItem, HTMLControlID) {
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var coolbar = document.all(ControlID);
	tagValues = document.all(HTMLControlID);
//Change the nodes innerHTML
	//-----Get Node Data-----
	sImage = (oItem.oNodeData.getAttribute("Image"))?(oItem.oNodeData.getAttribute("Image")):("");
	sCaption = (oItem.oNodeData.getAttribute("Caption"))?(oItem.oNodeData.getAttribute("Caption")):("");
	sTooltip = (oItem.oNodeData.getAttribute("Tooltip"))?(oItem.oNodeData.getAttribute("Tooltip")):("");
	sDisabled = (oItem.oNodeData.getAttribute("Disabled"))?(oItem.oNodeData.getAttribute("Disabled")):(0);
	sVisible = (oItem.oNodeData.getAttribute("Visible"))?(oItem.oNodeData.getAttribute("Visible")):(1);

	sState = (oItem.oNodeData.getAttribute("State"))?(oItem.oNodeData.getAttribute("State")):(0);
	sType = (oItem.oNodeData.getAttribute("Type"))?(oItem.oNodeData.getAttribute("Type")):(0);
	//-----Get Node Data-----/	
	sClass = "";	
	//-----Determine Class Name-----
	if (sVisible != 1) {
		sClass = "clbItemHidden";
	} else {
		if(sDisabled == 1) {
			if (sType == 1 && sState == 1) {
				sClass = "clbDisabledDown"
			} else {
				sClass = "clbDisabled"
			}
			oItem.disabled = true;
		} else {
			if (sType == 1 && sState == 1) {
				sClass = "clbItemDown"
			} else {
				sClass = "clbItem"
			}
			oItem.style.filter = "";
			oItem.disabled = false;
		}
	}
	
	
	
	//-----Determine Class Name-----/
	//-----Cell Events-----
	if(sType != 3 && sType != 2 && (sCaption != "|" && sCaption != "-") && sDisabled != 1) {
		oItem.onclick = new Function("HTMLControlID","_onCoolbarItemClick('" + HTMLControlID + "');");
		oItem.ondblclick = new Function();
		oItem.onmousedown = new Function("HTMLControlID","_onCoolbarItemDown('" + HTMLControlID + "');");
		oItem.onmouseup = new Function("HTMLControlID","_onCoolbarItemUp('" + HTMLControlID + "');");	
	} else {
		oItem.onclick = new Function();
		oItem.ondblclick = new Function();
		oItem.onmousedown = new Function();
		oItem.onmouseup = new Function();	
	}
	if (sType != 2 && sType != 3 && (sCaption != "|" && sCaption != "-") && sDisabled != 1) {
		oItem.onmouseenter = new Function("HTMLControlID","_onCoolbarItemOver('" + HTMLControlID + "')");
		oItem.onmouseleave = new Function("HTMLControlID","_onCoolbarItemOut('" + HTMLControlID + "')");
	} else {
		oItem.onmouseenter = new Function();
		oItem.onmouseleave = new Function();
	}

	//-----Cell Events-----/
	//-----Additional Cell properties-----	
	oItem.noWrap = true;
	oItem.style.margin = "0px";
	oItem.style.padding = "0mm";
	
	oItem.className = sClass;

	if (sDisabled != 1 && (sType != 1 && sState != 1)){
		oItem.style.backgroundColor = coolbar.backgroundColor;
		oItem.style.borderColor = coolbar.backgroundColor;
	} else if (sType == 1 && sState == 1) {
		oItem.style.backgroundColor = coolbar.stuckColor;
		oItem.style.borderColor = coolbar.backgroundColor;
	} else if (sType == 1 && sState == 0 && sDisabled == 0) {
		oItem.style.backgroundColor = coolbar.backgroundColor;
		oItem.style.borderColor = coolbar.backgroundColor;
	} else {
		//oItem.style.backgroundColor = this.style.backgroundColor;
		oItem.style.borderColor = coolbar.backgroundColor;
	}
	oItem.t = 1;
	oItem.unselectable = "on";
	oItem.title= sTooltip;
	//-----Additional Cell properties-----/
	//----------Create Cell Contents----------
	var sItemHTML = "<table style='border-color:" + oItem.style.backgroundColor + "; border-width:0px'><tr>";
	if(sType != 3 && sType != "3"){
		//-----Image-----
		if (sImage != "" && (sCaption != "|" && sCaption != "-")) {
			sItemHTML += "<td unselectable='on'><img unselectable = 'on' src='" + sImage + "' style='z-index:-9 height:110%'></td>";
		}
		//-----Image-----/
		//-----Caption-----
		if (sCaption != "" && (sCaption != "|" && sCaption != "-")) {
			sItemHTML += "<td nowrap unselectable='on' style='border-color:" + oItem.style.backgroundColor + "; backColor: " + oItem.style.backgroundColor + "; border-width:0px' class=" + sClass + ">" + sCaption + "</td>";
		} else if ((sCaption == "-")||(sCaption == "|")) {
			sItemHTML += "<td unselectable='on'><span class='cSpnSeperator'></span></td>";
		}
		//-----Caption-----/
	//-----HTML-----
	} else {
		if (oItem.oNodeData.selectNodes("content").length == 1) {
			sItemHTML += "<td>" + oItem.oNodeData.selectSingleNode("content").text + "</td>";
		}
	}

	//-----HTML-----/	
	sItemHTML += "</tr></table>";
	//----------Create Cell Contents----------/	
	oItem.innerHTML = sItemHTML;

}
//-----Create Item Method-----/

//-----Mouse Interaction events-----
function _onCoolbarItemClick(HTMLControlID) {
	try {
		var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
		var coolbar = document.all(ControlID);
		tagValues = document.all(HTMLControlID);
		var disabled = coolbar.disabled;
		if(disabled != true && disabled != "true") {
			//Execute the onclick event	and changes the item's state if it is of sticky type
			var oCurrElement = event.srcElement;
			var oItem;
			while (oCurrElement) {
				if(oCurrElement.t == 1) {
					oItem = oCurrElement;
					break;
				}
				oCurrElement = oCurrElement.parentElement;
			}
			if(!oItem)
				return;
			if(oItem.oNodeData.getAttribute("Disabled") != 1) {	
				var oNodeData = oItem.oNodeData;
				if(oNodeData.getAttribute("Type") == 1) { 
					if (oNodeData.getAttribute("State") == 1) {
						oItem.className = "clbItemOver";
						oItem.style.backgroundColor = coolbar.style.backgroundColor;
						oItem.children(0).style.borderColor = coolbar.style.backgroundColor;
						oItem.oNodeData.setAttribute("State", 0)
						
					} else {
						oItem.className = "clbItemDown";
						oItem.oNodeData.setAttribute("State", 1)

						oItem.style.backgroundColor = coolbar.stuckColor;
						oItem.children(0).style.borderColor = coolbar.stuckColor;
					}
				} else {
					oItem.className = "clbItemOver";
				}
			}
			var sOnClick = (oNodeData.selectNodes("onclick").length > 0)?(oNodeData.selectSingleNode("onclick").text):("");	
			try
			{
				eval(sOnClick)
			}
			catch(err)
			{
				alert(err.description);
			}	
		}
	} catch (err) {}
}

function _onCoolbarItemDown(HTMLControlID){
//Change the look of the button, if it is not defined as a sticky item or disabled
	try {
		var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
		var coolbar = document.all(ControlID);
		tagValues = document.all(HTMLControlID);
		var disabled = coolbar.disabled;
		if(disabled != true && disabled != "true") {
			var oCurrElement = event.srcElement;
			var oItem;
			while (oCurrElement) {
				if(oCurrElement.t == 1) {
					oItem = oCurrElement;
					break;
				}
				oCurrElement = oCurrElement.parentElement;
			}
			if(!oItem)
				return;
			
			if (oItem.oNodeData.getAttribute("Type") != 2) {	
				oItem.className = "clbItemDown";
			}
		}
		coolbar.currentItem = oItem;
	} catch (err) {}
}

function _onCoolbarItemUp(HTMLControlID) {
	try {
		var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
		var coolbar = document.all(ControlID);
		tagValues = document.all(HTMLControlID);
		var disabled = coolbar.disabled;
		var x;
		if(disabled != true  && disabled != "true") {
			if(!coolbar.currentItem == event.srcElement)
				return;
			if(coolbar.currentItem != event.srcElement) {
				var oCurrElement = event.srcElement;
				var bIsOver = false;
					while (oCurrElement) {
						if (oCurrElement == coolbar.currentItem) {
							bIsOver = true;
						} 	
						try {
							oCurrElement = oCurrElement.parentElement;
							x = oCurrElement.innerHTML;
						} catch (err) {coolbar.currentItem.className = "clbItem"; return;}
					}
				if (bIsOver == true) {
					coolbar.currentItem.className = "clbItemOver";
				} else {
					coolbar.currentItem.className = "clbItem";
				}
			} else {
				coolbar.currentItem = "clbItemOver";
			}
		}
	} catch (err) {}
}

function _onCoolbarItemOver(HTMLControlID) {	
	try {
		var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
		var coolbar = document.all(ControlID);
		tagValues = document.all(HTMLControlID);
		//alert(tagValues.xml);
		var disabled = coolbar.disabled
		//Change the items state once the mouse enters the TD	
		if(disabled != true && disabled != "true") {
			if(event.srcElement.oNodeData) {
				if(event.srcElement.oNodeData.getAttribute("Type") != 3 && event.srcElement.oNodeData.getAttribute("Type") != 2 && !(event.srcElement.oNodeData.getAttribute("Type") == 1 && event.srcElement.oNodeData.getAttribute("State") == 1)) {	
					event.srcElement.className = "clbItemOver";			
				}
			}
		}
	} catch (err) {}
}

function _onCoolbarItemOut(HTMLControlID) {	
	try {
		//Change the item's state once the mouse leaves the item
		var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
		var coolbar = document.all(ControlID);
		tagValues = document.all(HTMLControlID);
		var disabled = coolbar.disabled	
		
		if(disabled != true  && disabled != "true") {
			if(event.srcElement.oNodeData) {
				if(event.srcElement.oNodeData.getAttribute("Type") != 3 && event.srcElement.oNodeData.getAttribute("Type") != 2 && !(event.srcElement.oNodeData.getAttribute("Type") == 1 && event.srcElement.oNodeData.getAttribute("State") == 1)) {	
					event.srcElement.className = "clbItem";	
				}
			}
		}
	} catch (err) {}
}

function Coolbar_SetDataFile(sDataFile,HTMLControlID) {
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var coolbar = document.all(ControlID);
	coolbar.datasrcfile = sDataFile
	coolbar.refresh();
}


//datagrid.js
function DataGrid_GetRowStyle(GridID){
	var Grid=document.all(GridID);
	var GridTable=document.all("DataGridTable_"+GridID);
	var RowCount=GridTable.rows.length;
	var Row,i,RecordNo;
	for(i=1;i<RowCount;i++){
		Row=GridTable.rows(i);
		RecordNo=(isNaN(Row.children(0).innerText))?(1):(parseInt(Row.children(0).innerText));
		Row.RecordNo=RecordNo;
	}
}

function GetGridColHeader(GridID){
	var Grid=document.all(GridID);
	if(!Grid)return;
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues)return;
	var xmlRecordsetID=(xmlTagValues.selectNodes("//xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//xmlRecordsetID").text):(null);
	if(!xmlRecordsetID)return;
	var xmlRecordset=document.all(xmlRecordsetID);
	if(!xmlRecordset)return;
	var ColSpec=xmlTagValues.documentElement.selectSingleNode("//ColSpec");
	var ColHeaderHTML="";
	var ShowRowNumberCol=(xmlTagValues.selectNodes("//ShowRowNumberCol").length>0)?(xmlTagValues.selectSingleNode("//ShowRowNumberCol").text):(1);
	var ShowCheckListCol=(xmlTagValues.selectNodes("//ShowCheckListCol").length>0)?(xmlTagValues.selectSingleNode("//ShowCheckListCol").text):(0);
	var ShowStatusCol=(xmlTagValues.selectNodes("//ShowStatusCol").length>0)?(xmlTagValues.selectSingleNode("//ShowStatusCol").text):(0);
	ColHeaderHTML+="<COL style='DISPLAY:none'/>";
	ColHeaderHTML+=(ShowRowNumberCol!=0)?("<COL/>"):("<COL style='DISPLAY:none'/>");
	ColHeaderHTML+=(ShowCheckListCol!=0)?("<COL/>"):("<COL style='DISPLAY:none'/>");
	ColHeaderHTML+=(ShowStatusCol!=0)?("<COL/>"):("<COL style='DISPLAY:none'/>");
	var Schema=xmlRecordset.Schema;
	var arrRecordsetFields=Schema.split("|");
	var i,FieldCount=arrRecordsetFields.length-1;
	var FieldName,Col,Class,ColDisplay,Width;
	var LastVisibleCol=(ColSpec.selectNodes("//root/ColSpec/*[@Visible != 0][end()]").length>0)?(ColSpec.selectSingleNode("//root/ColSpec/*[@Visible != 0][end()]")):(null);
	for(i=1;i<FieldCount;i++){
		FieldName=arrRecordsetFields[i];
		Col=(ColSpec.selectNodes("//ColSpec/"+FieldName).length>0)?(ColSpec.selectSingleNode("//ColSpec/"+FieldName)):(null);
		if(Col){
			ColDisplay=(Col.getAttribute("Visible")=="1")?("BLOCK"):("NONE");
			Width=(Col.getAttribute("Width"))?(Col.getAttribute("Width")):("");
			Width=(((Width.length==0)&&(LastVisibleCol==Col)))?("100%"):(Width);
			Class=(Col.getAttribute("ColClass"))?(Col.getAttribute("ColClass")):("");
			if(LastVisibleCol==Col){
			}
			if(Class.length==0)Class="DataGridCol";
				ColHeaderHTML+="			<COL class='"+Class+"' style='Width: "+Width+"; DISPLAY:"+ColDisplay+"'/>";
			}
			else{
				Width=(i==(FieldCount-1))?("100%"):("");
				ColHeaderHTML+="			<COL class='DataGridCol' style='Width: "+Width+";'/>";
			}
		}
		return ColHeaderHTML;
	}
	
function GetGridHeader(DataGridID){
	var DataGrid=document.all(DataGridID);
	if(!DataGrid){
		alertErr(DataGridID,"DataGrid","GetGridHeader","Invalid Treeview ID:'"+DataGridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(DataGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(DataGridID,"DataGrid","GetGridHeader","Invalid TagValue ID:'"+DataGrid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DataGridID,"DataGrid","GetGridHeader","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var DataSourceID=(xmlTagValues.selectNodes("//root/xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//root/xmlRecordsetID").text):(null);
	if(!DataSourceID)return;
	var DataSource=document.all(DataSourceID);
	if(!DataSource)return;
	var ShowRowNumberCol=(xmlTagValues.selectNodes("//root/ShowRowNumberCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowRowNumberCol").text):(1);
	var ShowCheckListCol=(xmlTagValues.selectNodes("//root/ShowCheckListCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowCheckListCol").text):(0);
	var ShowStatusCol=(xmlTagValues.selectNodes("//root/ShowStatusCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowStatusCol").text):(0);
	var HeaderHeight=(xmlTagValues.selectNodes("//HeaderHeight").length>0)?(xmlTagValues.selectSingleNode("//HeaderHeight").text):("20");
	if(HeaderHeight.length==0)HeaderHeight=22;
	var AlwaysShowColHeaders=(xmlTagValues.selectNodes("/root/AlwaysShowColHeaders").length>0)?(xmlTagValues.selectSingleNode("/root/AlwaysShowColHeaders").text):(0);
	var AlwaysShowRowHeaders=(xmlTagValues.selectNodes("//root/AlwaysShowRowHeaders").length>0)?(xmlTagValues.selectSingleNode("//root/AlwaysShowRowHeaders").text):(0);
	var ShowGridHeader=(xmlTagValues.selectNodes("//root/ShowGridHeader").length>0)?(xmlTagValues.selectSingleNode("//root/ShowGridHeader").text):("1");
	ShowGridHeader=(ShowGridHeader.length==0)?(1):(ShowGridHeader);
	var RowNumberColWidth=(xmlTagValues.selectNodes("/root/RowNumberColWidth").text)?(xmlTagValues.selectSingleNode("/root/RowNumberColWidth").text):(18);
	var CheckListColWidth=(xmlTagValues.selectNodes("/root/CheckListColWidth").length>0)?(xmlTagValues.selectSingleNode("/root/CheckListColWidth").text):(18);
	var StatusColWidth=(xmlTagValues.selectNodes("/root/StatusColWidth").length>0)?(xmlTagValues.selectSingleNode("/root/StatusColWidth").text):(18);
	var ColSpec=xmlTagValues.documentElement.selectSingleNode("//root/ColSpec");
	var HeaderDisplay=(ShowGridHeader=="1")?("block"):("none");
	var THeadHTML="	<THEAD style='DISPLAY:"+HeaderDisplay+";'>\n";
	THeadHTML+="		<TR style='HEIGHT:"+HeaderHeight+"'>\n";
	THeadHTML+="			<TH></TH>\n";
	var RowNumberColImage=(xmlTagValues.selectNodes("//root/RowNumberColImage").length>0)?(xmlTagValues.selectSingleNode("//root/RowNumberColImage").text):("");
	var RowNumberColImageHTML=(RowNumberColImage.length>0)?("<IMG isRowNumberColHeader=1 src='"+RowNumberColImage+"'></IMG>"):("&nbsp;");
	var CheckListColImage=(xmlTagValues.selectNodes("//CheckListColImage").length>0)?(xmlTagValues.selectSingleNode("//CheckListColImage").text):("");
	var CheckListColImageHTML=(CheckListColImage.length>0)?("<IMG isCheckListColHeader=1 src='"+CheckListColImage+"'></IMG>"):("&nbsp;");
	var StatusColImage=(xmlTagValues.selectNodes("//StatusColImage").length>0)?(xmlTagValues.selectSingleNode("//StatusColImage").text):("");
	var StatusColImageHTML=(StatusColImage.length>0)?("<IMG isStatusColHeader=1 src='"+StatusColImage+"'></IMG>"):("&nbsp;");
	var MarginStyle,HeaderStyle;
	var UnpeggedStyle="LEFT:0px; TOP:0px; WIDTH:100%; HEIGHT:100%;";
	var PeggedTop="TEXT-INDENT:0px; position: absolute; WIDTH: expression(this.parentElement.offsetWidth); HEIGHT: expression(this.parentElement.offsetHeight); LEFT: expression(this.parentElement.offsetLeft); TOP: expression(this.parentElement.offsetTop + document.all(\'"+"div__"+DataGridID+"\').scrollTop);";
	var PeggedLeft="TEXT-INDENT:0px; position: absolute; WIDTH: expression(this.parentElement.offsetWidth); HEIGHT: expression(this.parentElement.offsetHeight); LEFT: expression(this.parentElement.offsetLeft + document.all(\'"+"div__"+DataGridID+"\').scrollLeft); TOP: expression(this.parentElement.offsetTop);";
	var Pegged="TEXT-INDENT:0px; position: absolute; WIDTH: expression(this.parentElement.offsetWidth); HEIGHT: expression(this.parentElement.offsetHeight); LEFT: expression(this.parentElement.offsetLeft + document.all(\'"+"div__"+DataGridID+"\').scrollLeft); TOP: expression(this.parentElement.offsetTop + document.all(\'"+"div__"+DataGridID+"\').scrollTop);";
	HeaderStyle=PeggedTop;
	if((AlwaysShowColHeaders=="0")&&(AlwaysShowRowHeaders=="0")){
		MarginStyle=UnpeggedStyle;
		HeaderStyle=UnpeggedStyle;
	}
	else if((AlwaysShowColHeaders=="1")&&(AlwaysShowRowHeaders=="1")){
		MarginStyle=Pegged;
	}
	else if((AlwaysShowColHeaders=="1")&&(AlwaysShowRowHeaders=="0")){
		MarginStyle=PeggedTop;
	}
	else if((AlwaysShowColHeaders=="0")&&(AlwaysShowRowHeaders=="1")){
		MarginStyle=PeggedLeft;
	}
	var RowMarginStyle=(ShowRowNumberCol==0)?(UnpeggedStyle):(MarginStyle);
	var CheckListMarginStyle=(ShowCheckListCol==0)?(UnpeggedStyle):(MarginStyle);
	var StatusMarginStyle=(ShowStatusCol==0)?(UnpeggedStyle):(MarginStyle);
	if((AlwaysShowColHeaders=="0")&&(AlwaysShowRowHeaders=="0")){
		THeadHTML+="<TH nowrap><BUTTON isRowNumberColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + RowMarginStyle + "\" hidefocus>"+RowNumberColImageHTML+"</BUTTON></TH>";
		THeadHTML+="<TH nowrap><BUTTON isCheckListColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + CheckListMarginStyle + "\" hidefocus>"+CheckListColImageHTML+"</BUTTON></TH>";
		THeadHTML+="<TH nowrap><BUTTON isStatusColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + StatusMarginStyle + "\" hidefocus>"+StatusColImageHTML+"</BUTTON></TH>";
	}
	else{
		THeadHTML+="<TH nowrap><BUTTON isRowNumberColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + RowMarginStyle + "\" hidefocus>"+RowNumberColImageHTML+"</BUTTON>&nbsp;"+RowNumberColImageHTML+"&nbsp;</TH>";
		THeadHTML+="<TH nowrap><BUTTON isCheckListColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + CheckListMarginStyle + "\" hidefocus>"+CheckListColImageHTML+"</BUTTON>"+CheckListColImageHTML+"</TH>";
		THeadHTML+="<TH nowrap><BUTTON isStatusColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + StatusMarginStyle + "\" hidefocus>"+StatusColImageHTML+"</BUTTON>&nbsp;"+StatusColImageHTML+"&nbsp;</TH>";
	}
	var ColSpecHTML="";
	ColSpecHTML+="<COL style='DISPLAY:none'/>";
	ColSpecHTML+=(ShowRowNumberCol!=0)?("<COL style='WIDTH: "+RowNumberColWidth+";'/>"):("<COL style='WIDTH: "+RowNumberColWidth+"; DISPLAY:none'/>");
	ColSpecHTML+=(ShowCheckListCol!=0)?("<COL style='WIDTH: "+CheckListColWidth+";'/>"):("<COL style='WIDTH: "+CheckListColWidth+"; DISPLAY:none'/>");
	ColSpecHTML+=(ShowStatusCol!=0)?("<COL style='WIDTH: "+StatusColWidth+";'/>"):("<COL style='WIDTH: "+StatusColWidth+"; DISPLAY:none'/>");
	var Schema=DataSource.Schema;
	var arrRecordsetFields=Schema.split("|");
	var i,FieldCount=arrRecordsetFields.length-1;
	var FieldName,ColumnSpec;
	var ColumnDisplay,ColumnWidth,ColumnClass;
	var ColumnTooltip,ColumnCaption,ColumnStyle;
	var LastVisibleColumn=(ColSpec.selectNodes("//root/ColSpec/*[@Visible != 0][end()]").length>0)?(ColSpec.selectSingleNode("//root/ColSpec/*[@Visible != 0][end()]")):(null);
	for(i=1;i<FieldCount;i++){
		FieldName=arrRecordsetFields[i];
		ColumnSpec=(ColSpec.selectNodes("//ColSpec/"+FieldName).length>0)?(ColSpec.selectSingleNode("//ColSpec/"+FieldName)):(null);
		if(ColumnSpec){
			ColumnDisplay=(ColumnSpec.getAttribute("Visible"))?(ColumnSpec.getAttribute("Visible")):(0);
			ColumnWidth=(ColumnSpec.getAttribute("Width"))?(ColumnSpec.getAttribute("Width")):("");
			ColumnClass=(ColumnSpec.getAttribute("Class"))?(ColumnSpec.getAttribute("Class")):("");
			ColumnTooltip=(ColumnSpec.getAttribute("Tooltip"))?(ColumnSpec.getAttribute("Tooltip")):("");
			ColumnCaption=Decode((ColumnSpec.getAttribute("Caption"))?(ColumnSpec.getAttribute("Caption")):(""));
			ColumnDisplay=(ColumnDisplay==0)?("none"):("block");
			if((ColumnWidth.length==0)&&(LastVisibleColumn==ColumnSpec))ColumnWidth="100%";
			if(ColumnClass.length==0)ColumnClass="DataGridCol";
			if(ColumnCaption.length==0)ColumnCaption=Decode(FieldName);
		}
		else{
			ColumnDisplay="block";
			ColumnWidth=(i==(FieldCount-1))?("100%"):("");
			ColumnCaption=Decode(FieldName);
			ColumnTooltip="";
			ColumnClass="";
		}
		if(ColumnWidth.length>0)ColumnWidth="WIDTH: "+ColumnWidth+";";
		ColSpecHTML+="<COL class='"+ColumnClass+"' style='"+ColumnWidth+" DISPLAY:"+ColumnDisplay+"'/>";
		ColumnStyle=(ColumnDisplay=="block")?(HeaderStyle):(UnpeggedStyle);
		if(AlwaysShowColHeaders=="0")
			THeadHTML+="<TH isDataColHeader=1 title='"+ColumnTooltip+"' nowrap><BUTTON fieldName='"+escape(FieldName)+"' class='GridHeader' nowrap style=\"z-Index:999998;" + ColumnStyle + "\" hidefocus>&nbsp;"+ColumnCaption+"&nbsp;</BUTTON></TH>";
		else
			THeadHTML+="<TH isDataColHeader=1 title='"+ColumnTooltip+"' nowrap><BUTTON fieldName='"+escape(FieldName)+"' class='GridHeader' nowrap style=\"z-Index:999998;" + ColumnStyle + "\" hidefocus>&nbsp;"+ColumnCaption+"&nbsp;</BUTTON>"+ColumnCaption+"&nbsp;&nbsp;&nbsp;</TH>";
	}
	THeadHTML+="		</TR>\n";
	THeadHTML+="	</THEAD>\n";
	return ColSpecHTML+THeadHTML;
}

function GetGridHeader_VER1(DataGridID){
	var DataGrid=document.all(DataGridID);
	if(!DataGrid){
		alertErr(DataGridID,"DataGrid","GetGridHeader_VER1","Invalid Treeview ID:'"+DataGridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(DataGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(DataGridID,"DataGrid","GetGridHeader_VER1","Invalid TagValue ID:'"+DataGrid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DataGridID,"DataGrid","GetGridHeader_VER1","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var DataSourceID=(xmlTagValues.selectNodes("//root/xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//root/xmlRecordsetID").text):(null);
	var DataSource=document.all(DataSourceID);
	var ShowRowNumberCol=(xmlTagValues.selectNodes("//root/ShowRowNumberCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowRowNumberCol").text):(1);
	var ShowCheckListCol=(xmlTagValues.selectNodes("//root/ShowCheckListCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowCheckListCol").text):(0);
	var ShowStatusCol=(xmlTagValues.selectNodes("//root/ShowStatusCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowStatusCol").text):(0);
	var HeaderHeight=(xmlTagValues.selectNodes("//HeaderHeight").length>0)?(xmlTagValues.selectSingleNode("//HeaderHeight").text):("20");
	if(HeaderHeight.length==0)HeaderHeight=22;
	var AlwaysShowColHeaders=(xmlTagValues.selectNodes("/root/AlwaysShowColHeaders").length>0)?(xmlTagValues.selectSingleNode("/root/AlwaysShowColHeaders").text):(0);
	var AlwaysShowRowHeaders=(xmlTagValues.selectNodes("/root/AlwaysShowRowHeaders").length>0)?(xmlTagValues.selectSingleNode("/root/AlwaysShowRowHeaders").text):(0);
	var ShowGridHeader=(xmlTagValues.selectNodes("//root/ShowGridHeader").length>0)?(xmlTagValues.selectSingleNode("//root/ShowGridHeader").text):("1");
	ShowGridHeader=(ShowGridHeader.length==0)?(1):(ShowGridHeader);
	var RowNumberColWidth=(xmlTagValues.selectNodes("/root/RowNumberColWidth").length>0)?(xmlTagValues.selectSingleNode("/root/RowNumberColWidth").text):(18);
	var CheckListColWidth=(xmlTagValues.selectNodes("/root/CheckListColWidth").length>0)?(xmlTagValues.selectSingleNode("/root/CheckListColWidth").text):(18);
	var StatusColWidth=(xmlTagValues.selectNodes("/root/StatusColWidth").length>0)?(xmlTagValues.selectSingleNode("/root/StatusColWidth").text):(18);
	var ColSpec=xmlTagValues.documentElement.selectSingleNode("//root/ColSpec");
	var HeaderDisplay=(ShowGridHeader=="1")?("block"):("none");
	var THeadHTML="	<THEAD style='DISPLAY:"+HeaderDisplay+";'>\n";
	//THeadHTML+="		<TR oncontextmenu='showModalDialog(\"htmlcontrols/datagrid/fieldchooser.html\",document.all(\"" + DataGridID + "\"), \"dialogWidth:550px; dialogHeight:300px;help:0;resizable:0;\");' style='HEIGHT:"+HeaderHeight+"'>\n";
	THeadHTML+="		<TR style='HEIGHT:"+HeaderHeight+"'>\n";
	THeadHTML+="			<TH></TH>\n";
	var RowNumberColImage=(xmlTagValues.selectNodes("//root/RowNumberColImage").length>0)?(xmlTagValues.selectSingleNode("//root/RowNumberColImage").text):("");
	var RowNumberColImageHTML=(RowNumberColImage.length>0)?("<IMG isRowNumberColHeader=1 src='"+RowNumberColImage+"'></IMG>"):("&nbsp;");
	var CheckListColImage=(xmlTagValues.selectNodes("//CheckListColImage").length>0)?(xmlTagValues.selectSingleNode("//CheckListColImage").text):("");
	var CheckListColImageHTML=(CheckListColImage.length>0)?("<IMG isCheckListColHeader=1 src='"+CheckListColImage+"'></IMG>"):("&nbsp;");
	var StatusColImage=(xmlTagValues.selectNodes("//StatusColImage").length>0)?(xmlTagValues.selectSingleNode("//StatusColImage").text):("");
	var StatusColImageHTML=(StatusColImage.length>0)?("<IMG isStatusColHeader=1 src='"+StatusColImage+"'></IMG>"):("&nbsp;");
	var MarginStyle,HeaderStyle;
	var UnpeggedStyle="LEFT:0px; TOP:0px; WIDTH:100%; HEIGHT:100%;";
	var PeggedTop="TEXT-INDENT:0px; position: absolute; WIDTH: expression(this.parentElement.offsetWidth); HEIGHT: expression(this.parentElement.offsetHeight); LEFT: expression(this.parentElement.offsetLeft); TOP: expression(this.parentElement.offsetTop + document.all(\'"+"div__"+DataGridID+"\').scrollTop);";
	var PeggedLeft="TEXT-INDENT:0px; position: absolute; WIDTH: expression(this.parentElement.offsetWidth); HEIGHT: expression(this.parentElement.offsetHeight); LEFT: expression(this.parentElement.offsetLeft + document.all(\'"+"div__"+DataGridID+"\').scrollLeft); TOP: expression(this.parentElement.offsetTop);";
	var Pegged="TEXT-INDENT:0px; position: absolute; WIDTH: expression(this.parentElement.offsetWidth); HEIGHT: expression(this.parentElement.offsetHeight); LEFT: expression(this.parentElement.offsetLeft + document.all(\'"+"div__"+DataGridID+"\').scrollLeft); TOP: expression(this.parentElement.offsetTop + document.all(\'"+"div__"+DataGridID+"\').scrollTop);";
	HeaderStyle=PeggedTop;
	if((AlwaysShowColHeaders=="0")&&(AlwaysShowRowHeaders=="0")){
		MarginStyle=UnpeggedStyle;
		HeaderStyle=UnpeggedStyle;
	}
	else if((AlwaysShowColHeaders=="1")&&(AlwaysShowRowHeaders=="1")){
		MarginStyle=Pegged;
	}
	else if((AlwaysShowColHeaders=="1")&&(AlwaysShowRowHeaders=="0")){
		MarginStyle=PeggedTop;
	}
	else if((AlwaysShowColHeaders=="0")&&(AlwaysShowRowHeaders=="1")){
		MarginStyle=PeggedLeft;
	}
	var RowMarginStyle=(ShowRowNumberCol==0)?(UnpeggedStyle):(MarginStyle);
	var CheckListMarginStyle=(ShowCheckListCol==0)?(UnpeggedStyle):(MarginStyle);
	var StatusMarginStyle=(ShowStatusCol==0)?(UnpeggedStyle):(MarginStyle);
	if((AlwaysShowColHeaders=="0")&&(AlwaysShowRowHeaders=="0")){
		THeadHTML+="<TH nowrap><BUTTON isRowNumberColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + RowMarginStyle + "\" hidefocus>"+RowNumberColImageHTML+"</BUTTON></TH>";
		THeadHTML+="<TH nowrap><BUTTON isCheckListColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + CheckListMarginStyle + "\" hidefocus>"+CheckListColImageHTML+"</BUTTON></TH>";
		THeadHTML+="<TH nowrap><BUTTON isStatusColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + StatusMarginStyle + "\" hidefocus>"+StatusColImageHTML+"</BUTTON></TH>";
	}
	else{
		THeadHTML+="<TH nowrap><BUTTON isRowNumberColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + RowMarginStyle + "\" hidefocus>"+RowNumberColImageHTML+"</BUTTON>&nbsp;"+RowNumberColImageHTML+"&nbsp;</TH>";
		THeadHTML+="<TH nowrap><BUTTON isCheckListColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + CheckListMarginStyle + "\" hidefocus>"+CheckListColImageHTML+"</BUTTON>"+CheckListColImageHTML+"</TH>";
		THeadHTML+="<TH nowrap><BUTTON isStatusColHeader=1 class='GridHeader' nowrap style=\"TEXT-ALIGN:center;z-Index:999999;" + StatusMarginStyle + "\" hidefocus>"+StatusColImageHTML+"</BUTTON>&nbsp;"+StatusColImageHTML+"&nbsp;</TH>";
	}	
	var ColSpecHTML="";
	ColSpecHTML+="<COL style='DISPLAY:none'/>";
	ColSpecHTML+=(ShowRowNumberCol!=0)?("<COL style='WIDTH: "+RowNumberColWidth+";'/>"):("<COL style='WIDTH: "+RowNumberColWidth+"; DISPLAY:none'/>");
	ColSpecHTML+=(ShowCheckListCol!=0)?("<COL style='WIDTH: "+CheckListColWidth+";'/>"):("<COL style='WIDTH: "+CheckListColWidth+"; DISPLAY:none'/>");
	ColSpecHTML+=(ShowStatusCol!=0)?("<COL style='WIDTH: "+StatusColWidth+";'/>"):("<COL style='WIDTH: "+StatusColWidth+"; DISPLAY:none'/>");
	var arrColumnNodes=ColSpec.selectNodes("*");
	var i,FieldCount=arrColumnNodes.length-1;
	var FieldName,ColumnSpec;
	var ColumnDisplay,ColumnWidth,ColumnClass;
	var ColumnTooltip,ColumnCaption,ColumnStyle;
	var LastVisibleColumn=(ColSpec.selectNodes("//root/ColSpec/*[@Visible != 0][end()]").length>0)?(ColSpec.selectSingleNode("//root/ColSpec/*[@Visible != 0][end()]")):(null);
	
	for(i=0;i<arrColumnNodes.length;i++){		
		ColumnSpec=arrColumnNodes[i];
		FieldName=ColumnSpec.getAttribute("dataFld");
		ColumnDisplay=(ColumnSpec.getAttribute("Visible"))?(ColumnSpec.getAttribute("Visible")):(0);
		ColumnWidth=(ColumnSpec.getAttribute("Width"))?(ColumnSpec.getAttribute("Width")):("");
		ColumnClass=(ColumnSpec.getAttribute("Class"))?(ColumnSpec.getAttribute("Class")):("");
		ColumnTooltip=(ColumnSpec.getAttribute("Tooltip"))?(ColumnSpec.getAttribute("Tooltip")):("");
		ColumnCaption=Decode((ColumnSpec.getAttribute("Caption"))?(ColumnSpec.getAttribute("Caption")):(""));
		ColumnDisplay=(ColumnDisplay==0)?("none"):("block");
		if((ColumnWidth.length==0)&&(LastVisibleColumn==ColumnSpec))ColumnWidth="100%";
		if(ColumnClass.length==0)ColumnClass="DataGridCol";
		if(ColumnCaption.length==0)ColumnCaption="&nbsp;";
		if(ColumnWidth.length>0)ColumnWidth="WIDTH: "+ColumnWidth+";";
		ColSpecHTML+="<COL class='"+ColumnClass+"' style='"+ColumnWidth+" DISPLAY:"+ColumnDisplay+"'/>";
		ColumnStyle=(ColumnDisplay=="block")?(HeaderStyle):(UnpeggedStyle);		
		if(AlwaysShowColHeaders=="0")
			THeadHTML+="<TH isDataColHeader=1 title='"+ColumnTooltip+"' nowrap><BUTTON fieldName='"+escape(FieldName)+"' class='GridHeader' nowrap style=\"z-Index:999998;" + ColumnStyle + "\" hidefocus>&nbsp;"+ColumnCaption+"&nbsp;</BUTTON></TH>";
		else
			THeadHTML+="<TH isDataColHeader=1 title='"+ColumnTooltip+"' nowrap><BUTTON fieldName='"+escape(FieldName)+"' class='GridHeader' nowrap style=\"z-Index:999998;" + ColumnStyle + "\" hidefocus>&nbsp;"+ColumnCaption+"&nbsp;</BUTTON>"+ColumnCaption+"&nbsp;&nbsp;&nbsp;</TH>";
	}
	THeadHTML+="		</TR>\n";
	THeadHTML+="	</THEAD>\n";	
	return ColSpecHTML+THeadHTML;
}

function GetGridBody(DataGridID){
	var DataGrid=document.all(DataGridID);
	if(!DataGrid){
		alertErr(DataGridID,"DataGrid","GetGridBody","Invalid Treeview ID:'"+DataGridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(DataGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(DataGridID,"DataGrid","GetGridBody","Invalid TagValue ID:'"+DataGrid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DataGridID,"DataGrid","GetGridBody","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var DataSourceID=(xmlTagValues.selectNodes("//root/xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//root/xmlRecordsetID").text):(null);
	if(!DataSourceID)return;
	var DataSource=document.all(DataSourceID);
	if(!DataSource)return;
	var bShowDSOCursor = xmlTagValues.getPropertyValue("ShowDSOCursor", 1);	
	var sRecordColField = (bShowDSOCursor == 0)?("RecordNo"):("xmlDSO__RecordNo");		
	var ShowRowNumberCol=(xmlTagValues.selectNodes("//root/ShowRowNumberCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowRowNumberCol").text):(1);
	var ShowCheckListCol=(xmlTagValues.selectNodes("//root/ShowCheckListCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowCheckListCol").text):(0);
	var ShowStatusCol=(xmlTagValues.selectNodes("//root/ShowStatusCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowStatusCol").text):(0);
	var AlwaysShowColHeaders=xmlTagValues.documentElement.selectSingleNode("//root/AlwaysShowColHeaders").text;
	var AlwaysShowRowHeaders=xmlTagValues.documentElement.selectSingleNode("//root/AlwaysShowRowHeaders").text;
	var RowHeight=(xmlTagValues.selectNodes("//root/RowHeight").length > 0)?(xmlTagValues.selectSingleNode("//root/RowHeight").text):("");
	if(RowHeight.length==0)RowHeight=22;
	var ColSpec=xmlTagValues.documentElement.selectSingleNode("//root/ColSpec");
	var LeftPos="this.parentElement.offsetLeft + document.all('div__"+DataGridID+"').scrollLeft";
	var PeggedStyle="POSITION: absolute; z-Index:999998; WIDTH: expression(this.parentElement.offsetWidth); HEIGHT: expression(this.parentElement.offsetHeight); TOP: expression(this.parentElement.offsetTop); LEFT: expression("+LeftPos+");";
	var UnpeggedStyle="LEFT:0px; TOP:0px; WIDTH:100%; HEIGHT:100%;";
	var RowHeaderStyle=(AlwaysShowRowHeaders=="0")?(UnpeggedStyle):(PeggedStyle);
	var RowNumberStyle=(ShowRowNumberCol==0)?(UnpeggedStyle):(RowHeaderStyle);
	var CheckListStyle=(ShowCheckListCol==0)?(UnpeggedStyle):(RowHeaderStyle);
	var StatusStyle=(ShowStatusCol==0)?(UnpeggedStyle):(RowHeaderStyle);
	var BodyHTML="	<TR GridRow=true style='HEIGHT:"+RowHeight+"'>";
	BodyHTML+="			<TD isMargin=1><SPAN dataFld='xmlDSO__ARN'>&nbsp;</TD>";
	BodyHTML+="			<TD isMargin=1><BUTTON nowrap class='GridHeader' style=\"" + RowNumberStyle + "\">&nbsp;<SPAN dataFld='" + sRecordColField + "'></SPAN>&nbsp;</BUTTON></TD>";
	BodyHTML+="			<TD isMargin=1><SPAN nowrap class='GridHeader' style=\"TEXT-ALIGN:center;" + CheckListStyle + "\"><INPUT isCheckListInput=1 dataFld='xmlDSO__Selected' type='checkbox'></SPAN></TD>";
	BodyHTML+="			<TD isMargin=1><BUTTON nowrap class='GridHeader' style=\"TEXT-ALIGN:center;" + StatusStyle + "\"><IMG dataFld='xmlDSO__Status'></BUTTON></TD>";
	var Schema=DataSource.Schema;
	var arrRecordsetFields=Schema.split("|");
	var i,FieldCount=arrRecordsetFields.length-1;
	var FieldName,Col;
	for(i=1;i<FieldCount;i++){
		FieldName=arrRecordsetFields[i];
		Col=(ColSpec.selectNodes(FieldName).length>0)?(ColSpec.selectSingleNode(FieldName)):(null);
		BodyHTML+=GetGridCell(DataGridID,Col,FieldName,RowHeight);
	}
	BodyHTML+="	</TR>";
	return BodyHTML;
}

function GetGridBody_VER1(DataGridID){
	var DataGrid=document.all(DataGridID);
	if(!DataGrid){
		alertErr(DataGridID,"DataGrid","GetGridBody","Invalid Treeview ID:'"+DataGridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(DataGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(DataGridID,"DataGrid","GetGridBody","Invalid TagValue ID:'"+DataGrid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DataGridID,"DataGrid","GetGridBody","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var DataSourceID=(xmlTagValues.selectNodes("//root/xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//root/xmlRecordsetID").text):(null);
	if(!DataSourceID)return;
	var DataSource=document.all(DataSourceID);
	if(!DataSource)return;
	var ShowRowNumberCol=(xmlTagValues.selectNodes("//root/ShowRowNumberCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowRowNumberCol").text):(1);
	var ShowCheckListCol=(xmlTagValues.selectNodes("//root/ShowCheckListCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowCheckListCol").text):(0);
	var ShowStatusCol=(xmlTagValues.selectNodes("//root/ShowStatusCol").length>0)?(xmlTagValues.selectSingleNode("//root/ShowStatusCol").text):(0);
	var AlwaysShowColHeaders=(xmlTagValues.selectNodes("/root/AlwaysShowColHeaders").length>0)?(xmlTagValues.selectSingleNode("/root/AlwaysShowColHeaders").text):(0);
	var AlwaysShowRowHeaders=(xmlTagValues.selectNodes("/root/AlwaysShowRowHeaders").length>0)?(xmlTagValues.selectSingleNode("/root/AlwaysShowRowHeaders").text):(0);
	var bShowDSOCursor = xmlTagValues.getPropertyValue("ShowDSOCursor", 1);	
	var sRecordColField = (bShowDSOCursor == 0)?("RecordNo"):("xmlDSO__RecordNo");			
	var RowHeight=(xmlTagValues.documentElement.selectNodes("//root/RowHeight").length>0)?(xmlTagValues.documentElement.selectSingleNode("//root/RowHeight").text):("");
	if(RowHeight.length==0)RowHeight=22;
	var ColSpec=xmlTagValues.documentElement.selectSingleNode("//root/ColSpec");
	var LeftPos="this.parentElement.offsetLeft + document.all('div__"+DataGridID+"').scrollLeft";
	var PeggedStyle="POSITION: absolute; z-Index:999998; WIDTH: expression(this.parentElement.offsetWidth); HEIGHT: expression(this.parentElement.offsetHeight); TOP: expression(this.parentElement.offsetTop); LEFT: expression("+LeftPos+");";
	var UnpeggedStyle="LEFT:0px; TOP:0px; WIDTH:100%; HEIGHT:100%;";
	var RowHeaderStyle=(AlwaysShowRowHeaders=="0")?(UnpeggedStyle):(PeggedStyle);
	var RowNumberStyle=(ShowRowNumberCol==0)?(UnpeggedStyle):(RowHeaderStyle);
	var CheckListStyle=(ShowCheckListCol==0)?(UnpeggedStyle):(RowHeaderStyle);
	var StatusStyle=(ShowStatusCol==0)?(UnpeggedStyle):(RowHeaderStyle);
	var BodyHTML="	<TR GridRow=true style='HEIGHT:"+RowHeight+"'>";
	BodyHTML+="			<TD isMargin=1><SPAN dataFld='xmlDSO__ARN'>&nbsp;</TD>";
	BodyHTML+="			<TD isMargin=1><BUTTON nowrap class='GridHeader' style=\"" + RowNumberStyle + "\">&nbsp;<SPAN dataFld='" + sRecordColField + "'></SPAN>&nbsp;</BUTTON></TD>";
	BodyHTML+="			<TD isMargin=1><SPAN nowrap class='GridHeader' style=\"TEXT-ALIGN:center;" + CheckListStyle + "\"><INPUT isCheckListInput=1 dataFld='xmlDSO__Selected' type='checkbox'></SPAN></TD>";
	BodyHTML+="			<TD isMargin=1><BUTTON nowrap class='GridHeader' style=\"TEXT-ALIGN:center;" + StatusStyle + "\"><IMG dataFld='xmlDSO__Status'></BUTTON></TD>";
	var Schema=DataSource.Schema;
	var arrRecordsetFields=ColSpec.selectNodes("*")
	var i,FieldCount=arrRecordsetFields.length;
	var FieldName,Col;
	for(i=0;i<FieldCount;i++){
		FieldName=arrRecordsetFields[i].getAttribute("dataFld");
		Col=arrRecordsetFields[i];
		BodyHTML+=GetGridCell(DataGridID,Col,FieldName,RowHeight);
	}	
	BodyHTML+="	</TR>";
	return BodyHTML;
}

function GetGridCell(GridID,Col,FieldName,RowHeight){
	var GridCellHTML="		<TD GridCell=true nowrap class=\"GridCell\"><SPAN readonly nowrap dataFld='"+FieldName+"' class='intrinsic__readonly'></SPAN>&nbsp;</TD>";
	if(!Col)return GridCellHTML;
	var ControlType=Col.getAttribute("InputControl");
	var Class=(Col.getAttribute("Class"))?(Col.getAttribute("Class")):("");
	var Width="";
	var Disabled=(Col.getAttribute("Disabled")==1)?("disabled"):("");
	//alert(ControlType);
	switch(ControlType.toLowerCase()){
		case "intrinsic__textbox":
			if(Class.length==0)Class="intrinsic__textbox";
			GridCellHTML="		<TD GridCell=true nowrap class=\"GridCell\" style='"+Width+"'><INPUT type='textbox' onclick=\"intrinsic__control__onclick('" + GridID + "');\" onkeypress=\"intrinsic__control_onkeypress('" + GridID + "');\" onkeydown=\"intrinsic__control_onkeydown('" + GridID + "');\" onkeyup=\"intrinsic__control_onkeyup('" + GridID + "');\" dataFld='"+FieldName+"' class='"+Class+"'></TD>";
		break
		case "intrinsic__numeric":
			if(Class.length==0)Class="intrinsic__textbox";
			GridCellHTML="		<TD GridCell=true nowrap style='"+Width+"BORDER-RIGHT: buttonface 1px solid;  BORDER-TOP: buttonface 1px solid; BORDER-LEFT: buttonface 1px solid;  BORDER-BOTTOM: buttonface 1px solid;'><INPUT type='textbox' onclick=\"intrinsic__control__onclick('" + GridID + "');\" onkeypress=\"intrinsic__control_onkeypress('" + GridID + "');\" onkeydown='DataGrid_TextBoxNumericCheck(1);' dataFld='"+FieldName+"' class='"+Class+"' style='TEXT-ALIGN:right'></TD>";
		break
		case "intrinsic__textarea":
			if(Class.length==0)Class="intrinsic__textarea";
			GridCellHTML="		<TD GridCell=true nowrap style='"+Width+"BORDER-RIGHT: buttonface 1px solid;  BORDER-TOP: buttonface 1px solid; BORDER-LEFT: buttonface 1px solid;  BORDER-BOTTOM: buttonface 1px solid;'><TEXTAREA onclick=\"intrinsic__control__onclick('" + GridID + "');\" onkeypress=\"intrinsic__control_onkeypress('" + GridID + "');\" dataFld='"+FieldName+"' class='"+Class+"'></TEXTAREA></TD>";
		break
		case "intrinsic__checkbox":
			if(Class.length==0)Class="intrinsic__checkbox";
			GridCellHTML="		<TD GridCell=true nowrap align=center style='"+Width+"BORDER-RIGHT: buttonface 1px solid;  BORDER-TOP: buttonface 1px solid; BORDER-LEFT: buttonface 1px solid;  BORDER-BOTTOM: buttonface 1px solid;'><INPUT onclick=\"intrinsic__control__onclick('" + GridID + "');\" onkeypress=\"intrinsic__control_onkeypress('" + GridID + "');\" type='checkbox' "+Disabled+" dataFld='"+FieldName+"' class='"+Class+"'>&nbsp;</TD>";
		break
		case "intrinsic__href":
			if(Class.length==0)Class="intrinsic__href";
			GridCellHTML="		<TD GridCell=true nowrap  style='"+Width+"BORDER-RIGHT: buttonface 1px solid;  BORDER-TOP: buttonface 1px solid; BORDER-LEFT: buttonface 1px solid;  BORDER-BOTTOM: buttonface 1px solid; TEXT-INDENT:10'><a href='' onmouseover='this.href = this.children(0).innerText'><SPAN dataFld='"+FieldName+"' class='"+Class+"'></SPAN></a>&nbsp;</TD>";
		break
		case "intrinsic__mailto":
			if(Class.length==0)Class="intrinsic__mailto";
			GridCellHTML="		<TD GridCell=true nowrap style='"+Width+"BORDER-RIGHT: buttonface 1px solid;  BORDER-TOP: buttonface 1px solid; BORDER-LEFT: buttonface 1px solid;  BORDER-BOTTOM: buttonface 1px solid; TEXT-INDENT:10'><a href='' onmouseover='this.href = \"mailto:\" + this.children(0).innerText'><SPAN dataFld='"+FieldName+"' class='"+Class+"'></SPAN></a>&nbsp;</TD>";
		break
		case "intrinsic__image":
			if(Class.length==0)Class="intrinsic__image";
			GridCellHTML="		<TD GridCell=true nowrap class=\"GridCell\" style='"+Width+"'><IMG dataFld='"+FieldName+"' class='"+Class+"'>&nbsp;</TD>";
		break
		case "intrinsic__listbox":
			if(Class.length==0)Class="intrinsic__dropdown";
			var DropDownHTML=GetListboxHTML(Col,FieldName);
			GridCellHTML="		<TD GridCell=true nowrap style='"+Width+"BORDER-RIGHT: buttonface 1px solid;  BORDER-TOP: buttonface 1px solid; BORDER-LEFT: buttonface 1px solid;  BORDER-BOTTOM: buttonface 1px solid; TEXT-INDENT:10'>"+DropDownHTML+"</TD>";
		break;
		case "intrinsic__dropdown":
			if(Class.length==0)Class="intrinsic__dropdown";
			var DropDownHTML=GetDropDownHTML(Col,FieldName);
			GridCellHTML="		<TD GridCell=true nowrap style='"+Width+"BORDER-RIGHT: buttonface 1px solid;  BORDER-TOP: buttonface 1px solid; BORDER-LEFT: buttonface 1px solid;  BORDER-BOTTOM: buttonface 1px solid; TEXT-INDENT:10'>"+DropDownHTML+"</TD>";
		break
		case "intrinsic__html":
			var ColHTML=Col.text;
			if(Class.length==0)Class="GridCell";
			GridCellHTML="		<TD GridCell=true nowrap class=\"" + Class + "\" style='"+Width+"'>"+ColHTML+"</TD>";
		break
		case "intrinsic__datahtml":
			if(Class.length==0)Class="GridCell";
			GridCellHTML="		<TD GridCell=true nowrap class=\"" + Class + "\" style='"+Width+"'><SPAN dataFld='"+FieldName+"' DataFormatAS='HTML' style='HEIGHT:"+RowHeight+"px;'></SPAN>&nbsp;</TD>";
		break
		case "intrinsic__radio":
			var RadioHTML=GetRadioHTML(Col,FieldName,GridID);
			GridCellHTML="		<TD GridCell=true nowrap Col='"+Col+"' FieldName='"+FieldName+"' style='"+Width+"BORDER-RIGHT: buttonface 1px solid;  BORDER-TOP: buttonface 1px solid; BORDER-LEFT: buttonface 1px solid;  BORDER-BOTTOM: buttonface 1px solid;'>"+RadioHTML+"&nbsp;</TD>";
		break
		case "intrinsic__calendar":
			if(Class.length==0)Class="intrinsic__calendar";
			GridCellHTML="		<TD GridCell=true nowrap style='"+Width+"BORDER-RIGHT: buttonface 1px solid;  BORDER-TOP: buttonface 1px solid; BORDER-LEFT: buttonface 1px solid;  BORDER-BOTTOM: buttonface 1px solid;'><table border=0 cellpadding=0 cellspacing=0 style='HEIGHT:100%; WIDTH:100%'><tr><td style='WIDTH:100%'><INPUT type='textbox' dataFld='"+FieldName+"' class='"+Class+"' style='WIDTH:100%'></td><td><INPUT type='button' value='...' onclick='DataGrid_ShowCalendar(\"" + GridID + "\");'></TD></td></tr></table></TD>";
		break
		case "intrinsic__readonly":
			if(Class.length==0)Class="intrinsic__readonly";
			var GridCellHTML="		<TD GridCell=true nowrap class=\"GridCell\" style='"+Width+"'><SPAN readonly nowrap dataFld='"+FieldName+"' class='"+Class+"'></SPAN>&nbsp;</TD>";
		break
		case "intrinsic__button":
			var ButtonHTML = GetButtonHTML(Col,FieldName,Width);
			if(Class.length==0)Class="intrinsic__button";
			var GridCellHTML="		<TD GridCell=true nowrap align=center class=\"GridCell\" style='"+Width+"'>" + ButtonHTML + "&nbsp;</TD>";
		break
		
	}
	return GridCellHTML;
}

function GetButtonHTML(Col,FieldName,Width) {
	var ButtonHTML="";
	var onClick = Col.getAttribute("ButtonClick");
	var Caption = Col.getAttribute("ButtonCaption");
	var Width = Col.getAttribute("ButtonWidth");
	var ImageURL = Col.getAttribute("ButtonImage");
	
	var Class = Col.getAttribute("Class");
	if(Class.length==0)Class="intrinsic__button";
	/*if (Width != "") {
		ButtonHTML = "<INPUT TYPE=BUTTON Class='" + Class + "' style='width:" + Width + ";' onclick='event.srcElement.parentElement.click(); " + unescape(onClick) + "' dataFld='" + FieldName + "' value='" + Caption + "'>"
	} else {
		ButtonHTML = "<INPUT TYPE=BUTTON Class='" + Class + "' onclick='event.srcElement.parentElement.click(); " + unescape(onClick) + "' dataFld='" + FieldName + "' value='" + Caption + "'>"	
	}*/


	if (Width != "") {
		ButtonHTML = "<button align=center Class='" + Class + "' style='width:" + Width + ";' onclick='event.srcElement.parentElement.click(); " + unescape(onClick) + "' dataFld='" + FieldName + "'>"	
	} else {
		ButtonHTML = "<button align=center Class='" + Class + "' onclick='event.srcElement.parentElement.click(); " + unescape(onClick) + "' dataFld='" + FieldName + "'>"		
	}
	if (ImageURL != "") {
		if (Caption != "") {
			ButtonHTML += "<IMG border=0 src='"+ImageURL+"' style=''><span>&nbsp;"+ Caption + "</span></button>"
		} else {
			ButtonHTML += "<IMG border=0 src='"+ImageURL+"' style=''></button>"		
		}
	} else {
		ButtonHTML += Caption + "</span></button>"
	}
	return ButtonHTML;
}

function GetRadioHTML(Col,FieldName,GridID){
	var RadioHTML="";
	var ValueList=Col.getAttribute("ValueList");	
	var Class="intrinsic__radio";
	if(Col.getAttribute("Class")) {
		Class=Col.getAttribute("Class");
		if(Class.length==0)Class="intrinsic__radio";
	}
	var arrValueList=ValueList.split("}");
	var i,ValueListCount=arrValueList.length-1;
	var ValuePair,arrValuePair,OptionValue,OptionText,NewOption;
	for(i=0;i<ValueListCount;i++) {
		ValuePair=arrValueList[i].replace("{","");
		arrValuePair=ValuePair.split("|");
		OptionValue=unescape(arrValuePair[0]);
		OptionText=unescape(arrValuePair[1]);
		if(OptionText.substring(0,1)=="-"){			
			RadioHTML+=OptionText.substring(1,OptionText.length)+"	<INPUT type='radio' class='"+Class+"' dataFld='"+FieldName+"' value='"+OptionValue+"' onmouseover=\"SetRadioName('" + GridID + "');\">&nbsp;&nbsp;";
		}
		else{
			RadioHTML+="<INPUT type='radio' class='"+Class+"' dataFld='"+FieldName+"' value='"+OptionValue+"' onmouseover=\"SetRadioName('" + GridID + "');\">	"+OptionText+"&nbsp;&nbsp;";
		}
	}
	return RadioHTML;
}

function GetListboxHTML(Col,FieldName){
	var Class=(Col.getAttribute("Class"))?(Col.getAttribute("Class")):("");
	if(Class.length==0)Class="intrinsic__dropdown";
	var Size=(Col.getAttribute("Size"))?(Col.getAttribute("Size")):("1");
	var DropDownHTML="<SELECT dataFld='"+FieldName+"' Size='4' class='"+Class+"'>";
	var DropDownOptions=GetDropDownOptions(Col,FieldName);
	DropDownHTML+=DropDownOptions+"</SELECT>";
	return DropDownHTML;
}

function GetDropDownHTML(Col,FieldName){
	var Class=(Col.getAttribute("Class"))?(Col.getAttribute("Class")):("");
	if(Class.length==0)Class="intrinsic__dropdown";
	var Size=(Col.getAttribute("Size"))?(Col.getAttribute("Size")):("1");
	var DropDownHTML="<SELECT dataFld='"+FieldName+"' Size='"+Size+"' class='"+Class+"'>";
	var DropDownOptions=GetDropDownOptions(Col,FieldName);
	DropDownHTML+=DropDownOptions+"</SELECT>";
	return DropDownHTML;
}

function GetDropDownOptions(Col,FieldName){
	var xmlRecordsetID=Col.getAttribute("ListDataSrc");
	var xmlRecordset=document.all(xmlRecordsetID);
	var UseValueList=(Col.getAttribute("UseValueList"))?(Col.getAttribute("UseValueList")):(0);
	var DropDownOptionsHTML="";
	var ValueList=String(Col.getAttribute("ValueList"));
	var arrValueList=ValueList.split("}");
	var i,ValueListCount=arrValueList.length-1;
	var ValuePair,arrValuePair,OptionValue,OptionText,NewOption;
	for(i=0;i<ValueListCount;i++){
		ValuePair=arrValueList[i].replace("{","");
		arrValuePair=ValuePair.split("|");
		OptionValue=unescape(arrValuePair[0]);
		OptionText=unescape(arrValuePair[1]);
		DropDownOptionsHTML+="<OPTION value='"+OptionValue+"'>"+OptionText+"</OPTION>";
	}
	
	if(UseValueList!=0)
	{
		var dataSrcID=Col.parentNode.parentNode.parentNode.selectSingleNode("//root/xmlRecordsetID").text;
		var dataSrc=document.all(VBReplace(dataSrcID,"#",""));
		if(dataSrc)
		{
			var schemaNode=dataSrc.schemaInfo.selectSingleNode("//root/column[@name = '"+Decode(FieldName)+"']");
			if(!schemaNode)
				return;
			var vl=(schemaNode.getAttribute("vl"))?(schemaNode.getAttribute("vl")):("");
			var dl=(schemaNode.getAttribute("dl"))?(schemaNode.getAttribute("dl")):("");
			if(vl.length==0)
				return;
			var arrValueList=vl.split(vl.substr(0,1));
			var arrDisplayList=dl.split(dl.substr(0,1));
			var i;
			for(i=1;i<arrValueList.length;i++)
			{
				text=(arrDisplayList[i])?(arrDisplayList[i]):(arrValueList[i]);
				value=(arrDisplayList[i])?(arrDisplayList[i]):(arrValueList[i]);
				oOption=document.createElement("OPTION");
				DropDownOptionsHTML+="<OPTION value='"+value+"'>"+text+"</OPTION>";
			}
		}
	}
	if((xmlRecordsetID)&&(xmlRecordset)){
		var rsDisplayField=Col.getAttribute("ListDisplayField");
		var rsDataField=Col.getAttribute("ListDataField");
		if(!xmlRecordsetID)
			return;
		else if(xmlRecordsetID.substr(0,1)=="#")
		xmlRecordsetID=xmlRecordsetID.substr(1);
		var xmlRecordset=document.all(xmlRecordsetID);
		if(!xmlRecordset)
			return;
		if(!rsDataField.length)
			return;
		if(!rsDisplayField.length)
			rsDisplayField=rsDataField;
		rsDisplayField=Encode(rsDisplayField);
		rsDataField=Encode(rsDataField);
		var RecordCount=xmlRecordset.documentElement.childNodes.length;
		for(var i=0;i<RecordCount;i++){
			DropDownOptionsHTML+="<OPTION value='"+xmlRecordset.documentElement.childNodes(i).selectSingleNode(rsDataField).text+"'>"+xmlRecordset.documentElement.childNodes(i).selectSingleNode(rsDisplayField).text+"</OPTION>";
		}
	}
	return DropDownOptionsHTML;
}

function DataGrid_Reload(sParameters,GridID)
{
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","Reload","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var dataSourceID=VBReplace(Grid.tagValues.selectSingleNode("//root/xmlRecordsetID").text,"#","");
	var dataSrc=document.all(dataSourceID);
	if((!dataSrc))
		return;
	if(dataSrc.ActiveCommand.length==0)
		return;
	sParameters=VBTrim(sParameters);
	if(sParameters.length>0)
	{
		var sDelimeter=sParameters.substr(0,1);
		var i,arrParameters=sParameters.split(sDelimeter),arrParamValue;
		var name,value;
		for(i=1;i<arrParameters.length;i++)
		{
			arrParamValue=VBTrim(arrParameters[i]).split("=");
			name=VBTrim(arrParamValue[0]);
			value=VBTrim(arrParamValue[1]);
			if(name.length>0)
				dataSrc.SetParameterValue(name,value);
		}
	}
	dataSrc.ExecuteCMD(dataSrc.ActiveCommand);
	Grid.Refresh();
}

function DataGrid_Refresh(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","Refresh","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","Refresh","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","Refresh","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var iGridVersion=(xmlTagValues.selectNodes("/root/VER").length>0)?xmlTagValues.selectSingleNode("/root/VER").text:0;
	var xmlRecordsetID=(xmlTagValues.selectNodes("//xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//xmlRecordsetID").text):(null);
	var xmlRecordset=document.all(xmlRecordsetID);
	if(!xmlRecordset){
		alertErr(GridID,"Grid","Refresh","Associated Datasource '"+xmlRecordsetID+"' does not exist.");
		return;
	}
	if(Grid.GridTable) {
		var sCurrentDSOID = VBReplace(Grid.GridTable.dataSrc, "#", "");
		xmlDSO_DeRegisterControl(sCurrentDSOID, Grid);
	}	
	xmlDSO_RegisterControl(xmlRecordsetID, Grid);	
	var PageSize=(xmlTagValues.selectNodes("//PageSize").length>0)?(xmlTagValues.selectSingleNode("//PageSize").text):("100");
	if(xmlRecordset){
		if(PageSize=="")PageSize=xmlRecordset.recordset.recordcount;
	}else{
		PageSize=0;
	}
	Grid.SelectedCell = null
	Grid.SelectedRow = null;
	Grid.PageSize=PageSize;
	if(isNaN(parseInt(PageSize))==true)PageSize=100;
	var BorderStyle=(xmlTagValues.selectNodes("//root/Border-Style").length>0)?(xmlTagValues.selectSingleNode("//root/Border-Style").text):("");
	var BorderWidth=(xmlTagValues.selectNodes("//root/Border-Width").length>0)?(xmlTagValues.selectSingleNode("//root/Border-Width").text):("");
	var BackgroundColor=(xmlTagValues.selectNodes("//root/Background-Color").length>0)?(xmlTagValues.selectSingleNode("//root/Background-Color").text):("");
	var EnableNavBar=(xmlTagValues.selectNodes("/root/EnableNavBar").length>0)?(xmlTagValues.selectSingleNode("/root/EnableNavBar").text):(1)
	var bKeyboardNavigation=(xmlTagValues.selectNodes("/root/KeyboardNavigation").length>0)?(xmlTagValues.selectSingleNode("/root/KeyboardNavigation").text):(1);
	Grid.keyboardNavigation=bKeyboardNavigation;
	
	var sSelectedRowClass=(xmlTagValues.selectNodes("/root/SelectedRowClass").length>0)?(xmlTagValues.selectSingleNode("/root/SelectedRowClass").text):("");
	if (sSelectedRowClass == ""){
		sSelectedRowClass = "GridRowSelected"
	}
	Grid.SelectedRowClass = sSelectedRowClass;	
	var GridHTML="";
	GridHTML+="<TABLE border=0 cellpadding=0 cellspacing=0 style='HEIGHT:100%; WIDTH:100%'>"
	GridHTML+="	<TR>";
	GridHTML+="		<TD style='HEIGHT:100%'>";
	GridHTML+="			<DIV id='div__"+GridID+"' style='BACKGROUND-COLOR:"+BackgroundColor+";BORDER-WIDTH:0px; BORDER-STYLE:inset; POSITION:absolute; WIDTH:100%; HEIGHT:100%; OVERFLOW:auto'>";
	var xmlrsid="";
	if(xmlRecordset)xmlrsid=xmlRecordset.id;
	GridHTML+="				<TABLE GridTable=true class='GridTable' id='DataGridTable_"+GridID+"' oncontextmenu='DataGrid_onContextMenu(\"" + GridID + "\");' onclick='DataGrid_onClick(\"" + GridID + "\");' ondblClick='DataGrid_ondblClick(\"" + GridID + "\");' onfocusin='DataGrid_onfocusin(\"" + GridID + "\")' onkeypress='DataGrid_onKeyPress(\"" + GridID + "\");' onreadystatechange='return DataGrid_onReadyStateChange(\"" + GridID + "\")'; DATASRC='#"+xmlrsid+"' DATAPAGESIZE="+PageSize+" BORDER=0 cellpadding='0' cellspacing='0' style='CURSOR:default'>";
	if(xmlTagValues.documentElement.selectNodes("//root/ColSpec/*").length==0)iGridVersion=0;
	switch(iGridVersion){
		case 0:
		case "0":GridHTML+=GetGridHeader(GridID);
			if(xmlRecordset.documentElement.childNodes.length>0)GridHTML+=GetGridBody(GridID);
		break;
		case 1:
		case "1":GridHTML+=GetGridHeader_VER1(GridID);
			if(xmlRecordset.documentElement.childNodes.length>0)GridHTML+=GetGridBody_VER1(GridID);
		break;
	}
	GridHTML+="				</TABLE>";
	GridHTML+="			</DIV>";
	GridHTML+="		</TD>";
	GridHTML+="	</TR>";
	if(EnableNavBar!="0")GridHTML+=GetGridNavBar(GridID);
	GridHTML+="</TABLE>";
	Grid.innerHTML=GridHTML;
	Grid.GridTable=document.all("DataGridTable_"+GridID);
	var RecordCount=xmlRecordset.recordset.recordcount;
	Grid.PageCount=((RecordCount%Grid.PageSize)==0)?(parseInt((RecordCount/ Grid.PageSize))):(parseInt((RecordCount/ Grid.PageSize))+1);
	Grid.PageNumber=1;
	Grid.SetPagingState();
}

function GetGridNavBar(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","GetGridNavBar","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","GetGridNavBar","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","GetGridNavBar","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var sNavTableClass = (xmlTagValues.selectNodes("/root/NavTableClass").length>0)?(xmlTagValues.selectSingleNode("/root/NavTableClass").text):("");
	var MoveFirstImage=(xmlTagValues.selectNodes("//MoveFirstImage").length>0)?(xmlTagValues.selectSingleNode("//MoveFirstImage").text):("");
	var MovePreviousImage=(xmlTagValues.selectNodes("//MovePreviousImage").length>0)?(xmlTagValues.selectSingleNode("//MovePreviousImage").text):("");
	var MoveNextImage=(xmlTagValues.selectNodes("//MoveNextImage").length>0)?(xmlTagValues.selectSingleNode("//MoveNextImage").text):("");
	var MoveLastImage=(xmlTagValues.selectNodes("//MoveLastImage").length>0)?(xmlTagValues.selectSingleNode("//MoveLastImage").text):("");
	var MoveFirstCaption=(xmlTagValues.selectNodes("//MoveFirstCaption").length>0)?(xmlTagValues.selectSingleNode("//MoveFirstCaption").text):("First");
	var MovePreviousCaption=(xmlTagValues.selectNodes("//MovePreviousCaption").length>0)?(xmlTagValues.selectSingleNode("//MovePreviousCaption").text):("Previous");
	var MoveNextCaption=(xmlTagValues.selectNodes("//MoveNextCaption").length>0)?(xmlTagValues.selectSingleNode("//MoveNextCaption").text):("Next");
	var MoveLastCaption=(xmlTagValues.selectNodes("//MoveLastCaption").length>0)?(xmlTagValues.selectSingleNode("//MoveLastCaption").text):("Last");
	var MoveFirstImageHTML=(MoveFirstImage.length>0)?("<IMG src='"+MoveFirstImage+"'>"):("");
	var MovePreviousImageHTML=(MovePreviousImage.length>0)?("<IMG src='"+MovePreviousImage+"'>"):("");
	var MoveNextImageHTML=(MoveNextImage.length>0)?("<IMG src='"+MoveNextImage+"'>"):("");
	var MoveLastImageHTML=(MoveLastImage.length>0)?("<IMG src='"+MoveLastImage+"'>"):("");
	var MoveFirstClass=(xmlTagValues.selectNodes("//MoveFirstClass").length>0)?(xmlTagValues.selectSingleNode("//MoveFirstClass").text):("DataGrid__btnMoveFirst");
	var MovePreviousClass=(xmlTagValues.selectNodes("//MovePreviousClass").length>0)?(xmlTagValues.selectSingleNode("//MovePreviousClass").text):("DataGrid__btnMovePrevious");
	var MoveNextClass=(xmlTagValues.selectNodes("//MoveNextClass").length>0)?(xmlTagValues.selectSingleNode("//MoveNextClass").text):("DataGrid__btnMoveNext");
	var MoveLastClass=(xmlTagValues.selectNodes("//MoveLastClass").length>0)?(xmlTagValues.selectSingleNode("//MoveLastClass").text):("DataGrid__btnMovelast");
	var NavBarImageStyle=(xmlTagValues.selectNodes("//NavBarImageStyle").length>0)?(xmlTagValues.selectSingleNode("//NavBarImageStyle").text):("left");
	var MoveFirstBR=(MoveFirstCaption.length>0)?("<BR>"):("");
	var MovePreviousBR=(MovePreviousCaption.length>0)?("<BR>"):("");
	var MoveNextImageBR=(MoveNextCaption.length>0)?("<BR>"):("");
	var MoveLastImageBR=(MoveLastCaption.length>0)?("<BR>"):("");
	NavBarImageStyle="temp";
	switch(NavBarImageStyle){
		case "left":
			var MoveFirstHTML=MoveFirstImageHTML+MoveFirstCaption;
			var MovePreviousHTML=MovePreviousImageHTML+MovePreviousCaption;
			var MoveNextHTML=MoveNextImageHTML+MoveNextCaption;
			var MoveLastHTML=MoveLastImageHTML+MoveLastCaption;
		break
		case "right":
			var MoveFirstHTML=MoveFirstCaption+MoveFirstImageHTML;
			var MovePreviousHTML=MovePreviousCaption+MovePreviousImageHTML;
			var MoveNextHTML=MoveNextCaption+MoveNextImageHTML;
			var MoveLastHTML=MoveLastCaption+MoveLastImageHTML;
		break
		case "top":
			var MoveFirstHTML=MoveFirstImageHTML+MoveFirstBR+MoveFirstCaption;
			var MovePreviousHTML=MovePreviousImageHTML+MovePreviousBR+MovePreviousCaption;
			var MoveNextHTML=MoveNextImageHTML+MoveNextBR+MoveNextCaption;
			var MoveLastHTML=MoveLastImageHTML+MoveLastBR+MoveLastCaption;
		break
		case "bottom":
			var MoveFirstHTML=MoveFirstCaption+MoveFirstBR+MoveFirstImageHTML;
			var MovePreviousHTML=MovePreviousCaption+MovePreviousBR+MovePreviousImageHTML;
			var MoveNextHTML=MoveNextCaption+MoveNextBR+MoveNextImageHTML;
			var MoveLastHTML=MoveLastCaption+MoveLastBR+MoveLastImageHTML;
		break
		case "temp":
			var MoveFirstHTML=MoveFirstImageHTML+MoveFirstCaption;
			var MovePreviousHTML=MovePreviousImageHTML+MovePreviousCaption;
			var MoveNextHTML=MoveNextCaption+MoveNextImageHTML;
			var MoveLastHTML=MoveLastCaption+MoveLastImageHTML;
		break
	}	
	var GetGridNavBarHTML="<TR>";
	GetGridNavBarHTML+="	<TD align=right>";
	GetGridNavBarHTML+="		<TABLE aclass='"+ sNavTableClass +"' cellpadding='0' cellspacing='0'>";
	GetGridNavBarHTML+="			<TR>";
	GetGridNavBarHTML+="				<TD><BUTTON id='btnMoveFirstPage_"+GridID+"' class='"+MoveFirstClass+"' onclick=\"DataGrid_MoveFirstPage('" + GridID + "');\">"+MoveFirstHTML+"</BUTTON></TD>";
	GetGridNavBarHTML+="				<TD><BUTTON id='btnMovePreviousPage_"+GridID+"' class='"+MovePreviousClass+"' onclick=\"DataGrid_MovePreviousPage('" + GridID + "');\">"+MovePreviousHTML+"</BUTTON></TD>";
	GetGridNavBarHTML+="				<TD><BUTTON id='btnMoveNextPage_"+GridID+"' class='"+MoveNextClass+"' onclick=\"DataGrid_MoveNextPage('" + GridID + "');\">"+MoveNextHTML+"</BUTTON></TD>";
	GetGridNavBarHTML+="				<TD><BUTTON id='btnMoveLastPage_"+GridID+"' class='"+MoveLastClass+"' onclick=\"DataGrid_MoveLastPage('" + GridID + "');\">"+MoveLastHTML+"</BUTTON></TD>";
	GetGridNavBarHTML+="			</TR>";
	GetGridNavBarHTML+="		</TABLE>";
	GetGridNavBarHTML+="	</TD>";
	GetGridNavBarHTML+="</TR>";
	return GetGridNavBarHTML;
}

function SetRadioName(GridID){
	var Grid=document.all(GridID);
	if(!Grid)return;
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues)return;
	var iGridVersion=(xmlTagValues.selectNodes("/root/VER").length>0)?xmlTagValues.selectSingleNode("/root/VER").text:0;
	var ParentTD=window.event.srcElement.parentElement;
	if(ParentTD.HasName)return;
	var ParentRow=ParentTD.parentElement;
	var RowIndex=ParentRow.rowIndex;
	var FieldName=ParentTD.FieldName;
	var ColSpec=xmlTagValues.documentElement.selectSingleNode("//ColSpec");
	if(iGridVersion==0)
	{
		Col=(ColSpec.selectNodes("//"+FieldName).length>0)?(ColSpec.selectSingleNode("//"+FieldName)):(null);
	}
	else
	{
		Col=(xmlTagValues.selectNodes("//ColSpec/Column[@dataFld = '"+FieldName+"']").length>0)?(xmlTagValues.selectSingleNode("//ColSpec/Column[@dataFld = '"+FieldName+"']")):(null);
	}
	var RadioHTML="";
	var ValueList=Col.getAttribute("ValueList");
	var arrValueList=ValueList.split("}");
	var i,ValueListCount=arrValueList.length-1;
	var ValuePair,arrValuePair,OptionValue,OptionText,NewOption;
	for(i=0;i<ValueListCount;i++){
		ValuePair=arrValueList[i].replace("{","");
		arrValuePair=ValuePair.split("|");
		OptionValue=unescape(arrValuePair[0]);
		OptionText=unescape(arrValuePair[1]);
		if(OptionText.substring(0,1)=="-"){
			RadioHTML+=OptionText.substring(1,OptionText.length)+"	<INPUT type='radio' dataFld='"+FieldName+"' name='"+RowIndex+"' value='"+OptionValue+"'>&nbsp;&nbsp;";
		}
		else{
			RadioHTML+="<INPUT type='radio' dataFld='"+FieldName+"' value='"+OptionValue+"' name='"+RowIndex+"'>	"+OptionText+"&nbsp;&nbsp;";
		}
	}
	ParentTD.innerHTML=RadioHTML+"&nbsp;";
	ParentTD.HasName=true;
}

function DataGrid_ShowCalendar(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","ShowCalendar","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","ShowCalendar","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","ShowCalendar","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	event.srcElement.parentElement.parentElement.parentElement.parentElement.click();
	var xmlRecordsetID=(xmlTagValues.selectNodes("//root/xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//xmlRecordsetID").text):(null);
	if(!xmlRecordsetID)return;
	xmlRecordsetID=VBReplace(xmlRecordsetID,"#","");
	var oDSO=document.all(xmlRecordsetID);
	var Calendar=window.event.srcElement.parentElement.parentElement.children(0).children(0);
	var ColumnName=Calendar.dataFld;
	if(!Calendar)return;
	var ColSpec=(xmlTagValues.selectNodes("//ColSpec/Column[@dataFld='"+ColumnName+"']").length>0)?(xmlTagValues.selectSingleNode("//ColSpec/Column[@dataFld='"+ColumnName+"']")):(null);
	var RawDate=Calendar.value;
	var FormatType=(ColSpec)?(ColSpec.getAttribute("Format")):("yyyy/Mmm/dd");
	var MinDate="";
	var MaxDate="";
	var ActionURL="htmlcontrols/calendar/calendar.htm";
	var xmlCalendar="<root>\n";
	xmlCalendar+="	<RawDate>"+RawDate+"</RawDate>\n";
	xmlCalendar+="	<DateFormat>"+FormatType+"</DateFormat>\n";
	xmlCalendar+="	<MinDate>"+MinDate+"</MinDate>\n";
	xmlCalendar+="	<MaxDate>"+MaxDate+"</MaxDate>\n";
	xmlCalendar+="</root>";
	var hwndCalendar=window.showModalDialog(ActionURL,xmlCalendar,"Toolbar:NO; Status:NO; resizable:No; center:yes; dialogHeight:248px; dialogWidth:255px; help:NO;");
	if(hwndCalendar==null)return;
	var xmlDate=new ActiveXObject("Microsoft.XMLDOM");
	xmlDate.async=false;
	xmlDate.loadXML(hwndCalendar);
	var sDate=(xmlDate.selectNodes("//root/formated").length>0)?(xmlDate.selectSingleNode("//root/formated").text):("");
	oDSO.recordset(ColumnName).value=sDate;
}

function Grid_onContextMenu(GridID) {
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onContextMenu","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","onContextMenu","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","onContextMenu","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var oncontextmenu=(xmlTagValues.selectNodes("//root/oncontextmenu").length>0)?(xmlTagValues.selectSingleNode("//root/oncontextmenu").text):("");
	try{
		if(oncontextmenu!=""){
			debugWrite(GridID+".oncontextmenu",new Array(document.all(GridID).HTMLControlID,"oncontextmenu"),"callstack");
			eval(oncontextmenu);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onContextMenu",err.description);
		return;
	}
}

function DataGrid_CellClick(GridID) {
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","CellClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	if(event.srcElement == Grid.GridTable) return;
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","CellClick","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","CellClick","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var iCellIndex = DataGrid_GetCellIndex(GridID);	
	var SelectionMode=(xmlTagValues.selectNodes("//root/SelectionMode").length>0)?(xmlTagValues.selectSingleNode("//root/SelectionMode").text):("1");
	DataGrid_ResetLastSelectedCell(GridID);
	var GridCell="";
	var GridCell=event.srcElement;	
	while(GridCell) {
		if(GridCell.tagName=="BODY")
			break;
		if((GridCell.GridRow)||(GridCell.GridTable))
			break;
		if((GridCell.tagName=="TD")&&(GridCell.GridCell)) {
			if(GridCell){
				switch(SelectionMode.toString()) {
					case "0":		
						Grid.SelectedCell=GridCell;
						Grid.SelectedCell.className="GridCellSelected";
					break;										
				}
				break;
			}		
		}
		if(GridCell.isMargin == "1") {						
			if (SelectionMode == "0") {
				Grid.SelectedCell = null;
			}
			switch (GridCell.children(0).children(0).dataFld) {
				case "xmlDSO__Status": 
					var sField = "Status";
				break;	
				
				case "xmlDSO__Selected": 
					var sField = "CheckList";
				break;	
			
				case "xmlDSO__RecordNo": 
				case "RecordNo": 
					var sField = "RecordNo";
				break;					
			} 
			
			event.srcElement.marginType = sField;
			DataGrid_MarginClick(GridID);		
			event.srcElement.removeAttribute("marginType", 2);
		}
		if(GridCell.isRowNumberColHeader) DataGrid_RowNumberColHeaderClick(GridID);
		if(GridCell.isCheckListColHeader) DataGrid_CheckListColHeaderClick(GridID);
		if(GridCell.isStatusColHeader) DataGrid_StatusColHeaderClick(GridID);
		if(GridCell.isDataColHeader) {
			var iGridVersion=(xmlTagValues.selectNodes("/root/VER").length>0)?xmlTagValues.selectSingleNode("/root/VER").text:0;
			switch(iGridVersion){
				case 0:
				case "0":
					DataGrid_DataColHeaderClick(GridID);
				break;
				
				case 1:
				case "1":
					DataGrid_DataColHeaderClick_VER1(GridID);
				break;
			}
		}
		if(GridCell.isCheckListInput) DataGrid__SelectRow(GridID);
		GridCell=GridCell.parentElement;
	}
	
	var oElement = event.srcElement;
	var oRow;
	while(oElement) {
		if(oElement == Grid.GridTable) {
			break;
		}		
		if((oElement.tagName == "TR")&&((oElement.GridRow == "true")||(oElement.parentElement.tagName == "THEAD"))) {
			oRow = oElement;
			break;
		}
		oElement = oElement.parentElement;
	}
	event.srcElement.parentRow = oRow;
	var onCellClick=(xmlTagValues.selectNodes("//root/onCellClick").length>0)?(xmlTagValues.selectSingleNode("//root/onCellClick").text):("");
	try{
		if(onCellClick!=""){
			debugWrite(GridID+".onCellClick",new Array(document.all(GridID).HTMLControlID,"onCellClick"),"callstack");
			eval(onCellClick);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","CellClick",err.description);
		event.srcElement.parentRow = null;
		return;
	}
	event.srcElement.removeAttribute("parentRow", 2);
}

function DataGrid_RowClick(sGridID) {
	if(!event.srcElement.recordNumber)
		return false;
	var oGrid = document.all(sGridID);	
	if(!oGrid){
		alertErr(sGridID,"Grid","RowClick","Invalid Grid ID:'"+sGridID+"' specified.");
		return false;
	}		
	if(oGrid.GridTable.readyState != "complete") return;
	
	
	var xmlTagValues = oGrid.tagValues;
	var xmlRecordsetID = (xmlTagValues.selectNodes("//xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//xmlRecordsetID").text):(null);
	
	var xmlRecordset = document.all(xmlRecordsetID);	
	if(!xmlRecordset) {
		return false;
	}
	var oElement = event.srcElement;
	var oRow;
	while(oElement.parentElement) {
		if((oElement.tagName == "TR")&&(oElement.GridRow == "true")) {
			oRow = oElement;
			break;
		}
		oElement = oElement.parentElement;
	}		
	if((xmlRecordset.recordset.absolutePosition != event.srcElement.recordNumber)||(oGrid.SelectedRow != oRow)) {		
		xmlRecordset.recordset.absolutePosition = event.srcElement.recordNumber;
	}	
	return true;
}

function DataGrid_DataColHeaderClick(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","DataColHeaderClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","DataColHeaderClick","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","DataColHeaderClick","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var fieldName=(event.srcElement.fieldName)?(event.srcElement.fieldName):("");
	if(fieldName.length>0)
	{
		var colSpec=(Grid.tagValues.selectNodes("//root/ColSpec/"+fieldName).length>0)?(Grid.tagValues.selectSingleNode("//root/ColSpec/"+fieldName)):(null);
		if(colSpec)
		{
			var AllowSort=(colSpec.getAttribute("AllowSort"))?(colSpec.getAttribute("AllowSort")):(0);
			if(AllowSort!=0)
			{
				var dataSrcID=VBReplace(Grid.GridTable.dataSrc,"#","");
				var dataSrc=document.all(dataSrcID);
				if(dataSrc)
				{
					if(dataSrc.schemaInfo != null) {
						var columnInfo=(dataSrc.schemaInfo.selectNodes("//root/column[@name = '"+fieldName+"']").length>0)?(dataSrc.schemaInfo.selectSingleNode("//root/column[@name = '"+fieldName+"']")):(null);
						if(columnInfo)
						{
							var sortOrder=columnInfo.getAttribute("sort");
							dataSrc.SortByColumn(sortOrder+fieldName,"");
							columnInfo.setAttribute("sort",(sortOrder=="")?("-"):(""));
						}
					}
				}
			}
		}
	}
	var onDataColClick=(xmlTagValues.selectNodes("//root/onDataColClick").length>0)?(xmlTagValues.selectSingleNode("//root/onDataColClick").text):("");
	try{
		if(onDataColClick!=""){
			debugWrite(GridID+".onDataColClick",new Array(document.all(GridID).HTMLControlID,"onDataColClick"),"callstack");
			eval(onDataColClick);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","DataColHeaderClick",err.description);
		return;
	}
}

function DataGrid_DataColHeaderClick_VER1(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","DataColHeaderClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","DataColHeaderClick","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","DataColHeaderClick","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var fieldName=(event.srcElement.fieldName)?(event.srcElement.fieldName):("");
	if(fieldName.length>0)
	{
		var colSpec=(Grid.tagValues.selectNodes("//root/ColSpec/Column[@dataFld='"+fieldName+"']").length>0)?(Grid.tagValues.selectSingleNode("//root/ColSpec/Column[@dataFld='"+fieldName+"']")):(null);
		if(colSpec)
		{
			var AllowSort=(colSpec.getAttribute("AllowSort"))?(colSpec.getAttribute("AllowSort")):(0);
			if(AllowSort!=0)
			{
				var dataSrcID=VBReplace(Grid.GridTable.dataSrc,"#","");
				var dataSrc=document.all(dataSrcID);
				if(dataSrc)
				{
					if(dataSrc.schemaInfo != null) {
						var columnInfo=(dataSrc.schemaInfo.selectNodes("//root/column[@name = '"+fieldName+"']").length>0)?(dataSrc.schemaInfo.selectSingleNode("//root/column[@name = '"+fieldName+"']")):(null);
						if(columnInfo)
						{
							var sortOrder=columnInfo.getAttribute("sort");
							dataSrc.SortByColumn(sortOrder+fieldName,"");
							columnInfo.setAttribute("sort",(sortOrder=="")?("-"):(""));
							var AlwaysShowColHeaders=(xmlTagValues.selectNodes("/root/AlwaysShowColHeaders").length>0)?(xmlTagValues.selectSingleNode("/root/AlwaysShowColHeaders").text):(0);

							var oImage = document.getElementById(GridID + "_SortImage");
							if (!oImage) {
								oImage = document.createElement("IMG");
								oImage.id = GridID + "_SortImage"
							}
							event.srcElement.appendChild(oImage);

							if ((AlwaysShowColHeaders == 1) || (AlwaysShowColHeaders == "1")) {

								var oImage2 = document.getElementById(GridID + "_SortImage2");
								if (!oImage2) {
									oImage2 = document.createElement("IMG");
									oImage2.id = GridID + "_SortImage2"
								}
								event.srcElement.parentElement.appendChild(oImage2);
							
							}
							
							if (columnInfo.getAttribute("sort")=="") {
								oImage.src= "htmlcontrols/datagrid/downarrow.gif"
								if ((AlwaysShowColHeaders == 1) || (AlwaysShowColHeaders == "1")) {
									oImage2.src= "htmlcontrols/datagrid/downarrow.gif"
								}							
							} else {
								oImage.src= "htmlcontrols/datagrid/uparrow.gif"			
								if ((AlwaysShowColHeaders == 1) || (AlwaysShowColHeaders == "1")) {
									oImage2.src= "htmlcontrols/datagrid/uparrow.gif"
								}
							}
						}
					}
				}
			}
		}
	}
	var onDataColClick=(xmlTagValues.selectNodes("//root/onDataColClick").length>0)?(xmlTagValues.selectSingleNode("//root/onDataColClick").text):("");
	try{
		if(onDataColClick!=""){
			debugWrite(GridID+".onDataColClick",new Array(document.all(GridID).HTMLControlID,"onDataColClick"),"callstack");
			eval(onDataColClick);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","DataColHeaderClick",err.description);
		return;
	}
}

function DataGrid_StatusColHeaderClick(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","StatusColHeaderClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","StatusColHeaderClick","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","StatusColHeaderClick","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onStatusColClick=(xmlTagValues.selectNodes("//onStatusColClick").length>0)?(xmlTagValues.selectSingleNode("//onStatusColClick").text):("");
	try{
		if(onStatusColClick!=""){
			debugWrite(GridID+".onStatusColClick",new Array(document.all(GridID).HTMLControlID,"onStatusColClick"),"callstack");
			eval(onStatusColClick);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","StatusColHeaderClick",err.description);
		return;
	}
}

function DataGrid_CheckListColHeaderClick(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","CheckListColHeaderClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","CheckListColHeaderClick","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","CheckListColHeaderClick","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onCheckListColClick=(xmlTagValues.selectNodes("//onCheckListColClick").length>0)?(xmlTagValues.selectSingleNode("//onCheckListColClick").text):("");
	try{
		if(onCheckListColClick!=""){
			debugWrite(GridID+".onCheckListColClick",new Array(document.all(GridID).HTMLControlID,"onCheckListColClick"),"callstack");
			eval(onCheckListColClick);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","CheckListColHeaderClick",err.description);
		return;
	}
}

function DataGrid_MarginClick(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","MarginClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","MarginClick","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","MarginClick","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onMarginClick=(xmlTagValues.selectNodes("//onMarginClick").length>0)?(xmlTagValues.selectSingleNode("//onMarginClick").text):("");
	try{
		if(onMarginClick!=""){
			debugWrite(GridID+".onMarginClick",new Array(document.all(GridID).HTMLControlID,"onMarginClick"),"callstack");
			eval(onMarginClick);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","MarginClick",err.description);
		return;
	}	
}

function DataGrid_RowNumberColHeaderClick(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","RowNumberColHeaderClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","RowNumberColHeaderClick","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","RowNumberColHeaderClick","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onRowNumberColClick=(xmlTagValues.selectNodes("//onRowNumberColClick").length>0)?(xmlTagValues.selectSingleNode("//onRowNumberColClick").text):("");
	try{
		if(onRowNumberColClick!=""){
			debugWrite(GridID+".onRowNumberColClick",new Array(document.all(GridID).HTMLControlID,"onRowNumberColClick"),"callstack");
			eval(onRowNumberColClick);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","RowNumberColHeaderClick",err.description);
		return;
	}
}

function DataGrid_dblClick(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","dblClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","dblClick","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","dblClick","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onDblClick=(xmlTagValues.selectNodes("//root/onDblClick").length>0)?(xmlTagValues.selectSingleNode("//root/onDblClick").text):("");
	try{
		if(onDblClick!=""){
			debugWrite(GridID+".onDblClick",new Array(document.all(GridID).HTMLControlID,"onDblClick"),"callstack");
			eval(onDblClick);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","dblClick","Script Error: "+err.description);
	}
}

function DataGrid__SelectRow(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","SelectRow","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","SelectRow","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","SelectRow","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	if(window.event.srcElement.checked){
		Grid.returnFalse=false;
		var onRowSelect=(xmlTagValues.documentElement.selectNodes("//onRowSelect").length>0)?(xmlTagValues.documentElement.selectSingleNode("//onRowSelect").text):("");
		try{
			if(onRowSelect!=""){
				debugWrite(GridID+".onRowSelect",new Array(document.all(GridID).HTMLControlID,"onRowSelect"),"callstack");
				eval(onRowSelect);
			}
		}
		catch(err){
			alertErr(GridID,"Grid","SelectRow",err.description);
		}
		if(Grid.returnFalse)window.event.srcElement.checked=false;
	}
	else{
		Grid.returnFalse=false;
		var onRowDeSelect=(xmlTagValues.documentElement.selectNodes("//onRowDeSelect").length>0)?(xmlTagValues.documentElement.selectSingleNode("//onRowDeSelect").text):("");
		try{
			if(onRowDeSelect!=""){
				debugWrite(GridID+".onRowDeSelect",new Array(document.all(GridID).HTMLControlID,"onRowDeSelect"),"callstack");
				eval(onRowDeSelect);
			}
		}
		catch(err){
			alertErr(GridID,"Grid","SelectRow",err.description);
		}
		if(Grid.returnFalse)window.event.srcElement.checked=true;
	}
}

function DataGrid_onKeyPress(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onKeyPress","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	Grid.RowClick(GridID);
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","onKeyPress","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","onKeyPress","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onkeypress=(xmlTagValues.documentElement.selectNodes("//root/onkeypress").length>0)?(xmlTagValues.documentElement.selectSingleNode("//root/onkeypress").text):("");
	Grid.returnFalse=false;
	try{
		if(onkeypress!=""){
			debugWrite(GridID+".onkeypress",new Array(document.all(GridID).HTMLControlID,"onkeypress"),"callstack");
			eval(onkeypress);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onKeyPress","Script Error: "+err.description);
	}
}

function DataGrid_ondblClick(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","ondblClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	Grid.RowClick(GridID);
	Grid.dblClick(GridID);
}

function DataGrid_onClick(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onClick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	Grid.RowClick(GridID);
	Grid.CellClick(GridID);
}

function DataGrid_onContextMenu(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onContextMenu","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	Grid.RowClick(GridID);
	Grid.CellClick(GridID);
	Grid.onContextMenu(GridID);
}

function DataGrid_PageChange(DataGridID){
	var DataGrid=document.all(DataGridID);
	if(!DataGrid){
		alertErr(GridID,"Grid","PageChange","Invalid DataGrid ID:'"+DataGridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(DataGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","PageChange","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","PageChange","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onPageChange=(xmlTagValues.documentElement.selectNodes("//root/onPageChange").length>0)?(xmlTagValues.documentElement.selectSingleNode("//root/onPageChange").text):("");
	DataGrid.returnFalse=false;
	try{
		if(onPageChange!=""){
		debugWrite(DataGridID+".onPageChange",new Array(document.all(DataGridID).HTMLControlID,"onPageChange"),"callstack");
		eval(onPageChange);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","PageChange","Script Error: "+err.description);
	}
}

function DataGrid_MoveFirst(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","MoveFirst","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","MoveFirst","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","MoveFirst","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var xmlRecordsetID=(xmlTagValues.selectNodes("//xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//xmlRecordsetID").text):(null);
	var xmlRecordset=document.all(xmlRecordsetID);
	if(!xmlRecordset)return;
	if(!Grid.GridTable.rows(1))return;
	xmlRecordset.recordset.absolutePosition = Grid.GridTable.rows(1).recordNumber;
}

function DataGrid_MoveFirstPage(DataGridID){
	var DataGrid=document.all(DataGridID);
	if(!DataGrid){
		alertErr(DataGridID,"DataGrid","MoveFirstPage","Invalid DataGrid ID:'"+DataGridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(DataGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(DataGridID,"DataGrid","MoveFirstPage","Invalid TagValue ID:'"+Treeview.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DataGridID,"DataGrid","MoveFirstPage","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var DataGridTable=document.all("DataGridTable_"+DataGridID);
	if(!DataGridTable){
		alertErr(GridID,"Grid","MoveFirstPage","Invalid Grid ID:'"+DataGridID+"' specified.");
		return;
	}
	DataGrid.cancelEvent=false;
	DataGrid.PageChange();
	var onPageFirst=(xmlTagValues.selectNodes("//root/onPageFirst").length>0)?(xmlTagValues.selectSingleNode("//root/onPageFirst").text):("");
	try{
		if(onPageFirst!=""){
			debugWrite(DataGridID+".onPageFirst",new Array(document.all(DataGridID).HTMLControlID,"onPageFirst"),"callstack");
			eval(onPageFirst)
		}
	}
	catch(err){
		alertErr(DataGridID,"DataGrid","MoveFirstPage","onPageFirst script error.\n "+onPageFirst);
	}
	if(DataGrid.cancelEvent)return;
	DataGrid_ResetLastSelection(DataGridID);
	DataGridTable.firstPage();
	DataGrid.PageNumber=1;
	DataGrid.SetPagingState();
}

function DataGrid_MovePreviousPage(DataGridID){
	var DataGrid=document.all(DataGridID);
	if(!DataGrid){
		alertErr(DataGridID,"DataGrid","MovePreviousPage","Invalid DataGrid ID:'"+DataGridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(DataGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(DataGridID,"DataGrid","MovePreviousPage","Invalid TagValue ID:'"+Treeview.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DataGridID,"DataGrid","MovePreviousPage","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var DataGridTable=document.all("DataGridTable_"+DataGridID);
	if(!DataGridTable){
		alertErr(GridID,"Grid","MovePreviousPage","Invalid Grid ID:'"+DataGridID+"' specified.");
		return;
	}
	DataGrid.cancelEvent=false;
	DataGrid.PageChange();
	var onPagePrevious=(xmlTagValues.selectNodes("//root/onPagePrevious").length>0)?(xmlTagValues.selectSingleNode("//root/onPagePrevious").text):("");
	try{
		if(onPagePrevious!=""){
			debugWrite(DataGridID+".onPagePrevious",new Array(document.all(DataGridID).HTMLControlID,"onPagePrevious"),"callstack");
			eval(onPagePrevious)
		}
	}
	catch(err){
		alertErr(DataGridID,"DataGrid","MovePreviousPage","onPagePrevious script error.\n "+onPagePrevious);
	}
	if(DataGrid.cancelEvent)return;
	DataGrid_ResetLastSelection(DataGridID);
	DataGridTable.previousPage();
	DataGrid.PageNumber=parseInt(DataGrid.PageNumber)-1;
	DataGrid.SetPagingState();
}

function DataGrid_MoveNextPage(DataGridID){
	var DataGrid=document.all(DataGridID);
	if(!DataGrid){
		alertErr(DataGridID,"DataGrid","MoveNextPage","Invalid DataGrid ID:'"+DataGridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(DataGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(DataGridID,"DataGrid","MoveNextPage","Invalid TagValue ID:'"+Treeview.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DataGridID,"DataGrid","MoveNextPage","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var DataGridTable=document.all("DataGridTable_"+DataGridID);
	if(!DataGridTable){
		alertErr(GridID,"Grid","MoveNextPage","Invalid Grid ID:'"+DataGridID+"' specified.");
		return;
	}
	DataGrid.cancelEvent=false;
	DataGrid.PageChange();
	var onPageForward=(xmlTagValues.selectNodes("//root/onPageForward").length>0)?(xmlTagValues.selectSingleNode("//root/onPageForward").text):("");
	try{
		if(onPageForward!=""){
			debugWrite(DataGridID+".onPageForward",new Array(document.all(DataGridID).HTMLControlID,"onPageForward"),"callstack");
			eval(onPageForward)
		}
	}
	catch(err){
		alertErr(DataGridID,"DataGrid","MoveNextPage","onPageForward script error.\n "+onPageForward);
	}
	if(DataGrid.cancelEvent)return;
	DataGrid_ResetLastSelection(DataGridID);
	DataGrid.GridTable.nextPage();
	DataGrid.PageNumber=parseInt(DataGrid.PageNumber)+1;
	DataGrid.SetPagingState();
}

function DataGrid_MoveLastPage(DataGridID){
	var DataGrid=document.all(DataGridID);
	if(!DataGrid){
		alertErr(DataGridID,"DataGrid","MoveLastPage","Invalid DataGrid ID:'"+DataGridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(DataGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(DataGridID,"DataGrid","MoveLastPage","Invalid TagValue ID:'"+Treeview.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DataGridID,"DataGrid","MoveLastPage","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var DataGridTable=document.all("DataGridTable_"+DataGridID);
	if(!DataGridTable){
		alertErr(GridID,"Grid","MoveNextPage","Invalid Grid ID:'"+DataGridID+"' specified.");
		return;
	}
	DataGrid.cancelEvent=false;
	DataGrid.PageChange();
	var onPageLast=(xmlTagValues.selectNodes("//root/onPageLast").length>0)?(xmlTagValues.selectSingleNode("//root/onPageLast").text):("");
	try{
		if(onPageLast!=""){
			debugWrite(DataGridID+".onPageLast",new Array(document.all(DataGridID).HTMLControlID,"onPageLast"),"callstack");
			eval(onPageLast)
		}
	}
	catch(err){
		alertErr(DataGridID,"DataGrid","MoveLastPage","onPageLast script error.\n "+onPageLast);
	}
	if(DataGrid.cancelEvent)return;
	DataGrid_ResetLastSelection(DataGridID);
	DataGridTable.lastPage();
	DataGrid.PageNumber=DataGrid.PageCount;
	DataGrid.SetPagingState();
}

function DataGrid_MoveToPage(PageNumber, DataGridID){ //Move to specified page in the GridTable
	
	var oDataGrid=document.all(DataGridID);
	if(!oDataGrid){
		alertErr(DataGridID,"DataGrid","MoveLastPage","Invalid DataGrid ID:'"+DataGridID+"' specified.");
		return;
	}
	//Validates that the parameter passed in is numeric
	if(isNaN(PageNumber)){
		alertErr(DataGridID,"DataGrid","MoveToPage","Not a valid page number.");
		return;	
	}
	//Validates that the parameter passed in is is within the available range
	if (oDataGrid.PageCount < parseInt(PageNumber) || parseInt(PageNumber) < 1){
		alertErr(DataGridID,"DataGrid","MoveToPage","Requested Page is out of range.");
		return;
	}
	
	DataGrid_ResetLastSelection(DataGridID);
	if (parseInt(PageNumber) == 1){//Page specified = 1
		oDataGrid.GridTable.firstPage();
		oDataGrid.PageNumber=1;
	} else if (parseInt(PageNumber) == oDataGrid.PageCount){//Page specified = Last Page
		oDataGrid.GridTable.lastPage();
		oDataGrid.PageNumber=oDataGrid.PageCount;
	} else {//All other pages
		oDataGrid.GridTable.firstPage();//Go to first page
		for(var i=2; i <= PageNumber; i++){
			oDataGrid.GridTable.nextPage();//Move till next page until the specified page is reached.
		}
		oDataGrid.PageNumber=PageNumber;
	}
	DataGrid.SetPagingState();
}

function DataGrid_ResetGrid(GridID){
	DataGrid_ResetLastSelection(GridID);
	DataGrid_ResetRowNumberCol(GridID);
}

function DataGrid_ResetLastSelectedRow(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		return;
	}	
	if(Grid.SelectedRow) {
		Grid.SelectedRow.className = Grid.SelectedRow.lastSelectedClassName;		
	}
}

function DataGrid_ResetLastSelectedCell(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		return;
	}
	if(Grid.SelectedCell)Grid.SelectedCell.className="GridCell";	
}

function DataGrid_ResetLastSelection(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		return;
	}
	if(Grid.SelectedRow)Grid.SelectedRow.className=Grid.SelectedRow.lastSelectedClassName;
	if(Grid.SelectedCell)Grid.SelectedCell.className="";
}

function DataGrid_SetPagingState(GridID){
	var Grid=document.all(GridID);
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","SetPagingState","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","SetPagingState","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var EnableNavBar=(xmlTagValues.selectNodes("//EnableNavBar").length>0)?(xmlTagValues.selectSingleNode("//EnableNavBar").text):(0);
	if(EnableNavBar==0)return;
	var PageNumber=Grid.PageNumber;
	Grid.EOF=(PageNumber==Grid.PageCount)?(true):(true);
	Grid.BOF=(PageNumber==1)?(true):(true);
}

function DataGrid_onbeforeupdate(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onbeforeupdate","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	Grid.RowClick();
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","onbeforeupdate","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","onbeforeupdate","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	Grid.returnFalse=false;
	var onbeforeupdate=(xmlTagValues.selectNodes("//onBeforeUpdate").length>0)?(xmlTagValues.selectSingleNode("//onBeforeUpdate").text):("");
	try{
		if(onbeforeupdate!=""){
			debugWrite(GridID+".onBeforeUpdate",new Array(document.all(GridID).HTMLControlID,"onBeforeUpdate"),"callstack");
			eval(onbeforeupdate);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onbeforeupdate","Script Error: "+err.description);
		return;
	}
	if(Grid.returnFalse)return false;
}

function DataGrid_onafterupdate(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onafterupdate","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","onafterupdate","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","onafterupdate","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onafterupdate=(xmlTagValues.selectNodes("//onAfterUpdate").length>0)?(xmlTagValues.selectSingleNode("//onAfterUpdate").text):("");
	try{
		if(onafterupdate!=""){
			debugWrite(GridID+".onAfterUpdate",new Array(document.all(GridID).HTMLControlID,"onAfterUpdate"),"callstack");
			eval(onafterupdate);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onafterupdate","Script Error: "+err.description);
		return;
	}
}

function DataGrid_UndoRowEdit(RowNo,GridID) {
	
}

function DataGrid_GetCellIndex(sGridID){
	var oGrid = document.all(sGridID);
	var iCellIndex = null
	if(oGrid.SelectedCell) {
		iCellIndex = oGrid.SelectedCell.cellIndex;
		if(iCellIndex < 4)iCellIndex = null
	}
	if (iCellIndex == null) {
		for(var i = 4; i < oGrid.GridTable.children(0).children.length - 1; i++) {
			if (oGrid.GridTable.children(0).children[i].style.display != "none") {
				iCellIndex = i;
				break;	
			}
		}
	}
	return iCellIndex;
}

function DataGrid_SetRowStyles(GridID) {
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","DataGrid_SetRowStyles","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","DataGrid_SetRowStyles","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","DataGrid_SetRowStyles","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	
	var GridRowStyle1=(xmlTagValues.selectNodes("//root/Row1Class").length>0)?(xmlTagValues.selectSingleNode("//root/Row1Class").text):("");
	var GridRowStyle2=(xmlTagValues.selectNodes("//root/Row2Class").length>0)?(xmlTagValues.selectSingleNode("//root/Row2Class").text):("");
	if(!Grid.GridTable)
		return;
	var RowCount=Grid.GridTable.rows.length;
	if(RowCount<=1)
		return;
	var i,GridRow;
	var oDataSource = document.all(Grid.GridTable.dataSrc.replace("#", ""));	
	var SelectionMode = xmlTagValues.getPropertyValue("SelectionMode", "");	
	if(SelectionMode == 0) {
		var iCellIndex = DataGrid_GetCellIndex(GridID);
	}	
	for(i=1;i<Grid.GridTable.rows.length;i++)
	{
		GridRow=Grid.GridTable.rows(i);
		GridRow.className=(i%2==0)?(GridRowStyle1):(GridRowStyle2);						
		if(GridRow.recordNumber == oDataSource.recordset.absolutePosition) {
			switch(SelectionMode.toString()){
				case "1":
				case "":
				case 1:
					Grid.SelectedRow=GridRow;
					Grid.SelectedRow.lastSelectedClassName=Grid.SelectedRow.className;
					Grid.SelectedRow.className=Grid.SelectedRowClass;
				break;
				
				case "0":					
					if(iCellIndex != null) {						
						GridCell = GridRow.cells(iCellIndex);
						Grid.SelectedCell=GridCell;
						Grid.SelectedCell.className="GridCellSelected";
					}
				break;
				
				case "2":					
					
				break;
								
				default:
					/*
					Grid.SelectedRow=GridRow;
					Grid.SelectedRow.lastSelectedClassName=Grid.SelectedRow.className;
					Grid.SelectedRow.className=Grid.SelectedRowClass;
					*/
				break;
			}
		}
	}
}

function DataGrid_onDSORecordChange(sGridID) {	
	var oGrid = document.all(sGridID);
	if(!oGrid){
		alertErr(sGridID, "Grid", "DataGrid_onDSORecordChange","Invalid Grid ID:'" + sGridID + "' specified.");
		return;
	}	
	
	var SelectionMode = oGrid.tagValues.getPropertyValue("SelectionMode", "");		
	if(SelectionMode == 0) {
		var iCellIndex = DataGrid_GetCellIndex(sGridID);		
	}	
	DataGrid_ResetLastSelectedRow(sGridID);
	DataGrid_ResetLastSelectedCell(sGridID);	
	if(SelectionMode == "2") return;
	var oDataSource = document.all(oGrid.GridTable.dataSrc.replace("#", ""));	
	var oGridRow;
	for(i=1; i < oGrid.GridTable.rows.length; i++) {
		oGridRow = oGrid.GridTable.rows(i);
		if(oGridRow.recordNumber == oDataSource.recordset.absolutePosition) {
			switch(SelectionMode.toString()){
				case "1":
				case "":
				case 1:
					oGrid.SelectedRow = oGridRow;					
					oGrid.SelectedRow.lastSelectedClassName = oGrid.SelectedRow.className;
					oGrid.SelectedRow.className = oGrid.SelectedRowClass;
				break;	
				
				case "0":
				case 0:
					if(iCellIndex != null) {						
						oGridCell = oGridRow.cells(iCellIndex);
						oGrid.SelectedCell = oGridCell;
						oGrid.SelectedCell.className="GridCellSelected";
					}
				break;	
						
				default:
					/*
					oGrid.SelectedRow = oGridRow;					
					oGrid.SelectedRow.lastSelectedClassName = oGrid.SelectedRow.className;
					oGrid.SelectedRow.className = oGrid.SelectedRowClass;
					*/
				break;
			}
			break;
		}		
	}
}

function DataGrid_onReadyStateChange(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onReadyStateChange","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	if(event.srcElement.readyState!="complete")
		return;	
	DataGrid_SetRowStyles(GridID);	
	DataGrid_GetRowStyle(GridID);	
	Grid.MoveFirst();
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","onReadyStateChange","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","onReadyStateChange","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onreadystatechange=(xmlTagValues.selectNodes("//root/onreadystatechange").length>0)?(xmlTagValues.selectSingleNode("//root/onreadystatechange").text):("");
	try{
		if(onreadystatechange!=""){
			debugWrite(GridID+".onreadystatechange",new Array(document.all(GridID).HTMLControlID,"onreadystatechange"),"callstack");
			eval(onreadystatechange);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onReadyStateChange",err.description);
		return;
	}
}

function DataGrid_FlagRecordForDelete(RowNo,GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","FlagRecordForDelete","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","FlagRecordForDelete","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","FlagRecordForDelete","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var xmlRecordsetID=(xmlTagValues.selectNodes("//xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//xmlRecordsetID").text):(null);
	var xmlRecordset=document.all(xmlRecordsetID);
	if(!xmlRecordset)return;
	var GridRow=Grid.GridTable.rows(parseInt(RowNo));
	if(!GridRow){
		alertErr(GridID,"Grid","FlagRecordForDelete","Invalid Row Number:'"+RowNo+"' specified.");
		return;
	}
	var RecordNo=GridRow.RecordNo;
	if(xmlRecordset.GetRecordAttribute(RecordNo,"Action")=="Update"){
		alert("This record has been updated - cannot be deleted.");
		Grid.returnFalse=true;
	}
	else{
		xmlRecordset.SetRecordAttribute(RecordNo,"Action","Delete");
		Grid.SetRowStatusImage(RecordNo);
	}
}

function DataGrid_unFlagRecordForDelete(RowNo,GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","unFlagRecordForDelete","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","unFlagRecordForDelete","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","unFlagRecordForDelete","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var xmlRecordsetID=(xmlTagValues.selectNodes("//xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//xmlRecordsetID").text):(null);
	var xmlRecordset=document.all(xmlRecordsetID);
	if(!xmlRecordset)return;
	var GridRow=Grid.GridTable.rows(parseInt(RowNo));
	var RecordNo=GridRow.RecordNo;
	if(!GridRow){
		alertErr(GridID,"Grid","unFlagRecordForDelete","Invalid Row Number:'"+RowNo+"' specified.");
		return;
	}
	xmlRecordset.SetRecordAttribute(parseInt(RecordNo),"Action","");
	Grid.SetRowStatusImage(RecordNo);
}

function DataGrid_TextBoxNumericCheck(EditType) {
	var KeyCode=window.event.keyCode;
	var CurrentValue = window.event.srcElement.value;
	if (EditType == 1){
		if ((KeyCode >= 96) && (KeyCode <= 105))return(true);		
		if ( (KeyCode < 48) || (KeyCode > 57) ) { // 0 - 9
			if ( (KeyCode < 35) || (KeyCode > 40) ) {// end key,home key, arrow keys				
				if (KeyCode==190) {// decimal point(.)							
					var arrCurrentValue = CurrentValue.split(".");				
					if ( arrCurrentValue.length > 1 ) event.returnValue = false;									
				}
				
				if ( (KeyCode==189)||(KeyCode==109) ){// negative sign(-)
					var arrCurrentValue = CurrentValue.split("-");				
					if ( arrCurrentValue.length > 1 ) event.returnValue = false;
				}
				
				if ( (KeyCode != 46) && (KeyCode!=8) && (KeyCode!=9) && (KeyCode != 190) 
					&& (KeyCode != 189) && (KeyCode != 16) && (KeyCode != 45) && (KeyCode != 17) && (KeyCode != 18) ) 
					event.returnValue = false; // delete, backspace, tab, decimal point, minus sign, SHIFT, INSERT,CTRL, ALT 		
			}
		}
	}
	
	if (EditType == 2){
		if ((KeyCode >= 96) && (KeyCode <= 105))return(true);		
		if ( (KeyCode < 48) || (KeyCode > 57) ) { // 0 - 9
			if ( (KeyCode < 35) || (KeyCode > 40) ) {// end key,home key, arrow keys				
				if ( (KeyCode != 46) && (KeyCode!=8) && (KeyCode!=9) && (KeyCode != 16) && (KeyCode != 45) && (KeyCode != 17) && (KeyCode != 18) ) 
					event.returnValue = false; // delete, backspace, tab, decimal point, minus sign, SHIFT, INSERT,CTRL, ALT 		
			}
		}		
		return(true);
	}
	
	if (EditType == 3){
		if ((KeyCode >= 96) && (KeyCode <= 105))return(true);		
		if ( (KeyCode < 48) || (KeyCode > 57) ) { // 0 - 9
			if ( (KeyCode < 35) || (KeyCode > 40) ) {// end key,home key, arrow keys				
				if (KeyCode==190) {// decimal point(.)							
					var arrCurrentValue = CurrentValue.split(".");				
					if ( arrCurrentValue.length > 1 ) event.returnValue = false;									
				}
				
				if ( (KeyCode==189)||(KeyCode==109) ){// negative sign(-)
					var arrCurrentValue = CurrentValue.split("-");				
					if ( arrCurrentValue.length > 1 ) event.returnValue = false;
				}
				
				if ( (KeyCode != 46) && (KeyCode!=8) && (KeyCode!=9) && (KeyCode != 190) 
					&& (KeyCode != 189) && (KeyCode != 16) && (KeyCode != 45) && (KeyCode != 17) && (KeyCode != 18) ) 
					event.returnValue = false; // delete, backspace, tab, decimal point, minus sign, SHIFT, INSERT,CTRL, ALT 		
			}
		}
		var arrCurrentValue = CurrentValue.split(".");
		if ( arrCurrentValue.length == 2 ) {
			if ((arrCurrentValue[1].length == 2) && (KeyCode!=46) && (KeyCode!=8) )	event.returnValue = false;	
		}
	}	
}

function intrinsic__control__onclick(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onclick","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","onclick","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","onclick","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var FieldName=event.srcElement.dataFld;
	var ColSpec=(xmlTagValues.selectNodes("//ColSpec/"+FieldName).length>0)?(xmlTagValues.selectSingleNode("//ColSpec/"+FieldName)):(null);
	if(!ColSpec)return;
	var onClickScript=(ColSpec.selectNodes("onclick").length>0)?(ColSpec.selectSingleNode("onclick").text):("");
	try{
		if(onClickScript!=""){
			debugWrite(GridID+".onClick",new Array(document.all(GridID).HTMLControlID,"onClick"),"callstack");
			eval(onClickScript);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onclick",err.description);
		return;
	}
}

function intrinsic__control_onkeypress(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onkeypress","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","onkeypress","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","onkeypress","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var FieldName=event.srcElement.dataFld;
	var ColSpec=(xmlTagValues.selectNodes("//ColSpec/"+FieldName).length>0)?(xmlTagValues.selectSingleNode("//ColSpec/"+FieldName)):(null);
	if(!ColSpec)return;
	var onKeyPressScript=(ColSpec.selectNodes("onkeypress").length>0)?(ColSpec.selectSingleNode("onkeypress").text):("");
	try{
		if(onKeyPressScript!=""){
			debugWrite(GridID+".onkeypress",new Array(document.all(GridID).HTMLControlID,"onkeypress"),"callstack");
			eval(onKeyPressScript);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onkeypress",err.description);
		return;
	}
}

function intrinsic__control_onkeyup(GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onkeyup","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","onkeyup","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","onkeyup","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var FieldName=event.srcElement.dataFld;
	var ColSpec=(xmlTagValues.selectNodes("//ColSpec/"+FieldName).length>0)?(xmlTagValues.selectSingleNode("//ColSpec/"+FieldName)):(null);
	if(!ColSpec)return;
	var onKeyPressScript=(ColSpec.selectNodes("onkeyup").length>0)?(ColSpec.selectSingleNode("onkeyup").text):("");
	try{
		if(onKeyPressScript!=""){
			debugWrite(GridID+".onkeyup",new Array(document.all(GridID).HTMLControlID,"onkeyup"),"callstack");
			eval(onKeyPressScript);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onkeyup",err.description);
		return;
	}
}

function intrinsic__control_onkeydown(GridID){	
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","onkeydown","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","onkeydown","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","onkeydown","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var FieldName=event.srcElement.dataFld;
	var ColSpec=(xmlTagValues.selectNodes("//ColSpec/"+FieldName).length>0)?(xmlTagValues.selectSingleNode("//ColSpec/"+FieldName)):(null);
	if(!ColSpec)return;
	var onKeyPressScript=(ColSpec.selectNodes("onkeydown").length>0)?(ColSpec.selectSingleNode("onkeydown").text):("");
	try{
		if(onKeyPressScript!=""){
			debugWrite(GridID+".onkeydown",new Array(document.all(GridID).HTMLControlID,"onkeydown"),"callstack");
			eval(onKeyPressScript);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onkeydown",err.description);
		return;
	}
}

function DataGrid_DisableRow(RowNo,GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","DisableRow","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	if(!Grid.GridTable)return;
	var GridRow=Grid.GridTable.rows(parseInt(RowNo));
	if(!GridRow){
		return;
	}
	var i,GridCellCount=GridRow.cells.length;
	for(i=0;i<GridCellCount;i++){
		GridRow.cells(i).children(0).disabled=true;
	}
}

function DataGrid_EnableRow(RowNo,GridID){
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","EnableRow","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	if(!Grid.GridTable)return;
	var GridRow=Grid.GridTable.rows(parseInt(RowNo));
	if(!GridRow){
		alertErr(GridID,"Grid","EnableRow","Invalid Row Number:'"+RowNo+"' specified.");
		return;
	}
	var i,GridCellCount=GridRow.cells.length;
	for(i=0;i<GridCellCount;i++){
		GridRow.cells(i).children(0).disabled=false;
	}
}

function _26(HTMLControlID) {
	DataGrid_Initialise(HTMLControlID);
}	

function DataGrid_Initialise(HTMLControlID){
	var GridID=document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var Grid=document.all(GridID);
	if(!Grid){
		alertErr(GridID,"Grid","Initialise","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(Grid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","Initialise","Invalid TagValue ID:'"+Grid.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","Initialise","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	Grid.tagValues=xmlTagValues;
	Grid.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	Grid.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");		
	translateNode(Grid.tagValues,"/root/pRecordsetID","/root/xmlRecordsetID","xmlRecordsetID")

	if(xmlTagValues.selectNodes("/root/ColSpec").length==0)
	{
		var oColSpec=xmlTagValues.createNode(1,"ColSpec","");
		xmlTagValues.documentElement.appendChild(oColSpec);
	}
	var GridStyleSheet=(xmlTagValues.selectNodes("//GridStyleSheet").length>0)?(xmlTagValues.selectSingleNode("//GridStyleSheet").text):("");
	if(GridStyleSheet.length>0){
		if(document.all("lnkDataGridCSS"))
			lnkDataGridCSS.href=GridStyleSheet;
			
	}
	var cssClass=(Grid.tagValues.selectNodes("//cssClass").length>0)?Grid.tagValues.selectSingleNode("//cssClass").text:"";
	Grid.className=cssClass;
	var oXMLRecordsetIDNode=xmlTagValues.selectSingleNode("//xmlRecordsetID");
	if (oXMLRecordsetIDNode != null) {
		oXMLRecordsetIDNode.text=VBReplace(oXMLRecordsetIDNode.selectSingleNode("//xmlRecordsetID").text,"#","");
	}
	var xmlRecordsetID=(xmlTagValues.selectNodes("//xmlRecordsetID").length>0)?(xmlTagValues.selectSingleNode("//xmlRecordsetID").text):("");
	if (xmlRecordsetID=="") return;
	if(!xmlRecordsetID){
		alertErr(GridID,"Grid","Refresh","Associated DataSource '"+xmlRecordsetID+"' does not exist.");
		return;
	}
	xmlRecordsetID=VBReplace(xmlRecordsetID,"#","");
	var xmlRecordset=document.all(xmlRecordsetID.toString());
	if(xmlRecordset){
		var RecordCount=xmlRecordset.recordset.recordcount;
	}
	Grid.onDSORecordChange = new Function("GridID","return DataGrid_onDSORecordChange('"+GridID+"')");
	Grid.SetPagingState=new Function("GridID","return DataGrid_SetPagingState('"+GridID+"')");
	Grid.Reload=new Function("Parameters","GridID","return DataGrid_Reload(Parameters, '"+GridID+"')");
	Grid.Refresh=new Function("GridID","return DataGrid_Refresh('"+GridID+"')");	
	DataGrid_InitColSpecFromCache(HTMLControlID);
	Grid.Refresh();
	if(!xmlRecordset){
		Grid.PageCount=0
	}else{
		Grid.PageCount=((RecordCount%Grid.PageSize)==0)?(parseInt((RecordCount/ Grid.PageSize))):(parseInt((RecordCount/ Grid.PageSize))+1);
	}
	Grid.PageNumber=1;
	Grid.SetPagingState();
	Grid.onbeforeupdate=new Function("GridID","return DataGrid_onbeforeupdate('"+GridID+"')");
	Grid.onafterupdate=new Function("GridID","return DataGrid_onafterupdate('"+GridID+"')");
	Grid.MoveFirst=new Function("GridID","return DataGrid_MoveFirst('"+GridID+"');");
	Grid.MoveFirstPage=new Function("GridID","return DataGrid_MoveFirstPage('"+GridID+"');");
	Grid.MovePreviousPage=new Function("GridID","return DataGrid_MovePreviousPage('"+GridID+"');");
	Grid.MoveNextPage=new Function("GridID","return DataGrid_MoveNextPage('"+GridID+"');");
	Grid.MoveLastPage=new Function("GridID","return DataGrid_MoveLastPage('"+GridID+"');");
	Grid.MoveToPage=new Function("PageNumber","GridID","return DataGrid_MoveToPage(PageNumber,'"+GridID+"');");
	Grid.UndoRowEdit=new Function("RowNo","GridID","return DataGrid_UndoRowEdit(RowNo, '"+GridID+"')");
	Grid.FlagRecordForDelete=new Function("RowNo","GridID","return DataGrid_FlagRecordForDelete(RowNo, '"+GridID+"')");
	Grid.unFlagRecordForDelete=new Function("RowNo","GridID","return DataGrid_unFlagRecordForDelete(RowNo, '"+GridID+"')");
	Grid.DisableRow=new Function("RowNo","GridID","return DataGrid_DisableRow(RowNo, '"+GridID+"')");
	Grid.EnableRow=new Function("RowNo","GridID","return DataGrid_EnableRow(RowNo, '"+GridID+"')");
	Grid.CellClick=new Function("GridID","return DataGrid_CellClick('"+GridID+"');");
	Grid.RowClick=new Function("GridID","return DataGrid_RowClick('"+GridID+"');");
	Grid.onContextMenu=new Function("GridID","return Grid_onContextMenu('"+GridID+"');");
	Grid.dblClick=new Function("GridID","return DataGrid_dblClick('"+GridID+"');");
	Grid._SelectRow=new Function("GridID","return DataGrid__SelectRow('"+GridID+"');");
	Grid.PageChange=new Function("GridID","return DataGrid_PageChange('"+GridID+"');");
	Grid.onkeydown=new Function("GridID","return DataGrid_onkeydown('"+GridID+"');");
	Grid.ResetLastSelectedRow=new Function("GridID","return DataGrid_ResetLastSelectedRow('"+GridID+"');");
	Grid.ResetLastSelectedCell=new Function("GridID","return DataGrid_ResetLastSelectedCell('"+GridID+"');");
	Grid.HideColumn=new Function("ColumnNumber","GridID","return DataGrid_HideColumn(ColumnNumber,'"+GridID+"');");
	Grid.ShowColumn=new Function("ColumnNumber","GridID","return DataGrid_ShowColumn(ColumnNumber,'"+GridID+"');");
	Grid.DeleteColumn=new Function("ColumnNumber","GridID","return DataGrid_DeleteColumn(ColumnNumber,'"+GridID+"');");
	Grid.InsertColumn=new Function("Caption", "dataFld", "ColumnType", "ColumnNumber", "GridID","return DataGrid_InsertColumn(Caption, dataFld, ColumnType, ColumnNumber,'"+GridID+"');");
	Grid.ShowColumnSelector=new Function("GridID","return DataGrid_ShowColumnSelector('"+GridID+"');");
	Grid.showColumnSelector=new Function("GridID","return DataGrid_ShowColumnSelector('"+GridID+"');");
	Grid.resetColSpec = new Function("GridID","return DataGrid_resetGridColSpec('"+GridID+"');");
}

function DataGrid_InitColSpecFromCache(iHTMLControlID) {
	try {
		var oTagValues = document.all(iHTMLControlID);
		if(!oTagValues) return false;
		var sColKey = "ColSpec/" + window.location.hostname + window.location.pathname;
		var sColKey = VBReplace(sColKey,"/","-");	
		SYS__WABUserData.load(sColKey + iHTMLControlID);	
		var sColSpec = SYS__WABUserData.getAttribute("ColSpec");
		if(sColSpec == null)return false;
		var oNewColSpec = new ActiveXObject("Microsoft.XMLDOM");
		oNewColSpec.async = false;
		oNewColSpec.loadXML("<root>" + sColSpec + "</root>");	
		var oColSpec = oNewColSpec.selectSingleNode("/root/ColSpec");
		if(oNewColSpec.parseError != 0)return false;
		var oCurrentColSpec = oTagValues.getPropertyNode("ColSpec");
		if(oCurrentColSpec.xml == oColSpec.xml)return false;
		oTagValues.documentElement.replaceChild(oColSpec, oCurrentColSpec);
		return true;
	} catch (err) {
		return false;
	}
}

function DataGrid_ShowColumnSelector(sGridID) {
	var oGrid = document.all(sGridID);	
	if(!oGrid){
		alertErr(sGridID,"Grid","showColumnSelector","Invalid Grid ID:'"+sGridID+"' specified.");
		return;
	}
	var sc = window.showModalDialog("htmlcontrols/datagrid/fieldchooser.html", oGrid, "resizable:no; help:no; centre:yes; scroll:no; dialogWidth:560px; dialogHeight:305px");
	if(sc) {
		var sColKey = "ColSpec/" + window.location.hostname + window.location.pathname;
		var sColKey = VBReplace(sColKey,"/","-");
		var oColSpec = oGrid.tagValues.getPropertyNode("ColSpec");
		SYS__WABUserData.setAttribute("ColSpec",oColSpec.xml);
		SYS__WABUserData.save(sColKey + oGrid.tagValues.id);
	}
	return sc;
}

function DataGrid_onfocusin(GridID) {		
	if(!event.srcElement.recordNumber)//no a valid row
		return;
	var oGrid = document.all(GridID);
	if(oGrid.GridTable.readyState != "complete") return;
		
	if(!oGrid.tabKeyDown) return;
	oGrid.tabKeyDown = false;
	
	var sDataSourceID = (oGrid.tagValues.selectNodes("/root/xmlRecordsetID").length>0)?(oGrid.tagValues.selectSingleNode("/root/xmlRecordsetID").text):("");
	if (sDataSourceID == "")
		return;	
	var oDSO = document.all(sDataSourceID);
	var oElement = event.srcElement;	
	var oRow;
	while(oElement.parentElement) {
		if((oElement.tagName == "TR")&&(oElement.GridRow == "true")) {
			oRow = oElement;
			break;
		}
		oElement = oElement.parentElement;
	}		
	if((event.srcElement.recordNumber == oDSO.recordset.absolutePosition)&&(oGrid.SelectedRow == oRow)) {			
		return
	}		
	var iSelectionMode=(oGrid.tagValues.selectNodes("//root/SelectionMode").length>0)?(oGrid.tagValues.selectSingleNode("//root/SelectionMode").text):("1");
	if(iSelectionMode != 0)iSelectionMode = 1;
	DataGrid_ResetLastSelectedCell(GridID);//reset row & cell selections			
	DataGrid_ResetLastSelectedRow(GridID);	
	
	oDSO.recordset.absolutePosition = event.srcElement.recordNumber;//move to new record
	var iTargetIndex = oDSO.recordset.absolutePosition;
	
	var oRow, oTargetRow = null;
	for(var i = 1; i < oGrid.GridTable.rows.length; i++)//find current row
	{
		oRow = oGrid.GridTable.rows(i);
		if(oRow.recordNumber == iTargetIndex)
		{
			oTargetRow = oRow;
			break;
		}
	}
	if(!oTargetRow)
		return;			
	DataGrid_scrollRowIntoView(oTargetRow);//scroll row into view
}

function DataGrid_onkeydown(GridID) {
	var oGrid = document.all(GridID);
	if(oGrid.GridTable.readyState != "complete") return;
	oGrid.tabKeyDown = (event.keyCode == 9)?(true):(false);
	var onkeydown = (oGrid.tagValues.selectNodes("/root/onkeydown").length>0)?(oGrid.tagValues.selectSingleNode("/root/onkeydown").text):("");
	try{
		if(onkeydown!=""){
			debugWrite(GridID+".onkeydown",new Array(document.all(GridID).HTMLControlID,"onkeydown"),"callstack");
			eval(onkeydown);
		}
	}
	catch(err){
		alertErr(GridID,"Grid","onkeydown",err.description);
		return;
	}	
	var sDataSourceID = (oGrid.tagValues.selectNodes("/root/xmlRecordsetID").length>0)?(oGrid.tagValues.selectSingleNode("/root/xmlRecordsetID").text):("");
	if (sDataSourceID == ""){
		return;
	}
	var oDSO = document.all(sDataSourceID);
	if(oGrid.keyboardNavigation == 0)
	{
		return;
	}		
	if (oGrid.GridTable.rows.length < 2) return;
	var iStartRow = oGrid.GridTable.rows(1).recordNumber;
	var iEndRow = oGrid.GridTable.rows(oGrid.GridTable.rows.length - 1).recordNumber;	
	var bIsRow = (event.srcElement.recordNumber)?(true):(false);	
	var iSelectionMode = oGrid.tagValues.getPropertyValue("SelectionMode", 1);
	iSelectionMode.toString();
	switch(event.keyCode)
	{		
		case 9://tab						
			DataGrid_ResetLastSelectedCell(GridID);						
			if((oGrid.SelectedRow)&&(oGrid.SelectedRow.recordNumber != oDSO.recordset.absolutePosition))
			{				
				DataGrid_ResetLastSelectedRow(GridID);				
			}
			oGrid.SelectedCell = null;			
			
		break;
			
		case 33://page up			
			if(iStartRow == 1)//bof
				return;			
			event.returnValue = false;
			oGrid.MovePreviousPage();
			oGrid.GridTable.parentElement.scrollTop = 0;			
		break;
		
		case 34://page down			
			if(iEndRow == oDSO.recordset.recordCount)//eof
				return;	
			event.returnValue = false;
			oGrid.MoveNextPage();
			oGrid.GridTable.parentElement.scrollTop = 0;	
		break;
		
		case 38://up arrow
		case 40://down arrow
			if(bIsRow)
			{
				switch(event.srcElement.tagName)
				{
					case "SELECT":
					case "TEXTAREA":
						return;
					break;
					
					case "INPUT":					
						if(event.srcElement.type == "text" ||event.srcElement.type == "password"){
							return;
						}
					break;
					
				}
			}			
			event.returnValue = false;
			if(oGrid.GridTable.rows.length <= 1)//no records
				return;
			if(oDSO.recordset.absolutePosition == -1)
				return;
			var iTargetIndex = oDSO.recordset.absolutePosition + ((event.keyCode == 38)?(-1):(1));						
			if((iTargetIndex < 1)||(iTargetIndex > oDSO.recordset.recordCount))//out of range
				return;
			if((iTargetIndex < iStartRow)||(iTargetIndex > iEndRow))//out of range
				return;
			oDSO.recordset.absolutePosition = iTargetIndex;
			var oRow, oTargetRow = null;
			for(var i = 1; i < oGrid.GridTable.rows.length; i++)//find current record
			{
				oRow = oGrid.GridTable.rows(i);
				if(oRow.recordNumber == iTargetIndex)
				{
					oTargetRow = oRow;
					break;
				}
			}
			if(!oTargetRow)
				return;			
			if(bIsRow)
			{				
				event.srcElement.blur();
				oGrid.focus();				
			}
			if(oTargetRow.rowIndex == 1) {
				oTargetRow = oGrid.GridTable.rows(0);
			}
			DataGrid_ResetLastSelectedCell(GridID);			
			DataGrid_ResetLastSelectedRow(GridID);			
			DataGrid_scrollRowIntoView(oTargetRow);				
			switch(iSelectionMode.toString()){
				case "0":
				case 0:
					if(oGrid.SelectedCell)					
					{
						oGrid.SelectedCell = oRow.cells(oGrid.SelectedCell.cellIndex);
						oGrid.SelectedCell.className="GridCellSelected";
					}					
				break;
				
				case "1":	
				case 1:	
					oGrid.SelectedRow = oRow;
					oGrid.SelectedRow.lastSelectedClassName = oGrid.SelectedRow.className;
					oGrid.SelectedRow.className = oGrid.SelectedRowClass;				
				break;
				
				case "2":	
				
				break;
				
				default:				
					oGrid.SelectedRow = oRow;
					oGrid.SelectedRow.lastSelectedClassName = oGrid.SelectedRow.className;
					oGrid.SelectedRow.className = oGrid.SelectedRowClass;					
				break;
			}
		break;
		
		case 37://left
		case 39://right	
			if(iSelectionMode != "0")
				return;	
			switch(event.srcElement.tagName)
			{
				case "INPUT":					
					if((event.srcElement.type == "text")||(event.srcElement.type == "password"))
						return;					
				case "TEXTAREA":
					return;
				break;
			}								
			if(!oGrid.SelectedCell)					
				return;
			if(oGrid.GridTable.rows.length <= 1)//no records
				return;
			if(oDSO.recordset.absolutePosition == -1)
				return;
			var iTargetIndex = oDSO.recordset.absolutePosition;
			var oRow, oTargetRow = null;
			for(var i = 1; i < oGrid.GridTable.rows.length; i++)//find current row
			{
				oRow = oGrid.GridTable.rows(i);
				if(oRow.recordNumber == iTargetIndex)
				{
					oTargetRow = oRow;
					break;
				}
			}
			if(!oTargetRow)
				return;	
			var iTargetCellIndex = parseInt(oGrid.SelectedCell.cellIndex) + ((event.keyCode == 37)?(-1):(1));
			var oTargetCell;
			//----------find target cell----------
			if(event.keyCode == 37)//left
			{
				var oCell;
				//find first visible cell
				for(var i = oGrid.SelectedCell.cellIndex - 1; i > (oGrid.SelectedCell.cellIndex - 3); i--)
				{
					oCell = oRow.cells(i);						
					if(oGrid.GridTable.children(0).children(i).style.display == "block")
					{
						oTargetCell = oCell;					
						break;
					}
				}
			}
			else//right
			{
				var oCell;	
				//find first visible cell			
				for(var i = oGrid.SelectedCell.cellIndex + 1; i < oRow.cells.length; i++)
				{
					oCell = oRow.cells(i);						
					if(oGrid.GridTable.children(0).children(i).style.display == "block")
					{
						oTargetCell = oCell;
						break;
					}
				}
			}
			if(!oTargetCell)
				return;
			//----------find target cell----------/
			DataGrid_ResetLastSelectedCell(GridID);			
			DataGrid_ResetLastSelectedRow(GridID);
			oGrid.SelectedCell = oTargetCell;
			oGrid.SelectedCell.className = "GridCellSelected";
			DataGrid_scrollCellIntoView(oTargetCell);
			event.returnValue = false;
		break;
	}	
}

function DataGrid_scrollCellIntoView(oCell)
{
	var oGrid = oCell.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement;
	var oDiv = oGrid.GridTable.parentElement;
	var x = oGrid.GridTable.parentElement.scrollLeft;//div scroll left
	var y = oCell.offsetLeft;//cell left
	var n = oGrid.GridTable.parentElement.offsetWidth;
	var i = oGrid.GridTable.parentElement.scrollWidth;
	//is the cell out of view?			
	var iCellLeft = (y - x);
	var iCellRight = iCellLeft + oCell.offsetWidth;
	if(iCellLeft < 0)//invisible on left
	{				
		oDiv.scrollLeft = oCell.offsetLeft;
	}			
	if(iCellRight > n)//invisible on right
	{	
		oDiv.scrollLeft = x + iCellRight - n + ((oDiv.offsetHeight <= oGrid.GridTable.offsetHeight)?(18):(0));
	}
}

function DataGrid_scrollRowIntoView(oRow)
{
	var oGrid = oRow.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement;
	
	//Set flag if the 
	var bColHeaders = (oGrid.tagValues.selectNodes("//AlwaysShowColHeaders").length>0)?(oGrid.tagValues.selectSingleNode("//AlwaysShowColHeaders").text):(0)
	if (bColHeaders == 1){
		bColHeaders = (oGrid.tagValues.selectNodes("//ShowGridHeader").length>0)?(oGrid.tagValues.selectSingleNode("//ShowGridHeader").text):(0)
		var iHeaderHeigth = (oGrid.tagValues.selectNodes("//HeaderHeight").length>0)?(oGrid.tagValues.selectSingleNode("//HeaderHeight").text):(22)
	}
	
	var oDiv = oGrid.GridTable.parentElement;
	var x = oGrid.GridTable.parentElement.scrollTop;//div scroll left
	var y = oRow.offsetTop;//cell left
	var n = oGrid.GridTable.parentElement.offsetHeight - ((oDiv.offsetWidth <= oGrid.GridTable.offsetWidth)?(18):(0));
	var i = oGrid.GridTable.parentElement.scrollHeight;
	//is the cell out of view?			
	var iRowTop = (y - x);
	var iRowBottom = iRowTop + oRow.offsetHeight;
	if (bColHeaders == 1) {
			iRowTop = iRowTop - iHeaderHeigth
	}
	if((iRowTop) < 0)//invisible above
	{				
		if (bColHeaders == 1) {
			oDiv.scrollTop = oRow.offsetTop - iHeaderHeigth;
			return;
		}

		oDiv.scrollTop = oRow.offsetTop;
	}			
	if(iRowBottom > n)//invisible below
	{	
		
		oDiv.scrollTop = x + iRowBottom - n;
	}
}

function DataGrid_HideColumn(iColumnIndex, GridID)//Hide a specified column
{
	var oGrid=document.all(GridID);
	if(!oGrid){
		alertErr(GridID,"Grid","HideColumn","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}

	var xmlTagValues=document.all(oGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","HideColumn","Invalid TagValue ID:'"+oGrid.HTMLControlID+"' specified.");
		return;
	}

	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","HideColumn","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	//Validate that the parameter passed in is numeric
	if(isNaN(iColumnIndex))
	{
		alertErr(GridID,"Grid","ShowColumn","Error: invalid column index");
		return;
	}

	var oColSpec = xmlTagValues.selectSingleNode("/root/ColSpec");//XML node containing the column information	
	var oColumn = oColSpec.selectSingleNode("Column[index() = " + iColumnIndex + "]");//List of columns
	if(!oColumn)//Error thrown if the column does not exist
	{
		alertErr(GridID,"Grid","ShowColumn","Error: Column not found");
		return;
	}	
	oColumn.setAttribute("Visible", 0);//Change the column's visibility property to false.
	oGrid.Refresh();
}

function DataGrid_ShowColumn(iColumnIndex, GridID)//Show a specified column
{
	var oGrid=document.all(GridID);
	if(!oGrid){
		alertErr(GridID,"Grid","ShowColumn","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}

	var xmlTagValues=document.all(oGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","ShowColumn","Invalid TagValue ID:'"+oGrid.HTMLControlID+"' specified.");
		return;
	}

	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","ShowColumn","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	//Validate that the parameter passed in is numeric
	if(isNaN(iColumnIndex))
	{
		alertErr(GridID,"Grid","ShowColumn","Error: invalid column index");
		return;
	}
	var oColSpec = xmlTagValues.selectSingleNode("/root/ColSpec");//XML node containing the column information	
	var oColumn = oColSpec.selectSingleNode("Column[index() = " + iColumnIndex + "]");//List of columns
	if(!oColumn)//Error thrown if the column does not exist
	{
		alertErr(GridID,"Grid","ShowColumn","Error: Column not found");
		return;
	}	
	oColumn.setAttribute("Visible", -1);//Change the column's visibility property to true.
	oGrid.Refresh();
}

function DataGrid_DeleteColumn(iColumnIndex, GridID)//Delete the specified column
{
	var oGrid=document.all(GridID);
	if(!oGrid){
		alertErr(GridID,"Grid","DeleteColumn","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}

	var xmlTagValues=document.all(oGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","DeleteColumn","Invalid TagValue ID:'"+oGrid.HTMLControlID+"' specified.");
		return;
	}

	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","DeleteColumn","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	//Validate that the parameter passed in is numeric
	if(isNaN(iColumnIndex))
	{
		alertErr(GridID,"Grid","DeleteColumn","Error: invalid column index");
		return;
	}
	var oColSpec = xmlTagValues.selectSingleNode("/root/ColSpec");//XML node containing the column information	
	var oColumn = oColSpec.selectSingleNode("Column[index() = " + iColumnIndex + "]");//List of columns
	if(!oColumn)
	{
		alertErr(GridID,"Grid","DeleteColumn","Error: Column not found");
		return;
	}	
	oColSpec.removeChild(oColumn);//Delete the specified column from the ColSpec
	oGrid.Refresh();
}

function DataGrid_InsertColumn(sCaption, sDataFld, sColumnType, iColumnNumber,GridID)//Insert a new column
{
	var oGrid=document.all(GridID);
	if(!oGrid){
		alertErr(GridID,"Grid","DeleteColumn","Invalid Grid ID:'"+GridID+"' specified.");
		return;
	}

	var xmlTagValues=document.all(oGrid.HTMLControlID);
	if(!xmlTagValues){
		alertErr(GridID,"Grid","DeleteColumn","Invalid TagValue ID:'"+oGrid.HTMLControlID+"' specified.");
		return;
	}

	if(xmlTagValues.parseError!=0){
		alertErr(GridID,"Grid","DeleteColumn","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	//Return if the parameters are null or do not match specified requirements
	if(sCaption == null)
		return;
	if(sDataFld == null)
		return;
	if(sColumnType == null)
		return;
	
	if(iColumnNumber == null)
		iColumnNumber = "";	

	var oColSpec = xmlTagValues.selectSingleNode("/root/ColSpec");//XML node containing the column information		
	
	//Creates a new xml Node for the ColSpec & sets the specified attributes
	var oColumn = xmlTagValues.createNode(1, "Column", "");
	oColumn.setAttribute("Caption", sCaption);
	oColumn.setAttribute("dataFld", sDataFld);
	switch(sColumnType){
		case "readonly":
		case "intrinsic__readonly":
			oColumn.setAttribute("InputControl", "intrinsic__readonly");
			break;
		case "textbox":
		case "intrinsic__textbox":
			oColumn.setAttribute("InputControl", "intrinsic__textbox");
			break;
		case "textarea":
		case "intrinsic__textarea":
			oColumn.setAttribute("InputControl", "intrinsic__textarea");
			break;
		case "calendar":
		case "intrinsic__calendar":
			oColumn.setAttribute("InputControl", "intrinsic__calendar");
			break;
		case "checkbox":
		case "intrinsic__checkbox":
			oColumn.setAttribute("InputControl", "intrinsic__checkbox");
			break;
		case "dropdown":
		case "intrinsic__dropdown":
			oColumn.setAttribute("InputControl", "intrinsic__dropdown");
			break;
		case "image":
		case "intrinsic__image":
			oColumn.setAttribute("InputControl", "intrinsic__image");
			break;
		case "html":
		case "intrinsic__html":
			oColumn.setAttribute("InputControl", "intrinsic__html");
			break;
		case "dynamic html":
		case "intrinsic__datahtml":
			oColumn.setAttribute("InputControl", "intrinsic__datahtml");
			break;
		case "radio":
		case "intrinsic__radio":
			oColumn.setAttribute("InputControl", "intrinsic__radio");
			break;
		case "button":
		case "intrinsic__button":
			oColumn.setAttribute("InputControl", "intrinsic__button");
			break;
		default:
			oColumn.setAttribute("InputControl", "intrinsic__readonly");
			break;
	}
	oColumn.setAttribute("Visible", -1);
	if(iColumnNumber.length == 0)
	{
		oColSpec.appendChild(oColumn);//Add the column to the end of the list
	}
	else {
		oColSpec.insertBefore(oColumn, oColSpec.childNodes(iColumnNumber));//Add the column to the specified place
	}
	oGrid.Refresh();	
}

function DataGrid_resetGridColSpec(iGridID) {
	var oGrid = document.all(iGridID);
	if (!oGrid) return;
	var oTagValues = document.all(oGrid.HTMLControlID);
	if (!oTagValues) return;
	var sDataSource = oTagValues.getPropertyValue("xmlRecordsetID", false);
	if (sDataSource == null || sDataSource == "") {
		return;
	}
	var oDataSource = document.all(sDataSource);
	var oColSpec = oTagValues.getPropertyNode("ColSpec");
	if (!oColSpec) return;
	var oNewColSpec = oColSpec.cloneNode(false);
	var oFieldNode;
	var arrFields = oDataSource.Schema.split("|");
	for (var i = 1; i < arrFields.length - 1; i++) {
		oFieldNode = oTagValues.createNode(1, "Column", "");
		oFieldNode.setAttribute("dataFld", arrFields[i]);
		oFieldNode.setAttribute("Caption", arrFields[i]);		
		oFieldNode.setAttribute("InputControl", "instrinsic__readonly");
		oFieldNode.setAttribute("Visible", "-1");
		oNewColSpec.appendChild(oFieldNode);		
	}
	oTagValues.selectSingleNode("//root").replaceChild(oNewColSpec, oColSpec);
}


//dropdown.js
function _10(HTMLControlID) {
	Dropdown_Initialise(HTMLControlID);
}

function Dropdown_Initialise(HTMLControlID){
	
	var xmlTagValues=document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(DropdownID,"Dropdown","Initialise","Invalid TagValue ID:'"+Dropdown.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DropdownID,"Dropdown","Initialise","TagValue Error: "+xmlTagValues.parseError.reason+".");
		return;
	}
	var DropdownID=xmlTagValues.selectSingleNode("//ID").text;
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","Initialise","Invalid Dropdown ID specified.");
		return;
	}
	Dropdown.tagValues=xmlTagValues;
	Dropdown.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	Dropdown.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	

	var sDisabled=(xmlTagValues.selectNodes("//root/Disabled").length>0)?xmlTagValues.selectSingleNode("//root/Disabled").text:"false";
	sDisabled=(sDisabled.length==0)?(false):(sDisabled);
	sDisabled=(sDisabled.toString().toLowerCase()=="true")?(true):(false);
	Dropdown.disabled=sDisabled;
	Dropdown.style.color=(xmlTagValues.selectNodes("//Font-Color").length>0)?xmlTagValues.selectSingleNode("//Font-Color").text:"";
	Dropdown.onkeypress=new Function("DropdownID","Dropdown_onkeypress('"+DropdownID+"');");
	Dropdown.onblur=new Function("HTMLControlID","Dropdown_onblur('"+HTMLControlID+"');");
	Dropdown.onfocus=new Function("HTMLControlID","Dropdown_onfocus('"+HTMLControlID+"');");
	Dropdown.Populate=new Function("DropdownID","HTMLControlID","PopulateCombobox('"+DropdownID+"','"+HTMLControlID+"');");
	Dropdown.populateFromXML=new Function("Node","StartLevel","HTMLControlID","Dropdown_PopulateFromXML(Node,StartLevel,'"+HTMLControlID+"')");
	Dropdown.PopulateFromXML=new Function("Node","StartLevel","HTMLControlID","Dropdown_PopulateFromXML(Node,StartLevel,'"+HTMLControlID+"')");
	Dropdown.Clear=new Function("DropdownID","document.all('"+DropdownID+"').innerHTML='';");
	Dropdown.populateFromListField=new Function("DSO","Property","HTMLControlID","Dropdown_PopulateFromListField(DSO,Property,'"+HTMLControlID+"');");
	Dropdown.PopulateFromListField=new Function("DSO","Property","HTMLControlID","Dropdown_PopulateFromListField(DSO,Property,'"+HTMLControlID+"');");
	Dropdown.SelectedItemText=new Function("DropdownID"," return xmlDropdown_SelectedItemText('"+DropdownID+"');");
	Dropdown.SelectedItemValue=new Function("DropdownID"," return xmlDropdown_SelectedItemValue('"+DropdownID+"');");
	Dropdown.SetSelectedItemByValue=new Function("ValueString","DropdownID","return xmlDropdown_SetSelectedItemByValue(ValueString, this)");
	Dropdown.SetSelectedItemByText=new Function("TextString","DropdownID","return xmlDropdown_SetSelectedItemByText(TextString, this)");
	Dropdown.onchange=new Function("DropdownID","return xmlDropdown_onChange('"+DropdownID+"');");
	if(Dropdown.size > 0)Dropdown.ondblclick=new Function("XMLListboxID","HTMLControlID","Dropdown_onDblClick('"+DropdownID+"','"+HTMLControlID+"');");		
	Dropdown.onbeforeupdate=new Function("DropdownID","return xmlDropdown_onbeforeupdate('"+DropdownID+"')");
	Dropdown.onafterupdate=new Function("DropdownID","return xmlDropdown_onafterupdate('"+DropdownID+"')");
	Dropdown.Populate();
	Dropdown.toFind="";
	Dropdown.timeoutID="";
	Dropdown.timeoutInterval=1000;
	Dropdown.hasChanged=false;
	
}

function Dropdown_resetToFind(DropdownID){
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","resetToFind","Invalid Dropdown ID specified.");
		return;
	}
	window.clearInterval(Dropdown.timeoutID)
	Dropdown.toFind="";
	Dropdown.timeoutID=null;
	if(Dropdown.hasChanged){
		Dropdown.hasChanged=false;
		xmlDropdown_onChange(DropdownID);
	}
}

function Dropdown_onblur(HTMLControlID){
	var TagValues=document.all(HTMLControlID);
	if(!TagValues){
		alertErr("","Dropdown","Dropdown_onblur","Invalid TagValue ID:'"+HTMLControlID+"' specified.");
		return;
	}
	if(TagValues.parseError!=0){
		alertErr("","Dropdown","Dropdown_onblur","TagValue Error: "+TagValues.parseError.reason);
		return;
	}
	var DropdownID=(TagValues.selectNodes("//root/ID").length>0)?(TagValues.selectSingleNode("//root/ID").text):("");
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","Dropdown_onblur","Invalid Dropdown ID:'"+DropdownID+"' specified.");
		return;
	}
	var onBlurScript=(TagValues.selectNodes("//root/onBlur").length>0)?(TagValues.selectSingleNode("//root/onBlur").text):("");
	try{
		debugWrite(DropdownID+".onblur",new Array(HTMLControlID,"onblur"),"callstack");
		eval(onBlurScript);
	}
	catch(err){
		alertErr(DropdownID,"Dropdown","onblur",err.description);
	}
	Dropdown_resetToFind(DropdownID);
}

function Dropdown_onfocus(HTMLControlID){
	var TagValues=document.all(HTMLControlID);
	if(!TagValues){
		alertErr("","Dropdown","Dropdown_onfocus","Invalid TagValue ID:'"+HTMLControlID+"' specified.");
		return;
	}
	if(TagValues.parseError!=0){
		alertErr("","Dropdown","Dropdown_onfocus","TagValue Error: "+TagValues.parseError.reason);
		return;
	}
	var DropdownID=(TagValues.selectNodes("//root/ID").length>0)?(TagValues.selectSingleNode("//root/ID").text):("");
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","Dropdown_onfocus","Invalid Dropdown ID:'"+DropdownID+"' specified.");
		return;
	}
	var onfocusScript=(TagValues.selectNodes("//root/onFocus").length>0)?(TagValues.selectSingleNode("//root/onFocus").text):("");
	try{
		debugWrite(DropdownID+".onfocus",new Array(HTMLControlID,"onfocus"),"callstack");
		eval(onfocusScript);
	}
	catch(err){
		alertErr(DropdownID,"Dropdown","onblur",err.description);
	}
}

function Dropdown_PopulateFromListField(DSO,Property,HTMLControlID){
	var DataSource=document.all(DSO);
	if(!DataSource){
		alertErr("","Dropdown","Dropdown_PopulateFromListField","Invalid DSO ID specified.");
		return;
	}
	var PropertiesList=DataSource.selectNodes("//Record/"+Property)
	if(PropertiesList.length==0){
		return;
	}
	var CurrentlySelectedRecord=DataSource.recordset.absolutePosition-1
	var Node=PropertiesList[CurrentlySelectedRecord];
	Dropdown_PopulateFromXML(Node,0,HTMLControlID)
}

function Dropdown_PopulateFromXML(Node,StartLevel,HTMLControlID){
	var xmlTagValues=document.all(HTMLControlID)
	if(!xmlTagValues){
		alertErr("","Dropdown","Dropdown_PopulateFromXML","Invalid TagValue ID:'"+Dropdown.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr("","Dropdown","Dropdown_PopulateFromXML","TagValue Error: "+xmlTagValues.parseError.reason+".");
		return;
	}
	var DropdownID=(xmlTagValues.selectNodes("//root/ID").length>0)?xmlTagValues.selectSingleNode("//root/ID").text:"";
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","Dropdown_PopulateFromXML","Invalid Dropdown ID specified.");
		return;
	}
	var i,option,gap="",liList=Node.selectNodes("li");
	if(StartLevel==null)StartLevel=0;
	if(StartLevel==0){
		xmlDropdown_onbeforepopulate(DropdownID);
		Dropdown.Clear();
	}
	for(i=0;i<liList.length;i++){
		gap="";
		var CurrentNode=liList[i];
		if(CurrentNode.selectNodes("li").length>0){
			Dropdown.populateFromXML(CurrentNode,StartLevel+1);
		}else{
			for(var j=0;j<StartLevel;j++)gap+="    ";
			option=document.createElement("OPTION");
			option.text=gap+CurrentNode.text;
			option.value=CurrentNode.text;
			Dropdown.options.add(option);
		}
	}
	if(StartLevel==0)xmlDropdown_onafterpopulate(DropdownID);
}

function Dropdown_find(DropdownID){
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","find","Invalid Dropdown ID specified.");
		return;
	}
	if(Dropdown.toFind.length==0)return;
	var arrPosibleMatches=new Array();
	for(var i=0;i<Dropdown.options.length;i++){
		try{
			if(Dropdown.toFind.charAt(0).toLowerCase()==Dropdown.options(i).text.charAt(0).toLowerCase()){
				arrPosibleMatches[arrPosibleMatches.length]=new Array(i,Dropdown.options(i).text);
			}
		}catch(err){}
	}
	if(arrPosibleMatches.length==0)return;
	var iBestMatchSelectedIndex=arrPosibleMatches[0][0];
	for(i=1;i<Dropdown.toFind.length;i++){
		if(arrPosibleMatches.length==0)return;
		var arrNewPosibleMatches=new Array();
		for(var j=0;j<arrPosibleMatches.length;j++){
			try{
				if(Dropdown.toFind.charAt(i).toLowerCase()==arrPosibleMatches[j][1].charAt(i).toLowerCase()){
					arrNewPosibleMatches[arrNewPosibleMatches.length]=new Array(arrPosibleMatches[j][0],arrPosibleMatches[j][1]);
				}
			}catch(err){}
		}
		if(arrNewPosibleMatches.length==0){
			break;
		}else{
			iBestMatchSelectedIndex=arrNewPosibleMatches[0][0];
			arrPosibleMatches=arrNewPosibleMatches;
		}
	}
	event.returnValue=false;
	Dropdown.hasChanged=true;
	Dropdown.selectedIndex=iBestMatchSelectedIndex;
}

function Dropdown_onkeypress(DropdownID){
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","onkeypress","Invalid Dropdown ID specified.");
		return;
	}
	window.clearInterval(Dropdown.timeoutID)
	var keycode=window.event.keyCode;
	if(keycode>=32){
		var c=String.fromCharCode(keycode);
		Dropdown.toFind+=c;
		Dropdown_find(DropdownID);
		Dropdown.timeoutID=window.setInterval("Dropdown_resetToFind(\"" + DropdownID + "\")",Dropdown.timeoutInterval);
	}
	var HTMLControlID=Dropdown.HTMLControlID;
	var xmlTagValues=document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(DropdownID,"Dropdown","onkeypress","Invalid TagValue ID:'"+Dropdown.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DropdownID,"Dropdown","onkeypress","TagValue Error: "+xmlTagValues.parseError.reason+".");
		return;
	}
	var onkeypress=(xmlTagValues.selectNodes("//root/onkeypress").length>0)?(xmlTagValues.selectSingleNode("//root/onkeypress").text):("");
	try{
		if(onkeypress!=""){
			debugWrite(DropdownID+".onkeypress",new Array(document.all(DropdownID).HTMLControlID,"oncontextmenu"),"callstack");
			eval(onkeypress)
		}
	}catch(err){
		alertErr(DropdownID,"Dropdown","onkeypress","User onkeypress event error #"+err.number+": "+err.description+"\n"+onkeypress);
	}
}

function Dropdown_onDblClick(DropdownID,HTMLControlID){	
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","onDblClick","Invalid Dropdown ID specified.");
		return;
	}
	var HTMLControlID=Dropdown.HTMLControlID;
	var xmlTagValues=document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(DropdownID,"Dropdown","onDblClick","Invalid TagValue ID:'"+Dropdown.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DropdownID,"Dropdown","onDblClick","TagValue Error: "+xmlTagValues.parseError.reason+".");
		return;
	}
	var OnDblClick = (xmlTagValues.selectNodes("//root/onDblClick").length > 0)?(xmlTagValues.selectSingleNode("//root/onDblClick").text):("");	
	if(OnDblClick!=null){
		try{
			if(OnDblClick!=""){
				debugWrite(DropdownID+".onDblClick",new Array(HTMLControlID,"onDblClick"),"callstack");
				eval(OnDblClick);
			}
		}catch(err){
			alertErr(DropdownID,"Dropdown","onDblClick","User ondblClick event error #"+err.number+": "+err.description+"\n"+OnDblClick);
		}
	}
}

function xmlDropdown_onChange(DropdownID){
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","onChange","Invalid Dropdown ID specified.");
		return;
	}
	var HTMLControlID=Dropdown.HTMLControlID;
	var xmlTagValues=document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(DropdownID,"Dropdown","onChange","Invalid TagValue ID:'"+Dropdown.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DropdownID,"Dropdown","onChange","TagValue Error: "+xmlTagValues.parseError.reason+".");
		return;
	}
	Dropdown.returnFalse=false;
	var OnItemSelect=(xmlTagValues.selectNodes("//root/OnItemSelect").length>0)?(xmlTagValues.selectSingleNode("//root/OnItemSelect").text):("");
	try{
		if(OnItemSelect!=""){
			debugWrite(DropdownID+".OnItemSelect",new Array(document.all(DropdownID).HTMLControlID,"OnItemSelect"),"callstack");
			eval(OnItemSelect);
		}
	}
	catch(err){
		alertErr(DropdownID,"Dropdown","OnItemSelect","User OnItemSelect event error #"+err.number+": "+err.description+"\n"+OnItemSelect);
	}
	if(Dropdown.returnFalse)return;
}

function Dropdown_SetBoundCountrolValue(DropdownID){
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","SetBoundCountrolValue","Invalid Dropdown ID specified.");
		return;
	}
	var HTMLControlID=Dropdown.HTMLControlID;
	var xmlTagValues=document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(DropdownID,"Dropdown","SetBoundCountrolValue","Invalid TagValue ID:'"+Dropdown.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DropdownID,"Dropdown","SetBoundCountrolValue","TagValue Error: "+xmlTagValues.parseError.reason+".");
		return;
	}
}

function xmlDropdown_SelectedItemText(XMLComboboxID){
	if(document.all(XMLComboboxID).selectedIndex>-1)
		return(document.all(XMLComboboxID).options(document.all(XMLComboboxID).selectedIndex).text);
	else
		return "";
}
function xmlDropdown_SelectedItemValue(XMLComboboxID){
	if(document.all(XMLComboboxID).selectedIndex>-1)
		return(document.all(XMLComboboxID).options(document.all(XMLComboboxID).selectedIndex).value);
	else
		return "";
}

function xmlDropdown_SetSelectedItemByValue(ValueString,XMLComboboxID){
	XMLComboboxID.selectIndex=-1;
	var i=0,ItemCount=XMLComboboxID.options.length;
	for(i=0;i<ItemCount;i++){
		if(XMLComboboxID.options(i).value==ValueString){
			XMLComboboxID.options(i).selected=true;
			return true;
		}
	}
	return false;
}

function xmlDropdown_SetSelectedItemByText(TextString,XMLComboboxID){
	XMLComboboxID.selectIndex=-1;
	var i=0,ItemCount=XMLComboboxID.options.length;
	for(i=0;i<ItemCount;i++){
		if(XMLComboboxID.options(i).text==TextString){
			XMLComboboxID.options(i).selected=true;
			return true;
		}
	}
	return false;
}

function PopulateCombobox(XMLComboboxID,HTMLControlID){
	var xmlCombobox=document.all(XMLComboboxID);
	var sDisabled=xmlCombobox.disabled;
	xmlCombobox.disabled=true;
	var xmlTagValues=document.all(document.all(XMLComboboxID).HTMLControlID);
	if((!xmlCombobox)||(!xmlTagValues))return;
	cssClass=(document.all(HTMLControlID).selectNodes("//cssClass").length>0)?document.all(HTMLControlID).selectSingleNode("//cssClass").text:"";
	document.all(XMLComboboxID).className=cssClass;
	var xmlDropdownDisplay=xmlCombobox.style.display;
	while(xmlCombobox.options.length){
		xmlCombobox.remove(0);
	}
	var ControlTypeID=""
	var	ListDataSrc=(xmlTagValues.selectNodes("/root/ListDataSrc").length>0)?xmlTagValues.selectSingleNode("/root/ListDataSrc").text:"";
	var DSO=document.all(ListDataSrc);
	try{
		var DSOTagValues=document.all(DSO.HTMLControlID);
		ControlTypeID=DSOTagValues.ct;
	}catch(err){}
	
	xmlDropdown_onbeforepopulate(XMLComboboxID);
	
	if(ControlTypeID=="24"){
		Dropdown_cspBroker_Populate(XMLComboboxID);
	}
	else{
		var UserDefinedOptions=(xmlTagValues.documentElement.selectNodes("//root/ValueList").length>0)?(xmlTagValues.documentElement.selectSingleNode("//root/ValueList").text):(null);
		PopulateCombobox_UserDefinedOptions(XMLComboboxID,UserDefinedOptions);
		PopulateCombobox_ValueList(XMLComboboxID);
		PopulateCombobox_RecordSet(XMLComboboxID,HTMLControlID);
	}
	
	xmlCombobox.style.display=xmlDropdownDisplay;
	var Value=(xmlTagValues.documentElement.selectNodes("//root/Value").length>0)?(xmlTagValues.documentElement.selectSingleNode("//root/Value").text):("");
	var dataSrcID = xmlCombobox.dataSrc;
	//var dataSrcID=(xmlTagValues.selectNodes("//dataSrc").length>0)?xmlTagValues.selectSingleNode("//dataSrc").text:"";
	var dataFld = xmlCombobox.dataFld;
	//var dataFld=(xmlTagValues.selectNodes("//dataFld").length>0)?xmlTagValues.selectSingleNode("//dataFld").text:"";
	var dataSrc=document.all(VBReplace(dataSrcID,"#",""));
	xmlCombobox.dataSrc=dataSrcID;
	xmlCombobox.dataFld=dataFld;
	xmlCombobox.disabled=sDisabled;
	xmlDropdown_onafterpopulate(XMLComboboxID);
}

function Dropdown_cspBroker_Populate(DropdownID){
	var Dropdown=document.all(DropdownID);
	if(!Dropdown){
		alertErr(DropdownID,"Dropdown","Populate","Invalid Dropdown ID specified.");
		return;
	}
	var xmlTagValues=document.all(Dropdown.HTMLControlID);
	if(!xmlTagValues){
		alertErr(DropdownID,"Dropdown","Populate","Invalid TagValue ID:'"+DropdownID.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(DropdownID,"Dropdown","Populate","TagValue Error: "+xmlTagValues.parseError.reason+".");
		return;
	}
	var ListDataSrc=(xmlTagValues.selectNodes("//root/ListDataSrc").length>0)?(xmlTagValues.selectSingleNode("//root/ListDataSrc").text):(null);
	var ListDataField=(xmlTagValues.selectNodes("//root/ListDataField").length>0)?(xmlTagValues.selectSingleNode("//root/ListDataField").text):(null);
	if((ListDataSrc==null)||(ListDataField==null)||(ListDataSrc.length=="")||(ListDataField.length==""))return;
	try{
		eval("var frmListSource = self.document."+ListDataSrc+"form");
	}
	catch(err){
		alertErr(DropdownID,"Dropdown","Populate","Invalid ListDataSrc '"+ListDataSrc+"' specified.");
		return;
	}
	try{
		eval("var frmListField = frmListSource."+ListDataField);
	}
	catch(err){
		alertErr(DropdownID,"Dropdown","Populate","Invalid ListDataField '"+ListDataField+"' specified.");
		return;
	}
	if(!frmListField)return;
	if(frmListField.tagName!="SELECT"){
		alertErr(DropdownID,"Dropdown","Populate","Invalid ListDataField '"+ListDataField+"' type specified.");
		return;
	}
	var dataSrc = Dropdown.dataSrc;
	//var dataSrc=(xmlTagValues.selectNodes("//root/dataSrc").length>0)?(xmlTagValues.selectSingleNode("//root/dataSrc").text):(null);
	var dataFld = Dropdown.dataFld;
	//var dataFld=(xmlTagValues.selectNodes("//root/dataFld").length>0)?(xmlTagValues.selectSingleNode("//root/dataFld").text):(null);
	var Value=(xmlTagValues.selectNodes("//root/Value").length>0)?(xmlTagValues.selectSingleNode("//root/Value").text):(null);;
	var OptionCount=frmListField.options.length;
	var NewOption,BoundOption;
	for(var i=0;i<OptionCount;i++){
		BoundOption=frmListField.options(i);
		NewOption=document.createElement("OPTION");
		Dropdown.add(NewOption);
		NewOption.innerText=BoundOption.text;
		NewOption.value=BoundOption.value;
		if(Value==BoundOption.value)Dropdown.selectedIndex=i;
	}
}

function PopulateCombobox_BoundControl(xmlCombobox,BoundControl){
	xmlCombobox.innerHTML="";
	var i,BoundControlOptionCount=BoundControl.options.length;
	for(i=0;i<BoundControlOptionCount;i++){
		OptionValue=BoundControl.options(i).value;
		OptionText=BoundControl.options(i).text;
		NewOption=document.createElement("OPTION");
		xmlCombobox.options.add(NewOption);
		NewOption.innerText=OptionText;
		NewOption.value=OptionValue;
		if(BoundControl.selectedIndex==i)NewOption.selected=true;
	}
}

function PopulateCombobox_ValueList(DropdownID)
{
	var dropdown=document.all(DropdownID);
	if(!dropdown)
	{
		alertErr(DropdownID,"Dropdown","Populate","Invalid Dropdown ID specified.");
		return;
	}
	var tagValues=dropdown.tagValues;
	//var dataFldNode=dropdown.dataFld;
	//var dataFldNode=(tagValues.selectNodes("//root/dataFld").length>0)?tagValues.selectSingleNode("//root/dataFld"):null;
	
	//if(dataFldNode==null)return;
	var dataFldNode = dropdown.tagValues.getPropertyNode("dataFld")
	if (!dataFldNode) return;
	var pop=(dataFldNode.getAttribute("pop"))?(dataFldNode.getAttribute("pop")):(0);
	if(pop==0) {
		return;
	}
	var dataSrc=document.all(VBReplace(dropdown.dataSrc,"#",""));
	//var dataSrc=document.all(VBReplace(tagValues.selectSingleNode("//root/dataSrc").text,"#",""));
	if(!dataSrc)
		return;
	var fieldName=dropdown.dataFld;	
	if (dataSrc.schemaInfo==null) 
		return;		
	var schemaNode=dataSrc.schemaInfo.selectSingleNode("//root/column[@name = '"+fieldName+"']");
	//alert(schemaNode.xml);
	if(!schemaNode)
		return;
	var vl=(schemaNode.getAttribute("vl"))?(schemaNode.getAttribute("vl")):("");
	var dl=(schemaNode.getAttribute("dl"))?(schemaNode.getAttribute("dl")):("");
	if(vl.length==0){
		var arrDisplayList=dl.split(dl.substr(0,1));
		for(var i=1;i<arrDisplayList.length;i++)
		{
			text=arrDisplayList[i]; //(arrDisplayList[i])?(arrDisplayList[i]):(arrValueList[i]);
			value=arrDisplayList[i]; //(arrDisplayList[i])?(arrDisplayList[i]):(arrValueList[i]);
			oOption=document.createElement("OPTION");
			dropdown.options.add(oOption);
			oOption.innerText=text;
			oOption.value=value;
		}
	}
	else {
		var arrValueList=vl.split(vl.substr(0,1));
		var arrDisplayList=dl.split(dl.substr(0,1));
		var i;
		for(i=1;i<arrValueList.length;i++)
		{
			text=(arrDisplayList[i])?(arrDisplayList[i]):(arrValueList[i]);
			value=arrValueList[i]; //(arrDisplayList[i])?(arrDisplayList[i]):(arrValueList[i]);
			oOption=document.createElement("OPTION");
			dropdown.options.add(oOption);
			oOption.innerText=text;
			oOption.value=value;
		}
	}
	
}

function PopulateCombobox_UserDefinedOptions(XMLComboboxID,UserDefinedOptions){
	var xmlCombobox=document.all(XMLComboboxID);
	var xmlTagValues=document.all(document.all(XMLComboboxID).HTMLControlID);
	if((!xmlCombobox)||(!xmlTagValues))return;
	if(UserDefinedOptions==null)return;
	UserDefinedOptions=UserDefinedOptions.substr(0,UserDefinedOptions.length - 1) 
	UserDefinedOptions=UserDefinedOptions.replace("{","")
	var arrUserDefinedOptions = UserDefinedOptions.split("}{");
	var OptionLength=arrUserDefinedOptions.length
	for (var i=0;i<OptionLength;i++){
		var OptionPair = arrUserDefinedOptions[i];
		if (OptionPair != ""){
			arrOptionPair=OptionPair.split("|");
			OptionValue=UnEscapeHTML(arrOptionPair[0]);
			OptionText=UnEscapeHTML(arrOptionPair[1]);
			NewOption=document.createElement("OPTION");
			document.all(XMLComboboxID).options.add(NewOption);
			NewOption.innerText=OptionText;
			NewOption.value=OptionValue;
		}
	}
}

function PopulateCombobox_RecordSet(XMLComboboxID,HTMLControlID){
	var xmlDropdown=document.all(XMLComboboxID);
	var xmlTagValues=document.all(xmlDropdown.HTMLControlID);
	var Version=(xmlTagValues.selectNodes("/root/VER").length>0)?xmlTagValues.selectSingleNode("/root/VER").text:"0";
	try{
	switch(Version){
		case 0:
		case "0":PopulateCombobox_RecordSet_VER0(XMLComboboxID,HTMLControlID);
			break;
		
		case 1:
		case "1":PopulateCombobox_RecordSet_VER1(XMLComboboxID,HTMLControlID);
			break;
	}
	}
	catch(e){
		alert(XMLComboboxID);
	}
}

function PopulateCombobox_RecordSet_VER0(XMLComboboxID,HTMLControlID){
	var xmlDropdown=document.all(XMLComboboxID);
	var xmlTagValues=document.all(xmlDropdown.HTMLControlID);
	
	if((!xmlDropdown)||(!xmlTagValues))return;
	
	var ListDataSrc=(xmlTagValues.selectNodes("//ListDataSrc").length > 0) ? xmlTagValues.selectSingleNode("//ListDataSrc").text : null;
	
	if(!ListDataSrc)return;
	else if(ListDataSrc.substr(0,1)=="#")ListDataSrc=ListDataSrc.substr(1);
	var DSO=document.all(ListDataSrc);
	
	if(!DSO)return;
	var DisplayField=xmlTagValues.selectSingleNode("//ListDisplayField").text;
	var DataField=xmlTagValues.selectSingleNode("//ListDataField").text;
	if(!DataField.length)return;
	if(!DisplayField.length)DisplayField=DataField;
	DisplayField=Encode(DisplayField);
	
	DataField=Encode(DataField);
	var RecordCount=DSO.documentElement.childNodes.length;
	for(var i=0;i<RecordCount;i++){
		var oOption=document.createElement("OPTION");
		document.all(XMLComboboxID).options.add(oOption);
		oOption.innerText=(DSO.documentElement.childNodes(i).selectNodes(DisplayField).length>0)?(DSO.documentElement.childNodes(i).selectSingleNode(DisplayField).text):("");
		oOption.value=(DSO.documentElement.childNodes(i).selectNodes(DataField).length>0)?(DSO.documentElement.childNodes(i).selectSingleNode(DataField).text):("");
		
	}
	
}

function PopulateCombobox_RecordSet_VER1(XMLComboboxID,HTMLControlID){
	var xmlDropdown=document.all(XMLComboboxID);
	var xmlTagValues=document.all(xmlDropdown.HTMLControlID);
	if((!xmlDropdown)||(!xmlTagValues))return;
	var ListDataSrc=(xmlTagValues.selectNodes("//ListDataSrc").length>0)?xmlTagValues.selectSingleNode("//ListDataSrc").text:null;
	if(!ListDataSrc){
		return;
	}else{
		if(ListDataSrc.substr(0,1)=="#")ListDataSrc=ListDataSrc.substr(1);
	}
	var DSO=document.all(ListDataSrc);
	if(!DSO)return;
	var arrDisplayFields=xmlTagValues.selectNodes("/root/ListDisplayField/Field");
	var DisplayFieldSeperator=xmlTagValues.selectSingleNode("//ListDisplayField").getAttribute("Seperator");
	var arrDataFields=xmlTagValues.selectNodes("/root/ListDataField/Field");
	var DataFieldSeperator=xmlTagValues.selectSingleNode("//ListDataField").getAttribute("Seperator");
	var RecordCount=DSO.documentElement.childNodes.length;
	for(var i=0;i<RecordCount;i++){
		var oOption=document.createElement("OPTION");
		document.all(XMLComboboxID).options.add(oOption);
		var sInnerText="";
		var sValue="";
		for(var j=0;j<arrDisplayFields.length;j++){
			if(j!=0)sInnerText+=DisplayFieldSeperator;
			sInnerText+=(DSO.documentElement.childNodes(i).selectNodes(Encode(arrDisplayFields[j].text)).length>0)?(DSO.documentElement.childNodes(i).selectSingleNode(Encode(arrDisplayFields[j].text)).text):("");
		}
		for(var j=0;j<arrDataFields.length;j++){
			if(j!=0)sValue+=DataFieldSeperator;
			sValue+=(DSO.documentElement.childNodes(i).selectNodes(Encode(arrDataFields[j].text)).length>0)?(DSO.documentElement.childNodes(i).selectSingleNode(Encode(arrDataFields[j].text)).text):("");
		}
		oOption.innerText=sInnerText;
		oOption.value=sValue;
		//alert(oOption.innerText+" - in dropdown.js(627) - "+oOption.value)
	}
}

function xmlDropdown_onbeforeupdate(XMLComboboxID){
	var xmlDropdown=document.all(XMLComboboxID);
	var xmlTagValues=document.all(xmlDropdown.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlDropdown))
		return true;
	var onbeforeupdate="";
	if(xmlTagValues.selectNodes("//onBeforeUpdate").length>0)
		onbeforeupdate=xmlTagValues.selectSingleNode("//onBeforeUpdate").text;
	try{
		if(onbeforeupdate!=""){
			debugWrite(XMLComboboxID+".onBeforeUpdate",new Array(document.all(XMLComboboxID).HTMLControlID,"onBeforeUpdate"),"callstack");
			eval(onbeforeupdate);
		}
	}
	catch(err){
		alertErr(XMLComboboxID,"Dropdown","onbeforeupdate","User onbeforeupdate event error #"+err.number+": "+err.description+"\n"+onbeforeupdate);
	}
}

function xmlDropdown_onafterupdate(XMLComboboxID){
	var xmlDropdown=document.all(XMLComboboxID);
	var xmlTagValues=document.all(xmlDropdown.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlDropdown))
		return true;
	var onafterupdate="";
	if(xmlTagValues.selectNodes("//onAfterUpdate").length>0)
		onafterupdate=xmlTagValues.selectSingleNode("//onAfterUpdate").text;
	try{
		if(onafterupdate!=""){
			debugWrite(XMLComboboxID+".onAfterUpdate",new Array(document.all(XMLComboboxID).HTMLControlID,"onAfterUpdate"),"callstack");
			eval(onafterupdate);
		}
	}
	catch(err){
		alertErr(XMLComboboxID,"Dropdown","onafterupdate","User onafterupdate event error #"+err.number+": "+err.description+"\n"+onafterupdate);
	}
}

function xmlDropdown_onafterpopulate(XMLComboboxID){
	var xmlDropdown=document.all(XMLComboboxID);
	var xmlTagValues=document.all(xmlDropdown.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlDropdown))
		return true;
	var eventcode="";
	if(xmlTagValues.selectNodes("//onAfterPopulate").length>0)
		eventcode=xmlTagValues.selectSingleNode("//onAfterPopulate").text;
	try{
		if(eventcode!=""){
			debugWrite(XMLComboboxID+".onAfterPopulate",new Array(document.all(XMLComboboxID).HTMLControlID,"onAfterPopulate"),"callstack");
			eval(eventcode);
		}
	}
	catch(err){
		alertErr(XMLComboboxID,"Dropdown","onAfterPopulate","User onafterupdate event error #"+err.number+": "+err.description+"\n"+eventcode);
	}
}

function xmlDropdown_onbeforepopulate(XMLComboboxID){
	var xmlDropdown=document.all(XMLComboboxID);
	var xmlTagValues=document.all(xmlDropdown.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlDropdown))
		return true;
	var eventcode="";
	if(xmlTagValues.selectNodes("//onBeforePopulate").length>0)
		eventcode=xmlTagValues.selectSingleNode("//onBeforePopulate").text;
	try{
		if(eventcode!=""){
			debugWrite(XMLComboboxID+".onBeforePopulate",new Array(document.all(XMLComboboxID).HTMLControlID,"onBeforePopulate"),"callstack");
			eval(eventcode);
		}
	}
	catch(err){
		alertErr(XMLComboboxID,"Dropdown","onBeforePopulate","User onafterupdate event error #"+err.number+": "+err.description+"\n"+eventcode);
	}
}


//form.js
function _1() {
	formInitialise();
}

function formInitialise() {	
	var oHTMLRequestObject = document.all("xmlRequestObject");
	oHTMLRequestObject.QueryString = new Function("FieldName", "return xmlRequestObject_GetQueryStringField(FieldName);");
	if (oHTMLRequestObject.selectNodes("//root/QuerystringField").length == 0) {
		var sRequest = window.location.search;
		
		if (sRequest != "") {
			var arrItems = sRequest.substring(1,sRequest.length).split("&");
			var oNode;
			for (var i = 0; i < arrItems.length; i++) {
				oNode = oHTMLRequestObject.createNode(1,"QuerystringField","")
				var arrSubItems = arrItems[i].split("=");
				if (arrSubItems[0]) {
					oNode.setAttribute("name", arrSubItems[0]);
					if (arrSubItems[1]) {
						oNode.text = arrSubItems[1];
					} else {
						oNode.text = "";
					}
					document.all("xmlRequestObject").selectSingleNode("//root").appendChild(oNode);
				}
			}
		}
	}
	
	var FormTagValues=document.all(document.body.HTMLControlID);
	document.body.bgColor=(FormTagValues.selectNodes("//root/BgColor").length>0)?(FormTagValues.selectSingleNode("//root/BgColor").text):("");
	document.body.style.overflow=(FormTagValues.selectNodes("//root/Overflow").length>0)?(FormTagValues.selectSingleNode("//root/Overflow").text):("");
	document.body.background=(FormTagValues.selectNodes("//root/BackgroundImage").length>0)?(FormTagValues.selectSingleNode("//root/BackgroundImage").text):("");
	document.body.tagValues=FormTagValues;
	document.body.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+document.body.HTMLControlID+"');");
	document.body.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+document.body.HTMLControlID+"');");
	document.body.onkeyup=new Function("FormEventHandler('onkeyup');");
	document.onkeydown=new Function("FormEventHandler('onkeydown');");
	window.onfocus=new Function("FormEventHandler('onFocus');");
	window.onunload=new Function("FormEventHandler('onUnload');");
	var bCancelOnContextMenu=(FormTagValues.selectNodes("/root/CancelOnContextMenu").length>0)?(FormTagValues.selectSingleNode("/root/CancelOnContextMenu").text):(false);
	document.oncontextmenu=function(){
		FormOnContextmenuEventHandler();
		if(bCancelOnContextMenu=="true"){
			return false;
		}
	}
}

function Form_oncontextmenu(){
	var oncontextmenuString=document.body.oncontextmenuString;
	try{
		if(oncontextmenuString!=""){
			debugWrite("Form.oncontextmenu",new Array("Form","oncontextmenu"),"callstack");
			eval(oncontextmenuString);
		}
	}
	catch(err){
		alertErr("Form","","oncontextmenu","User oncontextmenu event error #"+err.number+": "+err.description+"\n"+oncontextmenuString);
	}
	window.cancelBubble=true;
	return false;
}

function SYS__onFocusOut()
{
	try
	{
		alert(event.srcElement.tagName);
	}
	catch(err)
	{
		alert(err.description);
	}
}

function FormEventHandler(EventTag){	if((EventTag=="onMouseOver")&&(window.DevMode==true)){		var CurElement=event.srcElement;		if(!CurElement)			return;		while((CurElement.HTMLControlID==null)){			CurElement=CurElement.parentElement;		}
		var CtrlID=""
		if(CurElement.tagName!="BODY"){
			CtrlID=(CurElement.id==null)?document.body.id:CurElement.id;
			if(VBLeft(CtrlID,6)=="xmlRS_"){
				CtrlID=VBRight(CtrlID,CtrlID.length-6);
			}
			window.status="Control ID: "+CtrlID+"; Window Top: "+window.screenTop+"px; Window Left:"+window.screenLeft+"px; Window Height: "+document.body.offsetHeight+"px; Window Width:"+document.body.offsetWidth+"px";
		}else{
			CtrlID=FormName;
			window.status="Form Name: "+CtrlID+"; Window Top: "+window.screenTop+"px; Window Left:"+window.screenLeft+"px; Window Height: "+document.body.offsetHeight+"px; Window Width:"+document.body.offsetWidth+"px";
		}
	}

	try {
		var xmlForm=document.all(""+FormID);
	} catch (err) {
		var arrXMLObjs = document.getElementsByTagName("XML");
		for (var i=0;i<arrXMLObjs.length;i++) {
			if(arrXMLObjs[i].getAttribute("FormID") != null) {
				var xmlForm=document.all(""+arrXMLObjs[i].getAttribute("FormID"));	
			}
		}
	
	}
	
	if (xmlForm == null)
		return;
	
	var EventCode=(xmlForm.selectNodes("//"+EventTag).length>0)?xmlForm.selectSingleNode("//"+EventTag).text:"";

	if(EventCode==""){
		return;
	}
	if(EventCode!=null){
		try{
			debugWrite("Form."+EventTag,new Array("Form",EventTag),"callstack");
			eval(EventCode);
		}catch(err){
			alertErr("Form","",EventTag,"User "+EventTag+" event error #"+err.number+": "+err.description+"\n"+EventCode);
		}
	}
}

function FormOnLoadEventHandler(){
	eval(OnLoadInitCode);

	try {
		var xmlForm=document.all(""+FormID);
	} catch (err) {
		var arrXMLObjs = document.getElementsByTagName("XML");
		for (var i=0;i<arrXMLObjs.length;i++) {
		
			if(arrXMLObjs[i].getAttribute("FormID") != null) {
				var xmlForm=document.all(""+arrXMLObjs[i].getAttribute("FormID"));	
			}
		}
	
	}
	var onload=(xmlForm.selectNodes("/root/onload").length>0)?(xmlForm.selectSingleNode("/root/onload").text):("");
	if(onload=="")return;
	if(onload!=null){
		try{
			debugWrite("Form."+"onload",new Array("Form","onload"),"callstack");
			eval(onload);
		}catch(err){
			alertErr("Form","","onload","User onload event error #"+err.number+": "+err.description+"\n"+onload);
		}
	}
}

function FormOnContextmenuEventHandler(){

	try {
		var xmlForm=document.all(""+FormID);
	} catch (err) {
		var arrXMLObjs = document.getElementsByTagName("XML");
		for (var i=0;i<arrXMLObjs.length;i++) {
			if(arrXMLObjs[i].getAttribute("FormID") != null) {
				var xmlForm=document.all(""+arrXMLObjs[i].getAttribute("FormID"));	
			}
		}
	
	}
	var oncontextmenu=(xmlForm.selectNodes("//oncontextmenu").length>0)?(xmlForm.selectSingleNode("//oncontextmenu").text):("");
	if(oncontextmenu=="")return;
	if(oncontextmenu!=null){
		try{
			debugWrite("Form."+"oncontextmenu",new Array("Form","oncontextmenu"),"callstack");
			eval(oncontextmenu);
		}catch(err){
			alertErr("Form","","oncontextmenu","User onContextmenu event error #"+err.number+": "+err.description+"\n"+oncontextmenu);
		}
	}
}


//formsupportjs.js
var arrReservedChars = new Array("'", '"', "<", ">", " ", "&", ",", ".", "/", "\\", ";", "[", "]", "-", "=", "?", ":", "{", "}", "|", "+", "`", "~", "!", "@", "#", "$", "%", "^", "*", "(", ")");
//Window Target
var NewWindow		= 1;
var MainWindow		= 2;
var ModalWindow		= 3;
var ModalessWindow	= 4;

//Window Features
var wfLocation		= 1;
var wfMenuBar		= 2;
var wfResizable		= 4;
var wfScrollbars	= 8;
var wfStatus		= 16;
var wfTitleBar		= 32;
var wfToolBar		= 64;
var wfCenter		= 128;
var wfHelp			= 0;

function FlipDSOData(DataSourceID, SchemaField, SchemaFieldAlias, ExcludedFields)
{
	var DataSource = document.all(DataSourceID);
	if(!DataSource)
	{
		alert("Invalid DataSourceID specified: '" + DataSourceID + "'");
		return;
	}
	
	var xmlTempData = new ActiveXObject("Microsoft.XMLDOM");
	xmlTempData.async = false;
	xmlTempData.loadXML("<root/>");
	var arrSchema = DataSource.Schema.split("|");
	var FieldName;
	var Record, NewRecord, Field, Node;	
	var SchemaCounter = 0;			
	for(var i = 2; i < arrSchema.length - 1; i++)
	{		
		FieldName = arrSchema[i];
		if(FieldName != SchemaField)
		{
			var quit = false;
			for(j = 0; j < ExcludedFields.length; j++)
			{
				if(ExcludedFields[j] == FieldName)
					quit = true;
			}	
			if(quit)
				continue;			
			//arrNewSchema[SchemaCounter] = FieldName;
			SchemaCounter++;
			NewRecord = xmlTempData.createNode(1, "Record", "");			
			Field = xmlTempData.createNode(1, SchemaFieldAlias, "");
			Field.text = FieldName;	
			NewRecord.appendChild(Field);		
			xmlTempData.documentElement.appendChild(NewRecord);	
		}
	}
	
	var RecordList = DataSource.selectNodes("//root/Record");	
	var Field, x, i;	
	var NewCounter = 0;
	var arrNewSchema = new Array();
	arrNewSchema[0] = Encode(SchemaFieldAlias);
	var NewSchema = "|" + Encode(SchemaFieldAlias) + "|"; 
	
	for(i = 0; i < RecordList.length; i++)	
	{
		Record = RecordList.nextNode();	
		arrNewSchema[i + 1] = Encode(Record.selectSingleNode(SchemaField).text);
		NewSchema += Encode(Record.selectSingleNode(SchemaField).text) + "|"; 
	}
	
	
	RecordList.reset();
	var FieldValue;
	
	for(i = 0; i < RecordList.length; i++)	
	{
		Record = RecordList.nextNode();	
		var FieldList = Record.selectNodes("*");	
		NewCounter = 0;	
		for(x = 0; x < FieldList.length; x++)
		{
			Field = FieldList.nextNode();
			FieldName = Field.nodeName;			
			FieldValue = Field.text;					
			switch(FieldName)
			{
				case "xmlDSO__Selected":
				case "xmlDSO__Status":
				case "xmlDSO__ARN":
				case "xmlDSO__RecordNo":				
				case SchemaField:
					continue;
				break;
				
				default:										
					var quit = false;
					for(j = 0; j < ExcludedFields.length; j++)
					{
						if(ExcludedFields[j] == FieldName)
							quit = true;
					}	
					if(quit)
						continue;
					Field = xmlTempData.createNode(1, arrNewSchema[i + 1], "");					
					Field.text = FieldValue;
					
					if(xmlTempData.documentElement.childNodes(NewCounter))
						xmlTempData.documentElement.childNodes(NewCounter).appendChild(Field);	
						NewCounter++;					
				break;			
			}
		}
	}
	return new Array(xmlTempData, NewSchema);	
}


document.ondblclick = function () {
	return;
	try {
		if (ShowFormName == 1) {
			alert('FormName: ' + FormName + '\n\nThis code is in htmlcontrols/formsupportjs.js');
		}
	} catch(err){
		alert('FormName: ' + FormName + '\n\nThis code is in htmlcontrols/formsupportjs.js');
	}
};


//var arrOldCursors=null;

function Document_SetCursor(CursorStyle){
	//+Old Style
	/*var z=0;
	var OldStyle="";
	Document_UnSetCursor();
	for (var i=0; i< arrControls.length; i++) {
		 try {
			OldStyle=document.all(arrControls[i]).style.cursor;
			document.all(arrControls[i]).style.cursor = CursorStyle;
			if (window.arrOldCursors == null) window.arrOldCursors = new Array();
			window.arrOldCursors[z]=new Array(arrControls[i],OldStyle);
			z++;
		} catch(err) {}
	}*/
	//-Old Style

	for (var i=0; i< document.all.length; i++) {
		try {
			document.all(i).style.cursor = CursorStyle
		} catch(err) {}
	}
}

/*function Document_UnSetCursor(){
	if (window.arrOldCursors == null) return;
	var Curvalue="";
	for (var i=0; i < arrOldCursors.length;i++) {
		try {
			Curvalue = arrOldCursors[i][1];
			if (Curvalue == "") {
				Curvalue = "auto"
			}
			alert(arrOldCursors[i][0] + " = " + Curvalue);
			document.all(arrOldCursors[i][0]).style.cursor = Curvalue;
		} catch(err) {}
	}
	window.arrOldCursors = null;
}*/

function CallEvent(ControlID, EventTag, ControlType) {
	var Control = document.all(ControlID);
	
	if (!Control) {
		alertErr(ControlID, ControlType, EventTag,"Invalid control specified.");
		return;
	}

	var TagValues = Control.HTMLControlID

	if (!TagValues) { 
		alertErr(ControlID, ControlType, EventTag,"Invalid control specified.");
		return;
	}

	var EventCode;
	EventCode = (TagValues.selectNodes("//" + EventTag).length > 0) ? TagValues.selectSingleNode("//" + EventTag).text:"";

	if (!EventCode) {
		alertErr(ControlID, ControlType, EventTag,"Invalid event specified.");
		return;
	}

	if (EventCode == "") return;

	try {
		debugWrite(ControlID + "." + EventTag,new Array(document.all(ControlID).HTMLControlID,EventTag),"callstack");
		eval(EventCode);
	} catch(err) {
		alertErr(ControlID, ControlType, EventTag,"User " + EventTag + " event error #" + err.number + ": " + err.description + "\n" + EventCode);
	}	
}

function AlphaNumericOnly(){
	var kCode = event.keyCode;				

	if( (kCode == 8)||(kCode == 46) ){		
		event.returnValue = true;
		return;
	}
	if( ((kCode >= 65)&&(kCode <= 90)) || ((kCode >= 97)&&(kCode <= 122)) || ((kCode >= 48)&&(kCode <= 57)) )event.returnValue = true;
	else event.returnValue = false;	
}

function ValidateNodeName(NodeName){
	if(NodeName.length == 0)return false;	
	var i, ReservedChar, ReservedCharCount = arrReservedChars.length;
	var isWellFormed = true;
	for(i = 0; i < ReservedCharCount; i++){
		ReservedChar = arrReservedChars[i];
		if(VBInstring(NodeName, ReservedChar))isWellFormed = false;
	}
	return isWellFormed;	
}

function escapex(str){
	var i,str = new String(str);
	var arrString = str.split("+");
	var arrLength = arrString.length;
	var ReturnValue = "";	
	if(arrLength == 1) {
		return escape(str);
		}
	else {
		for(i=0;i < arrLength;i++){
			ReturnValue = (i == arrLength-1)?(ReturnValue + escape(arrString[i])):(ReturnValue + escape(arrString[i]) + "%2b");
		}
	}
	return ReturnValue;
}

function xmlRequestObject_GetQueryStringField(FieldName){		
	var FieldIndex = xmlRequestObject.documentElement.selectNodes("//QuerystringField[@name = '" + FieldName + "']").length;			
	if (FieldIndex == 0)return "";
	else return xmlRequestObject.documentElement.selectSingleNode("//QuerystringField[@name = '" + FieldName + "']").text;
}

function Wizard_OpenAction() {
	if ((isSystemForm == "1") && ((FormName != "frmToolbarMenu") && (FormName != "frmSliderMenu")))return;

	var WizardTag, HTMLControlID, SelectedControlID;
	var SourceElement = window.event.srcElement;
	var ObjectType = "";
	var ObjectID = "";
	while (SourceElement){
		if(SourceElement.WizardTag){
		//if (eval(TagPath + ".WizardTag")){
			WizardTag = SourceElement.WizardTag;
			ObjectType = "MenuItem"
			ObjectID = SourceElement.ObjectID;
			break;
		}
		if (SourceElement.HTMLControlID){
			HTMLControlID = SourceElement.HTMLControlID;
			ObjectType = "HTMLControl";
			ObjectID = HTMLControlID;
			break;
		}
		SourceElement = SourceElement.parentElement;
	}

	//-------------
	if(HTMLControlID){
		eval("var xmlTagValues = document.all('" + HTMLControlID + "')");
		var WizardTagCount = xmlTagValues.documentElement.selectNodes("//root/WizardTag").length;
		if (WizardTagCount == 0){
			Open_Config(HTMLControlID, true);
			return;
		}
		WizardTag = xmlTagValues.documentElement.selectSingleNode("//root/WizardTag").text;
		SelectedControlID = xmlTagValues.documentElement.selectSingleNode("//ID").text;
	}
	if (!WizardTag){
		if (Open_Config(HTMLControlID)) return;
		WizardTag = "WizardForm";
		ObjectID = document.body.HTMLControlID;
		SelectedControlID = FormName;
	}
	
	xmlRequestObject.documentElement.selectSingleNode("//QuerystringField[@name = 'SYS__ObjectType']").text = ObjectType;
	xmlRequestObject.documentElement.selectSingleNode("//QuerystringField[@name = 'SYS__ObjectID']").text = ObjectID;
	xmlRequestObject.documentElement.selectSingleNode("//QuerystringField[@name = 'WizardTag']").text = WizardTag;	
	xmlRequestObject.documentElement.selectSingleNode("//QuerystringField[@name = 'SYS__SelectedControlID']").text = SelectedControlID;			
	var TargetWindowArguments = xmlRequestObject.xml;
	var arrWindowArguments = new Array(window, TargetWindowArguments);
	var hwndWizardActions = openWindow("frmWizardObjectActions", "&SYS__ObjectID=" + ObjectID + "&SYS__ObjectType=" + ObjectType + "&WizardTag=" + WizardTag, wfStatus + wfCenter + wfLocation + wfHelp, ModalWindow, 486, 296, "", "", arrWindowArguments);	
	if (hwndWizardActions==true)
	{
		//div_IDEToolbar.children(0).rows(0).cells(8).disabled = true;
		//div_IDEToolbar.children(0).rows(0).cells(9).disabled = true;
		//alert("reload");
		window.location.reload();			
	} 
	else 
	{
		//alert("redirect");
		if (window.Redirectto != null) {
			if (!window.dialogArguments) 
			{
				if(window.Redirectto == "ide/wabsplash.csp")
				{
					var isNew = false;
					try
					{
						var isNew = (window.parent.window.FormName == FormName);
					}
					catch(err)
					{						
					}					
					if(!isNew)
					{
						window.location.replace(window.Redirectto);
					}
					else
					{
						close();					
					}
				}
			} 
			else 
			{
				window.close();
			}
		}
	}
}

function Wizard_onAltClick(){
	if (!window.event.altKey) return;
	Wizard_OpenAction();
}


function Wizard_ondblClick(){
	if (getCookie("DoubleClickInteraction") !="true") return;
	Wizard_OpenAction();
}

function openWindow(Name, Parameters, Features, Target, Width, Height, Left, Top, WindowArguments) {
	var WindowFeatures = "";
	var Delimiter = Target < 3 ? "," : ";"
	if (Target < 3) {
		if(Left != null)
			WindowFeatures+="left=" + String(Left) + Delimiter;
		if(Top != null)
			WindowFeatures+="top=" + String(Top) + Delimiter;
		if(Width != null)
			WindowFeatures+="width=" + String(Width) + Delimiter;
		if(Height != null)
			WindowFeatures+="height=" + String(Height) + Delimiter;
		if(Features & wfLocation)
			WindowFeatures+="location=yes" + Delimiter;
		else
			WindowFeatures+="location=no" + Delimiter;	
		if(Features & wfMenuBar)
			WindowFeatures+="menubar=yes" + Delimiter;
		else
			WindowFeatures+="menubar=no" + Delimiter;
		if(Features & wfResizable)
			WindowFeatures+="resizable=yes" + Delimiter;
		else
			WindowFeatures+="resizable=no" + Delimiter;
		if(Features & wfScrollbars)
			WindowFeatures+="scrollbars=yes" + Delimiter;
		else
			WindowFeatures+="scrollbars=no" + Delimiter;
		if(Features & wfStatus)
			WindowFeatures+="status=no" + Delimiter;
		else
			WindowFeatures+="status=no" + Delimiter;
		if(Features & wfTitleBar)
			WindowFeatures+="titlebar=yes" + Delimiter;
		else
			WindowFeatures+="titlebar=no" + Delimiter;
		if(Features & wfCenter)
			WindowFeatures+="center=yes" + Delimiter;
		else
			WindowFeatures+="center=no" + Delimiter;
		if(Features & wfHelp)
			WindowFeatures+="help=yes" + Delimiter;
		else
		
			WindowFeatures+="help=no" + Delimiter;
		WindowFeatures = WindowFeatures.substr(0, WindowFeatures.length - 1);
	} else {
		if(Left != null)
			WindowFeatures+="dialogLeft:" + String(Left) + "px" + Delimiter;
		if(Top != null)
			WindowFeatures+="dialogTop:" + String(Top) + "px" + Delimiter;
		if(Width != null)
			WindowFeatures+="dialogWidth:" + String(Width) + "px" + Delimiter;
		if(Height != null)
			WindowFeatures+="dialogHeight:" + String(Height) + "px" + Delimiter;
		if(Features & wfResizable)
			WindowFeatures+="resizable:yes" + Delimiter;
		else
			WindowFeatures+="resizable:no" + Delimiter;
		if(Features & wfScrollbars)
			WindowFeatures+="scroll:yes" + Delimiter;
		else
			WindowFeatures+="scroll:no" + Delimiter;
		if(Features & wfStatus)
			WindowFeatures+="status:no" + Delimiter;
		else
			WindowFeatures+="status:no" + Delimiter;
		if(Features & wfCenter)
			WindowFeatures+="center:yes" + Delimiter;
		else
			WindowFeatures+="center:no" + Delimiter;
		if(Features & wfHelp)
			WindowFeatures+="help:yes" + Delimiter;
		else
		
			WindowFeatures+="help:no" + Delimiter;
		WindowFeatures = WindowFeatures.substr(0, WindowFeatures.length - 1);
	}
	switch(Target){
		case NewWindow:
				open("form1.csp?SYS__FormName=" + Name + Parameters, "_blank", WindowFeatures);
			break;
		case MainWindow:
				open("form1.csp?SYS__FormName=" + Name + Parameters, "main", WindowFeatures);
			break;
		case ModalWindow:
				var Incomingreturnvalue=showModalDialog("form1.csp?SYS__FormName=" + Name + Parameters, WindowArguments, WindowFeatures);
				return Incomingreturnvalue
			break;
		case ModalessWindow:
				showModelessDialog("form1.csp?SYS__FormName=" + Name + Parameters, WindowArguments, WindowFeatures);	
			break;
	}
}

function IDExists(CheckID)
{
	var IDs			= new String(arrControls);
	var startindex	= 0;
	var Found		= false;
	
	do{
		startindex = IDs.indexOf(CheckID, startindex + 1);
		if(IDs.substr(startindex - 1, 1) != ',')
			continue;
		if(IDs.substr(startindex + CheckID.length, 1) != ',')
			continue;
		Found = true;
	}while((!Found) && (startindex != -1))
	
	return Found;
}

function Load_xmlControls()
{
	//alert("THE Load_xmlControls WAS CALLED IN formsupportjs.js");
	var ControlType, ControlNode, ControlTypeNode, ControlTagValues
	var ControlTypeCount, TypeAttribute, ControlID, HTMLControlID

	for(var x=1; x<arrControls.length; x++){
		try{
			ControlID = document.all(arrControls[x]).id
			HTMLControlID = document.all(arrControls[x]).HTMLControlID;
			ControlTagValues = document.all(HTMLControlID);
			ControlType = ControlTagValues.ControlTypeName;
			ControlTypeCount = form1_xmlControls.selectNodes("//root/ControlType[@Type = '" + ControlType + "']").length;		
			if(ControlTypeCount == 0){
				ControlTypeNode = form1_xmlControls.createNode(1, "ControlType", "");
				form1_xmlControls.documentElement.appendChild(ControlTypeNode);			
				TypeAttribute = form1_xmlControls.createAttribute("Type");
				ControlTypeNode.attributes.setNamedItem(TypeAttribute);
				ControlTypeNode.setAttribute("Type", ControlType);
			}
			ControlTypeNode = form1_xmlControls.selectSingleNode("//root/ControlType[@Type = '" + ControlType + "']");
			ControlNode = form1_xmlControls.createNode(1, "Control", "");
			ControlTypeNode.appendChild(ControlNode);
			ControlNode.text = ControlID;
			if(ControlTagValues.selectNodes("//root/isParent").length > 0)
				ControlNode.setAttribute("isParent", 1);
			ControlNode.setAttribute("HTMLControlID", HTMLControlID);
		}catch(err){
		}
	}
}

function SetControlDataSource(HTMLControlID, Control){
	return;	
	var xmlTagValues = document.all(HTMLControlID);
	if(!xmlTagValues){		
		return;
	}
	if(xmlTagValues.parseError != 0){		
		return;
	}
	/*
	var ControlID = xmlTagValues.selectSingleNode("//ID").text;
	
	var Control = document.all(ControlID);
	if(!Control){		
		return;
	}
	*/
	var dataSrc = (xmlTagValues.selectNodes("//root/dataSrc").length > 0)?(xmlTagValues.selectSingleNode("//root/dataSrc").text):("");
	var dataFld = (xmlTagValues.selectNodes("//root/dataSrc").length > 0)?(xmlTagValues.selectSingleNode("//root/dataFld").text):("");	
	Control.dataSrc = "#" + VBReplace(dataSrc, "#", "");
	Control.dataFld = dataFld;
}


function SYS__UpdateReferences(RefType)
{	
	switch(RefType){
		case "javascript":
			SYS__JavascriptUpdate();
		break;
		
		case "vbscript":
			SYS__VBscriptUpdate();
		break;
		
		case "css":
			SYS__CSSUpdate();
		break;
		
		default:
			SYS__RefUpdate();
		break;
	}	
}

function SYS__RefUpdate(){
	//var arrScripts = document.all("SYS__DocumentHead").getElementsByTagName("SCRIPT");	
	var arrScripts = document.getElementsByTagName("SCRIPT");	
	var CurrObj;
	for(i = 0; i < arrScripts.length; i++){
		CurrObj = arrScripts[i];
		if(CurrObj.src)
			CurrObj.src = CurrObj.src;
	}
	SYS__CSSUpdate();
}

function SYS__JavascriptUpdate(){
	var arrScripts = document.getElementsByTagName("SCRIPT");	
	var CurrObj;
	for(i = 0; i < arrScripts.length; i++){
		CurrObj = arrScripts[i];
		if(CurrObj.src){
			switch(CurrObj.language.toLowerCase()){
				case "javascript":
				case "jscript":
				case "javascript.encode":
				case "jscript.encode":
					CurrObj.src = CurrObj.src;
				break;
			}
		}			
	}
}

function SYS__VBscriptUpdate(){
	var arrScripts = document.getElementsByTagName("SCRIPT");	
	var CurrObj;
	for(i = 0; i < arrScripts.length; i++){
		CurrObj = arrScripts[i];
		if(CurrObj.src){
			switch(CurrObj.language.toLowerCase()){
				case "vbscript":
				case "vbs":
				case "vbs.encode":
				case "vbscript.encode":
					CurrObj.src = CurrObj.src;
				break;
			}
		}			
	}
}

function SYS__CSSUpdate(){
	var arrScripts = document.getElementsByTagName("LINK");	
	var CurrObj;
	for(i = 0; i < arrScripts.length; i++){
		CurrObj = arrScripts[i];
		if( (CurrObj.href)&&(CurrObj.rel.toLowerCase() == "stylesheet")&&(CurrObj.type.toLowerCase() == "text/css") )				
			CurrObj.href = CurrObj.href;
	}
}



document.UpdateReferences = new Function("RefType", "return SYS__UpdateReferences(RefType);");
document.SetCursor = new Function("CursorStyle", "Document_SetCursor(CursorStyle);");
//document.UnSetCursor = new Function("Document_UnSetCursor();");

//document.ShowOpenDirectory = new Function("CurrentDirectory", "return Document_ShowOpenDir(CurrentDirectory);");
//document.showOpen = new Function("Directory", "Filter", "FilterList", "View", "ViewList", "Action", "FileName", "BackgroundImage", "return Document_ShowOpen(Directory, Filter, FilterList, View, ViewList, Action, FileName, BackgroundImage);");

document.showOpen = new Function("oCallObject", "return Document_showOpen(oCallObject);");
document.showOpenDirectory = new Function("CurrentDirectory", "return Document_showOpenDir(CurrentDirectory);");
document.clearInputs = new Function("sInputTypes", "return Document_clearInputs(sInputTypes);");

function Document_showOpenDir(oCallObject)
{
	if(!oCallObject)
		oCallObject = new Object();
	var DialogFeatures = "help:No; status:no; DialogWidth:400px; DialogHeight:400px;";
	var ActionURL = "";
	//ActionURL = "form1.csp?SYS__FormName=frmOpenDirectory";
	ActionURL = "frmOpenDirectory.csp";
	var devider="?";
	/*
	if (oCallObject.root!=null) {
		ActionURL += "&Directory=" + escapex(oCallObject.root);
	}
	*/
	if (oCallObject.currentDirectory!=null) {
		ActionURL += devider + "currentDirectory=" + escapex(oCallObject.currentDirectory);
		devider="&";
	}
	if (oCallObject.backgroundImage!=null) {
		ActionURL += devider + "backgroundImage=" + escapex(oCallObject.backgroundImage);
		devider="&";
	}
	if (oCallObject.relativeTo!=null) {
		ActionURL += devider + "RelativeTo=" + escapex(oCallObject.relativeTo);
		devider="&";
	}		
	var Dir = window.showModalDialog(ActionURL,"",DialogFeatures);
	if(!Dir)
		Dir = "";
		
	return Dir;
}

function Document_showOpen(oCallObject)
{
	var DialogFeatures = "help:No; status:yes; DialogWidth:485px; DialogHeight:455px; resizable:0";
	var ActionURL = "";
	var First = true;
	//ActionURL = "form1.csp?SYS__FormName=frmImageBrowser";		
	if(!oCallObject)
		oCallObject = new Object();
	//ActionURL = (oCallObject.noneOption)?("form1.csp?SYS__FormName=frmImageBrowser"):("form1.csp?SYS__FormName=frmFileHandler");		
	ActionURL = (oCallObject.noneOption)?("frmImageBrowser.csp"):("frmFileHandler.csp");
	var devider="?";
	/*
	if (oCallObject.root) {
		ActionURL += "&Directory=" + escapex(oCallObject.root);
	}
	*/
	if (oCallObject.filter) {
		ActionURL +=  devider + "Filter=" + escapex(oCallObject.filter);
		devider="&";
	}
	if (oCallObject.filterList) {
		ActionURL +=  devider + "FilterList=" + escapex(oCallObject.filterList);
		devider="&";
	}
	if (oCallObject.view) {
		ActionURL +=  devider + "View=" + escapex(oCallObject.view);
		devider="&";
	}
	if (oCallObject.viewList) {
		ActionURL +=  devider + "ViewList=" + escapex(oCallObject.viewList);
		devider="&";
	}
	if (oCallObject.action) {
		ActionURL +=  devider + "Action=" + escapex(oCallObject.action);
		devider="&";
	}
	if (oCallObject.fileName) {		
		ActionURL +=  devider + "FileName=" + escapex(oCallObject.fileName);
		devider="&";
	}
	if (oCallObject.backgroundImage) {
		ActionURL +=  devider + "backgroundImage=" + escapex(oCallObject.backgroundImage);
		devider="&";
	}
	if (oCallObject.relativeTo!=null) {
		ActionURL +=  devider + "RelativeTo=" + escapex(oCallObject.relativeTo);
		devider="&";
	}

	var File = window.showModalDialog(ActionURL,"",DialogFeatures);	
	return File;	
}

//============================ DEBUG FUNCTIONS=============================
var debugCallstackData = new Array();
var debugOutputData = new Array();

var hwndWABCallStack;
var hwndWABOutput=null;

function CleardebugCallstackData() {
		window.debugCallstackData = new Array();
		try {
			hwndWABCallStack.document.all("lstOutput").innerHTML="";
		}catch(err){}
}

function CleardebugOutputData() {
		window.debugOutputData = new Array();
		try {
			hwndWABOutput.document.all("lstOutput").innerHTML="";
		}catch(err){}
}

function debugWrite(message, messageData, target){
	//alert("debugwrite");
	/*try {
		if (DevMode) {*/
			var arrPos;
			if(target == null)
				target = "output";
			
			switch(target){
				case "callstack":
					arrPos = debugCallstackData.length
					debugCallstackData[arrPos] = new Array(2);
					debugCallstackData[arrPos][0] = message;
					debugCallstackData[arrPos][1] = messageData;
					updateWABCallStackWindow(arrPos);
				break;
				case "output":
					try {
					var messageData = messageData.toString();
					var arrMessageData = messageData.split("|");
					} catch(err) {}
					//change Debug Image to RED...
					
					try {
						div_IDEToolbar.children(0).rows(0).cells(12).children(0).rows(0).cells(0).children(0).src = "ide/12_12/debugred.gif";
					}catch(err){
						try {
							SYS__DEBUGOUTPUT.style.backgroundColor="red";
						} catch(err) {}
					}
					//----------------------------	
					arrPos = debugOutputData.length;
						debugOutputData[arrPos] = new Array(2);
					debugOutputData[arrPos][0] = message;
					debugOutputData[arrPos][1] = arrMessageData;
					updateWABOutputWindow(arrPos);
				break;
			}
		/*}
	} catch(err) {}*/
}

function openWABOutputWindow(){
	var top, left, width, height;

	top = getCookie("WABOutputWindow_Top");
	left = getCookie("WABOutputWindow_Left");
	width = getCookie("WABOutputWindow_Width");
	height = getCookie("WABOutputWindow_Height");

	try {
		hwndWABOutput.returnValue;
		hwndWABOutput.close();
	} catch(err) {
		hwndWABOutput = showModelessDialog("form1.csp?SYS__FormName=frmWABOutput&debugFormName=" + FormName, window, "dialogTop:" + top + "px; dialogLeft:" + left + "px; dialogWidth:" + width + "px; dialogHeight:" + height + "px; resizable:yes; center:no; help:no; status:no");
	}
}

function updateWABOutputWindow(startPos){
	var option;
	if(startPos == undefined)
		startPos = 0;
	try{
		for(var x=startPos; x<debugOutputData.length; x++){
			option = hwndWABOutput.document.createElement("OPTION");
			option.text = VBReplace(debugOutputData[x][0], "\n"," ");
			option.value = debugOutputData[x][0];
			hwndWABOutput.document.all("lstOutput").options.add(option);
		}
	}
	catch(err){
	}
}

function openWABCallStackWindow(){
	var top, left, width, height;

	top = getCookie("WABCallStackWindow_Top");
	left = getCookie("WABCallStackWindow_Left");
	width = getCookie("WABCallStackWindow_Width");
	height = getCookie("WABCallStackWindow_Height");

	try {
		hwndWABCallStack.returnValue;
		hwndWABCallStack.close();
	} catch(err) {
		hwndWABCallStack = showModelessDialog("form1.csp?SYS__FormName=frmWABCallStack&debugFormName=" + FormName, window, "dialogTop:" + top + "px; dialogLeft:" + left + "px; dialogWidth:" + width + "px; dialogHeight:" + height + "px; resizable:yes; center:no; help:no; status:no");
	}
}

function updateWABCallStackWindow(startPos){
	var option;
	if(startPos == undefined)
		startPos = 0;
	try{
		for(var x=startPos; x<debugCallstackData.length; x++){
			option = hwndWABCallStack.document.createElement("OPTION");
			option.text = VBReplace(debugCallstackData[x][0], "\n"," ");
			option.value = debugCallstackData[x][0];
			hwndWABCallStack.document.all("lstOutput").options.add(option);
		}
	}
	catch(err){
	}
}

function saveDebugWindowPos(theWindow, top, left, width, height){
	try{
		setCookie(theWindow + "_Top", top);
		setCookie(theWindow + "_Left", left);
		setCookie(theWindow + "_Width", width);
		setCookie(theWindow + "_Height", height);
	}
	catch(err){
	}
}

var hwndEventCodeEditor;
var EventCodeEditorLeft;
var EventCodeEditorTop;
var EventCodeEditorWidth;
var EventCodeEditorHeight;

function ShowEventCodeEditor() {
	EventCodeEditorLeft		= getCookie("EventCodeEditor_Left");
	EventCodeEditorTop		= getCookie("EventCodeEditor_Top");
	EventCodeEditorWidth	= getCookie("EventCodeEditor_Width");
	EventCodeEditorHeight	= getCookie("EventCodeEditor_Height");

	EventCodeEditorLeft		= (!EventCodeEditorLeft) ? "10" : EventCodeEditorLeft;
	EventCodeEditorTop		= (!EventCodeEditorTop) ? "10" : EventCodeEditorTop;
	EventCodeEditorWidth	= (!EventCodeEditorWidth) ? "800" : EventCodeEditorWidth;
	EventCodeEditorHeight	= (!EventCodeEditorHeight) ? "600" : EventCodeEditorHeight;
	
	if(div_IDEToolbar.children(0).rows(0).cells(6).disabled)
		return;
	div_IDEToolbar.children(0).rows(0).cells(6).disabled = true;
	div_IDEToolbar.children(0).rows(0).cells(7).disabled = true;

	var DialogFeatures = "dialogHeight: " + EventCodeEditorHeight + "px; dialogWidth: " + EventCodeEditorWidth + "px; dialogTop: " + EventCodeEditorTop + "px; dialogLeft: " + EventCodeEditorLeft + "px; edge: Raised; help: No; resizable: Yes; status: no;";
	try{
		hwndEventCodeEditor.returnValue;
		EventCodeEditorLeft = hwndEventCodeEditor.window.screenLeft;
		EventCodeEditorTop = hwndEventCodeEditor.window.screenTop;
		hwndEventCodeEditor.close();
		div_IDEToolbar.children(0).rows(0).cells(6).disabled = false;
		div_IDEToolbar.children(0).rows(0).cells(7).disabled = false;
	}
	catch(err){
		hwndEventCodeEditor = window.showModelessDialog("form1.csp?SYS__FormName=frmEventCodeEditor&debugFormName=" + FormName,window,DialogFeatures);
	}
}

function saveEventCodeEditorPos(Top, Left, Width, Height){
	try{
		//alert(Top + "\n" + Left + "\n" + Width + "\n" + Height);
		setCookie("EventCodeEditor_Top", Top);
		setCookie("EventCodeEditor_Left", Left);
		setCookie("EventCodeEditor_Width", Width);
		setCookie("EventCodeEditor_Height", Height);
	}
	catch(err){
	}
}

//EventCodeEditorSelectEvent(28323,"onClick");
function EventCodeEditorSelectEvent(HTMLControlID,Event) {
	try {
		hwndEventCodeEditor.SelectControlEvent(HTMLControlID,Event);
	} catch(err) {
		EventCodeEditorLeft		= getCookie("EventCodeEditor_Left");
		EventCodeEditorTop		= getCookie("EventCodeEditor_Top");
		EventCodeEditorWidth	= getCookie("EventCodeEditor_Width");
		EventCodeEditorHeight	= getCookie("EventCodeEditor_Height");

		EventCodeEditorLeft		= (!EventCodeEditorLeft) ? "10" : EventCodeEditorLeft;
		EventCodeEditorTop		= (!EventCodeEditorTop) ? "10" : EventCodeEditorTop;
		EventCodeEditorWidth	= (!EventCodeEditorWidth) ? "800" : EventCodeEditorWidth;
		EventCodeEditorHeight	= (!EventCodeEditorHeight) ? "600" : EventCodeEditorHeight;
		
		div_IDEToolbar.children(0).rows(0).cells(6).disabled = true;
		div_IDEToolbar.children(0).rows(0).cells(7).disabled = true;
		var DialogFeatures = "dialogHeight: " + EventCodeEditorHeight + "px; dialogWidth: " + EventCodeEditorWidth + "px; dialogTop: " + EventCodeEditorTop + "px; dialogLeft: " + EventCodeEditorLeft + "px; edge: Raised; help: No; resizable: Yes; status: no;";
		hwndEventCodeEditor = window.showModelessDialog("form1.csp?SYS__FormName=frmEventCodeEditor&debugFormName=" + FormName + "&TargetHTMLControlID=" + HTMLControlID + "&TargetnodeName=" + Event,window,DialogFeatures);
	}
}

var TerminalWidth;
var TerminalHeight;
var hwndTerminal;

function ShowTerminal() {
	TerminalLeft	= getCookie("WABTerminal_Left");
	TerminalTop		= getCookie("WABTerminal_Top");
	TerminalWidth	= getCookie("WABTerminal_Width");
	TerminalHeight	= getCookie("WABTerminal_Height");
	
	TerminalWidth	= (!TerminalWidth) ? "800" : TerminalWidth;
	TerminalHeight	= (!TerminalHeight) ? "600" : TerminalHeight;
	TerminalLeft	= (!TerminalLeft) ? (window.screen.width - TerminalWidth) / 2 : TerminalLeft;
	TerminalTop		= (!TerminalTop) ? (window.screen.height - TerminalHeight) / 2 : TerminalTop;

	var DialogFeatures = "dialogLeft: " + TerminalLeft + "px; dialogTop: " + TerminalTop + "px; dialogHeight: " + TerminalHeight + "px; dialogWidth: " + TerminalWidth + "px; edge: Raised; center: Yes; help: No; resizable: Yes; status: no;";
	try{
		hwndTerminal.returnValue;
		hwndTerminal.close();
		/*div_IDEToolbar.children(0).rows(0).cells(6).disabled = false;
		div_IDEToolbar.children(0).rows(0).cells(7).disabled = false;*/
	}
	catch(err){
		hwndTerminal = window.showModelessDialog('form1.csp?SYS__FormName=frmWABTerminal&debugFormName=' + FormName, window, DialogFeatures);
	}
}

function getCookie(name) {
	try{
		var re = new RegExp(name + "=([^;]+)");
		var value = re.exec(document.cookie);
		return (value != null) ? unescape(value[1]) : null;
	}
	catch(err){
		return "";
	}
}

function setCookie(name, value) {
	try{
		var today = new Date();
		var expiry = new Date(today.getTime() + 365 * 24 * 60 * 60 * 1000);
		document.cookie=name + "=" + escape(value) + "; expires=" + expiry.toGMTString();
	}
	catch(err){
		alert("error, " + name + ", " + value)
	}
}

function sortArray(oArray)
{
	var l;
	var arrNew = new Array();
	for(i = 0; i < oArray.length; i++)
	{
		arrNew[i] = new Array(oArray[i].toLowerCase(), oArray[i])
	}
	l = arrNew.sort();
	var arrFinal = new Array()
	for(i = 0; i < arrNew.length; i++)
	{
		arrFinal[i] = arrNew[i][1];
	}	
	return arrFinal;
}

function xmlHTTP(sActionURL, oRequestObject, bSuppressErrors, bAsync)
{	
	var _xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
	this.async = false;
	this.invoke = invoke;	
	if(sActionURL)
	{
		this.invoke(sActionURL, oRequestObject, bSuppressErrors, bAsync)
	}
	function invoke(sActionURL, oRequestObject, bSuppressErrors, bAsync)
	{			
		_xmlHTTP.Open("POST", sActionURL, ((bAsync == false)||(bAsync == true))?(bAsync):(this.async));						
		_xmlHTTP.Send(oRequestObject);
		this.status = xmlHTTP.status;			
		this.responseText = _xmlHTTP.responseText;
		this.responseXML = _xmlHTTP.responseXML;
		if(_xmlHTTP.status != 200)
		{
			if(!bSuppressErrors)
				alert("An invalid response was received from the server. " + _xmlHTTP.statusText);
			this.status = false;
			return false;
		}		
		if((_xmlHTTP.responseXML.parseError != 0)||(!_xmlHTTP.responseXML.xml))
		{		
			if(!bSuppressErrors)
				alert("An invalid response was received from server. " + _xmlHTTP.responseXML.parseError.reason);
			this.status = false;
			return false;
		}
		this.status = true;
		return true;
	}
}

function Document_clearInputs(sInputTypes){
	//Flags used to determine which control types should be cleared
	var bTextbox = false, bTextArea = false, bPassword = false, bCheckBox = false, bRadio = false, bListbox = false, bDropdown = false; 
	if(sInputTypes == null || sInputTypes == ""){ //if "" or null is passed in, all flags are checked
		bTextbox = true;
		bTextArea = true;
		bPassword = true;
		bCheckBox = true;
		bRadio = true;
		bDropdown = true;
		bListbox = true;
	} else {//if "objecttype;" is entered, then the object type will be flaged to be cleared.
		var arrFlags = sInputTypes.split(";");
		for (var i = 0; i < arrFlags.length; i++){
			switch (arrFlags[i]){
				case "TEXTBOX":
				case "textbox":
					bTextbox = true;
					break;
				case "TEXTAREA":
				case "textarea":
					bTextArea = true;
					break;
				case "PASSWORD":
				case "password":
					bPassword = true;
					break;
				case "CHECKBOX":
				case "checkbox":
					bCheckBox = true;
					break;
				case "RADIO":
				case "radio":
					bRadio = true;
					break;	
				case "SELECT":
				case "select":
				case "LISTBOX":
				case "listbox":
					bListbox = true;
				case "DROPDOWN":
				case "dropdown":
					bDropdown = true;
					break;			
			}
		}
	}

	if (bTextbox || bPassword || bCheckBox || bRadio){
		//Get all input type controls and clears the contents depending on the specified flags
		var arrInput = document.body.getElementsByTagName("INPUT");
		var oInput;
		for(var i = 0; i < arrInput.length; i++){
			oInput = arrInput[i];
			if(oInput.type == "text" && bTextbox){
				oInput.value = "";
			} else if(oInput.type == "password" && bPassword){
				oInput.value = "";
			} else if(oInput.type == "checkbox" && bCheckBox){ 
				oInput.checked = false;
			} else if(oInput.type == "radio" && bRadio){ 
				oInput.checked = false;
			}
		}
	}
	
	if (bTextArea){
		//Gets all the textareas and clears the textbox's value
		var arrInput = document.body.getElementsByTagName("TEXTAREA");
		var oInput;
		for(var i = 0; i < arrInput.length; i++){
			oInput = arrInput[i];
			oInput.value = "";
		}
	} 
	
	if (bDropdown || bListbox){
	
		//Gets all the textareas and clears the textbox's value
		var arrInput = document.body.getElementsByTagName("SELECT");
		var oInput;
		for(var i = 0; i < arrInput.length; i++){
			oInput = arrInput[i];
			oInput.selectedIndex = -1;
		}
	} 
}

/*
function  Document_ShowOpenDir(CurrentDirectory) {
	var DialogFeatures = "help:No; status:no; DialogWidth:485px; DialogHeight:455px;";
	var ActionURL = "";
	ActionURL = "form1.csp"
	ActionURL += "?SYS__FormName=frmOpenDirectory"
	if (CurrentDirectory!=null) {
		ActionURL += "&Directory=" + escapex(CurrentDirectory);		
	}
	var Dir = window.showModalDialog(ActionURL,"",DialogFeatures);
	if (!Dir) Dir = "";
	return Dir;
}

function Document_ShowOpen(Directory,Filter,FilterList,View,ViewList,Action,FileName,BackgroundImage) {
	var DialogFeatures = "help:No; status:no; DialogWidth:485px; DialogHeight:455px; resizable:0";
	var ActionURL = "";
	ActionURL = "form1.csp"
	ActionURL += "?SYS__FormName=frmFileHandler"
	if (Directory) {
		ActionURL += "&Directory=" + escapex(Directory)
	}
	if (Filter) {
		ActionURL += "&Filter=" + escapex(Filter)
	}
	if (FilterList) {
		ActionURL += "&FilterList=" + escapex(FilterList)
	}
	if (View) {
		ActionURL += "&View=" + escapex(View)
	}
	if (ViewList) {
		ActionURL += "&ViewList=" + escapex(ViewList)
	}
	if (Action) {
		ActionURL += "&Action=" + escapex(Action)
	}
	if (FileName) {
		ActionURL += "&FileName=" + escapex(FileName)
	}
	if (BackgroundImage) {
		ActionURL += "&backgroundImage=" + escapex(BackgroundImage)
	}
	ActionURL += "&backgroundImage=ide/shared/images/graymarble.jpg";	
	var File = window.showModalDialog(ActionURL,"",DialogFeatures);
	//if (!File) File = "";
	return File;
}
*/

//expandTagValues(document.all(HTMLControlID));
function expandTagValues(oTagValues) {	
	//alert(oTagValues.id + "	-	" + oTagValues.ControlTypeName + "\n" + oTagValues.xml)
	//return;
	try {
		if(bCompressed != true)	return;			
	} catch(err) {
		return;
	}
	var oXML = new ActiveXObject("Microsoft.XMLDOM");
	oXML.async = false;
	oXML.loadXML("<root/>");
	var oNode, oSubNode;
	var oNewNode, oNewSubNode;	
	var oPropDef = dsoControlTags.selectSingleNode("/root/control[@id = '" + oTagValues.HTMLControlTypeID + "']");
	for(var i = 0; i < oPropDef.childNodes.length; i++) {
		oDefNode = oPropDef.childNodes[i];						
		oNewNode = oTagValues.createNode(1, oDefNode.text, "");			
		oNode = oTagValues.selectSingleNode("/root/" + oDefNode.nodeName);
		if(oNode != null) {
			var arrSubNodes = oNode.childNodes;			
			for(var x = 0; x < oNode.childNodes.length; x++) {			
				oSubNode = oNode.childNodes[x];			
				oNewSubNode = oSubNode.cloneNode(true);
				oNewNode.appendChild(oNewSubNode);			
			}
		}
		oXML.documentElement.appendChild(oNewNode);
	}	
	oTagValues.loadXML(oXML.xml);
	//alert(oTagValues.id + "\n" + oTagValues.xml)
	delete oXML;
}

function translateNode(oXMLTagValues,sSourcePath,sDestinationPath,sDestinationName) {
	if (oXMLTagValues.selectSingleNode(sDestinationPath)==null) {
		var oNewNode=oXMLTagValues.getPropertyNode(sDestinationName,true)
		var oOriginalNode=oXMLTagValues.selectSingleNode(sSourcePath)
		if (oOriginalNode != null) {
			oNewNode.text=oOriginalNode.text;
			oOriginalNode.parentNode.removeChild(oOriginalNode);
		}
	}
}

function TagValues_getPropertyNode(sPropertyName,bCreateIfNull,HTMLControlID) {
//Function searchs through the tagValues for the specified property. If it is found it will return the node.
//If it is not found it will create the node depending on the boolean parameter sent in.
	var oTagValues = document.all(HTMLControlID); //Get the tagValues
	if (oTagValues == null || (sPropertyName == null || sPropertyName == "")) return null;
	var oNode = oTagValues.selectSingleNode("/root/" + sPropertyName);
	if (oNode != null) {
		return oNode; //Return node if found
	}
	else if (bCreateIfNull != false) { //Create node if not found
		var oNewNode = oTagValues.createNode(1, sPropertyName, "");
		oTagValues.documentElement.appendChild(oNewNode);
		return oNewNode; 
	} else {
		return null; //Return
	}
}

function TagValues_getPropertyValue(sPropertyName,sDefaultValue,HTMLControlID) {
	var oTagValues = document.all(HTMLControlID); //Get tagValues
	if (oTagValues == null || (sPropertyName == null || sPropertyName == "") || (sDefaultValue == null)) return null;
	if (oTagValues.selectNodes("/root/" + sPropertyName).length == 0) {
		return sDefaultValue; //Return the default value of not found
	} else {
		return oTagValues.selectSingleNode("/root/" + sPropertyName).text; //Return the value of the node if found
	}
}

function zFormatCurrencyType(num, symbol) 
{
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + symbol + " " + num + '.' + cents);
}

function zFormatCurrency(num) 
{
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + num + '.' + cents);
}


//frame.js
function _33(iHTMLControlID) {
	initIFrame(iHTMLControlID);
}

function initIFrame(iHTMLControlID) {
	var oXMLTagValues=document.all(String(iHTMLControlID));
	if(!oXMLTagValues)
		return;
	var sFrameID=oXMLTagValues.selectSingleNode("/root/ID").text;
	var oFrame=document.all(sFrameID);
	if(!oFrame)
		return;
	oFrame.tagValues=oXMLTagValues;
	oFrame.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","iHTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+iHTMLControlID+"');");
	oFrame.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","iHTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+iHTMLControlID+"');");	

	oFrame.onreadystatechange=new Function("sFrameID","iHTMLControlID","return iFrame_onreadystatechange('" + sFrameID + "','" + iHTMLControlID + "');");
	oFrame.name=(oXMLTagValues.selectSingleNode("/root/name") != null) ? oXMLTagValues.selectSingleNode("/root/name").text : oXMLTagValues.selectSingleNode("/root/ID").text;
}

function iFrame_onreadystatechange(sFrameID,iHTMLControlID) {
	var oTagValues=document.all(iHTMLControlID);
	if(!oTagValues){
		alertErr("","IFrame","iFrame_onreadystatechange","Invalid TagValue ID:'"+iHTMLControlID+"' specified.");
		return;
	}
	if(oTagValues.parseError!=0){
		alertErr("","IFrame","iFrame_onreadystatechange","TagValue Error: "+oTagValues.parseError.reason);
		return;
	}
	var oIFrame=document.all(sFrameID);
	if(!oIFrame){
		alertErr(sFrameID,"IFrame","iFrame_onreadystatechange","Invalid iFrame ID:'" + sFrameID + "' specified.");
		return;
	}
	var onreadystatechange=(oTagValues.selectNodes("/root/onreadystatechange").length>0)?(oTagValues.selectSingleNode("/root/onreadystatechange").text):("");
	try{
		if(onreadystatechange!=""){
			debugWrite(sFrameID+".onmouseenter",new Array(iHTMLControlID,"onmouseenter"),"callstack");
			eval(onreadystatechange);
		}
	}
	catch(err){
		alertErr(sFrameID,"IFrame","iFrame_onreadystatechange",err.description);
	}
}


//htmlblock.js
function _18(HTMLControlID) {
	HTMLBlock_Initialise(HTMLControlID);
}

function HTMLBlock_Initialise(HTMLControlID){
	/*
	var HTMLBlockID = document.all(HTMLControlID).selectSingleNode("//ID").text;	
	try{
		if(DevMode){
			document.all(HTMLBlockID).style.display = "block";
		}
	}
	catch(err){
		document.all(HTMLBlockID).style.display = "none";
	}
	*/
	document.write(document.all(HTMLControlID).selectSingleNode("//root/HTMLBlock").text);
}


//hyperlink.js
function _13(HTMLControlID) {
	InitHyperlink(HTMLControlID);
}

function InitHyperlink(HTMLControlID) {
	var HyperLinkID = document.all(HTMLControlID).selectSingleNode("//ID").text;
	document.all(HyperLinkID).tagValues = document.all(HTMLControlID);
	document.all(HyperLinkID).tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	document.all(HyperLinkID).tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	
	document.all(HyperLinkID).SetURL = new Function("URL","HyperLinkID","SetHyperlinkURL(URL,'" + HyperLinkID + "');");
	document.all(HyperLinkID).GetURL = new Function("HyperLinkID","return GetHyperlinkURL('" + HyperLinkID + "');");
	document.all(HyperLinkID).SetDescription = new Function("Description","HyperLinkID","SetHyperlinkDescription(Description,'" + HyperLinkID + "');");
	document.all(HyperLinkID).GetDescription = new Function("HyperLinkID","return GetHyperlinkDescription('" + HyperLinkID + "');");
	document.all(HyperLinkID).SetTarget = new Function("Target","HyperLinkID","SetHyperlinkTarget(URL,'" + HyperLinkID + "');");
	document.all(HyperLinkID).GetTarget = new Function("HyperLinkID","return GetHyperlinkTarget('" + HyperLinkID + "');");
	document.all(HyperLinkID).OnClickEvent = new Function("HTMLControlID","HyperlinkURLOnClickEvent('" + HTMLControlID + "');");
	document.all(HyperLinkID).Refresh = new Function("HTMLControlID","HyperLinkID","HyperLink_Refresh2('" + HTMLControlID + "','" + HyperLinkID + "')")
	document.all(HyperLinkID).Refresh();

	
	document.all(HyperLinkID).style.fontName = document.all(HTMLControlID).getPropertyValue("Font-Name","Arial")
	
	document.all(HyperLinkID).style.fontSize = document.all(HTMLControlID).getPropertyValue("Font-Size","8pt")
	
	document.all(HyperLinkID).style.fontStyle = document.all(HTMLControlID).getPropertyValue("Font-Style","Normal")
	
	document.all(HyperLinkID).style.fontWeight = document.all(HTMLControlID).getPropertyValue("Font-Weight","Normal")
	
}

function HyperLink_Refresh2(HTMLControlID,HyperLinkID) {
	document.all(HyperLinkID).className = document.all(HTMLControlID).getPropertyValue("cssClass")
	
	if (document.all(HTMLControlID).selectSingleNode("//dataFld") != null) {
		try {
			document.all(HyperLinkID).href = document.all(VBReplace(document.all(HTMLControlID).selectSingleNode("//dataSrc").text,"#","")).recordset(document.all(HTMLControlID).selectSingleNode("//dataFld").text).value;
		} catch(err) {}
	} else {
		try {
			document.all(HyperLinkID).href = document.all(HTMLControlID).selectSingleNode("//URL").text;
		} catch(err) {}
	}

	if (document.all(HTMLControlID).selectSingleNode("//DisplayDataFld") != null) {
		try {
			document.all(HyperLinkID).innerText = document.all(VBReplace(document.all(HTMLControlID).selectSingleNode("//DisplayDataSrc").text,"#","")).recordset(document.all(HTMLControlID).selectSingleNode("//DisplayDataFld").text).value;
		} catch(err) {}
	} else {
		try {
			document.all(HyperLinkID).innerText = document.all(HTMLControlID).selectSingleNode("//Caption").text;	
		} catch(err) {}
	}
}

function SetHyperlinkDescription(Description,HyperLinkID) {
	document.all(HyperLinkID).innerText = Description;
}

function GetHyperlinkDescription(HyperLinkID) {
	return document.all(HyperLinkID).innerText;
}

function SetHyperlinkURL(URL,HyperLinkID) {
	document.all(HyperLinkID).href = URL;
}

function GetHyperlinkURL(HyperLinkID) {
	return document.all(HyperLinkID).href;
}

function SetHyperlinkTarget(URL,HyperLinkID) {
	document.all(HyperLinkID).target = URL;
}

function GetHyperlinkTarget(HyperLinkID) {
	return document.all(HyperLinkID).target;
}

function RefreshHyperLink(HyperLinkID, HTMLControlID){
	var HyperLink = document.all(HyperLinkID);
	var oTagValues=document.all(HTMLControlID);
	if (oTagValues==null) return;
	if (HyperLink==null)  return;
	var RecordsetID = (oTagValues.selectSingleNode("//xmlRecordsetID") != null) ? oTagValues.selectSingleNode("//xmlRecordsetID").text : "";
	var oDSO=document.all(RecordsetID)
	if (oDSO == null) return;
	
	var RecordsetFieldURL = (oTagValues.selectSingleNode("//xmlRecordsetFieldURL") !=null) ? oTagValues.selectSingleNode("//xmlRecordsetFieldURL").text : "";
	var RecordsetFieldDescription = (oTagValues.selectSingleNode("//xmlRecordsetFieldDescription") != null) ? oTagValues.selectSingleNode("//xmlRecordsetFieldDescription").text : "";
	
	if (oDSO.GetCurrentRecordFieldValue(RecordsetFieldURL) != null) {
		HyperLink.SetURL(oDSO.GetCurrentRecordFieldValue(RecordsetFieldURL));
	} else {
		HyperLink.SetURL("");
	}
	
	if (oDSO.GetCurrentRecordFieldValue(RecordsetFieldDescription) != null) {
		SetHyperlinkDescription(oDSO.GetCurrentRecordFieldValue(RecordsetFieldDescription),HyperLinkID);
	} else {
		SetHyperLinkDescription("",HyperLinkID);
	}
}

function HyperlinkURLOnClickEvent(HTMLControlID) {
	if (window.event.altKey) {
		event.returnValue=false;
		return;
	}
	var OnClick = (document.all(HTMLControlID).selectSingleNode("//onClick") != null) ? document.all(HTMLControlID).selectSingleNode("//onClick").text : "";
	if (OnClick != null){
		try {
			if (OnClick != ""){
				debugWrite(document.all(HTMLControlID).selectSingleNode("//ID").text + ".onClick",new Array(HTMLControlID,"onClick"),"callstack");
				eval(OnClick)
			}
		} catch(err) {
			alertErr(document.all(HTMLControlID).selectSingleNode("//ID").text,"Hyperlink","onClick","User onClick event error #" + err.number + ": " + err.description + "\n" + OnClick);
		}
	}
}


//imageurl.js
function _15(HTMLControlID) {
	InitImageURL(HTMLControlID);
}

function InitImageURL(HTMLControlID) {
	var TagValues = document.all(HTMLControlID);
	var ImageURLID = TagValues.selectSingleNode("//ID").text;
	
	var cssClass=(document.all(HTMLControlID).selectNodes("//cssClass").length > 0) ? document.all(HTMLControlID).selectSingleNode("//cssClass").text : "";
	document.all(ImageURLID).className=cssClass;
	
	document.all(ImageURLID).tagValues = TagValues;
	document.all(ImageURLID).tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	document.all(ImageURLID).tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	

	document.all(ImageURLID).ondblclick = new Function("ImageURLID","ImageURLOndblClickEvent('" + ImageURLID + "');");
	document.all(ImageURLID).onclick = new Function("ImageURLID","ImageURLOnClickEvent('" + ImageURLID + "');");
}

function ImageURLOndblClickEvent(ImageURLID) {
	if (window.event.altKey) return;
	var HTMLControlID = document.all(ImageURLID).HTMLControlID;
	var onDblClick = (document.all(HTMLControlID).selectSingleNode("//onDblClick") != null) ? document.all(HTMLControlID).selectSingleNode("//onDblClick").text : "";
	if (onDblClick != null){
		try {
			if (onDblClick !="") {
				debugWrite(ImageURLID + ".onDblClick",new Array(document.all(ImageURLID).HTMLControlID,"onDblClick"),"callstack");
				eval(onDblClick);
			}
		} catch(err) {
			alertErr(ImageURLID,"ImageURL","onDblClick","User onDblClick event error #" + err.number + ": " + err.description + "\n" + onDblClick);
		}
	}
}

function ImageURLOnClickEvent(ImageURLID) {
	if (window.event.altKey) return;
	var HTMLControlID = document.all(ImageURLID).HTMLControlID;
	var OnClick = (document.all(HTMLControlID).selectSingleNode("//onClick")!=null) ? document.all(HTMLControlID).selectSingleNode("//onClick").text : "";
	if (OnClick != null){
		try {
			if (OnClick != "") {
				debugWrite(ImageURLID + ".onClick",new Array(document.all(ImageURLID).HTMLControlID,"onClick"),"callstack");
				eval(OnClick)
			}
		} catch(err) {
			alertErr(ImageURLID,"ImageURL","onClick","User onClick event error #" + err.number + ": " + err.description + "\n" + OnClick);
			//alert("onClick event error: " + err.description + "\n" + OnClick);
		}
	}
}


//popup.js
var SYS__WABPopupMenu = window.createPopup();

function _21(HTMLControlID) {
	Popup_Initialize(HTMLControlID);
}

function Popup_Initialize(HTMLControlID){
	var PopupID = document.all(String(HTMLControlID)).documentElement.selectSingleNode("ID").text;
	
	try{
		if(DevMode){
			document.all(PopupID).style.display = "BLOCK";
		}
	}
	catch(err){
		document.all(PopupID).style.display = "NONE";
	}
	var popUp = document.all(PopupID);
	popUp.tagValues = document.all(String(HTMLControlID));
	popUp.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	popUp.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	
	
	translateNode(popUp.tagValues,"/root/pSourceFile","/root/xmlSourceFile","xmlSourceFile");
	
	popUp.xmlSource = document.all("xml" + HTMLControlID);
	popUp.xmlSource.async = false;
	var xmlSourceFile = (popUp.tagValues.selectSingleNode("//root/xmlSourceFile") != null) ? popUp.tagValues.selectSingleNode("//root/xmlSourceFile").text : "";
	if(xmlSourceFile){
		popUp.xmlSource.load(xmlSourceFile); 
	}
	
	popUp.ShowPopup	= new Function ("HTMLControlID", "Popup_Show('" + HTMLControlID + "');");
	popUp.InvokeDefault	= new Function ("HTMLControlID", "Popup_InvokeDefault('" + HTMLControlID + "');");
}

function Popup_Show(HTMLControlID){
	var PopupHTML = "<TABLE UNSELECTABLE=\"on\" cellpadding=0 cellspacing=0 id='tblPopUp_" + HTMLControlID + "' style='FONT-FAMILY:arial; FONT-SIZE:8pt; CURSOR:default; BACKGROUND-COLOR:buttonface; BORDER-RIGHT: threeddarkshadow 2px solid; BORDER-TOP: threedhighlight 2px solid; BORDER-LEFT: threedhighlight 2px solid; BORDER-BOTTOM: threeddarkshadow 2px solid'>";
	var xmlPopup = document.all("xml" + HTMLControlID);
	var Image;
	if(!xmlPopup)return;
	var PopupItemCount = xmlPopup.documentElement.childNodes.length;
	var i, Caption, childrenHTML;
	for(i = 0; i < PopupItemCount; i++){
		if ((xmlPopup.documentElement.childNodes(i).getAttribute("Visibility") != "0")&&(xmlPopup.documentElement.childNodes(i).getAttribute("Visibility") != 0)){
			Caption = xmlPopup.documentElement.childNodes(i).getAttribute("Caption");
			if(Caption == "-"){
				Caption = "<hr>";
				PopupHTML += "<TR><TD UNSELECTABLE=\"on\" colspan=2 height='6px' colspan='2'>" + Caption + "</TD></TR>";
			}
			else{
				if(xmlPopup.documentElement.childNodes(i).getAttribute("IsDefault") == 1)
					Caption = "<b>" + Caption + "</b>";

				Image = xmlPopup.documentElement.childNodes(i).getAttribute("Image");
				if(Image)
					Image = "<img src='" + Image + "'>";

				PopupHTML += "<TR UNSELECTABLE=\"on\" WizardTag='WizardPopupMenuItem' onclick=\"window.parent.Popup_Click('" + i + "', '" + HTMLControlID + "');\" onmouseover=\"this.style.color = 'highlighttext'; this.bgColor = 'highlight'; window.parent.Popup_ItemOver('" + i + "', 'xmlPopup');\" onmouseout=\"this.style.color = ''; this.bgColor = '';\"><TD UNSELECTABLE=\"on\">&nbsp;&nbsp;" + Image + "&nbsp;</TD><TD UNSELECTABLE=\"on\">&nbsp;" + Caption + "&nbsp;</TD></TR>";
			}
		}
	}
	PopupHTML += "</TABLE>";
	var PopupBody = SYS__WABPopupMenu.document.body;
	PopupBody.innerHTML = PopupHTML;
	document.all("PopupBody" + HTMLControlID).innerHTML = PopupHTML;
	var PopupWidth = document.all("tblPopUp_" + HTMLControlID).offsetWidth;
	var PopupHeight = document.all("tblPopUp_" + HTMLControlID).offsetHeight;
	SYS__WABPopupMenu.show(window.event.clientX, window.event.clientY, PopupWidth, PopupHeight, document.body);
	//document.body.onmouseup = closePopup;
	SYS__WABPopupMenu.document.oncontextmenu = new Function("return false");
}  

function Popup_InvokeDefault(HTMLControlID){
	var xmlPopup = document.all("xml" + HTMLControlID);
	if(!xmlPopup)return;

	if(xmlPopup.selectNodes("//Node[@IsDefault != '']").length){
		var ClickEvent = (xmlPopup.selectSingleNode("//Node[@IsDefault != '']") != null) ? unescape(xmlPopup.selectSingleNode("//Node[@IsDefault != '']").getAttribute("ClickEvent")) : "";
		try{
			if (ClickEvent!="") {
				debugWrite(document.all(HTMLControlID).selectSingleNode("//ID").text + ".PopupDefaultEvent",new Array(HTMLControlID,"PopupDefaultEvent"),"callstack");
				eval(ClickEvent);
			}
		}
		catch(err){
			var PopupID = document.all(String(HTMLControlID)).documentElement.selectSingleNode("ID").text;
			alertErr(PopupID,"Popup","InvokeDefault","User click event error #" + err.number + ": " + err.description + "\n" + ClickEvent);
		}
	}
}

function Popup_ItemOver(NodeIndex, xmlID){
	return;
	var PopupBody = tempPopup.document.body;
	PopupBody.innerHTML = "here";
	tempPopup.show(100, 100, 100, 100, document.body);
	return;
	var xmlObject = document.all(xmlID);
	if (!xmlObject)return;
	var NodePath = "xmlObject.documentElement";
	var arrNodeIndex = NodeIndex.split(".");
	var i, NodeIndexCount = arrNodeIndex.length;
	for (i = 0; i < NodeIndexCount; i++){
		NodePath = NodePath + ".childNodes(" + arrNodeIndex[i] + ")"
	}	
	eval("var Node = " + NodePath);
	if(!Node.hasChildNodes())return;
	var PopupHTML = "<TABLE cellpadding=0 cellspacing=0 id='tblPopUp_" + xmlID + "' style='FONT-FAMILY:arial; FONT-SIZE:8pt; CURSOR:default; BACKGROUND-COLOR:buttonface; BORDER-RIGHT: threeddarkshadow 2px solid; BORDER-TOP: threedhighlight 2px solid; BORDER-LEFT: threedhighlight 2px solid; BORDER-BOTTOM: threeddarkshadow 2px solid'>";
	for(i = 0; i < Node.childNodes.length; i++){
		Caption = Node.childNodes(i).getAttribute("Caption");
		childrenHTML = "";
		if (Node.childNodes(i).hasChildNodes()){
			childrenHTML = "?";
		}
		PopupHTML += "<TR onclick=\"window.parent.Popup_Click('" + i + "', 'xmlPopup');\" onmouseover=\"this.style.color = 'white';	this.bgColor = 'navy'; window.parent.Popup_ItemOver('" + i + "', 'xmlPopup');\" onmouseout=\"this.style.color = ''; this.bgColor = '';\"><TD UNSELECTABLE=\"on\">&nbsp;&nbsp;" + Caption + "</TD><TD UNSELECTABLE=\"on\">" + childrenHTML + "&nbsp;</TD></TR>";
	}
	PopupHTML += "</TABLE>";
	var PopupBody = SYS__WABPopupMenu.document.body;
	PopupBody.innerHTML = PopupHTML;
	
	document.all("divForm1_SizeCalculator").innerHTML = PopupHTML;
	var PopupWidth = document.all("divForm1_SizeCalculator").offsetWidth;
	var PopupHeight = document.all("divForm1_SizeCalculator").offsetHeight;

	//document.all("divPopup").innerHTML = PopupHTML;
	//var PopupWidth = document.all("tblPopUp_" + xmlID).offsetWidth;
	//var PopupHeight = document.all("tblPopUp_" + xmlID).offsetHeight;
	SYS__WABPopupMenu.show(window.event.clientX, window.event.clientY, PopupWidth, PopupHeight, document.body);
	
	document.body.onmouseup = closePopup;
	SYS__WABPopupMenu.document.oncontextmenu = new Function("return false");
	
}

function Popup_Click(NodeIndex, HTMLControlID){
	SYS__WABPopupMenu.hide();

	var xmlObject = document.all("xml" + HTMLControlID);

	if (!xmlObject)return;
	var NodePath = "xmlObject.documentElement";
	var arrNodeIndex = NodeIndex.split(".");
	var i, NodeIndexCount = arrNodeIndex.length;
	for (i = 0; i < NodeIndexCount; i++){
		NodePath = NodePath + ".childNodes(" + arrNodeIndex[i] + ")"
	}
	
	eval("var MenuItem = " + NodePath);
	var ClickEvent = MenuItem.getAttribute("ClickEvent");
	try{
		if (ClickEvent!="") {
			debugWrite(document.all(HTMLControlID).selectSingleNode("//ID").text + ".PopupMenuItemClickEvent",new Array(HTMLControlID,"PopupMenuItemClickEvent"),"callstack");
			eval(ClickEvent);
		}
	}
	catch(err){
		var PopupID = (document.all(String(HTMLControlID)).selectSingleNode("/root/ID") != null) ? document.all(String(HTMLControlID)).selectSingleNode("/root/ID").text : "";
		alertErr(PopupID,"Popup","Click","User click event error #" + err.number + ": " + err.description + "\n" + ClickEvent);
		//alert(err.description);
	}
}

function BuildQueryString(GridHTMLControlID, Fields){
	var xmlRecordset, RecordsetID, Piece, Field, Project, QueryString = "";

	xmlRecordset = document.all("" + GridHTMLControlID)
	if (xmlRecordset==null) return;
	RecordsetID = (xmlRecordset.selectSingleNode("/root/xmlRecordset") != null) ? xmlRecordset.selectSingleNode("/root/xmlRecordset").text : "";
	xmlRecordset = document.all(RecordsetID);
	Fields = Fields.split("}");
	for(var x = 0; x < Fields.length - 1; x++){
		Piece = Fields[x];
		Piece = Piece.split("|");
		Field = Piece[0];
		Field = Field.slice(1);
		Project = Piece[1];
		QueryString+=Project + "=" + xmlRecordset.GetCurrentRecordFieldValue(Field);
		if(x < Fields.length - 2)
			QueryString+="&";
	}
	return QueryString
}

function closePopup(){
  //Popup.hide();
}


//slider.js
//<SCRIPT LANGUAGE=JAVASCRIPT>
function _17(HTMLControlID) {
	Slider_Initialise(HTMLControlID);
}

function Slider_Initialise(HTMLControlID){
	var xmlID = "xml" + HTMLControlID;
	var TagValues = document.all(String(HTMLControlID));
	var SliderStyle = TagValues.selectSingleNode("//sliderStyle").text;
	var ContainerID = TagValues.selectSingleNode("//ID").text;
	var xmlSourceFile = (TagValues.selectSingleNode("//xmlSourceFile") != null) ? TagValues.selectSingleNode("//xmlSourceFile").text : "";
	var cssClass=(document.all(String(HTMLControlID)).selectNodes("//cssClass").length > 0) ? document.all(String(HTMLControlID)).selectSingleNode("//cssClass").text : "";

	document.all(ContainerID).tagValues = TagValues;
	document.all(ContainerID).tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	document.all(ContainerID).tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	
	translateNode(document.all(ContainerID).tagValues,"/root/pSourceFile","/root/xmlSourceFile","xmlSourceFile");
	document.all(ContainerID).className=cssClass;
	document.all(ContainerID).refresh = new Function("HTMLControlID", "return Slider_Refresh('" + HTMLControlID + "')");	
	document.all(ContainerID).setDataSource = new Function("sDataFile","HTMLControlID", "Slider_SetDataFile(sDataFile,'" + HTMLControlID + "');");
	document.all(ContainerID).refresh();
}

function Slider_Refresh(HTMLControlID) {
		
	var xmlID = "xml" + HTMLControlID;

	var TagValues = document.all(String(HTMLControlID));
	var SliderStyle = TagValues.selectSingleNode("//sliderStyle").text;

	var ContainerID = TagValues.selectSingleNode("//ID").text;
	var xmlSourceFile = (TagValues.selectSingleNode("//xmlSourceFile") != null) ? TagValues.selectSingleNode("//xmlSourceFile").text : "";
	var cssClass=(document.all(String(HTMLControlID)).selectNodes("//cssClass").length > 0) ? document.all(String(HTMLControlID)).selectSingleNode("//cssClass").text : "";
	
	if(!xmlSourceFile.length)
		return;
	eval("var xmlObject = " + xmlID);
	xmlObject.async = false;	
	xmlObject.load(xmlSourceFile);
	if (xmlObject.parseError.errorCode != 0){
		alertErr(ContainerID,"Slider","Initialise","XML parse error occured source file: '" + xmlSourceFile + "'.\n" + xmlObject.parseError.errorCode + "  " + xmlObject.parseError.reason);
		//alert("xml parse error occured for control '" + ContainerID + "' source file: '" + xmlSourceFile + "'.\n" + xmlObject.parseError.errorCode + "  " + xmlObject.parseError.reason);
		return;
	}
	try{
		eval("var Node = " + xmlID + ".documentElement");
	}
	catch(err){}
	if(!Node)
		return;
	if (FormName == "frmSliderMenu")
	{
		SliderStyle = xmlObject.selectSingleNode("//root").getAttribute("style");
	}
	switch (SliderStyle)
	{
		case "2":
			Slider_GenStyle2(xmlObject,Node,xmlID,ContainerID);
			break;
		case "3":
			Slider_GenStyle3(xmlObject,Node,xmlID,ContainerID);
			break;
		case "4":
			Slider_GenStyle4(xmlObject,Node,xmlID,ContainerID);
			break;
		default:
			//Original Style
			Slider_GenStyle1(xmlObject,Node,xmlID,ContainerID);
			break;
	}
}

function Slider_SetDataFile(sDataFile,HTMLControlID) 
{
	var SliderID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var Slider = document.all(SliderID);
	document.all(HTMLControlID).selectSingleNode("//root/xmlSourceFile").text = sDataFile;
	Slider.refresh();
}

function Slider_GenStyle2(xmlObject,Node,xmlID,ContainerID)
{
	var arrClickEvents = new Array(), ClickEventCount = 0;
	var ReturnValue = "<table border='1' cellpadding='0' cellspacing='0' width='100%' height='100%'>";
	
	ReturnValue += "<table border='0' cellspacing='1' cellpadding='0' width='100%' height='100%' class='Slider2Style'>"
    ReturnValue += "<tr><td valign='top'>"
	ReturnValue += "<div id='divSlider"+xmlID+"'>"
	
	var ChildIndex = 0, i, j;
	var ClickEvent = "", Display = "", BackgroundImage = "", BackGroundColor = "", Caption = "", ToolTip = "", ButtonBackGroundColor = "";
	var Image = "", ImagePosition = "", NodeIndex, ObjectID; 
	var NodeLength = Node.childNodes.length;
	
	ReturnValue += Slider_BuildMenuGroups(xmlObject,Node,xmlID,ContainerID,NodeLength,ReturnValue)
	
	ReturnValue += "</div>"
	ReturnValue += "</TABLE>";
	document.all(ContainerID).innerHTML = ReturnValue;
}

///------Slider Style 4 functions start
function Slider_GenStyle4(xmlObject,Node,xmlID,ContainerID)
{
	var arrClickEvents = new Array(), ClickEventCount = 0;
	var ReturnValue = "";
	var NodeLength = Node.childNodes.length;
	ReturnValue += Slider_BuildMenuGroups4(xmlObject,Node,xmlID,ContainerID,NodeLength,ReturnValue);
	
	ReturnValue += "</table>";
	document.all(ContainerID).innerHTML = ReturnValue;
}
function Slider_BuildMenuGroups4(xmlObject,Node,xmlID,ContainerID,NodeLength,ReturnValue)
{
	var ChildLength=0;

	for (i = 0; i < NodeLength; i++){
		Caption = Node.childNodes(i).getAttribute("Caption");
		BackGroundColor = Node.childNodes(i).getAttribute("BackGroundColor");
		ButtonBackGroundColor = Node.childNodes(i).getAttribute("ButtonBackGroundColor");
		ReturnValue += "<table style='overflow:hidden;border-collapse:collapse;width:100%;background-color:"+BackGroundColor+"' cellpadding=0px cellpadding=0px>";
		ReturnValue += "<tr><td	colspan=2 class=SliderHeader style='Background-Color:"+ButtonBackGroundColor+"' nowrap>"+Caption+"</td></tr>";
		
		var ChildLength = Node.childNodes(i).childNodes.length;
		if (ChildLength > 0){
			ReturnValue += Slider_BuildSubMenu4(xmlObject,Node,xmlID,ContainerID,NodeLength,ChildLength,i);
		}
		ReturnValue += "<table>";
		
	}
	return ReturnValue;
}
function Slider_BuildSubMenu4(xmlObject,Node,xmlID,ContainerID,NodeLength,ChildLength,i)
{
	var ReturnValue ="";
	for (j = 0; j < ChildLength; j++){
		Caption = Node.childNodes(i).childNodes(j).getAttribute("Caption");
		var Image = Node.childNodes(i).childNodes(j).getAttribute("Image");
		var NodeIndex = i + "." + j;
		var ClickEvent = Node.childNodes(i).childNodes(j).getAttribute("ClickEvent");
		
		try{
			ToolTip = Node.childNodes(i).childNodes(j).getAttribute("Tooltip");
		}
		catch(err){
			ToolTip = "";
		}
		
		if (Image.length > 0)
			var sImageHTML = "<img src='"+Image+"'>&nbsp;&nbsp;";
		else
			var sImageHTML = "";
			var sToolTipHTML = "";
		if (ToolTip){
			if (ToolTip.length > 0)
				sToolTipHTML = "title ='"+ToolTip+"'";
		}
		ReturnValue += "<td nowrap><table class=SliderText onclick='Slider_MenuItemClick(\"" +  NodeIndex + "\", \"" + xmlID + "\");' onmouseout=\"this.className = 'SliderText'\" onmouseover=\"this.className = 'SliderTextMoveOver'\" style='overflow:hidden;border-collapse:collapse;width:100%;' "+sToolTipHTML+"><tr><td class='slider_menuitem_image' nowrap>"+sImageHTML+"</td><td nowrap>"+Caption+"</td></tr></table></td>";
		ReturnValue += "</td></tr>";
	}
	return ReturnValue;
}
///------Slider Style 4 functions end
///------Slider Style 3 functions start
function Slider_GenStyle3(xmlObject,Node,xmlID,ContainerID)
{
	var arrClickEvents = new Array(), ClickEventCount = 0;
	var ReturnValue = "<div id='divSlider"+xmlID+"' class='xpslider_container'>";
	var NodeLength = Node.childNodes.length;
	ReturnValue += Slider_BuildMenuGroups3(xmlObject,Node,xmlID,ContainerID,NodeLength,ReturnValue);
	
	ReturnValue += "</div>";
	document.all(ContainerID).innerHTML = ReturnValue;
}

function Slider_BuildMenuGroups3(xmlObject,Node,xmlID,ContainerID,NodeLength,ReturnValue)
{
	var ChildLength=0;
	ReturnValue += "<table cellspacing='0' cellpadding='0'>";
	
	for (i = 0; i < NodeLength; i++){
		Caption = Node.childNodes(i).getAttribute("Caption");
		ReturnValue += "<tr><td><span style='width:10px'></span></td><td style='width:100%'>"
		ReturnValue += "<div id = '"+ContainerID+"__"+i+"' class='xpslider_menugroup'  SliderState=1 >";
		ReturnValue += "<table class='xpslider_menuitemsgroup' cellpadding=0 cellspacing=0 colspan=2>";
		ReturnValue += "<tr onclick='xpslider_menugroup_onclick(this);' onmouseout='xpslider_menugroup_mouseout(this);' onmouseover='xpslider_menugroup_mouseover(this);' style='width:100%;'>";
		ReturnValue += "<td class=xpslider_menugroupheader nowrap>"+Caption+"</td>";
		ReturnValue += "<td class=xpslider_menugroupheader_img nowrap></td>";
		ReturnValue += "</tr><tr><td class=xpslider_menuitem_spacer colspan=2>&nbsp;</td></tr>";
		var ChildLength = Node.childNodes(i).childNodes.length;
		if (ChildLength > 0){
			ReturnValue += Slider_BuildSubMenu3(xmlObject,Node,xmlID,ContainerID,NodeLength,ChildLength,i);
		}
		ReturnValue += "</tr><tr><td class=xpslider_menuitem_spacer>&nbsp;</td></tr></table>";
		ReturnValue +="</div>";
		ReturnValue += "<div class='SliderSpace'>&nbsp;</div>";
		ReturnValue +="</td><td><span style='width:10px'></span></td></tr>";
	}
	ReturnValue += "</table>"
	return ReturnValue;
}

function Slider_BuildSubMenu3(xmlObject,Node,xmlID,ContainerID,NodeLength,ChildLength,i)
{
	var ReturnValue ="";
	for (j = 0; j < ChildLength; j++){
		
		Caption = Node.childNodes(i).childNodes(j).getAttribute("Caption");
		var Image = Node.childNodes(i).childNodes(j).getAttribute("Image");
		var ClickEvent = Node.childNodes(i).childNodes(j).getAttribute("ClickEvent");
		
		try{
			ToolTip = Node.childNodes(i).childNodes(j).getAttribute("Tooltip");
		}
		catch(err){
			ToolTip = "";
		}
		var NodeIndex = i + "." + j;
		ReturnValue += "<tr>";
		if (Image.length > 0)
			var sImageHTML = "<img src='"+Image+"'>&nbsp;&nbsp;";
		else
			var sImageHTML = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		var sToolTipHTML = ""
		if (ToolTip){
			if (ToolTip.length > 0)
				sToolTipHTML = "title ='"+ToolTip+"'";
		}
		ReturnValue += "<td nowrap><table class=xpslider_menuitemnormal onclick='Slider_MenuItemClick(\"" +  NodeIndex + "\", \"" + xmlID + "\");' onmouseout=\"this.className = 'xpslider_menuitemnormal'\" onmouseover=\"this.className = 'xpslider_menuitemmouseover'\" "+sToolTipHTML+"><tr><td class=xpslider_menuitem_image nowrap>"+sImageHTML+"</td><td nowrap>"+Caption+"</td></tr></table></td>";
		ReturnValue += "</tr>";
	}
	return ReturnValue;
}


function xpslider_menugroup_mouseover(oTR)
{
	var oSlider = oTR.parentNode.parentNode.parentNode;
	var td1 = 0, td2=1;
	if (BrowserType() == "gecko") {td1=1;td2=3;}
	if(oSlider.getAttribute("SliderState") == "1"){
		oTR.childNodes[td1].className = "xpslider_menugroupheader_mouseover";
		oTR.childNodes[td2].className = "xpslider_menugroupheader_img_mouseover";
	}
	else{
		oTR.childNodes[td1].className = "xpslider_menugroupheader_mouseover";
		oTR.childNodes[td2].className = "xpslider_menugroupheader_img_collapse_mouseover";
		
	}
}

function xpslider_menugroup_mouseout(oTR)
{
	var td1 = 0, td2=1;
	if (BrowserType() == "gecko") {td1=1;td2=3;}
	var oSlider = oTR.parentNode.parentNode.parentNode;
	if(oSlider.getAttribute("SliderState") == "1"){
		oTR.childNodes[td1].className = 'xpslider_menugroupheader';
		oTR.childNodes[td2].className = "xpslider_menugroupheader_img";
	}
	else{
		oTR.childNodes[td1].className = 'xpslider_menugroupheader';
		oTR.childNodes[td2].className = "xpslider_menugroupheader_img_collapse";
	}
}

function BrowserType() //put this function into "common.js"
{
    var bt="";if(document.recalc){bt="ie"} else if(window.__defineGetter__){bt="gecko"} else if(window.opera){bt="opera"}else if(navigator.userAgent.match("Safari")){bt="safari"}
    return bt;
}
function xpslider_menugroup_onclick(oTR)
{
	
	var oSlider = oTR.parentNode.parentNode.parentNode;
	var td1 = 1, cn=0;
	if (BrowserType() == "gecko") {td1=3,cn=1}
	
	if(oSlider.getAttribute("SliderState") == "1"){				
		oTR.childNodes[td1].className = "xpslider_menugroupheader_img_collapse_mouseover";
		xpslider_menugroup_collapse(oSlider.id,oSlider.childNodes[cn].childNodes[cn].childNodes.length-1);
		oSlider.setAttribute("SliderState","0");
	}
	else{
		oTR.childNodes[td1].className = "xpslider_menugroupheader_img_mouseover";
		xpslider_menugroup_expand(oSlider.id,1);
		oSlider.setAttribute("SliderState","1");
	}
}

function xpslider_menugroup_collapse(SliderID,i)
{
    var oSlider = document.getElementById(SliderID);
    var cn=0, oTR;
	if (BrowserType() == "gecko") {cn=1}
    if (i>0) {
        oTR = oSlider.childNodes[cn].childNodes[cn].childNodes[i];
        if (oTR.tagName == "TR") {
            oTR.style.display = "none";
        }
        i--;
        window.setTimeout("xpslider_menugroup_collapse('"+ SliderID + "'," + i + ");",10);
    }		
}


function xpslider_menugroup_expand(SliderID,i)
{
    var oSlider = document.getElementById(SliderID);
    var cn=0, oTR;
	if (BrowserType() == "gecko") {cn=1}
    if (i<oSlider.childNodes[cn].childNodes[cn].childNodes.length) {
        oTR = oSlider.childNodes[cn].childNodes[cn].childNodes[i];
        if (oTR.tagName == "TR") {
            oTR.style.display = "";
        }                
        i++;
        window.setTimeout("xpslider_menugroup_expand('"+ SliderID + "'," + i + ");",10);
    }		
}
///------Slider Style 3 functions end
///------Slider Style 2 functions start
function Slider_SwitchMenu(obj)
{
    if(document.getElementById(obj.toString())){
    var el = document.getElementById(obj.toString());
    var ar = document.getElementById(el.parentElement.id).getElementsByTagName("span");
    	if(el.style.display !="block"){
    		for (var i=0; i<ar.length; i++){
    			if (ar[i].className=="SliderSpanOptions")
    			ar[i].style.display ="none";
    		}
    		el.style.display ="block";
    	}else{
    		el.style.display ="none";
    	}
    }
}



function Slider_BuildMenuGroups(xmlObject,Node,xmlID,ContainerID,NodeLength,ReturnValue)
{
	var ChildLength=0;
	for (i = 0; i < NodeLength; i++){
		Caption = Node.childNodes(i).getAttribute("Caption");
		Display = (i == 0)?("Block"):("None");
		BackgroundImage = Node.childNodes(i).getAttribute("BackgroundImage");
		BackGroundColor = Node.childNodes(i).getAttribute("BackGroundColor");
		ButtonBackGroundColor = Node.childNodes(i).getAttribute("ButtonBackGroundColor");
		ObjectID = Node.childNodes(i).getAttribute("ObjectID");
		ClickEvent = Node.childNodes(i).getAttribute("ClickEvent");
		var ObjName = xmlID+i
		
		ReturnValue += "<div class='slidermenu' onclick='Slider_SwitchMenu(\""+ObjName+"\")'>"
		if (BackgroundImage != "") {
			ReturnValue += "<img style='vertical-align: middle' src='" + BackgroundImage + "' border=0 hspace=3>" 
		}
		ReturnValue += Caption + "</div>"

		ReturnValue += "<span class='SliderSpanOptions' id=\""+ObjName+"\">"
		var ChildLength = Node.childNodes(i).childNodes.length;
		if (ChildLength > 0){
			ReturnValue += Slider_BuildSubMenu(xmlObject,Node,xmlID,ContainerID,NodeLength,ChildLength,i,BackGroundColor,ButtonBackGroundColor);
		}
		ReturnValue += "</span>";
		
	}
	return ReturnValue;
}

function Slider_BuildSubMenu(xmlObject,Node,xmlID,ContainerID,NodeLength,ChildLength,i,BackGroundColor,ButtonBackGroundColor)
{
	var ReturnValue ="";
	for (j = 0; j < ChildLength; j++){
		
		Caption = Node.childNodes(i).childNodes(j).getAttribute("Caption");
		try{
			ToolTip = Node.childNodes(i).childNodes(j).getAttribute("Tooltip");
		}
		catch(err){
			ToolTip = "";
		}
		var Image = Node.childNodes(i).childNodes(j).getAttribute("Image");
		var ImagePosition = Node.childNodes(i).childNodes(j).getAttribute("ImagePosition");
		var ClickEvent = Node.childNodes(i).childNodes(j).getAttribute("ClickEvent");
		var ObjectID = Node.childNodes(i).childNodes(j).getAttribute("ObjectID");
		var NodeIndex = i + "." + j;
		if (!BackGroundColor)
			BackGroundColor = "";
		if (!ButtonBackGroundColor)
			ButtonBackGroundColor = "";
		
		ReturnValue += "<div onclick='Slider_MenuItemClick(\"" +  NodeIndex + "\", \"" + xmlID + "\");' STYLE='background-color:"+BackGroundColor+";'class='SliderOptions' onmouseover=\"this.style.background='"+ButtonBackGroundColor+"'\" onmouseout=\"this.style.background='"+BackGroundColor+"'\"><a style='width:100%; height:100%'>"
		if (Image != "") {
			ReturnValue += "<img style='vertical-align: middle' src='" + Image +"' border=0 hspace=3>"
		}
		ReturnValue += Caption + "</a></div>";
	}
	return ReturnValue;
}
 

///------Slider Style 2 functions end

function Slider_GenStyle1(xmlObject,Node,xmlID,ContainerID)
{
	var arrClickEvents = new Array(), ClickEventCount = 0;
	var ReturnValue = "<TABLE border=0 cellpadding=0 cellspacing=0 style='WIDTH:100%; HEIGHT:100%'>";
	var ChildIndex = 0, i, j;
	var ClickEvent = "", Display = "", BackgroundImage = "", BackGroundColor = "", Caption = "", ToolTip = "", ButtonBackGroundColor = "";
	var Image = "", ImagePosition = "", NodeIndex, ObjectID; 
	var NodeLength = Node.childNodes.length;
	var CaptionRollOver =  "onmouseout='Slider_CaptionItemRollOver(window.event.srcElement.parentElement.parentElement.parentElement, \"TabItem\");'";
	CaptionRollOver += "onmouseover='Slider_CaptionItemRollOver(window.event.srcElement.parentElement.parentElement.parentElement, \"TabItemOver\");'";
	CaptionRollOver += "onmousedown='Slider_CaptionItemRollOver(window.event.srcElement.parentElement.parentElement.parentElement, \"TabItemInset\");'";
	CaptionRollOver += "onmouseup='Slider_CaptionItemRollOver(window.event.srcElement.parentElement.parentElement.parentElement, \"TabItem\");'";
	var ImageRollOver =  "onmouseout='Slider_ImageItemRollOver(\"TabItem\");'";
	ImageRollOver += "onmouseover='Slider_ImageItemRollOver(\"TabItemOver\");'";
	ImageRollOver += "onmousedown='Slider_ImageItemRollOver(\"TabItemInset\");'";
	ImageRollOver += "onmouseup='Slider_ImageItemRollOver(\"TabItem\");'";
	
	var TDRollOver =  "onmouseout='Slider_TDItemRollOver(\"TabItem\");'";
	TDRollOver += "onmouseover='Slider_TDItemRollOver(\"TabItemOver\");'";
	TDRollOver += "onmousedown='Slider_TDItemRollOver(\"TabItemInset\");'";
	TDRollOver += "onmouseup='Slider_TDItemRollOver(\"TabItem\");'";
	
	for (i = 0; i < NodeLength; i++){
		Caption = Node.childNodes(i).getAttribute("Caption");
		Display = (i == 0)?("Block"):("None");
		BackgroundImage = Node.childNodes(i).getAttribute("BackgroundImage");		
		BackGroundColor = Node.childNodes(i).getAttribute("BackGroundColor");
		ButtonBackGroundColor = Node.childNodes(i).getAttribute("ButtonBackGroundColor");
		ObjectID = Node.childNodes(i).getAttribute("ObjectID");
		ClickEvent = Node.childNodes(i).getAttribute("ClickEvent");
		if(FormName == "frmSliderMenu"){
			ReturnValue += "<TR><TD colspan=2 ObjectID='" + ObjectID + "' WizardTag='WizardMenuGroup' class='Tab' onclick='Slider_MenuGroup_Click();' onmouseover='Slider_Tab_MouseOver();' onmouseout='Slider_Tab_MouseOut();' onmousedown='Slider_Tab_MouseDown();' onmouseup='Slider_Tab_MouseUp();' >&nbsp;" + Caption + "&nbsp;</TD></TR>";
		} else {
			ReturnValue += "<TR><TD colspan=2 class='Tab' onclick='Slider_MenuGroup_Click();' onmouseover='Slider_Tab_MouseOver();' onmouseout='Slider_Tab_MouseOut();' onmousedown='Slider_Tab_MouseDown();' onmouseup='Slider_Tab_MouseUp();' style='BACKGROUND-COLOR:" + ButtonBackGroundColor + ";'>&nbsp;" + Caption + "&nbsp;</TD></TR>";
		}
		ReturnValue += "<TR style='DISPLAY:" + Display + "'><TD BACKGROUND='" + BackgroundImage + "' style='HEIGHT:100%; BACKGROUND-COLOR:" + BackGroundColor + ";'><DIV align=center style='BACKGROUND-COLOR:" + BackGroundColor + ";WIDTH:100%;HEIGHT:100%;OVERFLOW:auto;'><TABLE cellpadding=0 cellspacing=0 border=0 style='WIDTH:100%'>";
		var ChildLength = Node.childNodes(i).childNodes.length;
		
		for (j = 0; j < ChildLength; j++){
			Caption = Node.childNodes(i).childNodes(j).getAttribute("Caption");
			try{
				ToolTip = Node.childNodes(i).childNodes(j).getAttribute("Tooltip");
			}
			catch(err){
				ToolTip = "";
			}
			Image = Node.childNodes(i).childNodes(j).getAttribute("Image") + "";
			ImagePosition = Node.childNodes(i).childNodes(j).getAttribute("ImagePosition");
			ClickEvent = Node.childNodes(i).childNodes(j).getAttribute("ClickEvent");
			ObjectID = Node.childNodes(i).childNodes(j).getAttribute("ObjectID");
			var MenuItemHTML = Caption, BR, OKImage
			
			if (Image.length > 0) {
				Image = "<IMG " + ImageRollOver + "  src='" + Image + "'>";
				BR = "<BR>";
				MenuItemHTML = "<TABLE border=0 cellspacing=0 cellpadding=0><TR><TD align=center " + TDRollOver + " height=50 nowrap valign=bottom><SPAN>" + Image + "</SPAN></TD></TR><TR><TD " + CaptionRollOver + " HEIGHT=30 class=TabItem align=center>" + Caption + "</TD></TR></TABLE>";
				
			}
			else {
				OKImage = "";
				BR = "";
				MenuItemHTML = "<TABLE border=0><TR><TD onmousedown='Slider_TabItemDown();' onmouseover='Slider_TabItemOver();' onmouseup='Slider_TabItemOut();' onmouseout='Slider_TabItemOut();' class=TabItem align=center  HEIGHT=30>" + Caption + "</TD></TABLE>";
			}
			NodeIndex = i + "." + j;
			if(ToolTip) {
				
				if(FormName == "frmSliderMenu"){
					ReturnValue += "<TR><TD title='" + ToolTip + "' ObjectID='" + ObjectID + "' align=center onmouseover='Slider_MenuItem_MouseOver(); window.event.cancelBubble = true;' onclick='Slider_MenuItemClick(\"" + NodeIndex + "\", \"" + xmlID + "\");'><SPAN WizardTag='WizardMenuItem' ObjectID='" + ObjectID + "' onmouseover='//MenuItem_MouseOver();' style=''>" + MenuItemHTML + "</SPAN></TD></TR>";
				} else {
					ReturnValue += "<TR><TD title='" + ToolTip + "' align=center onmouseover='Slider_MenuItem_MouseOver(); window.event.cancelBubble = true;' onclick='Slider_MenuItemClick(\"" + NodeIndex + "\", \"" + xmlID + "\");'><SPAN onmouseover='//MenuItem_MouseOver();' style=''>" + MenuItemHTML + "</SPAN></TD></TR>";
				}
			} else {
				if(FormName == "frmSliderMenu"){
					ReturnValue += "<TR><TD ObjectID='" + ObjectID + "' align=center onmouseover='Slider_MenuItem_MouseOver(); window.event.cancelBubble = true;' onclick='Slider_MenuItemClick(\"" + NodeIndex + "\", \"" + xmlID + "\");'><SPAN WizardTag='WizardMenuItem' ObjectID='" + ObjectID + "' onmouseover='//MenuItem_MouseOver();' style=''>" + MenuItemHTML + "</SPAN></TD></TR>";
				} else {
					ReturnValue += "<TR><TD align=center onmouseover='Slider_MenuItem_MouseOver(); window.event.cancelBubble = true;' onclick='Slider_MenuItemClick(\"" + NodeIndex + "\", \"" + xmlID + "\");'><SPAN onmouseover='//MenuItem_MouseOver();' style=''>" + MenuItemHTML + "</SPAN></TD></TR>";
				}
			}
		}
		if (ChildLength == 0){			
			ReturnValue += "<TR><TD align=center HEIGHT='100%'>&nbsp;</TD></TR>";		
		}
		ReturnValue += "</TABLE></DIV></TD></TR>";
	}
	
	ReturnValue += "</TABLE>";
	document.all(ContainerID).innerHTML = ReturnValue;
}

function Slider_MenuItemClick(NodeIndex, xmlID){		
	if (window.event.altKey) return;
	eval("var xmlSlider = " + xmlID + ";");
	if(!xmlSlider)
		return;
	var NodePath = "xmlSlider.documentElement";
	var arrNodeIndex = NodeIndex.split(".");
	var i, NodeIndexCount = arrNodeIndex.length;
	for (i = 0; i < NodeIndexCount; i++){
		NodePath = NodePath + ".childNodes(" + arrNodeIndex[i] + ")"
	}
	eval("var Node = " + NodePath);
	var ClickEvent = Node.getAttribute("ClickEvent");
	try {
		if (ClickEvent!="") {
			debugWrite(xmlID + ".MenuItemClickEvent",new Array(document.all(xmlID).HTMLControlID,"MenuItemClickEvent"),"callstack");
			eval(ClickEvent);
		}
	}
	catch(err) {
		alertErr(xmlID,"Slider","MenuItemClick","User click event error #" + err.number + ": " + err.description + "\n" + ClickEvent);
		//alert(err.description);
	}
}

function Slider_ImgMouseOver(){
	window.event.srcElement.className = "Over";
}

function Slider_ImgMouseOut(){
	window.event.srcElement.className = "Out";
}

function Slider_TabItemOver(){	
	window.event.srcElement.className = "TabItemOver";
}

function Slider_TabItemDown(){	
	window.event.srcElement.className = "TabItemInset";
}

function Slider_TabItemOut(){
	window.event.srcElement.className = "TabItem";
}

function Slider_CaptionItemRollOver(ImageTable, ClassName){	
	if( (!ImageTable)||(ImageTable.tagName != "TABLE") )return;
	var RowCount = ImageTable.rows.length;
	var CellCount = ImageTable.rows(0).cells.length;
	var Row, Cell
	var i, j;
	for(i = 0; i < RowCount; i++){
		Row = ImageTable.rows(i);
		for(j = 0; j < CellCount; j++){
			try{
				if( (Row.cells(j).children.length > 0)&&(Row.cells(j).children(0).children(0).tagName == "IMG") ){
					Row.cells(j).children(0).className = ClassName;
				}
			}
			catch(err){}
		}
	}
}

function Slider_ImageItemRollOver(ClassName){
	window.event.srcElement.parentElement.className = ClassName;
}

function Slider_TDItemRollOver(ClassName){
	if( (window.event.srcElement.tagName == "TD")&&(window.event.srcElement.children.length > 0) ){
		//window.event.srcElement.className = ClassName;
		window.event.srcElement.children(0).className = ClassName;
		//alert(window.event.srcElement.children(0).tagName);
	}
	else{
		//window.event.srcElement.parentElement.className = ClassName;
		//window.event.srcElement.children(0).children(0).className = ClassName;
	}
}

function Slider_TabCaption_MouseOver() {
	var TabMenuRowIndex = window.event.srcElement.parentElement.parentElement.rowIndex;
	var TabMenuID = window.event.srcElement.parentElement.parentElement.parentElement.parentElement.id;
	document.all(TabMenuID).rows(TabMenuRowIndex - 1).cells(0).children(0).className = "Over";
}

function Slider_TabCaption_MouseOut() {
	
	var TabMenuRowIndex = window.event.srcElement.parentElement.parentElement.rowIndex;
	var TabMenuID = window.event.srcElement.parentElement.parentElement.parentElement.parentElement.id;
	document.all(TabMenuID).rows(TabMenuRowIndex - 1).cells(0).children(0).className = "Out";
}

function Slider_TabCaption_MouseDown() {
	var TabMenuRowIndex = window.event.srcElement.parentElement.parentElement.rowIndex;
	var TabMenuID = window.event.srcElement.parentElement.parentElement.parentElement.parentElement.id;
	document.all(TabMenuID).rows(TabMenuRowIndex - 1).cells(0).children(0).className = "Inset";
}

function SliderTabCaption_MouseUp() {
	var TabMenuRowIndex = window.event.srcElement.parentElement.parentElement.rowIndex;
	var TabMenuID = window.event.srcElement.parentElement.parentElement.parentElement.parentElement.id;
	document.all(TabMenuID).rows(TabMenuRowIndex - 1).cells(0).children(0).className = "Over";
}

function Slider_Tab_MouseDown() {
	window.event.srcElement.className = "TabInset";
}

function Slider_Tab_MouseUp() {
	window.event.srcElement.className = "Tab";
}

function Slider_Tab_MouseOver() {	
	window.event.srcElement.className = "TabOver";
}

function Slider_Tab_MouseOut() {
	window.event.srcElement.className = "Tab";
}

function oldTabItem_MouseDown() {
	window.event.srcElement.className = "Inset";
}

function oldTabItem_MouseUp() {
	window.event.srcElement.className = "Over";
}

function Slider_MenuGroup_Click() {	
	if (window.event.altKey) return;
	var Slider = window.event.srcElement.parentElement.parentElement.parentElement.parentElement;
	if (Slider.LastSelectedMenuGroup == window.event.srcElement.parentElement.rowIndex)return;		
	Slider.children(0).rows(parseInt(Slider.LastSelectedMenuGroup + 1)).style.display = "none";
	Slider.LastSelectedMenuGroup = window.event.srcElement.parentElement.rowIndex;	
	Slider.children(0).rows(parseInt(Slider.LastSelectedMenuGroup + 1)).style.display = "block";		
}

function Slider_MenuItem_MouseOver(){
	//alert(window.event.srcElement.tagName);
}  
//</SCRIPT>


//tabsheet.js
function AbsoluteOffsetTop(RelativeControlIndex) {
	var OffsetTop = document.all(RelativeControlIndex).offsetTop;
	var ThisElement = document.all(RelativeControlIndex).parentElement;
	while (ThisElement.parentElement) {
		if(ThisElement.tagName == "BODY")break;
		OffsetTop += ThisElement.offsetTop;
		ThisElement = ThisElement.parentElement;
	}
	return(OffsetTop);
}

function AbsoluteOffsetLeft(RelativeControlIndex) {	
	var OffsetLeft=document.all(RelativeControlIndex).offsetLeft;
	var ThisElement=document.all(RelativeControlIndex).parentElement;
	while (ThisElement.parentElement) {
		OffsetLeft+=ThisElement.offsetLeft;		
		ThisElement=ThisElement.parentElement;
	}
	return(OffsetLeft);	
}

function TabSheet_onClickTab(TabSheetID, iTabIndex){	
	/*
	var CurrElement = event.srcElement;
	var HTMLControlID;
	while(CurrElement){		
		if(CurrElement.HTMLControlID){
			HTMLControlID = CurrElement.HTMLControlID;
			break;
		}
		CurrElement = CurrElement.parentElement;
	}		
	if(!HTMLControlID){
		if(!TabSheet){
			alertErr(TabSheetID,"TabSheet","onClickTab","Invalid TabSheet ID specified.");
			return;
		}
		return;
	}
	*/
	var oTab = document.all(TabSheetID);
	if (oTab==null) return;
	var TabTagValues = oTab.tagValues;
	TabSheetID = TabTagValues.selectSingleNode("//root/ID").text;
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","onClickTab","Invalid TabSheet ID specified.");		
		return;
	}	
	
	var TabString = "event.srcElement";
	var Tab, TabIndex;
	while(1 == 1){
		Tab = eval(TabString);		
		if(Tab.isTabRow == 1)break;		
		if(Tab.isTab){
			TabIndex = Tab.cellIndex;
			break;
		}
		TabString += ".parentElement";		
	}
	if(TabIndex != null){		
		TabSheet_SetTab(TabIndex, TabSheetID);
	}
}

function TabSheet_HideContainers(TabSheetID, TabIndex){
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","HideContainers","Invalid TabSheet ID specified.");
		//alert("TabSheet_HideContainers() error:\n____________________________________________________\n\nInvalid TabSheet ID:'" + TabSheetID + "' specified.\n____________________________________________________");
		return;
	}		
	var i, Tab, TabRow = TabSheet.TabTable.rows(0);
	for(i = 0; i < TabSheet.TabCount; i++){		
		if(TabIndex == i)continue;
		Tab = TabRow.cells(i);
		var ContainerID = Tab.ContainerID;			
		if (ContainerID == null) ContainerID="";
		if(ContainerID.length > 0){
			Container = document.all(ContainerID);
			if(Container){				
				Container.style.display = "none";
				Container.style.posLeft = TabSheet.offsetLeft + 15;
				Container.style.posWidth = TabSheet.offsetWidth - 30;
				Container.style.posTop = -99999;//TabSheet.TabBody.offsetTop + TabSheet.offsetTop;
				Container.style.posHeight = TabSheet.offsetHeight - 15 - TabSheet.TabBody.offsetTop;
				Container.style.zIndex = 0;				
				if (Container.Label) {
					Container.Label.style.display = "none";
					Container.Label.style.posLeft = TabSheet.offsetLeft + 15;
					Container.Label.style.posTop = -99999;//TabSheet.TabBody.offsetTop + TabSheet.offsetTop;
					Container.Label.style.zIndex = 0;			
				}	
			}
			
		}
	}
}

function TabSheet_onTabClick(TabIndex, TabSheetID){
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","onTabClick","Invalid TabSheet ID specified.");		
		return;
	}
	var xmlTagValues = document.all(TabSheet.HTMLControlID);
	if(!xmlTagValues){
		alertErr(TabSheetID,"TabSheet","onTabClick","Invalid TagValue ID:'" + TabSheet.HTMLControlID + "' specified.");		
		return;
	}	
	if(xmlTagValues.parseError != 0){
		alertErr(TabSheetID,"TabSheet","onTabClick","TagValue Error: " + xmlTagValues.parseError.reason + ".");		
		return;
	}
	
	var Tab = TabSheet.TabTable.rows(0).cells(TabIndex);	
	if(!Tab){
		alertErr(TabSheetID,"TabSheet","onTabClick","Invalid TabIndex:'" + TabIndex + "' specified.");		
		return;
	}	
	//TabSheet_HideContainers(TabSheetID, TabIndex);	
	var TabDetail = (xmlTagValues.selectNodes("//TabSpec/" + Tab.TabName).length > 0)?(xmlTagValues.selectSingleNode("//TabSpec/" + Tab.TabName)):(null);
	if(!TabDetail)return;
	
	var ContainerID = Tab.ContainerID;	
	if(ContainerID.length > 0){
		Container = document.all(ContainerID);		
		if(Container){	
			//alert(Container.style.posLeft);					
			//alert(AbsoluteOffsetLeft(TabSheet.sourceIndex) + TabSheet.TabBody.offsetLeft + 15);
			//alert(AbsoluteOffsetLeft(TabSheet.sourceIndex) + TabSheet.TabBody.offsetLeft + 15 + "px");
			
			Container.style.posLeft = AbsoluteOffsetLeft(TabSheet.sourceIndex) + TabSheet.TabBody.offsetLeft + 15;
			//alert(Container.style.posLeft);					
			Container.style.posWidth = TabSheet.offsetWidth - 30;
			Container.style.posTop = AbsoluteOffsetTop(TabSheet.sourceIndex) + TabSheet.TabBody.offsetTop;			
			Container.style.posHeight = TabSheet.offsetHeight - 15 - TabSheet.TabBody.offsetTop;
			Container.style.zIndex = 10;			
			Container.style.visibility = "visible";
			Container.style.display = "block";
			//alert(2);
		
			if (Container.Label) {
				Container.Label.style.display = "block";
				Container.Label.style.visibility = "visible";
				Container.Label.style.posLeft = AbsoluteOffsetLeft(TabSheet.sourceIndex) + TabSheet.TabBody.offsetLeft + 25;
				Container.Label.style.posTop = AbsoluteOffsetTop(TabSheet.sourceIndex) + TabSheet.TabBody.offsetTop - 7;			
				Container.Label.style.zIndex = 10;			
			}	
		}			
	}	
	var TabSpec = (xmlTagValues.selectNodes("//root/TabSpec").length > 0)?(xmlTagValues.selectSingleNode("//root/TabSpec")):(null);
	if(!TabSpec)return;		
	var Tab = (TabSpec.selectNodes("*[index() $eq$ " + Tab.cellIndex + "]").length > 0)?(TabSpec.selectSingleNode("*[index() $eq$ " + Tab.cellIndex + "]")):(null);
	if(!Tab)return;		
	var TabonClick = (Tab.selectNodes("onClick").length > 0)?(Tab.selectSingleNode("onClick").text):("");		
	try{
		if (TabonClick != "") {
			debugWrite(TabSheetID + ".TabonClick",new Array(document.all(TabSheetID).HTMLControlID,"TabonClick"),"callstack");
			eval(TabonClick);
		}
	}
	catch(err){
		if(!VBInstring(TabonClick, "lblInstruction"))		
			alertErr(TabSheetID,"TabSheet","onTabClick","User onTabClick event error #" + err.number + ": " + err.description + "\n" + TabonClick);	
		return;
	}		
}

function TabSheet_SetTab(TabIndex, TabSheetID){	
	var TabSheet = document.all(TabSheetID);
	
	if (TabSheet.TabTable.rows(0).cells(TabIndex).disabled)return;
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","SetTab","Invalid TabSheet ID specified.");
		//alert("TabSheet_SetTab() error:\n____________________________________________________\n\nInvalid TabSheet ID:'" + TabSheetID + "' specified.\n____________________________________________________");
		return;
	}
	var xmlTagValues = document.all(TabSheet.HTMLControlID);
	if(!xmlTagValues){
		alertErr(TabSheetID,"TabSheet","SetTab","Invalid TagValue ID:'" + TabSheet.HTMLControlID + "' specified.");
		//alert("TabSheet_SetTab() error:\n____________________________________________________\n\nInvalid TagValue ID:'" + TabSheet.HTMLControlID + "' specified.\n____________________________________________________");
		return;
	}	
	if(xmlTagValues.parseError != 0){
		alertErr(TabSheetID,"TabSheet","SetTab","TagValue Error: " + xmlTagValues.parseError.reason + ".");
		//alert("TabSheet_SetTab() error:\n____________________________________________________\n\nTagValue Error: " + xmlTagValues.parseError.reason + "\n____________________________________________________");
		return;
	}
	var SelectedTabFont = (xmlTagValues.selectNodes("//SelectedTabFont").length > 0)?(xmlTagValues.selectSingleNode("//SelectedTabFont").text):("");
	var TabFont = (xmlTagValues.selectNodes("//TabFont").length > 0)?(xmlTagValues.selectSingleNode("//TabFont").text):("");
	
	TabSheet_HideContainers(TabSheetID, TabIndex);		
	
	TabSheet.LastSelectedTab = TabIndex;	
	var i, TabOne, TabTwo;	
	// Loop through each tab to change the appearance (class)
	for (i = 0; i <= TabSheet.TabCount; i++){
		TabOne = TabSheet.TabTable.rows(0).cells(i);
		TabTwo = TabSheet.TabTable.rows(1).cells(i);
		switch (i){
		    // tab to the left
		    case (TabIndex - 1):
		 	   //alert("left tab");
		 	   TabOne.className = "clsTabSelLeft";
		 	   TabTwo.className = "clsTabContent";
		 	   //alert(TabOne.outerHTML);
		 	   //alert(TabFont);
		 	   /*try{*/TabOne.style.fontFamily = TabFont;/*}catch(err){};*/
		 	   if(document.all(TabOne.ContainerID))document.all(TabOne.ContainerID).style.zIndex = 0
		 	break;

		    // tab to the right
		    case (TabIndex + 1):
				//alert("right tab");
				if (i != TabSheet.TabCount){
					TabOne.className = "clsTabSelRight";
					TabTwo.className = "clsTabContent";
					//alert(TabOne.outerHTML);
					//alert(TabFont);
					/*try{*/TabOne.style.fontFamily = TabFont/*;}catch(err){};*/
					if(document.all(TabOne.ContainerID))document.all(TabOne.ContainerID).style.zIndex = 0;
				}
		 	break;

		    // tab itself
		    case (TabIndex):
				//alert("tabitself");
				TabOne.className = "clsTabSel";
				TabTwo.className = "TabContentSel";
				//alert(TabOne.outerHTML);
				//alert(TabFont);
				/*try{*/TabOne.style.fontFamily = SelectedTabFont;/*}catch(err){};				*/
				if(document.all(TabOne.ContainerID))document.all(TabOne.ContainerID).style.zIndex = 2;
				/*
				var x, TabChild, TabChildrenCount = TabOne.children.children.length;
				alert(TabOne.innerHTML);
				for(x = 0; x < TabChildrenCount; x++){
					TabChild = TabOne.children(x);					
					if(TabChild.isTabCaption == "1"){						
						TabChild.style.font = SelectedTabFont;
						break;
					}
				}
				*/				
		 	break;

		    // all other tabs
		    default:
				//alert("default");
				if (i != TabSheet.TabCount){
					TabOne.className = "clsTab";
					TabTwo.className = "clsTabContent";
					
					//alert(TabOne.outerHTML);
					//alert(TabFont);
					/*try{*/TabOne.style.fontFamily = TabFont;/*}catch(err){};*/
					if(document.all(TabOne.ContainerID))document.all(TabOne.ContainerID).style.zIndex = 0;
				}
			break;
		 }
	}	
	TabSheet_onTabClick(TabIndex, TabSheetID);	
}

function TabSheet_Refresh(TabSheetID){
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","Refresh","Invalid TabSheet ID specified.");		
		return;
	}
	var xmlTagValues = document.all(TabSheet.HTMLControlID);
	if(!xmlTagValues){
		alertErr(TabSheetID,"TabSheet","Refresh","Invalid TagValue ID:'" + TabSheet.HTMLControlID + "' specified.");		
		return;
	}	
	
	if(xmlTagValues.parseError != 0){
		alertErr(TabSheetID,"TabSheet","Refresh","TagValue Error: " + xmlTagValues.parseError.reason + ".");		
		return;
	}
	
	var cssClass=(document.all(TabSheet.HTMLControlID).selectNodes("//cssClass").length > 0) ? document.all(TabSheet.HTMLControlID).selectSingleNode("//cssClass").text : "";
	document.all(TabSheetID).className=cssClass;
	
	var TabSpec = (xmlTagValues.selectNodes("//root/TabSpec").length > 0)?(xmlTagValues.selectSingleNode("//root/TabSpec")):(null);
	var DefaultTabIndex = (xmlTagValues.selectNodes("//root/DefaultTabIndex").length > 0)?(xmlTagValues.selectSingleNode("//root/DefaultTabIndex").text):("");		
	
	var backgroundColor = (xmlTagValues.selectNodes("//root/Background-Color").length > 0)?(xmlTagValues.selectSingleNode("//root/Background-Color").text):("transparent");				
	
	if( (!TabSpec)||(TabSpec.childNodes.length == 0) )return
	
	var TabHeight = (xmlTagValues.selectNodes("//TabHeight").length > 0)?(xmlTagValues.selectSingleNode("//TabHeight").text):(25);	
	var TabSheetHTML = "<TABLE id=\"tblTabSheet_" +  TabSheetID + "\" class=\"tblTabControl\" border=0 cellspacing=0 cellpadding=0 style=\"WIDTH:100%; HEIGHT:100%\">";
	var TabHeaderRowOne = "<TR isTabRow=1 Height=\"" + TabHeight + "\" class=\"TabRowHeader\" onSelectStart=\"TabSheet_onClickTab('" + TabSheetID + "'); return false;\" style='background-color:" + backgroundColor + ";'>";
	
	
	var i, TabHeaderCount = TabSpec.childNodes.length;	
	var Tab, Caption, TabClass, ContainerID, Container;
	var TabImage, TabImagePos, TabImageHTML, TabHTML;
	var Width, TabDisabled, TabAlign;	
	
	for(i = 0; i < TabHeaderCount; i++){
		Tab = TabSpec.childNodes(i);
		ContainerID = (Tab.getAttribute("ContainerID"))?(Tab.getAttribute("ContainerID")):("");
		TabWidth = (Tab.getAttribute("Width"))?("Width='" + Tab.getAttribute("Width") + "'"):("");		
		TabDisabled = (Tab.getAttribute("Disabled"))?(Tab.getAttribute("Disabled")):(0);
		TabDisabled = (TabDisabled == 0)?(""):("disabled");
		TabAlign = (Tab.getAttribute("Align"))?(Tab.getAttribute("Align")):("left");				
		
		TabClass = "";		
		switch(i){
			case 0:
				TabClass = "clsTabSel";				
			break;
			
			case 1:
				TabClass = "clsTabSelRight";				
			break;
			
			default:
				TabClass = "clsTab";				
			break;
		}
		Caption = Tab.getAttribute("Caption");
		TabImage = (Tab.getAttribute("Image"))?(Tab.getAttribute("Image")):("");
		if(TabImage.length > 0){
			TabImageHTML = "<IMG src='" + TabImage + "'>";
			TabImagePos = (Tab.getAttribute("TabImagePos"))?(Tab.getAttribute("TabImagePos")):("left");
			TabHTML = (TabImagePos.toLowerCase() == "left")?("<TABLE><TR><TD>" + TabImageHTML + "</TD><TD isTabCaption=1 class='clsTabSheetCaption' style='TEXT-ALIGN:" + TabAlign.toLowerCase() + "'>" + Caption + "</TD></TR></TABLE>"):("<TABLE><TR><TD isTabCaption=1 class='clsTabSheetCaption' style='TEXT-ALIGN:" + TabAlign.toLowerCase() + "'>" + Caption + "</TD><TD>" + TabImageHTML + "</TD></TR></TABLE>"); 		
		}
		else {
			TabHTML = Caption;
		}
			
		if( (ContainerID.length > 0)&&(i != DefaultTabIndex) ){		
			Container = document.all(ContainerID);
			if(Container)Container.style.display = "none";
		}
		
		TabHeaderRowOne += "<TD onclick=\"TabSheet_SetTab(" + i + ",'" + TabSheetID + "');\" isTab=1 ContainerID=\"" + ContainerID + "\" TabName=\"" + Tab.nodeName + "\" nowrap " + TabDisabled + " " + TabWidth + " class=\"" + TabClass + "\" style='TEXT-ALIGN:" + TabAlign.toLowerCase() + "'>&nbsp;&nbsp;" + TabHTML + "&nbsp;&nbsp;</TD>";
	}
	TabHeaderRowOne += "<TD width=100% onclick=\"event.cancelBubble=true\" onselectstart=\"event.cancelBubble=true\" style=\"BACKGROUND-COLOR:transparent\">&nbsp;</TD></TR>";
	
	var TabHeaderRowTwo = "<TR height=10 style='background-color:" + backgroundColor + ";'>"; 
	TabHeaderRowTwo +=	  "	<TD class=clsTabContentSel style=\"BORDER-LEFT: buttonhighlight 1px solid\">&nbsp;</TD>"	
	for(i = 0; i < TabHeaderCount - 1; i++){
		TabHeaderRowTwo +=	  "	<TD class=clsTabContent>&nbsp;</TD>";
	}
	TabHeaderRowTwo +=	  "	<TD class=clsTabContent style=\"BORDER-RIGHT: threeddarkshadow 1px solid\">&nbsp;</TD></TR>";
	var TabHeaderRowThree = "<TR style='background-color:" + backgroundColor + ";'><TD id=\"TabBody_" +  TabSheetID + "\" colspan=\"" + parseInt(TabHeaderCount + 1) + "\" style=\"CELLPADDING:20px; CELLSPACING:20px; HEIGHT:100%; BORDER-BOTTOM:threeddarkshadow 1px solid; BORDER-LEFT: buttonhighlight 1px solid; BORDER-RIGHT: threeddarkshadow 1px solid\">&nbsp;</TD></TR>";
	
	TabSheetHTML = TabSheetHTML + TabHeaderRowOne + TabHeaderRowTwo + TabHeaderRowThree + "</TABLE>";
	TabSheet.innerHTML = TabSheetHTML;
	TabSheet.TabTable = TabSheet.children(0);	
	TabSheet.TabBody = document.all("TabBody_" +  TabSheetID);
	//alert("poo1");
	//window.setTimeout('alert("poo1")', 200);
}

function TabSheet_EnableTab(TabIndex, TabSheetID){
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","EnableTab","Invalid TabSheet ID specified.");
		//alert("TabSheet_EnableTab() error:\n____________________________________________________\n\nInvalid TabSheet ID:'" + TabSheetID + "' specified.\n____________________________________________________");
		return;
	}
	var i, Tab, TabRow = TabSheet.TabTable.rows(0);
	Tab = TabRow.cells(TabIndex);
	if(Tab){
		Tab.disabled = false;
		document.all(Tab.ContainerID).disabled = false;
	}
}

function TabSheet_DisableTab(TabIndex, TabSheetID){
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","DisableTab","Invalid TabSheet ID specified.");
		//alert("TabSheet_DisableTab() error:\n____________________________________________________\n\nInvalid TabSheet ID:'" + TabSheetID + "' specified.\n____________________________________________________");
		return;
	}	
	var i, Tab, TabRow = TabSheet.TabTable.rows(0);
	TabIndex = parseInt(TabIndex);
	Tab = TabRow.cells(TabIndex);
	if(Tab){				
		Tab.disabled = true;		
		document.all(Tab.ContainerID).disabled = true;
	}
}

function TabSheet_SelectTab(TabIndex, TabSheetID){
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","SelectTab","Invalid TabSheet ID specified.");
		//alert("TabSheet_SelectTab() error:\n____________________________________________________\n\nInvalid TabSheet ID:'" + TabSheetID + "' specified.\n____________________________________________________");
		return;
	}		
	var i, Tab, TabRow = TabSheet.TabTable.rows(0);	
	TabIndex = parseInt(TabIndex);
	if(TabRow.cells(TabIndex))TabRow.cells(TabIndex).click();		
}

function TabSheet_SelectDefaultTab(TabSheetID){	
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		//alertErr(TabSheetID,"TabSheet","SelectDefaultTab","Invalid TabSheet ID specified.");
		//alert("TabSheet_SelectDefaultTab() error:\n____________________________________________________\n\nInvalid TabSheet ID:'" + TabSheetID + "' specified.\n____________________________________________________");
		return;
	}
	var xmlTagValues = document.all(TabSheet.HTMLControlID);
	if(!xmlTagValues){
		alertErr(TabSheetID,"TabSheet","SelectDefaultTab","Invalid TagValue ID:'" + TabSheet.HTMLControlID + "' specified.");
		//alert("TabSheet_SelectDefaultTab() error:\n____________________________________________________\n\nInvalid TagValue ID:'" + TabSheet.HTMLControlID + "' specified.\n____________________________________________________");
		return;
	}	
	if(xmlTagValues.parseError != 0){
		alertErr(TabSheetID,"TabSheet","SelectDefaultTab","TagValue Error: " + xmlTagValues.parseError.reason + ".");
		//alert("TabSheet_SelectDefaultTab() error:\n____________________________________________________\n\nTagValue Error: " + xmlTagValues.parseError.reason + "\n____________________________________________________");
		return;
	}
	var DefaultTabIndex = (xmlTagValues.selectNodes("//DefaultTabIndex").length > 0)?(xmlTagValues.selectSingleNode("//DefaultTabIndex").text):(0);
	var i, Tab, TabRow = TabSheet.TabTable.rows(0);
	
	//try {
	if(TabRow.cells(parseInt(DefaultTabIndex))){		
		TabRow.cells(parseInt(DefaultTabIndex)).click();		
	}
	//} catch (err) {}
	TabSheet_onresize(TabSheet.HTMLControlID);
}

function TabSheet_SetContainerID(TabIndex, ContainerID, TabSheetID){
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","SetContainerID","Invalid TabSheet ID specified.");
		//alert("TabSheet_SetContainerID() error:\n____________________________________________________\n\nInvalid TabSheet ID:'" + TabSheetID + "' specified.\n____________________________________________________");
		return;
	}
	var xmlTagValues = document.all(TabSheet.HTMLControlID);
	if(!xmlTagValues){
		alertErr(TabSheetID,"TabSheet","SetContainerID","Invalid TagValue ID:'" + TabSheet.HTMLControlID + "' specified.");
		//alert("TabSheet_SetContainerID() error:\n____________________________________________________\n\nInvalid TagValue ID:'" + TabSheet.HTMLControlID + "' specified.\n____________________________________________________");
		return;
	}	
	if(xmlTagValues.parseError != 0){
		alertErr(TabSheetID,"TabSheet","SetContainerID","TagValue Error: " + xmlTagValues.parseError.reason + ".");
		//alert("TabSheet_SetContainerID() error:\n____________________________________________________\n\nTagValue Error: " + xmlTagValues.parseError.reason + "\n____________________________________________________");
		return;
	}
	var TabSpecs = (xmlTagValues.selectNodes("/root/TabSpec").length > 0)?(xmlTagValues.selectSingleNode("/root/TabSpec")):(null);
	var TabSpec = TabSpecs.childNodes(TabIndex);
	if(!TabSpec){
		alertErr(TabSheetID,"TabSheet","SetContainerID","Invalid TabIndex: '" + TabIndex + "' specified.");
		//alert("TabSheet_SetContainerID() error:\n____________________________________________________\n\nInvalid TabIndex: ." + TabIndex + "' specified.\n____________________________________________________");
		return;
	}
	TabSpec.setAttribute("ContainerID", ContainerID);	
	var TabRow = TabSheet.TabTable.rows(0);	
	var Tab = TabRow.cells(parseInt(TabIndex));
	if(Tab){
		if(document.all(Tab.ContainerID)){
			document.all(Tab.ContainerID).display = "none";
			document.all(Tab.ContainerID).style.posTop = -9999;
		}
		Tab.ContainerID = ContainerID;		
	}
}

function TabSheet_onresize(HTMLControlID)
{	
	var xmlTagValues = document.all(HTMLControlID.toString());		
	if(!xmlTagValues){
		alertErr(HTMLControlID,"TabSheet","TabSheet_onresize","Invalid TagValue ID:'" + HTMLControlID + "' specified.");		
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(HTMLControlID,"TabSheet","TabSheet_onresize","TagValue Error: " + xmlTagValues.parseError.reason + ".");		
		return;
	}
	var TabSheetID = xmlTagValues.selectSingleNode("//root/ID").text;
	
	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","TabSheet_onresize","Invalid TabSheet ID specified.");
		//alert("InitcspBroker() error:\n____________________________________________________\n\nInvalid cspBrokerID:'" + cspBrokerID + "' specified.\n____________________________________________________");
		return;
	}
	if(!TabSheet.LastSelectedTab && TabSheet.LastSelectedTab != 0)
		return;
	var TabIndex = TabSheet.LastSelectedTab;
	var Tab = TabSheet.TabTable.rows(0).cells(TabIndex);	
	var ContainerID = Tab.ContainerID;
	if(ContainerID.length > 0){
		Container = document.all(ContainerID);
		if(Container){	
			Container.style.posLeft = AbsoluteOffsetLeft(TabSheet.sourceIndex) + TabSheet.TabBody.offsetLeft + 15;
			Container.style.posWidth = TabSheet.offsetWidth - 30;
			Container.style.posTop = AbsoluteOffsetTop(TabSheet.sourceIndex) + TabSheet.TabBody.offsetTop;			
			Container.style.posHeight = TabSheet.offsetHeight - 15 - TabSheet.TabBody.offsetTop;
			Container.style.zIndex = 0;			
			Container.style.zIndex = 999999;	
			if(Container.Label){	
				Container.Label.style.posLeft = AbsoluteOffsetLeft(TabSheet.sourceIndex) + TabSheet.TabBody.offsetLeft + 25;
				Container.Label.style.posTop = AbsoluteOffsetTop(TabSheet.sourceIndex) + TabSheet.TabBody.offsetTop - 7;			
				Container.Label.style.zIndex = 999999;	
			}
		}
	}
}

function _28(HTMLControlID) {
	TabSheet_Initialise(HTMLControlID);
}

function TabSheet_Initialise(HTMLControlID) {
	
	var TabSheetID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;

	var TabSheet = document.all(TabSheetID);
	if(!TabSheet){
		alertErr(TabSheetID,"TabSheet","Initialise","Invalid TabSheet ID specified.");
		//alert("TabSheet_Initialise() error:\n____________________________________________________\n\nInvalid TabSheet ID:'" + TabSheetID + "' specified.\n____________________________________________________");
		return;
	}
	TabSheet.tagValues = document.all(HTMLControlID);
	TabSheet.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+document.body.HTMLControlID+"');");
	TabSheet.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+document.body.HTMLControlID+"');");	
	TabSheet.onresize = new Function("HTMLControlID", "TabSheet_onresize('" + HTMLControlID + "')");
	TabSheet.TabTable = TabSheet.children(0);	
	TabSheet.Refresh = new Function("TabSheetID", "return TabSheet_Refresh('" + TabSheetID + "');");
	TabSheet.Refresh();
	TabSheet.TabTable = TabSheet.children(0);
	TabSheet.TabBody = document.all("TabBody_" +  TabSheetID);
	TabSheet.TabCount = TabSheet.TabTable.rows(0).cells.length - 1;
	TabSheet.SelectTab = new Function("TabIndex", "TabSheetID", "return TabSheet_SelectTab(TabIndex, '" + TabSheetID + "');");
	TabSheet.EnableTab = new Function("TabIndex", "TabSheetID", "return TabSheet_EnableTab(TabIndex, '" + TabSheetID + "');");
	TabSheet.DisableTab = new Function("TabIndex", "TabSheetID", "return TabSheet_DisableTab(TabIndex, '" + TabSheetID + "');");
	TabSheet.SetContainerID = new Function("TabIndex", "ContainerID", "TabSheetID", "return TabSheet_SetContainerID(TabIndex, ContainerID, '" + TabSheetID + "');");	
	window.setTimeout("TabSheet_SelectDefaultTab(\"" + TabSheetID + "\");", 100);
}


//toolbar.js
var Toolbar_DropDown_Popup = window.createPopup();
var ToolbarSelectedMenuItemElement;

function _19 (HTMLControlID) {
	Toolbar_Initialise(HTMLControlID);
}

function Toolbar_Initialise(HTMLControlID){
	var ControlID = document.all(HTMLControlID).selectSingleNode("//root/ID").text;
	var toolbar = document.all(ControlID);
	toolbar.tagValues = document.all(HTMLControlID);
	toolbar.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+document.body.HTMLControlID+"');");
	toolbar.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+document.body.HTMLControlID+"');");	
	
	translateNode(toolbar.tagValues,"/root/pSourceFile","/root/xmlSourceFile","xmlSourceFile");
	
	toolbar.DisableItem = new Function("index", "state", "ControlID", "return Toolbar_SetToolbarItemState(index, 0, '" + ControlID + "');");
	toolbar.EnableItem = new Function("index", "state", "ControlID", "return Toolbar_SetToolbarItemState(index, 1, '" + ControlID + "');");
	toolbar.Refresh = new Function("HTMLControlID", "ControlID", "Toolbar_Refresh('" + HTMLControlID + "', '" + ControlID + "');");
	toolbar.Refresh();
}

function Toolbar_SetToolbarItemState(index, state, ControlID)
{	
	var toolbar = document.all(ControlID);
	if(!toolbar)
	{
		alertErr(ControlID, "Toolbar", "SetToolbarItemState", "Invalid Toolbar ID '" + ControlID + "' specified.");		
		return false;
	}	
	var toolbarItemCount = ((toolbar.children(0).rows(0).cells(1).children(0).children(0).rows(0).cells.length - 1) / 2) - 1;	
	index = parseInt(index);
	if((isNaN(index))||(index > toolbarItemCount)||(toolbarItemCount < 0))
	{
		alertErr(ControlID, "Toolbar", "SetToolbarItemState", "Invalid Toolbar item index '" + index + "' specified.");		
		return false;
	}
	var disabled = (state == 0)?(true):(false);
	var toolbarItem = toolbar.children(0).rows(0).cells(1).children(0).children(0).rows(0).cells((index * 2)).children(0);	
	if(!toolbarItem)
		return false;	
	toolbarItem.disabled = disabled;	
	return true;
}

function Toolbar_Refresh(HTMLControlID, ControlID)
{	
	var toolbar = document.all(ControlID);	
	var tagValues = toolbar.tagValues;	
	var xmlID = "xml" + HTMLControlID;
	
	var cssClass=(document.all(HTMLControlID).selectNodes("//cssClass").length > 0) ? document.all(HTMLControlID).selectSingleNode("//cssClass").text : "";
	document.all(ControlID).className=cssClass;
	
	
	//--------
	var xmlSourceFile = (tagValues.selectSingleNode("//xmlSourceFile") != null) ? tagValues.selectSingleNode("//xmlSourceFile").text : "";
	var sNavButtons=(tagValues.selectSingleNode("//NavigationButtons")!=null) ? tagValues.selectSingleNode("//NavigationButtons").text : "";
	switch(sNavButtons){
		case	"on":
					toolbar.children(0).rows(0).cells(0).style.display = "block";
					toolbar.children(0).rows(0).cells(3).style.display = "block";
				break;
		case	"auto":
					Toolbar_AutoShowNavBtns(ControlID);
					toolbar.onresize = new Function("Toolbar_AutoShowNavBtns('" + ControlID + "')");
				break;
		case	"off":
					toolbar.children(0).rows(0).cells(0).style.display = "none";
					toolbar.children(0).rows(0).cells(3).style.display = "none";
				break;
	}
	if (xmlSourceFile.length == 0)
		return;
	ToolbarItemBorderColor = toolbar.ToolbarItemBorderColor;
	if( (ToolbarItemBorderColor == "")||(ToolbarItemBorderColor == null) )ToolbarItemBorderColor = "buttonface";
	var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
	//alert(xmlID);
	//return;
	eval("var xmlObject = " + xmlID);
	xmlObject.async = false;
	xmlObject.load(xmlSourceFile);
	//alert(xmlObject.xml);
	if (xmlObject.parseError.errorCode != 0){	
		alertErr(ControlID, "Toolbar", "Initialise", xmlObject.parseError.reason);
		//alert("xml parse error occured for control '" + ControlID + "' source file: '" + xmlSourceFile + "'.\n" + xmlObject.parseError.errorCode + "  " + xmlObject.parseError.reason);
		return;
	}
	try{
		eval("var Node = " + xmlID + ".documentElement");
	}
	catch(err){}
	if(!Node)return;
	var arrClickEvents = new Array(), ClickEventCount = 0;
	var ReturnValue = "<TABLE UNSELECTABLE='on' contentEditable=false border=0 cellpadding=0 cellspacing=0 style='WIDTH:100%; HEIGHT:100%'><TR>";
	var ChildIndex = 0, i, j;
	var ClickEvent = "", Display = "", BackgroundImage = "", BackGroundColor = "", Caption = "", Tooltip = "", Disabled;
	var Image = "", ImagePosition = "", NodeIndex, ToolbarItemHTML, TBID, ObjectID;
	var NodeLength = Node.childNodes.length;
	var DropDownImage, MenuType;
	for (i = 0; i < NodeLength; i++){
		DropDownImage = "";
		MenuType = 1; //default: has no submenus
		TBID = ControlID + "_" + i;
		ObjectID = Node.childNodes(i).getAttribute("ObjectID");
		Caption = Node.childNodes(i).getAttribute("Caption");
		Tooltip = Node.childNodes(i).getAttribute("Tooltip");
		Disabled = (Node.childNodes(i).getAttribute("Disabled"))?(Node.childNodes(i).getAttribute("Disabled")):(false);
		//alert(Disabled);
		Display = (i == 0)?("Block"):("None");
		BackgroundImage = Node.childNodes(i).getAttribute("BackgroundImage");
		Image = Node.childNodes(i).getAttribute("Image");
		ImagePosition = Node.childNodes(i).getAttribute("ImagePosition");
		ClickEvent = Node.childNodes(i).getAttribute("ClickEvent");
		if ( (Caption == "-")&&(Image = "") ) {
			ToolbarItemHTML = "<TR><TD UNSELECTABLE=\"on\" MenuType=" + MenuType + " UNSELECTABLE='on' background='htmlcontrols/toolbar/seperator.gif' style='BACKGROUND-REPEAT: repeat; BACKGROUND-POSITION: center center'>&nbsp;</TD>";
		}
		else {
			if(Node.childNodes(i).childNodes.length){
				DropDownImage = "&nbsp;<img src='htmlcontrols/toolbar/down2.gif'>";
				MenuType = 2; // has submenus
			}
			if (Image == "") {
				ToolbarItemHTML = "<TR><TD UNSELECTABLE=\"on\" MenuType=" + MenuType + " UNSELECTABLE='on' TBID='" + TBID + "' nowrap>&nbsp;" + Caption + DropDownImage + "&nbsp;</TD></TD>";
			}
			else {
				switch (ImagePosition){
					case "0": //image above caption
						 ToolbarItemHTML = "<TR UNSELECTABLE='on'><TD UNSELECTABLE=\"on\" MenuType=" + MenuType + " UNSELECTABLE='on' HEIGHT='50%' TBID='" + TBID + "'><IMG UNSELECTABLE='on' MenuType=" + MenuType + " TBID='" + TBID + "' src='" + Image + "'></TD></TR><TR><TR ><TD UNSELECTABLE='on' MenuType=" + MenuType + " TBID='" + TBID + "' nowrap HEIGHT='50%'>&nbsp;" + Caption + DropDownImage + "&nbsp;</TD></TR>";
					break;
					
					case "1": //image on left of caption
						ToolbarItemHTML = "<TR UNSELECTABLE='on'><TD UNSELECTABLE=\"on\" MenuType=" + MenuType + " UNSELECTABLE='on' TBID='" + TBID + "' HEIGHT='100%'>&nbsp;<IMG UNSELECTABLE='on' MenuType=" + MenuType + " TBID='" + TBID + "' src='" + Image + "'>&nbsp;</TD><TD UNSELECTABLE='on' MenuType=" + MenuType + " TBID='" + TBID + "' nowrap>&nbsp;" + Caption + DropDownImage + "&nbsp;</TD></TR>";
					break;
					
					case "2": //image on right of caption
						ToolbarItemHTML = "<TR UNSELECTABLE='on'><TD UNSELECTABLE=\"on\" MenuType=" + MenuType + " UNSELECTABLE='on' TBID='" + TBID + "' nowrap>&nbsp;" + Caption + "&nbsp;</TD><TD MenuType=" + MenuType + " UNSELECTABLE='on' TBID='" + TBID + "' HEIGHT='100%'><IMG UNSELECTABLE='on' MenuType=" + MenuType + " TBID='" + TBID + "' src='" + Image + "'>" + DropDownImage + "&nbsp;</TD></TR>"
					break;
							
					case "3": //image below caption
						 ToolbarItemHTML = "<TR UNSELECTABLE='on'><TD MenuType=" + MenuType + " UNSELECTABLE='on' TBID='" + TBID + "' nowrap HEIGHT='50%'>&nbsp;" + Caption + "&nbsp;</TD></TR><TR><TR UNSELECTABLE='on'><TD UNSELECTABLE='on' MenuType=" + MenuType + " UNSELECTABLE='on' TBID='" + TBID + "' HEIGHT='50%'><IMG UNSELECTABLE='on' MenuType=" + MenuType + " TBID='" + TBID + "' src='" + Image + "'>" + DropDownImage + "</TD></TR>";
					break;
					
					default:
						ToolbarItemHTML = "<TR UNSELECTABLE='on'><TD MenuType=" + MenuType + " UNSELECTABLE='on' TBID='" + TBID + "' HEIGHT='100%'><IMG UNSELECTABLE='on' MenuType=" + MenuType + " TBID='" + TBID + "' src='" + Image + "'>&nbsp;</TD><TD MenuType=" + MenuType + " UNSELECTABLE='on' TBID='" + TBID + "' nowrap>&nbsp;" + Caption + DropDownImage + "&nbsp;</TD></TR>";
					break;
				}
			}
		}
		if(Tooltip) {
			if (FormName == "frmToolbarMenu") {
				ReturnValue += "<TD UNSELECTABLE='on' title='" + Tooltip + "'><TABLE MenuType=" + MenuType + " UNSELECTABLE='on' contentEditable=false id='" + TBID + "' ObjectID='" + ObjectID + "' WizardTag='WizardToolbarItem' onclick='Toolbar_ItemClick(\"" + i + "\", \"" + xmlID + "\",\"" + ControlID + "\");' class='ToolbarItemOut' STYLE='border-color:" + ToolbarItemBorderColor + "' cellspacing=0 cellpadding=0 HEIGHT=100% onmouseover='Toolbar_ItemOver();' onmouseout='Toolbar_ItemOut();' onmousedown='Toolbar_ItemDown();' onmouseup='Toolbar_ItemOver();'>" + ToolbarItemHTML + "</TABLE></TD><TD MenuType=" + MenuType + " UNSELECTABLE='on'>&nbsp;&nbsp;</TD>";
			} else {
				ReturnValue += "<TD title='" + Tooltip + "'><TABLE MenuType=" + MenuType + " UNSELECTABLE='on' contentEditable=false id='" + TBID + "' onclick='Toolbar_ItemClick(\"" + i + "\", \"" + xmlID + "\",\"" + ControlID + "\");' class='ToolbarItemOut' STYLE='border-color:" + ToolbarItemBorderColor + "' cellspacing=0 cellpadding=0 HEIGHT=100% onmouseover='Toolbar_ItemOver();' onmouseout='Toolbar_ItemOut();' onmousedown='Toolbar_ItemDown();' onmouseup='Toolbar_ItemOver();'>" + ToolbarItemHTML + "</TABLE></TD><TD MenuType=" + MenuType + " UNSELECTABLE='on'>&nbsp;&nbsp;</TD>";
			}
		} else {
			if (FormName == "frmToolbarMenu") {
				ReturnValue += "<TD UNSELECTABLE='on'><TABLE MenuType=" + MenuType + " UNSELECTABLE='on' contentEditable=false id='" + TBID + "' ObjectID='" + ObjectID + "' WizardTag='WizardToolbarItem' onclick='Toolbar_ItemClick(\"" + i + "\", \"" + xmlID + "\",\"" + ControlID + "\");' class='ToolbarItemOut' STYLE='border-color:" + ToolbarItemBorderColor + "' cellspacing=0 cellpadding=0 HEIGHT=100% onmouseover='Toolbar_ItemOver();' onmouseout='Toolbar_ItemOut();' onmousedown='Toolbar_ItemDown();' onmouseup='Toolbar_ItemOver();'>" + ToolbarItemHTML + "</TABLE></TD><TD MenuType=" + MenuType + " UNSELECTABLE='on'>&nbsp;&nbsp;</TD>";
			} else {
				ReturnValue += "<TD><TABLE MenuType=" + MenuType + " UNSELECTABLE='on' contentEditable=false id='" + TBID + "' onclick='Toolbar_ItemClick(\"" + i + "\", \"" + xmlID + "\",\"" + ControlID + "\");' class='ToolbarItemOut' STYLE='border-color:" + ToolbarItemBorderColor + "' cellspacing=0 cellpadding=0 HEIGHT=100% onmouseover='Toolbar_ItemOver();' onmouseout='Toolbar_ItemOut();' onmousedown='Toolbar_ItemDown();' onmouseup='Toolbar_ItemOver();'>" + ToolbarItemHTML + "</TABLE></TD><TD MenuType=" + MenuType + " UNSELECTABLE='on'>&nbsp;&nbsp;</TD>";
			}
		}
	}
	ReturnValue += "<TD contentEditable=false UNSELECTABLE='on' width=100%>&nbsp;</TD></TR></TABLE>";
	document.all("div_" + ControlID).innerHTML = ReturnValue;
	delete xmlHTTP;
	
	setTimeout("document.all('" + ControlID + "').fireEvent('onresize')", 100);
}

function Toolbar_AutoShowNavBtns(ContainerID){
	if(document.all("div_" + ContainerID).scrollWidth > document.all(ContainerID).children(0).rows(0).cells(1).scrollWidth){
		document.all(ContainerID).children(0).rows(0).cells(0).style.display = "block";
		document.all(ContainerID).children(0).rows(0).cells(3).style.display = "block";
	}
	else{
		document.all(ContainerID).children(0).rows(0).cells(0).style.display = "none";
		document.all(ContainerID).children(0).rows(0).cells(3).style.display = "none";
	}
}

function Toolbar_onScroll(direction, ControlID){
	if (direction == "up")Toolbar_ScrollLeft(ControlID);
	if (direction == "down")Toolbar_ScrollRight(ControlID);
}

function Toolbar_ScrollLeft(ControlID){
	var Interval = 2;
	var Div = document.all("div_" + ControlID);
	if (Div.MouseState == "Up")return;
	if (Interval <= 1)Interval = 1;
	else Interval = Interval - .5;
	var ScrollLeft = Div.scrollLeft;
	Div.scrollLeft = ScrollLeft + 5;
	var CallAgain = "Toolbar_ScrollLeft('" + ControlID + "');";
	if (Div.MouseState == "Down")
		var callFunc = window.setTimeout(CallAgain,Interval * Interval,"javascript");
}

function Toolbar_ScrollRight(ControlID){
	var Interval = 2;
	var Div = document.all("div_" + ControlID);
	if (Div.MouseState == "Up")return;
	if (Interval <= 1)Interval = 1;
	else Interval = Interval - .5;
	var ScrollLeft = Div.scrollLeft;
	Div.scrollLeft = ScrollLeft - 5;
	var CallAgain = "Toolbar_ScrollRight('" + ControlID + "');";
	if (Div.MouseState == "Down")
		var callFunc = window.setTimeout(CallAgain,Interval * Interval,"javascript");
}

function Toolbar_Step(ControlID, Direction){
	var Div = document.all("div_" + ControlID);
	switch(Direction){
		case "Up":
				Div.scrollLeft += document.all(ControlID).children(0).rows(0).cells(1).scrollWidth;
			break;
		case "Down":
				Div.scrollLeft -= document.all(ControlID).children(0).rows(0).cells(1).scrollWidth;
			break;
	}
}

function Toolbar_ItemOver() {
	//if (ToolbarSelectedMenuItemElement != FindTableParentElement(event.srcElement))
	if (window.event.srcElement.MenuType == 1) //this menuitem does not have submenus
		Toolbar_DropDown_Popup.hide();
	
	if (window.event.srcElement.MenuType == 2) { //this menuitem has submenus
		Toolbar_DropDown_Popup.hide();
		window.event.srcElement.fireEvent("onclick");
	}
	
	var ToolbarItemID = window.event.srcElement.TBID;
	var toolbarItem = document.all(ToolbarItemID);
	if((toolbarItem.tagName == "TABLE")&&(!toolbarItem.disabled)){
		try{
			document.all(ToolbarItemID).style.borderBottom = "threeddarkshadow 1px solid";
			document.all(ToolbarItemID).style.borderTop = "threedhighlight 1px solid";
			document.all(ToolbarItemID).style.borderLeft = "threedhighlight 1px solid";
			document.all(ToolbarItemID).style.borderRight = "threeddarkshadow 1px solid";
		}
		catch(err){};
	}
}

function Toolbar_ItemOut() {
	var ToolbarItemID = window.event.srcElement.TBID;
	var toolbarItem = document.all(ToolbarItemID);
	if((toolbarItem.tagName == "TABLE")&&(!toolbarItem.disabled)){		
		document.all(ToolbarItemID).style.borderBottom = ToolbarItemBorderColor + " 1px solid";
		document.all(ToolbarItemID).style.borderTop = ToolbarItemBorderColor + " 1px solid";
		document.all(ToolbarItemID).style.borderLeft = ToolbarItemBorderColor + " 1px solid";
		document.all(ToolbarItemID).style.borderRight = ToolbarItemBorderColor + " 1px solid";
	}
}

function Toolbar_ItemDown() {		
	var ToolbarItemID = window.event.srcElement.TBID;
	var toolbarItem = document.all(ToolbarItemID);
	if((toolbarItem.tagName == "TABLE")&&(!toolbarItem.disabled)){
		toolbarItem.style.borderBottom = "threedhighlight 1px solid";
		toolbarItem.style.borderTop = "threeddarkshadow 1px solid";
		toolbarItem.style.borderLeft = "threeddarkshadow 1px solid";
		toolbarItem.style.borderRight = "threedhighlight 1px solid";
	}
}

function Toolbar_ItemClick(NodeIndex, xmlID, ContainerID){
	//alert("NodeIndex: " + NodeIndex);
	try{
		if ( (window.event.altKey) && (event.srcElement.isAccessKey!="1") ) {
			//alert(event.srcElement.tagName);
			return;
		}
	}	
	catch(err){
	}
	//alert("xmlID: " + xmlID);
	eval("var xmlSlider = " + xmlID);
	if(!xmlSlider)
		return;
	var NodePath = "xmlSlider.documentElement";
	var arrNodeIndex = NodeIndex.split(".");
	var i, NodeIndexCount = arrNodeIndex.length;
	for (i = 0; i < NodeIndexCount; i++){
		NodePath = NodePath + ".childNodes(" + arrNodeIndex[i] + ")"
	}
	eval("var Node = " + NodePath);
	//alert("ContainerID: " + ContainerID);
	
	if(Node.childNodes.length > 0){
		var BgColor = document.all(String(ContainerID)).style.backgroundColor;
		var BgImage = document.all(String(ContainerID)).children[0].background;
		var Top = document.all(String(ContainerID)).offsetHeight + document.all(String(ContainerID)).offsetTop;
		Top-=document.body.scrollTop;
		Toolbar_DropDown(ContainerID, NodeIndex, xmlID, Node, BgColor, BgImage, Top);
	}
	else{
		var ClickEvent = Node.getAttribute("ClickEvent");
		try {
			if (ClickEvent!="") {
				if (document.all(xmlID).HTMLControlID != null) {
					debugWrite(xmlID + ".MenuItemClickEvent",new Array(document.all(xmlID).HTMLControlID,"MenuItemClickEvent"),"callstack");
				}
				eval(ClickEvent);
			}
		}
		catch(err) {
			alert(err.description);
		}
	}
}

function Toolbar_DropDown(ContainerID, ParentNodeIndex, xmlID, MenuItem, BgColor, BgImage, Top){
	var thisParent = window.event.srcElement;
	while((thisParent) && (thisParent.tagName != "TABLE")){
		thisParent = thisParent.parentElement;
	}
	if(thisParent){
		var Left = thisParent.offsetLeft;
		while(thisParent.parentElement){
			try{
				Left+=thisParent.parentElement.offsetLeft;
				if(thisParent.parentElement.tagName == "DIV"){
					Left-=thisParent.parentElement.scrollLeft;
				}
				thisParent = thisParent.parentElement;
			}
			catch(err){
				break;
			}
		}
		Left-=document.body.scrollLeft;
	}
	Left-=document.all(ContainerID).children(0).rows(0).cells(0).offsetWidth + 2;

	thisParent = window.event.srcElement;
	while((thisParent) && (thisParent.tagName != "TABLE")){
		thisParent = thisParent.parentElement;
	}
	//var Top = thisParent.offsetHeight + thisParent.offsetTop;

	if(document.body.clientHeight < Top)
		Top = document.body.clientHeight;

	var TableSize = "<TABLE contenteditable=false background='" + BgImage + "' cellpadding=0 cellspacing=0 id='ToolbarDropDown_" + xmlID + "' style='FONT-FAMILY:arial; FONT-SIZE:8pt; CURSOR:default; BACKGROUND-COLOR:" + BgColor + "; BORDER-RIGHT: threeddarkshadow 2px solid; BORDER-TOP: threedhighlight 2px solid; BORDER-LEFT: threedhighlight 2px solid; BORDER-BOTTOM: threeddarkshadow 2px solid;'>";
	var TableShow = "<TABLE contenteditable=false background='" + BgImage + "' cellpadding=0 cellspacing=0 id='ToolbarDropDown_" + xmlID + "' style='FONT-FAMILY:arial; FONT-SIZE:8pt; CURSOR:default; BACKGROUND-COLOR:" + BgColor + "; BORDER-RIGHT: threeddarkshadow 2px solid; BORDER-TOP: threedhighlight 2px solid; BORDER-LEFT: threedhighlight 2px solid; BORDER-BOTTOM: threeddarkshadow 2px solid; width=100%; height=100%'>";

	var PopupHTML = ""; 
	var Image;
	var PopupItemCount = MenuItem.childNodes.length;
	var i, Caption, childrenHTML;
	for(i = 0; i < PopupItemCount; i++){
		Caption = MenuItem.childNodes(i).getAttribute("Caption");
		if(Caption == "-"){
			Caption = "<hr>";
			PopupHTML += "<TR><TD UNSELECTABLE=\"on\" colspan=2 height='6px' colspan='2'>" + Caption + "</TD></TR>";
		}
		else{
			if(MenuItem.childNodes(i).getAttribute("IsDefault") == "1")
				Caption = "<b>" + Caption + "</b>";

			Image = MenuItem.childNodes(i).getAttribute("Image");
			if(Image)
				Image = "<img src='" + Image + "'>";

			if (FormName == "frmToolbarMenu") {
				PopupHTML += "<TR WizardTag='WizardPopupMenuItem' onclick=\"window.parent.Toolbar_ItemClick('" + ParentNodeIndex + "." + i + "', '" + xmlID + "');\" onmouseover=\"this.style.color = 'highlighttext'; this.bgColor = 'highlight';\" onmouseout=\"this.style.color = ''; this.bgColor = '';\"><TD UNSELECTABLE=\"on\">&nbsp;&nbsp;" + Image + "&nbsp;</TD><TD UNSELECTABLE=\"on\">&nbsp;" + Caption + "&nbsp;</TD></TR>";
			} else {
				PopupHTML += "<TR onclick=\"window.parent.Toolbar_ItemClick('" + ParentNodeIndex + "." + i + "', '" + xmlID + "');\" onmouseover=\"this.style.color = 'highlighttext'; this.bgColor = 'highlight';\" onmouseout=\"this.style.color = ''; this.bgColor = '';\"><TD UNSELECTABLE=\"on\">&nbsp;&nbsp;" + Image + "&nbsp;</TD><TD UNSELECTABLE=\"on\">&nbsp;" + Caption + "&nbsp;</TD></TR>";
			}
		}
	}
	PopupHTML += "</TABLE>";
	var PopupBody = Toolbar_DropDown_Popup.document.body;
	
	Toolbar_DropDown_Popup.document.onclick = new Function("Toolbar_DropDown_Popup.hide();");
	
	//PopupHTML = "<div style='background-color:red; width:100px; height:100px'>this is a test</div>"
	PopupBody.bgColor = "transparent";
	PopupBody.innerHTML = TableShow + PopupHTML;
	if (!document.all("divForm1_SizeCalculator")) {
		var oDiv = document.createElement("DIV");
		oDiv.contentEditable = false;
		oDiv.id = "divForm1_SizeCalculator";
		oDiv.style.position = "absolute";
		oDiv.style.posLeft = -1000000;
		oDiv.style.posTop = -1000000;
		oDiv.style.visiblity = "Hidden";
		document.body.appendChild(oDiv)
	}
	
	
	document.all("divForm1_SizeCalculator").innerHTML = TableSize + PopupHTML;
	var PopupWidth = document.all("divForm1_SizeCalculator").offsetWidth;
	var PopupHeight = document.all("divForm1_SizeCalculator").offsetHeight;
	//ToolbarSelectedMenuItemElement = FindTableParentElement(event.srcElement);
	Toolbar_DropDown_Popup.document.oncontextmenu = new Function("return false");
	//Toolbar_DropDown_Popup.document.onmouseout = Toolbar_DropDown_Popup.hide();
	//Toolbar_DropDown_Popup.show(Left, Top, PopupWidth, PopupHeight, document.body);	
	var str = "Toolbar_DropDown_Popup.show(" + Left + ", " + Top + ", " + PopupWidth + ", " + PopupHeight + ", document.body);";	
	window.setTimeout(str, 5);
	
}

function FindTableParentElement(Element) {
	if (Element.tagName == "TABLE") return Element;
	while(Element.tagName != "TABLE") {
		Element = Element.parentElement;
	}
	return Element;
}


//xmllabel.js
function i4(HTMLControlID) {
	InitXMLLabel(HTMLControlID)
}

function _4(HTMLControlID) {
	InitXMLLabel(HTMLControlID)
}

function InitXMLLabel(HTMLControlID){
	
	var XMLLabelID=document.all(HTMLControlID).selectSingleNode("//ID").text;
	var XMLLabel=document.all(XMLLabelID);
	var cssClass=(document.all(HTMLControlID).selectNodes("//cssClass").length>0)?document.all(HTMLControlID).selectSingleNode("//cssClass").text:"";
	document.all(XMLLabelID).className=cssClass;
	XMLLabel.tagValues=document.all(HTMLControlID);
	XMLLabel.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+document.body.HTMLControlID+"');");
	XMLLabel.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+document.body.HTMLControlID+"');");	
	XMLLabel.onclick=new Function("HTMLControlID","LabelOnClickEvent('"+HTMLControlID+"');");
	
	var bOverflow = (document.all(HTMLControlID).selectNodes("//OverFlowTooltip").length>0)?document.all(HTMLControlID).selectSingleNode("//OverFlowTooltip").text: "";
	if (bOverflow) {
		window.setTimeout("xmlLabel_CheckLabelLength('"+XMLLabelID+"')", 1000);
	}
}

function LabelOnClickEvent(HTMLControlID){
	var OnClick=(document.all(HTMLControlID).selectNodes("//onClick").length>0)?document.all(HTMLControlID).selectSingleNode("//onClick").text:"";
	if(OnClick!=null){
		if(OnClick=="")return;
		try{
			debugWrite(document.all(HTMLControlID).selectSingleNode("//ID").text+".onClick",new Array(HTMLControlID,"onClick"),"callstack");
			eval(OnClick);
		}catch(err){
			alertErr(document.all(HTMLControlID).selectSingleNode("//ID").text,"XMLLabel","onClick",err.description);
		}
	}
}

function xmlLabel_CheckLabelLength(XMLLabelID) { 
	var oLabel = document.all(XMLLabelID);
	if (!oLabel) return;
	if ((oLabel.dataSrc.length + oLabel.dataFld.length) > 0) return; //If the item is data bound
	if (oLabel.offsetHeight == 0) return;
	var sCaption = oLabel.value;
	if (sCaption.substr(0,1) == "{") return;
	oLabel.title = sCaption;
	if (oLabel.scrollHeight > oLabel.offsetHeight) {		
		sCaption = sCaption.substr(0, parseInt(Math.abs((sCaption.length / oLabel.scrollHeight) * oLabel.offsetHeight)));
		oLabel.value = sCaption + "...";
	}
}


//xmltextbox.js


function InitXMLTextbox(HTMLControlID){
	var xmlTagValues=document.all(String(HTMLControlID));
	if(!xmlTagValues)
		return;
	var XMLTextboxID=xmlTagValues.selectSingleNode("//ID").text;
	var XMLTextbox=document.all(XMLTextboxID);
	if(!XMLTextbox)
		return;
	
	XMLTextbox.tagValues=xmlTagValues;
	XMLTextbox.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+document.body.HTMLControlID+"');");
	XMLTextbox.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+document.body.HTMLControlID+"');");	
	XMLTextbox.NumericCheck=new Function("HTMLControlID","xmlTextBox_NumericCheck('"+HTMLControlID+"');");
	XMLTextbox.Refresh=new Function("XMLTextboxID","HTMLControlID","return Textbox_Refresh('"+XMLTextboxID+"','"+HTMLControlID+"');");
	XMLTextbox.onkeypress=new Function("XMLTextboxID","HTMLControlID","return xmlTextbox_onkeypress('"+XMLTextboxID+"','"+HTMLControlID+"');");
	XMLTextbox.onchange=new Function("XMLTextboxID","HTMLControlID","return xmlTextbox_onChange('"+XMLTextboxID+"');");
	XMLTextbox.onfocus=new Function("HTMLControlID","xmlTextbox_onfocus('"+HTMLControlID+"');");
	XMLTextbox.onkeyup=new Function("XMLTextboxID","HTMLControlID","return xmlTextbox_onkeyup('"+XMLTextboxID+"','"+HTMLControlID+"');");
	XMLTextbox.onkeydown=XMLTextbox.NumericCheck;
	XMLTextbox.onblur=new Function("XMLTextboxID","HTMLControlID","return xmlTextbox_onblur('"+XMLTextboxID+"','"+HTMLControlID+"');");
	XMLTextbox.onbeforeupdate=new Function("XMLTextboxID","return xmlTextbox_onbeforeupdate('"+XMLTextboxID+"')");
	XMLTextbox.onafterupdate=new Function("XMLTextboxID","return xmlTextbox_onafterupdate('"+XMLTextboxID+"')");
	XMLTextbox.onmouseenter=new Function("HTMLControlID","return xmlTextbox_onMouseEnter('"+HTMLControlID+"')");
	XMLTextbox.onmouseleave=new Function("HTMLControlID","return xmlTextbox_onMouseLeave('"+HTMLControlID+"')");
	var Disabled=(xmlTagValues.selectNodes("/root/Disabled").length>0)?xmlTagValues.selectSingleNode("/root/Disabled").text:"";
	XMLTextbox.disabled=(Disabled.toLowerCase()=="true")?("true"):(false);
	XMLTextbox.Refresh();
}

function i8(HTMLControlID) {
	InitXMLTextbox(HTMLControlID)
}

function _8(HTMLControlID) {
	InitXMLTextbox(HTMLControlID)
}

function xmlTextbox_onMouseEnter(HTMLControlID){
	var TagValues=document.all(HTMLControlID);
	if(!TagValues){
		alertErr("","Textbox","xmlTextbox_onmouseenter","Invalid TagValue ID:'"+HTMLControlID+"' specified.");
		return;
	}
	if(TagValues.parseError!=0){
		alertErr("","Textbox","xmlTextbox_onmouseenter","TagValue Error: "+TagValues.parseError.reason);
		return;
	}
	var TextboxID=(TagValues.selectNodes("//root/ID").length>0)?(TagValues.selectSingleNode("//root/ID").text):("");
	var Textbox=document.all(TextboxID);
	if(!Textbox){
		alertErr(TextboxID,"Textbox","xmlTextbox_onmouseenter","Invalid Textbox ID:'"+TextboxID+"' specified.");
		return;
	}
	var onmouseenterScript=(TagValues.selectNodes("//root/onMouseEnter").length>0)?(TagValues.selectSingleNode("//root/onMouseEnter").text):("");
	try{
		if(onmouseenterScript!=""){
			debugWrite(TextboxID+".onmouseenter",new Array(HTMLControlID,"onmouseenter"),"callstack");
			eval(onmouseenterScript);
		}
	}
	catch(err){
		alertErr(TextboxID,"Textbox","onmouseenter",err.description);
	}
}

function xmlTextbox_onMouseLeave(HTMLControlID){
	var TagValues=document.all(HTMLControlID);
	if(!TagValues){
		alertErr("","Textbox","xmlTextbox_onmouseleave","Invalid TagValue ID:'"+HTMLControlID+"' specified.");
		return;
	}
	if(TagValues.parseError!=0){
		alertErr("","Textbox","xmlTextbox_onmouseleave","TagValue Error: "+TagValues.parseError.reason);
		return;
	}
	var TextboxID=(TagValues.selectNodes("//root/ID").length>0)?(TagValues.selectSingleNode("//root/ID").text):("");
	var Textbox=document.all(TextboxID);
	if(!Textbox){
		alertErr(TextboxID,"Textbox","xmlTextbox_onmouseleave","Invalid Textbox ID:'"+TextboxID+"' specified.");
		return;
	}
	var onmouseleaveScript=(TagValues.selectNodes("//root/onMouseLeave").length>0)?(TagValues.selectSingleNode("//root/onMouseLeave").text):("");
	try{
		if(onmouseleaveScript!=""){
			debugWrite(TextboxID+".onmouseleave",new Array(HTMLControlID,"onmouseleave"),"callstack");
			eval(onmouseleaveScript);
		}
	}
	catch(err){
		alertErr(TextboxID,"Textbox","onmouseleave",err.description);
	}
}

function xmlTextbox_onChange(TextboxID){
	var xmlTextbox=document.all(TextboxID);
	if(!xmlTextbox){
		alertErr(TextboxID,"xmlTextbox","onChange","Invalid Textbox ID:'"+TextboxID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(xmlTextbox.HTMLControlID);
	if(!xmlTagValues){
		alertErr(TextboxID,"xmlTextbox","onChange","Invalid TagValue ID:'"+xmlTextbox.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(TextboxID,"xmlTextbox","onChange","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var onChange=(xmlTagValues.selectNodes("//root/onChange").length>0)?(xmlTagValues.selectSingleNode("//root/onChange").text):("");
	try{
		if(onChange!=""){
			debugWrite(TextboxID+".onChange",new Array(document.all(TextboxID).HTMLControlID,"onChange"),"callstack");
			eval(onChange);
		}
	}
	catch(err){
		alertErr(TextboxID,"Textbox","onChange",err.description);
	}
	
}

function xmlTextbox_onfocus(HTMLControlID){
	var TagValues=document.all(HTMLControlID);
	if(!TagValues){
		alertErr("","Textbox","xmlTextbox_onfocus","Invalid TagValue ID:'"+HTMLControlID+"' specified.");
		return;
	}
	if(TagValues.parseError!=0){
		alertErr("","Textbox","xmlTextbox_onfocus","TagValue Error: "+TagValues.parseError.reason);
		return;
	}
	var TextboxID=(TagValues.selectNodes("//root/ID").length>0)?(TagValues.selectSingleNode("//root/ID").text):("");
	var Textbox=document.all(TextboxID);
	if(!Textbox){
		alertErr(TextboxID,"Textbox","xmlTextbox_onfocus","Invalid Textbox ID:'"+TextboxID+"' specified.");
		return;
	}
	var onFocusScript=(TagValues.selectNodes("//root/onFocus").length>0)?(TagValues.selectSingleNode("//root/onFocus").text):("");
	try{
		if(onFocusScript!=""){
			debugWrite(TextboxID+".onfocus",new Array(HTMLControlID,"onfocus"),"callstack");
			eval(onFocusScript);
		}
	}
	catch(err){
		alertErr(TextboxID,"Textbox","onfocus",err.description);
	}
}

function xmlTextbox_onblur(XMLTextboxID,HTMLControlID){
	var XMLTextbox=document.all(XMLTextboxID);
	var xmlTagValues=document.all(HTMLControlID).documentElement;
	if((!xmlTagValues)||(!XMLTextbox))return true;
	var onblur="";
	if(xmlTagValues.selectNodes("//onBlur").length>0)onblur=xmlTagValues.selectSingleNode("//onBlur").text;
	if(onblur=="")return;
	try{
		if(onblur!=""){
			debugWrite(XMLTextboxID+".onblur",new Array(HTMLControlID,"onblur"),"callstack");
			eval(onblur);
		}
	}
	catch(err){
		alertErr(XMLTextboxID,"Textbox","onBlur",err.description);
	}
}

function xmlTextbox_onkeyup(XMLTextboxID,HTMLControlID){
	var XMLTextbox=document.all(XMLTextboxID);
	var xmlTagValues=document.all(HTMLControlID).documentElement;
	if((!xmlTagValues)||(!XMLTextbox))return true;
	var onkeyup="";
	if(xmlTagValues.selectNodes("//onkeyup").length>0)onkeyup=xmlTagValues.selectSingleNode("//onkeyup").text;
	if(onkeyup=="")return;
	try{
		debugWrite(XMLTextboxID+".onkeyup",new Array(HTMLControlID,"onkeyup"),"callstack");
		eval(onkeyup);
	}
	catch(err){
		alertErr(XMLTextboxID,"Textbox","onkeyup",err.description);
	}
}

function xmlTextbox_onkeypress(XMLTextboxID,HTMLControlID){
	var XMLTextbox=document.all(XMLTextboxID);
	var xmlTagValues=document.all(HTMLControlID).documentElement;
	if((!xmlTagValues)||(!XMLTextbox))return true;
	var onkeypress="";
	if(xmlTagValues.selectNodes("//onkeypress").length>0)onkeypress=xmlTagValues.selectSingleNode("//onkeypress").text;
	if(onkeypress=="")return;
	try{
		debugWrite(XMLTextboxID+".onkeypress",new Array(HTMLControlID,"onkeypress"),"callstack");
		eval(onkeypress);
	}
	catch(err){
		alertErr(XMLTextboxID,"Textbox","onkeypress",err.description);
	}
}

function Textbox_Refresh(TextboxID,HTMLControlID){
	var xmlTextbox=document.all(TextboxID);
	if(!xmlTextbox){
		alertErr(TextboxID,"xmlTextbox","Refresh","Invalid Textbox ID:'"+TextboxID+"' specified.");
		return;
	}
	var xmlTagValues=document.all(xmlTextbox.HTMLControlID);
	if(!xmlTagValues){
		alertErr(TextboxID,"xmlTextbox","Refresh","Invalid TagValue ID:'"+xmlTextbox.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(TextboxID,"xmlTextbox","Refresh","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var cssClass=(document.all(HTMLControlID).selectNodes("//cssClass").length>0)?document.all(HTMLControlID).selectSingleNode("//cssClass").text:"";
	document.all(TextboxID).className=cssClass;
	var sReadOnly
	var sReadOnly=(xmlTagValues.selectNodes("//root/readonly").length>0)?(xmlTagValues.selectSingleNode("//root/readonly").text):("");
	if(sReadOnly.length==0)return;
	sReadOnly=(sReadOnly.toString().toLowerCase()=="true")?(true):(false);
	xmlTextbox.readOnly=sReadOnly;
}

function xmlTextBox_NumericCheck(HTMLControlID){
	var xmlTagValues=document.all(HTMLControlID);
	var oCalendar = document.all(xmlTagValues.selectSingleNode("/root/ID").text);	
	var EditType = oCalendar.eType;
	if (EditType == null) {
		var EditType=(xmlTagValues.selectNodes("/root/EditType").length>0)?xmlTagValues.selectSingleNode("/root/EditType").text:0;
	}
	var KeyCode=window.event.keyCode;
	var CurrentValue=window.event.srcElement.value;
	if(EditType==1){
		if(event.shiftKey)
			event.returnValue=false;
		if((KeyCode>=96)&&(KeyCode<=105))return(true);
		if((KeyCode<48)||(KeyCode>57)){
			if((KeyCode<35)||(KeyCode>40)){
				if((KeyCode==190)||(KeyCode==110)){
					var arrCurrentValue=CurrentValue.split(".");
					if(arrCurrentValue.length>1)event.returnValue=false;
				}
				if((KeyCode==189)||(KeyCode==109)){
					var arrCurrentValue=CurrentValue.split("-");
					if(arrCurrentValue.length>1)event.returnValue=false;
				}
				if((KeyCode!=46)&&(KeyCode!=8)&&(KeyCode!=9)&&(KeyCode!=190)&&(KeyCode!=189)&&(KeyCode!=16)&&(KeyCode!=45)&&(KeyCode!=17)&&(KeyCode!=18)&&(KeyCode!=110)&&(KeyCode!=109)){
					event.returnValue=false;
				}
			}
		}
		return(true);
	}
	if(EditType==2){
		if((KeyCode>=96)&&(KeyCode<=105))return(true);
		if((KeyCode<48)||(KeyCode>57)){
			if((KeyCode<35)||(KeyCode>40)){
				if((KeyCode!=46)&&(KeyCode!=8)&&(KeyCode!=9)&&(KeyCode!=16)&&(KeyCode!=45)&&(KeyCode!=17)&&(KeyCode!=18))
					event.returnValue=false;
			}
		}
		return(true);
	}

	if(EditType==3){
		var arrCurrentValue=CurrentValue.split(".");
		if(arrCurrentValue.length==2){
			if ((KeyCode!=37) && (KeyCode!=38) && (KeyCode!=39) && (KeyCode!=40)) {
				if((arrCurrentValue[1].length==2)&&(KeyCode!=46)&&(KeyCode!=8) && (parseFloat(CurrentValue) != 0))event.returnValue=false;
			}
		}		
		if (KeyCode == 110) {
			var arrCurrentValue=CurrentValue.split(".");
			if(arrCurrentValue.length>1) {
				event.returnValue=false;
			} else {
				event.returnValue=true;
				return true;
			}
		}
		if((KeyCode>=96)&&(KeyCode<=105))return(true);
		if((KeyCode<48)||(KeyCode>57)){
			if((KeyCode<35)||(KeyCode>40)){
				if(KeyCode==190){
					var arrCurrentValue=CurrentValue.split(".");
					if(arrCurrentValue.length>1)event.returnValue=false;
				}
				if((KeyCode==189)||(KeyCode==109)){
					var arrCurrentValue=CurrentValue.split("-");
					if(arrCurrentValue.length>1) {
						event.returnValue=false;
					} else {
						event.returnValue=true;
						return true;
					}
				}
				if((KeyCode!=46)&&(KeyCode!=8)&&(KeyCode!=9)&&(KeyCode!=190)&&(KeyCode!=189)&&(KeyCode!=16)&&(KeyCode!=45)&&(KeyCode!=17)&&(KeyCode!=18))
					event.returnValue=false;
			}
		}
	}
	if(EditType==4){
		if((KeyCode!=13)&&(KeyCode!=16)&&(KeyCode!=8)&&(KeyCode!=9)&&(KeyCode!=46)&&((KeyCode<65)||(KeyCode>90))&&((KeyCode<48)||(KeyCode>57))&&((KeyCode<35)||(KeyCode>40))&&((KeyCode<96)||(KeyCode>105))){
			event.returnValue=false;
			return;
		}
		if((event.shiftKey)&&((KeyCode>=48)&&(KeyCode<=57))){
			event.returnValue=false;
			return;
		}
	}
}

function xmlTextbox_onbeforeupdate(XMLTextboxID){
	var xmlTextBox=document.all(XMLTextboxID);
	var xmlTagValues=document.all(xmlTextBox.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlTextBox))
		return true;
	var onbeforeupdate="";
	if(xmlTagValues.selectNodes("//onBeforeUpdate").length>0)
		onbeforeupdate=xmlTagValues.selectSingleNode("//onBeforeUpdate").text;
	if(onbeforeupdate=="")return;
	try{
		debugWrite(XMLTextboxID+".onBeforeUpdate",new Array(document.all(XMLTextboxID).HTMLControlID,"onBeforeUpdate"),"callstack");
		eval(onbeforeupdate);
	}
	catch(err){
		alertErr(XMLTextboxID,"Textbox","onbeforeupdate",err.description);
	}
}

function xmlTextbox_onafterupdate(XMLTextboxID){
	var xmlTextBox=document.all(XMLTextboxID);
	var xmlTagValues=document.all(xmlTextBox.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlTextBox))
		return true;
	var onafterupdate="";
	if(xmlTagValues.selectNodes("//onAfterUpdate").length>0)
		onafterupdate=xmlTagValues.selectSingleNode("//onAfterUpdate").text;
	if(onafterupdate=="")return;
	try{
		debugWrite(XMLTextboxID+".onAfterUpdate",new Array(document.all(XMLTextboxID).HTMLControlID,"onAfterUpdate"),"callstack");
		eval(onafterupdate);
	}
	catch(err){
		alertErr(XMLTextboxID,"Textbox","onafterupdate",err.description);
	}
}


//xmlbutton.js
function i11(HTMLControlID) {
	InitButton(HTMLControlID)
}
function _11(HTMLControlID) {
	InitButton(HTMLControlID)
}
function InitButton(HTMLControlID){
	var xmlTagValues=document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(XMLButtonID,"Button","InitButton","Invalid TagValue ID:'"+Button.HTMLControlID+"' specified.");
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(XMLButtonID,"Button","InitButton","TagValue Error: "+xmlTagValues.parseError.reason);
		return;
	}
	var XMLButtonID=xmlTagValues.selectSingleNode("//ID").text;
	var Button=document.all(XMLButtonID);
	//var ButtonType=(xmlTagValues.selectNodes("//root/type").length>0)?(xmlTagValues.selectSingleNode("//root/type").text):("button");
	Button.tagValues=xmlTagValues;
	Button.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	Button.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	
	Button.Refresh=new Function("XMLButtonID","HTMLControlID","RefreshButton('"+XMLButtonID+"','"+HTMLControlID+"');");
	Button.onclick=new Function("HTMLControlID","XMLButtonID","ButtonOnClickEvent('"+HTMLControlID+"', '"+XMLButtonID+"');");
	Button.Refresh();
	var bOverflow = (document.all(HTMLControlID).selectNodes("//OverFlowTooltip").length>0)?document.all(HTMLControlID).selectSingleNode("//OverFlowTooltip").text: "";
	if (bOverflow) {
		window.setTimeout("xmlButton_CheckValueLength('"+ XMLButtonID +"', '" + HTMLControlID + "')", 1000);
	}
}

function ButtonOnClickEvent(HTMLControlID,XMLButtonID){
	if(window.event.altKey)return;
	var oTagValues=document.all(HTMLControlID);
	var OnClick=(oTagValues.selectNodes("/root/onClick").length>0)?(oTagValues.selectSingleNode("/root/onClick").text):("");
	if(OnClick!=null){
		if(OnClick=="")return;
		try{
			debugWrite(XMLButtonID+".onClick",new Array(HTMLControlID,"onClick"),"callstack");
			eval(OnClick)
		}catch(err){
			alertErr(XMLButtonID,"Button","onClick",err.description+"\n"+OnClick);
		}
	}
}

function EscapeBrackets(str){
	str=VBReplace(str,"<","&lt;");
	str=VBReplace(str,">","&gt;");
	return str;
}

function RefreshButton(XMLButtonID,HTMLControlID){
	var oTagValues=document.all(HTMLControlID);
	var ImageURL=(oTagValues.selectNodes("/root/ImageURL").length>0)?(oTagValues.selectSingleNode("/root/ImageURL").text):("");
	var Caption=(oTagValues.selectNodes("/root/Caption").length>0)?(oTagValues.selectSingleNode("/root/Caption").text):("");
	var ImagePosition = document.all(XMLButtonID).imagePosition;
	if (ImagePosition == null) {
		var ImagePosition=(oTagValues.selectNodes("/root/ImagePosition").length>0)?(oTagValues.selectSingleNode("/root/ImagePosition").text):("");
	}
	var ButtonHTML="";
	var DisabledValue=((document.all(HTMLControlID).selectNodes("//Disabled").length>0)?(document.all(HTMLControlID).selectSingleNode("//Disabled").text):"");
	var Disabled=false;
	if(DisabledValue=="true")Disabled=true;
	cssClass=(document.all(HTMLControlID).selectNodes("//cssClass").length>0)?document.all(HTMLControlID).selectSingleNode("//cssClass").text:"";
	document.all(XMLButtonID).className=cssClass;
	if(ImageURL==""){
		document.all(XMLButtonID).disabled=Disabled;
		return;
	}
	document.all(XMLButtonID).innerHTML="";
	switch(ImagePosition){
		case "0":	ButtonHTML="<IMG border=0 src='"+ImageURL+"' style=''><br><span></span>";
			break;
			
		case "1":	ButtonHTML="<IMG border=0 src='"+ImageURL+"' style=''><span></span>";
			break;
			
		case "2":	ButtonHTML="<span></span><IMG border=0 src='"+ImageURL+"' style=''>";
			break;
			
		case "3":	ButtonHTML="<span></span><br><IMG border=0 src='"+ImageURL+"' style=''>";
			break;
			
		default:	ButtonHTML="";
			break;
	}
	document.all(XMLButtonID).innerHTML=ButtonHTML;
	switch(ImagePosition){
		case "0":document.all(XMLButtonID).children(2).innerText=Caption;
			break;
			
		case "1":document.all(XMLButtonID).children(1).innerText=Caption;
			break;
			
		case "2":document.all(XMLButtonID).children(0).innerText=Caption;
			break;
			
		case "3":document.all(XMLButtonID).children(0).innerText=Caption;
			break;
			
		default:document.all(XMLButtonID).children(0).innerText=Caption;
			break;
	}
	document.all(XMLButtonID).disabled=Disabled;
}

function xmlButton_CheckValueLength(XMLButtonID,HTMLControlID) {
	var oTagValues=document.all(HTMLControlID); //Get tagvalues
	var ImageURL=(oTagValues.selectNodes("/root/ImageURL").length>0)?(oTagValues.selectSingleNode("/root/ImageURL").text):(""); //Gets the ImageURL
	var oButton = document.all(XMLButtonID);
	if (!oButton || !oTagValues) return;
	if (oButton.offsetWidth == 0) return;
	
	if (ImageURL == "") { 
		var sCaption = oButton.value; //No Image
	} else {
		var oSpan = oButton.getElementsByTagName("SPAN"); //Image, the value is stored in a span
		var sCaption = oSpan[0].innerText;
	}
	if (sCaption.substr(0,1) == "{") return; //If session variable tagName
	oButton.title = sCaption; //Update tooltip
	if (oButton.scrollWidth > oButton.offsetWidth) {		
		/*var x = (oButton.offsetWidth); x = x / oButton.scrollWidth; x = 1 - x; sCaption = sCaption.substr(0, Math.abs(parseInt(sCaption.length*x))); 	-> As per projecta calc*/
		sCaption = sCaption.substr(0, (parseInt(sCaption.length / (oButton.scrollWidth) * oButton.offsetWidth) - 4));
		//Update the button's caption
		if (ImageURL == "") {
			oButton.value = sCaption + "...";
		} else {
			oSpan[0].innerHTML = sCaption + "...";
		}	
	}
}


//xmltextarea.js
function _3(HTMLcontrolID) {
	xmlTextarea_Initialise(HTMLcontrolID)
}

function xmlTextarea_Initialise(HTMLcontrolID){
	var xmlTextareaID=document.all(HTMLcontrolID).selectSingleNode("//ID").text;
	var xmlTextarea=document.all(xmlTextareaID);
	if(!xmlTextarea)
		return;
	var HTMLControlID=xmlTextarea.HTMLControlID;
	xmlTextarea.onkeypress=new Function("xmlTextareaID","return xmlTextarea_onkeypress('"+xmlTextareaID+"')");
	xmlTextarea.onkeydown=new Function("xmlTextareaID","return xmlTextarea_onkeydown('"+xmlTextareaID+"')");
	xmlTextarea.onkeyup=new Function("xmlTextareaID","return xmlTextarea_onkeyup('"+xmlTextareaID+"')");
	xmlTextarea.onchange=new Function("xmlTextareaID","return xmlTextarea_onChange('"+xmlTextareaID+"')");
	xmlTextarea.onbeforeupdate=new Function("xmlTextareaID","return xmlTextarea_onbeforeupdate('"+xmlTextareaID+"')");
	xmlTextarea.onafterupdate=new Function("xmlTextareaID","return xmlTextarea_onafterupdate('"+xmlTextareaID+"')");
	xmlTextarea.Refresh=new Function("XMLTextboxID","HTMLControlID","return xmlTextarea_Refresh('"+xmlTextareaID+"');");
	xmlTextarea.onfocus=new Function("HTMLControlID","xmlTextarea_onfocus('"+HTMLControlID+"');");
	xmlTextarea.onblur=new Function("HTMLControlID","xmlTextarea_onblur('"+HTMLControlID+"');");
	xmlTextarea.tagValues=document.all(HTMLcontrolID);
	xmlTextarea.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+document.body.HTMLControlID+"');");
	xmlTextarea.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+document.body.HTMLControlID+"');");
	xmlTextarea.Refresh();
	var xmlTagValues=document.all(xmlTextarea.HTMLControlID);
	if((!xmlTextarea)||(!xmlTagValues))return;
	var Disabled=(xmlTagValues.selectNodes("//Disabled").length>0)?(xmlTagValues.selectSingleNode("//Disabled").text):("false");
	xmlTextarea.disabled=(Disabled.toLowerCase()=="true")?("true"):(false);
}

function xmlTextarea_onfocus(HTMLControlID){
	var TagValues=document.all(HTMLControlID);
	if(!TagValues){
		alertErr("","Textarea","xmlTextarea_onfocus","Invalid TagValue ID:'"+HTMLControlID+"' specified.");
		return;
	}
	if(TagValues.parseError!=0){
		alertErr("","Textarea","xmlTextarea_onfocus","TagValue Error: "+TagValues.parseError.reason);
		return;
	}
	var TextareaID=(TagValues.selectNodes("//root/ID").length>0)?(TagValues.selectSingleNode("//root/ID").text):("");
	var Textarea=document.all(TextareaID);
	if(!Textarea){
		alertErr(TextareaID,"Textarea","xmlTextarea_onfocus","Invalid Textarea ID:'"+TextareaID+"' specified.");
		return;
	}
	var onFocusScript=(TagValues.selectNodes("//root/onFocus").length>0)?(TagValues.selectSingleNode("//root/onFocus").text):("");
	try{
		debugWrite(TextareaID+".onfocus",new Array(HTMLControlID,"onfocus"),"callstack");
		eval(onFocusScript);
	}
	catch(err){
		alertErr(TextareaID,"Textarea","onfocus",err.description);
	}
}

function xmlTextarea_onblur(HTMLControlID){
	var TagValues=document.all(HTMLControlID);
	if(!TagValues){
		alertErr("","Textarea","xmlTextarea_onblur","Invalid TagValue ID:'"+HTMLControlID+"' specified.");
		return;
	}
	if(TagValues.parseError!=0){
		alertErr("","Textarea","xmlTextarea_onblur","TagValue Error: "+TagValues.parseError.reason);
		return;
	}
	var TextareaID=(TagValues.selectNodes("//root/ID").length>0)?(TagValues.selectSingleNode("//root/ID").text):("");
	var Textarea=document.all(TextareaID);
	if(!Textarea){
		alertErr(TextareaID,"Textarea","xmlTextarea_onblur","Invalid Textarea ID:'"+TextareaID+"' specified.");
		return;
	}
	var onBlurScript=(TagValues.selectNodes("//root/onBlur").length>0)?(TagValues.selectSingleNode("//root/onBlur").text):("");
	try{
		debugWrite(TextareaID+".onblur",new Array(HTMLControlID,"onblur"),"callstack");
		eval(onBlurScript);
	}
	catch(err){
		alertErr(TextareaID,"Textarea","onblur",err.description);
	}
}

function xmlTextarea_onChange(TextareaID){
	var Textarea=document.all(TextareaID);
	if(!Textarea){
		alertErr(TextareaID,"Textarea","onChange","Invalid Textbox ID:'"+TextareaID+"' specified.")
		return;
	}
	var xmlTagValues=document.all(Textarea.HTMLControlID);
	if(!xmlTagValues){
		alertErr(TextareaID,"Textarea","onChange","Invalid TagValue ID:'"+Textarea.HTMLControlID+"' specified.")
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(TextareaID,"Textarea","onChange","TagValue Error: "+xmlTagValues.parseError.reason)
		return;
	}
	var onChange=(xmlTagValues.selectNodes("//root/onChange").length>0)?(xmlTagValues.selectSingleNode("//root/onChange").text):("");
	try{
		if(onChange!=""){
			debugWrite(TextareaID+".onChange",new Array(document.all(TextareaID).HTMLControlID,"onChange"),"callstack");
			eval(onChange);
		}
	}
	catch(err){
		alertErr(TextareaID,"Textarea","onChange",err.description);
	}
}

function xmlTextarea_Refresh(xmlTextareaID){
	var xmlTextarea=document.all(xmlTextareaID);
	if(!xmlTextarea){
		alertErr(xmlTextareaID,"xmlTextarea","Refresh","Invalid xmlTextarea ID:'"+xmlTextareaID+"' specified.")
		return;
	}
	var xmlTagValues=document.all(xmlTextarea.HTMLControlID);
	if(!xmlTagValues){
		alertErr(xmlTextareaID,"xmlTextarea","Refresh","Invalid TagValue ID:'"+xmlTextarea.HTMLControlID)
		return;
	}
	if(xmlTagValues.parseError!=0){
		alertErr(xmlTextareaID,"xmlTextarea","Refresh","TagValue Error: "+xmlTagValues.parseError.reason)
		return;
	}
	var cssClass=(document.all(xmlTextarea.HTMLControlID).selectNodes("//cssClass").length>0)?document.all(xmlTextarea.HTMLControlID).selectSingleNode("//cssClass").text:"";
	document.all(xmlTextareaID).className=cssClass;
	var sReadOnly=(xmlTagValues.selectNodes("//root/readonly").length>0)?(xmlTagValues.selectSingleNode("//root/readonly").text):("");
	sReadOnly=(sReadOnly.toString().toLowerCase()=="true")?(true):(false);
	xmlTextarea.readOnly=sReadOnly;
}

function xmlTextarea_onkeypress(xmlTextareaID){
	var xmlTextarea=document.all(xmlTextareaID);
	var xmlTagValues=document.all(xmlTextarea.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlTextarea))
		return true;
	var onkeypress="";
	if(xmlTagValues.selectNodes("//onkeypress").length>0)onkeypress=xmlTagValues.selectSingleNode("//onkeypress").text;
	try{
		if(onkeypress!=""){
			debugWrite(xmlTextareaID+".onkeypress",new Array(document.all(xmlTextareaID).HTMLControlID,"onkeypress"),"callstack");
			eval(onkeypress);
		}
	}
	catch(err){
		alertErr(xmlTextareaID,"Textarea","onkeypress",err.description);
	}
}

function xmlTextarea_onkeydown(xmlTextareaID){
	var xmlTextarea=document.all(xmlTextareaID);
	var xmlTagValues=document.all(xmlTextarea.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlTextarea))
		return true;
	var onkeydown="";
	if(xmlTagValues.selectNodes("//onkeydown").length>0)onkeydown=xmlTagValues.selectSingleNode("//onkeydown").text;
	try{
		if(onkeydown!=""){
			debugWrite(xmlTextareaID+".onkeydown",new Array(document.all(xmlTextareaID).HTMLControlID,"onkeydown"),"callstack");
			eval(onkeydown);
		}
	}
	catch(err){
		alertErr(xmlTextareaID,"Textarea","onkeydown",err.description);
	}
}

function xmlTextarea_onkeyup(xmlTextareaID){
	var xmlTextarea=document.all(xmlTextareaID);
	var xmlTagValues=document.all(xmlTextarea.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlTextarea))return true;
	var onkeydown="";
	if(xmlTagValues.selectNodes("//onkeyup").length>0)onkeydown=xmlTagValues.selectSingleNode("//onkeyup").text;
	try{
		if(onkeydown!=""){
			debugWrite(xmlTextareaID+".onkeyup",new Array(document.all(xmlTextareaID).HTMLControlID,"onkeyup"),"callstack");
			eval(onkeydown);
		}
	}
	catch(err){
		alertErr(xmlTextareaID,"Textarea","onkeyup",err.description);
	}
}

function xmlTextarea_onbeforeupdate(xmlTextareaID){
	var xmlTextarea=document.all(xmlTextareaID);
	var xmlTagValues=document.all(xmlTextarea.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlTextarea))
		return true;
	var onbeforeupdate="";
	if(xmlTagValues.selectNodes("//onBeforeUpdate").length>0)
		onbeforeupdate=xmlTagValues.selectSingleNode("//onBeforeUpdate").text;
	try{
		if(onbeforeupdate!=""){
			debugWrite(xmlTextareaID+".onBeforeUpdate",new Array(document.all(xmlTextareaID).HTMLControlID,"onBeforeUpdate"),"callstack");
			eval(onbeforeupdate);
		}
	}
	catch(err){
		alertErr(xmlTextareaID,"Textarea","onBeforeUpdate",err.description);
	}
}

function xmlTextarea_onafterupdate(xmlTextareaID){
	var xmlTextarea=document.all(xmlTextareaID);
	var xmlTagValues=document.all(xmlTextarea.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlTextarea))
		return true;
	var onafterupdate="";
	if(xmlTagValues.selectNodes("//onAfterUpdate").length>0)
		onafterupdate=xmlTagValues.selectSingleNode("//onAfterUpdate").text;
	try{
		if(onafterupdate!=""){
			debugWrite(xmlTextareaID+".onAfterUpdate",new Array(document.all(xmlTextareaID).HTMLControlID,"onAfterUpdate"),"callstack");
			eval(onafterupdate);
		}
	}
	catch(err){
		alertErr(xmlTextareaID,"Textarea","onAfterUpdate",err.description);
		alert(err.description);
	}
}


//xmlradiobuttonset.js
function _16(HTMLControlID) {
	InitXMLRadioButtonSet(HTMLControlID);
}

function InitXMLRadioButtonSet(HTMLControlID) {
	var XMLRadioButtonSetID = document.all(HTMLControlID).selectSingleNode("//ID").text;
	document.all(XMLRadioButtonSetID).tagValues = document.all(HTMLControlID);
	document.all(XMLRadioButtonSetID).tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+document.body.HTMLControlID+"');");
	document.all(XMLRadioButtonSetID).tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+document.body.HTMLControlID+"');");
	
	translateNode(document.all(XMLRadioButtonSetID).tagValues,"/root/pRecordsetField","/root/xmlRecordsetField","xmlSourceFile");
	
	document.all(XMLRadioButtonSetID).Populate = new Function("XMLRadioButtonSetID" ,"PopulateXMLRadioButtonSet('" + XMLRadioButtonSetID + "');");
	document.all(XMLRadioButtonSetID).Refresh = new Function("XMLRadioButtonSetID","HTMLControlID","RefreshXMLRadioButtonSet('" + XMLRadioButtonSetID + "','" + HTMLControlID + "');");
	document.all(XMLRadioButtonSetID).GetSelectedItem = new Function("XMLRadioButtonSetID","HTMLControlID","return GetSelectedItem_XMLRadioButtonSet('" + XMLRadioButtonSetID + "','" + HTMLControlID + "');");
	document.all(XMLRadioButtonSetID).SetSelectedItem = new Function("Item","XMLRadioButtonSetID","HTMLControlID","SetSelectedItem_XMLRadioButtonSet(Item,'" + XMLRadioButtonSetID + "','" + HTMLControlID + "');");
	document.all(XMLRadioButtonSetID).OnItemSelect = new Function("XMLRadioButtonSetID", "RadioButtonSet_OnItemSelect('" + XMLRadioButtonSetID + "');");
	document.all(XMLRadioButtonSetID).Disable = new Function("XMLRadioButtonSetID","HTMLControlID","SetDisableXMLRadioButtonSet('" + XMLRadioButtonSetID + "','" + HTMLControlID + "',true);")
	document.all(XMLRadioButtonSetID).Enable = new Function("XMLRadioButtonSetID","HTMLControlID","SetDisableXMLRadioButtonSet('" + XMLRadioButtonSetID + "','" + HTMLControlID + "',false);")
	//alert(document.all(XMLRadioButtonSetID).isDisabled);	
	document.all(XMLRadioButtonSetID).Populate();
}

function SetDisableXMLRadioButtonSet(XMLRadioButtonSetID,HTMLControlID,State) {	
	/*var xmlTagValues = document.all(HTMLControlID)
	var Aligned = (xmlTagValues.selectNodes("//root/Align").length > 0) ? xmlTagValues.selectSingleNode("//root/Align").text : "";
	var ButtonsStr = (xmlTagValues.selectNodes("//root/Options").length > 0) ? xmlTagValues.selectNodes("//root/Options/opt") : "";
	var OptionSpacing = (xmlTagValues.selectNodes("//root/OptionSpacing").length > 0) ? xmlTagValues.selectSingleNode("//root/OptionSpacing").text : "";
	for (var i = 0; i < ButtonsStr.length;i++) {
		//oOpt = ButtonsStr.nextNode();
		alert(document.all(XMLRadioButtonSetID + "_" + i).disabled)
		document.all(XMLRadioButtonSetID + "_" + i).disabled = false;
		alert(document.all(XMLRadioButtonSetID + "_" + i).disabled)
	}
	//alert(State);*/
	if (document.all(XMLRadioButtonSetID)) {
		document.all(XMLRadioButtonSetID).disabled = State;
	}
}

function RadioButtonSet_OnItemSelect(RadioButtonSetID){
	var RadioButtonSet = document.all(RadioButtonSetID);	
	if(!RadioButtonSet){
		alertErr(RadioButtonSetID, "RadioButtonSet", "OnItemSelect","Invalid RadioButtonSet ID:'" + RadioButtonSetID + "' specified.");
		return;
	}
	var xmlTagValues = document.all(RadioButtonSet.HTMLControlID);
	if(!xmlTagValues){
		alertErr(RadioButtonSetID, "RadioButtonSet", "OnItemSelect","Invalid TagValue ID:'" + RadioButtonSet.HTMLControlID + "' specified.");
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(RadioButtonSetID, "RadioButtonSet", "OnItemSelect", "TagValue Error: " + xmlTagValues.parseError.reason);
		return;
	}
	
	var OnItemSelect = (xmlTagValues.selectNodes("//root/OnItemSelect").length > 0)?(xmlTagValues.selectSingleNode("//root/OnItemSelect").text):("");	
	if (OnItemSelect =="") return;
	try {
		debugWrite(RadioButtonSetID + ".OnItemSelect",new Array(document.all(RadioButtonSetID).HTMLControlID,"OnItemSelect"),"callstack");
		eval(OnItemSelect)
	}
	catch(err) {
		alertErr(RadioButtonSetID, RadioButtonSet, "OnItemSelect", err.description + "\n" + OnItemSelect);

		//alert("OnItemSelect event error: " + err.description + "\n" + OnItemSelect);
	}
}

function SetSelectedItem_XMLRadioButtonSet(ItemValue,XMLRadioButtonSetID,HTMLControlID) {	
	var xmlTagValues = document.all(HTMLControlID);
	var ItemValue = new String(ItemValue);
	var Options = (xmlTagValues.selectNodes("//root/Options").length)?(xmlTagValues.selectSingleNode("//root/Options")):(null);
	if(!Options)return;
	var OptionCount = Options.childNodes.length;		
	var OptionID, OptionValue, i;
	for(i = 0; i < OptionCount; i++){
		OptionValue = new String(Options.childNodes(i).getAttribute("Value"));		
		OptionID = XMLRadioButtonSetID + "_" + i;
		OptionValue = new String(document.all(OptionID).value);
		document.all(OptionID).checked = (OptionValue.toString() == ItemValue.toString())?(true):(false);		
	}
	RadioButtonSet_OnItemSelect(XMLRadioButtonSetID);
}


function GetSelectedItem_XMLRadioButtonSet(XMLRadioButtonSetID,HTMLControlID) {
	var xmlTagValues = document.all(HTMLControlID);	
	var Options = (xmlTagValues.selectNodes("//root/Options").length)?(xmlTagValues.selectSingleNode("//root/Options")):(null);
	if(!Options)return;
	var OptionCount = Options.childNodes.length;
	var OptionID, i;
	for(i = 0; i < OptionCount; i++){
		OptionID = XMLRadioButtonSetID + "_" + i;
		if(document.all(OptionID).checked)return document.all(OptionID).value;
	}
	return null;
	
	/*
	var xmlTagValues = document.all(HTMLControlID)

	var OptionXML = new ActiveXObject("Microsoft.xmlDOM");
	OptionXML.loadXML(xmlTagValues.selectSingleNode("//Options").xml);
	var OptionCount = OptionXML.documentElement.childNodes.length;

	for (var i = 0; i < OptionCount; i++)
		if (document.all(XMLRadioButtonSetID + "_" + OptionXML.documentElement.childNodes[i].getAttribute("Value")).checked)
			return OptionXML.documentElement.childNodes[i].getAttribute("Value");

	return "";
	*/
	delete OptionXML;
}

function RefreshXMLRadioButtonSet(XMLRadioButtonSetID,HTMLControlID) {
	var xmlTagValues = document.all(HTMLControlID)
	var XMLRadioButtonSet = document.all(XMLRadioButtonSetID);
	var ButtonsStr = (xmlTagValues.selectSingleNode("//Options") != null) ? xmlTagValues.selectSingleNode("//Options").text : "";
	var arrButtons = ButtonsStr.split("|");
	for (var i = 0; i < arrButtons.length;i++) {
		try {
			document.all(arrButtons[i] + "_op").checked = false;
		} catch(err) {}
	}

}

function SelectOption_xmlOptionSet(ID){
	document.all(ID).checked = true;
}

function PopulateXMLRadioButtonSet(RadioButtonSetID) {
	var RadioButtonSet = document.all(RadioButtonSetID);	
	if(!RadioButtonSet){
		alertErr(RadioButtonSetID, "RadioButtonSet", "PopulateXMLRadioButtonSet", "Invalid RadioButtonSet ID:'" + RadioButtonSetID + "' specified.")

		//alert("PopulateXMLRadioButtonSet() error:\n____________________________________________________\n\nInvalid RadioButtonSet ID:'" + RadioButtonSetID + "' specified.\n____________________________________________________");
		return;
	}
	var sDisabled = (RadioButtonSet.tagValues.selectNodes("//root/Disabled").length > 0)?(RadioButtonSet.tagValues.selectSingleNode("//root/Disabled").text):("false");
	RadioButtonSet.disabled = (sDisabled == "true")?(true):(false);
	
	var xmlTagValues = document.all(RadioButtonSet.HTMLControlID);
	if(!xmlTagValues){
		alertErr(RadioButtonSetID, "RadioButtonSet", "PopulateXMLRadioButtonSet", "Invalid TagValue ID:'" + RadioButtonSet.HTMLControlID + "' specified.")
		
		//alert("PopulateXMLRadioButtonSet() error:\n____________________________________________________\n\nInvalid TagValue ID:'" + RadioButtonSet.HTMLControlID + "' specified.\n____________________________________________________");
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(RadioButtonSetID, "RadioButtonSet", "PopulateXMLRadioButtonSet", "TagValue Error: " + xmlTagValues.parseError.reason)
		
		//alert("PopulateXMLRadioButtonSet() error:\n____________________________________________________\n\nTagValue Error: " + xmlTagValues.parseError.reason + "\n____________________________________________________");
		return;
	}
	
	var cssClass=(document.all(RadioButtonSet.HTMLControlID).selectNodes("//cssClass").length > 0) ? document.all(RadioButtonSet.HTMLControlID).selectSingleNode("//cssClass").text : "";
	document.all(RadioButtonSetID).className=cssClass;
	
	var OptionSpacing = (xmlTagValues.selectNodes("//root/OptionSpacing").length > 0) ? xmlTagValues.selectSingleNode("//root/OptionSpacing").text : "";
	var dataSrc = (xmlTagValues.selectSingleNode("//dataSrc") != null) ? xmlTagValues.selectSingleNode("//dataSrc").text : "";
	var dataFld = (xmlTagValues.selectSingleNode("//dataFld") != null) ? xmlTagValues.selectSingleNode("//dataFld").text : "";
	var DataBinding = "dataSrc=\"" + dataSrc + "\" dataFld=\"" + dataFld + "\"";
	var Aligned = (xmlTagValues.selectSingleNode("//Align") != null) ? xmlTagValues.selectSingleNode("//Align").text : "";
	var Options = (xmlTagValues.selectNodes("//root/Options").length > 0)?(xmlTagValues.selectSingleNode("//root/Options")):(null);
	var DefaultOptionIndex = (xmlTagValues.selectNodes("//root/DefaultOptionIndex").length > 0)?(xmlTagValues.selectSingleNode("//root/DefaultOptionIndex").text):("");	
	/*
	var Disabled = xmlTagValues.selectSingleNode("//Disabled").text;
	alert(Disabled);
	if(Disabled == "true"){
		document.all(RadioButtonSetID).Disable();
		alert("its meant to be dis abled");
	}
	else{
		document.all(RadioButtonSetID).Enable();
		alert("its meant to be abled");
	}
	*/
	var sHeight = (xmlTagValues.selectSingleNode("//root/Height") != null) ? xmlTagValues.selectSingleNode("//root/Height").text : "";
	RadioButtonSet.style.height = sHeight;
	RadioButtonSet.style.height = sHeight;
	if(!Options.childNodes.length){
		var xmlDOM = new ActiveXObject("Microsoft.xmlDOM");
		xmlDOM.async = false;
		xmlDOM.load("htmlcontrols/xmlradiobuttonset/xmlradiobuttonset.xml");
		Options = xmlDOM.documentElement;		
	}
	var i, OptionCount = Options.childNodes.length;
	var Option, Caption, Value, Tooltip, OptionsHTML = "", Checked = "";
	
	if(Aligned == "vertical"){		
		OptionSpacing = (100 / (OptionCount - 2)); 
		//alert(OptionSpacing);
		for(i = 0; i < OptionCount; i++){
			Option = Options.childNodes(i);
			Caption = Option.getAttribute("Caption");
			Value = Option.getAttribute("Value");
			Tooltip = Option.getAttribute("Tooltip");
			Checked = (i == DefaultOptionIndex)?("checked"):("");
			if((i == (OptionCount - 1))||(i == 0))
			{
				//OptionsHTML += "<TR title=\"" + EscapeHTML(Tooltip) + "\"><TD style='WIDTH:10px;'><INPUT " + Checked + " onclick=\"RadioButtonSet_OnItemSelect('" + RadioButtonSetID + "');\" type='radio' id=\"" + RadioButtonSetID + "_" + i + "\" name='" + RadioButtonSetID + "_opt' value=\"" + EscapeHTML(Value) + "\" " + DataBinding + "></TD><TD onclick=\"RadioButtonSet_OptionClick('" + RadioButtonSetID + "_" + i + "');\">" + Caption + "</TD></TR>";		
				OptionsHTML += "<TR title=\"" + EscapeHTML(Tooltip) + "\"><TD style='WIDTH:10px;'><INPUT " + Checked + " onclick=\"RadioButtonSet_OnItemSelect('" + RadioButtonSetID + "');\" type='radio' id=\"" + RadioButtonSetID + "_" + i + "\" name='" + RadioButtonSetID + "_opt' value=\"" + EscapeHTML(Value) + "\" " + DataBinding + "></TD><TD onclick=\"RadioButtonSet_OptionClick('" + RadioButtonSetID + "_" + i + "');\">" + Caption + "</TD></TR>";		
			}
			else
			{				
				//OptionsHTML += "<TR title=\"" + EscapeHTML(Tooltip) + "\" style='HEIGHT:" + OptionSpacing + "%'><TD style='WIDTH:10px;'><INPUT " + Checked + " onclick=\"RadioButtonSet_OnItemSelect('" + RadioButtonSetID + "');\" type='radio' id=\"" + RadioButtonSetID + "_" + i + "\" name='" + RadioButtonSetID + "_opt' value=\"" + EscapeHTML(Value) + "\" " + DataBinding + "></TD><TD style='' onclick=\"RadioButtonSet_OptionClick('" + RadioButtonSetID + "_" + i + "');\">" + Caption + "</TD></TR>";		
				OptionsHTML += "<TR title=\"" + EscapeHTML(Tooltip) + "\" style=''><TD style='WIDTH:10px;'><INPUT " + Checked + " onclick=\"RadioButtonSet_OnItemSelect('" + RadioButtonSetID + "');\" type='radio' id=\"" + RadioButtonSetID + "_" + i + "\" name='" + RadioButtonSetID + "_opt' value=\"" + EscapeHTML(Value) + "\" " + DataBinding + "></TD><TD style='' onclick=\"RadioButtonSet_OptionClick('" + RadioButtonSetID + "_" + i + "');\">" + Caption + "</TD></TR>";		
			}
		}
	}
	else {
		OptionSpacing = (100 / (OptionCount - 1)); 
		OptionsHTML += "<TR>"		
		for(i = 0; i < OptionCount; i++){
			Option = Options.childNodes(i);
			Caption = Option.getAttribute("Caption");
			Value = Option.getAttribute("Value");
			Tooltip = Option.getAttribute("Tooltip");
			Checked = (i == DefaultOptionIndex)?("checked"):("");
			if(i == (OptionCount - 1))
			{
				OptionsHTML += "<TD title=\"" + EscapeHTML(Tooltip) + "\" style='WIDTH:10px; TEXT-INDENT:0'><INPUT " + Checked + " type='radio' onclick=\"RadioButtonSet_OnItemSelect('" + RadioButtonSetID + "');\" id=\"" + RadioButtonSetID + "_" + i + "\" name='" + RadioButtonSetID + "_opt' value=\"" + EscapeHTML(Value) + "\" " + DataBinding + "></TD><TD onclick=\"RadioButtonSet_OptionClick('" + RadioButtonSetID + "_" + i + "');\" title=\"" + EscapeHTML(Tooltip) + "\" nowrap style='WIDTH:*'>" + Caption + "</TD>";
			}
			else
			{			
				OptionsHTML += "<TD title=\"" + EscapeHTML(Tooltip) + "\" style='WIDTH:10px; TEXT-INDENT:0'><INPUT " + Checked + " type='radio' onclick=\"RadioButtonSet_OnItemSelect('" + RadioButtonSetID + "');\" id=\"" + RadioButtonSetID + "_" + i + "\" name='" + RadioButtonSetID + "_opt' value=\"" + EscapeHTML(Value) + "\" " + DataBinding + "></TD><TD onclick=\"RadioButtonSet_OptionClick('" + RadioButtonSetID + "_" + i + "');\" title=\"" + EscapeHTML(Tooltip) + "\" nowrap style='WIDTH:" + OptionSpacing + "%'>" + Caption + "</TD>";
			}
		}
		OptionsHTML += "</TR>"
	}	
	RadioButtonSet.innerHTML = "<TABLE border=0 width=100% height=100% style='" + RadioButtonSet.style.cssText + "'>" + OptionsHTML + "</TABLE>";
	
	//RadioButtonSet.innerHTML = "<TABLE border=0 style='WIDTH:100%; HEIGHT:100%'>" + OptionsHTML + "</TABLE>";
	RadioButtonSet.children[0].style.position ="static";
	RadioButtonSet.children[0].style.width = "100%";
	RadioButtonSet.children[0].style.height = "100%";
	delete xmlDOM;
}

function RadioButtonSet_OptionClick(OptionID){
	var Option = document.all(OptionID);
	if(!Option)
		return;
	if(window.event.altKey)
		return;
	Option.click();
}

/*
function OldPopulateXMLRadioButtonSet(RadioButtonSetID) {
	var RadioButtonSet = document.all(RadioButtonSetID);	
	HTMLControlID = RadioButtonSet.HTMLControlID;
	var xmlTagValues = document.all(HTMLControlID)
	var Aligned = xmlTagValues.selectSingleNode("//Align").text;
	var ButtonsStr = xmlTagValues.selectSingleNode("//Options").text;	
	var OptionSpacing = xmlTagValues.selectSingleNode("//OptionSpacing").text;
	var arrButtons = ButtonsStr.split("|");	
	var ButtonsHTML = "";
	document.all(RadioButtonSetID).innerHTML = "";
	for (var i = 0; i < arrButtons.length;i++) {
		if (Aligned == "vertical") {
			ButtonsHTML = ButtonsHTML + "<INPUT onchange='document.all(" + '"' + RadioButtonSetID + '"' + ").OnItemSelect();' type='radio' id='" + arrButtons[i] + "_op' name='" + RadioButtonSetID + "_rd'><FONT onclick='SelectOption_xmlOptionSet(" + '"' + arrButtons[i] + "_op" + '"' + ")' >" + arrButtons[i] + "</FONT><br><span STYLE='WIDTH:1;HEIGHT:" + OptionSpacing + "'></span><br>";
		}
		else if (Aligned == "horizontal") {
			ButtonsHTML = ButtonsHTML + "<INPUT onchange='document.all(" + '"' + RadioButtonSetID + '"' + ").OnItemSelect();' type='radio' id='" + arrButtons[i] + "_op' name='" + RadioButtonSetID + "_rd'><FONT onclick='SelectOption_xmlOptionSet(" + '"' + arrButtons[i] + "_op" + '"' + ")' >" + arrButtons[i] + "</FONT><span STYLE='HEIGHT:1;WIDTH:" + OptionSpacing + "'></span>";
		}
	}

	document.all(RadioButtonSetID).innerHTML = ButtonsHTML;
}
*/


//xmlcheckbox.js
function _6(HTMLControlID) {
	xmlCheckBox_Initialise(HTMLControlID);
}

function xmlCheckBox_Initialise(HTMLControlID){
	var xmlCheckboxID=document.all(HTMLControlID).selectSingleNode("//ID").text;
	var xmlCheckbox=document.all(xmlCheckboxID);
	xmlCheckbox.Refresh=new Function("xmlCheckboxID","xmlCheckbox_Refresh('"+xmlCheckboxID+"');");
	xmlCheckbox.onclick=new Function("xmlCheckboxID","xmlCheckbox_onClick('"+xmlCheckboxID+"');");
	xmlCheckbox.onbeforeupdate=new Function("xmlCheckboxID","return xmlCheckbox_onbeforeupdate('"+xmlCheckboxID+"')");
	xmlCheckbox.onafterupdate=new Function("xmlCheckboxID","return xmlCheckbox_onafterupdate('"+xmlCheckboxID+"')");
	var xmlTagValues=document.all(xmlCheckbox.HTMLControlID);
	if((!xmlCheckbox)||(!xmlTagValues))return;
	var Checked=(xmlTagValues.selectNodes("/root/Checked").length>0)?(xmlTagValues.selectSingleNode("/root/Checked").text):("");
	xmlCheckbox.checked=(Checked.toLowerCase()=="true")?("true"):(false);
	var Disabled=(xmlTagValues.selectNodes("/root/Disabled").length>0)?(xmlTagValues.selectSingleNode("/root/Disabled").text):("");
	xmlCheckbox.disabled=(Disabled.toLowerCase()=="true")?("true"):(false);
	xmlCheckbox.tagValues=document.all(HTMLControlID);
	xmlCheckbox.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	xmlCheckbox.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	
	
	xmlCheckbox.Refresh();
}

function xmlCheckbox_onClick(xmlCheckboxID){
	var xmlCheckbox=document.all(xmlCheckboxID);
	var xmlTagValues=document.all(xmlCheckbox.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlCheckbox))return true;
	var BoundControlID=(xmlTagValues.selectNodes("//BoundControlID").length>0)?(xmlTagValues.selectSingleNode("//BoundControlID").text):("");
	var BoundControl=document.all(BoundControlID);
	if(BoundControl){
		BoundControl.value=(xmlCheckbox.checked)?(1):(0);
	}
	
	var onClick="";
	if(xmlTagValues.selectNodes("//onClick").length>0)onClick=xmlTagValues.selectSingleNode("//onClick").text;
	if(onClick=="")return;
	try{
		debugWrite(xmlCheckboxID+".onClick",new Array(document.all(xmlCheckboxID).HTMLControlID,"onClick"),"callstack");
		eval(onClick);
	}
	catch(err){
		alertErr(xmlCheckboxID,"xmlCheckbox","onClick",err.description);
	}
}

function xmlCheckbox_Refresh(xmlCheckboxID){
	var xmlCheckbox=document.all(xmlCheckboxID);
	var xmlTagValues=document.all(xmlCheckbox.HTMLControlID);
	if((!xmlCheckbox)||(!xmlTagValues))return;
	cssClass=(document.all(xmlCheckbox.HTMLControlID).selectNodes("//cssClass").length>0)?document.all(xmlCheckbox.HTMLControlID).selectSingleNode("//cssClass").text:"";
	document.all(xmlCheckboxID).className=cssClass;
	var BoundControlID=(xmlTagValues.selectNodes("//BoundControlID").length>0)?(xmlTagValues.selectSingleNode("//BoundControlID").text):("");
	var BoundControl=document.all(BoundControlID);
	if(BoundControl){
		xmlCheckbox.checked=(BoundControl.value==1)?(true):(false);
	}
}

function xmlCheckbox_onbeforeupdate(xmlCheckboxID){
	var xmlCheckbox=document.all(xmlCheckboxID);
	var xmlTagValues=document.all(xmlCheckbox.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlCheckbox))
		return true;
	var onbeforeupdate="";
	if(xmlTagValues.selectNodes("//onBeforeUpdate").length>0)
		onbeforeupdate=xmlTagValues.selectSingleNode("//onBeforeUpdate").text;
	if(onbeforeupdate=="")return;
	try{
		debugWrite(xmlCheckboxID+".onBeforeUpdate",new Array(document.all(xmlCheckboxID).HTMLControlID,"onBeforeUpdate"),"callstack");
		eval(onbeforeupdate);
	}
	catch(err){
		alert(err.description);
	}
}

function xmlCheckbox_onafterupdate(xmlCheckboxID){
	var xmlCheckbox=document.all(xmlCheckboxID);
	var xmlTagValues=document.all(xmlCheckbox.HTMLControlID).documentElement;
	if((!xmlTagValues)||(!xmlCheckbox))
		return true;
	var onafterupdate="";
	if(xmlTagValues.selectNodes("//onAfterUpdate").length>0)
		onafterupdate=xmlTagValues.selectSingleNode("//onAfterUpdate").text;
	if(onafterupdate=="")return;
	try{
		debugWrite(xmlCheckboxID+".onAfterUpdate",new Array(document.all(xmlCheckboxID).HTMLControlID,"onAfterUpdate"),"callstack");
		eval(onafterupdate);
	}
	catch(err){
		alert(err.description);
	}
}


//xmldso.js
var SYS__DSOPopupMenu = window.createPopup();
function _27(HTMLControlID) {
	xmlDSO_Initialise(HTMLControlID);
}

function xmlDSO_Initialise(HTMLControlID){
	var xmlDSOID;
	var xmlTagValues = document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(xmlDSOID,"DataSource","xmlDSO_Initialise","Invalid TagValue ID:'" + xmlDSO.HTMLControlID + "' specified.");		
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(xmlDSOID,"DataSource","xmlDSO_Initialise","TagValue Error: " + xmlTagValues.parseError.reason + ".");		
		return;
	}
	
	xmlDSOID = xmlTagValues.selectSingleNode("//root/ID").text;

	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","Initialise","Invalid DataSource ID specified.");		
		return;
	}
	//---CDS 
	if(xmlTagValues.selectNodes("/root/Parameters").length == 0) {
		var oParameters = xmlTagValues.createNode(1, "Parameters", "");
		xmlTagValues.documentElement.appendChild(oParameters);
	}
	if(xmlTagValues.selectNodes("/root/Schema").length == 0) {
		var oSchema = xmlTagValues.createNode(1, "Schema", "");
		xmlTagValues.documentElement.appendChild(oSchema);
	}
	if(xmlTagValues.selectNodes("/root/CommandSpecs").length == 0) {
		var oCommandSpecs = xmlTagValues.createNode(1, "CommandSpecs", "");
		xmlTagValues.documentElement.appendChild(oCommandSpecs);
	}
	
	
	xmlDSO.async = false;
	//---CDS/
	//---DataSource Compression---
	var xslTransform = new ActiveXObject("Microsoft.XMLDOM");
	xslTransform.async = false;
 	xslTransform.loadXML("<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\"><xsl:template match=\"/\"><root><xsl:apply-templates select=\"/*/*\" /></root></xsl:template><xsl:template match=\"*/*\"><Record><xsl:attribute name=\"RecordNo\"><xsl:value-of select=\"@rn\" /></xsl:attribute><xsl:for-each id=\"foreach\" select=\"node()\"/></Record></xsl:template></xsl:stylesheet>");
	xmlDSO.xslExpand = xslTransform;
	
	var xslTransform = new ActiveXObject("Microsoft.XMLDOM");
	xslTransform.async = false;
	xslTransform.loadXML("<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\"><xsl:template match=\"/\"><root><xsl:eval language=\"JAVASCRIPT\">SetRecordNo(this);</xsl:eval><xsl:apply-templates id=\"Template\" select=\"/*/*\" order-by=\"\"/></root></xsl:template><xsl:template match=\"*/*\"><Record><xsl:attribute name=\"RecordNo\"><xsl:eval language=\"JAVASCRIPT\">xmlRecordNo</xsl:eval></xsl:attribute><xmlDSO__ARN><xsl:eval language=\"JAVASCRIPT\">xmlRecordNo</xsl:eval></xmlDSO__ARN><xmlDSO__RecordNo><xsl:eval language=\"JAVASCRIPT\">xmlRecordNo++</xsl:eval></xmlDSO__RecordNo><xmlDSO__Selected>0</xmlDSO__Selected><xmlDSO__Status>htmlcontrols/xmldso/blank.gif</xmlDSO__Status><xsl:for-each><xsl:if test=\".[nodeName() $ne$ 'xmlDSO__ARN'][nodeName() $ne$ 'xmlDSO__RecordNo'][nodeName() $ne$ 'xmlDSO__Selected'][nodeName() $ne$ 'xmlDSO__Status']\"><xsl:copy><xsl:value-of/></xsl:copy></xsl:if></xsl:for-each></Record></xsl:template><xsl:script><![CDATA[var xmlRecordNo = 1;function SetRecordNo(root){xmlRecordNo = (root.selectNodes(\"//xmlDSO__ARN\").length > 0)?(root.selectSingleNode(\"//xmlDSO__ARN\").text):(xmlRecordNo);}]]></xsl:script></xsl:stylesheet>");	
	xmlDSO.xslSortByColumn = xslTransform
	
	var xslTransform = new ActiveXObject("Microsoft.XMLDOM");
	xslTransform.async = false;
	xslTransform.loadXML("<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\"><xsl:template match=\"/\"><root><xsl:apply-templates select=\"/*/*\"/></root></xsl:template><xsl:template match=\"*/*\"><Record><xsl:attribute name=\"RecordNo\"><xsl:eval language=\"JAVASCRIPT\">xmlRecordNo</xsl:eval></xsl:attribute><xmlDSO__ARN><xsl:eval language=\"JAVASCRIPT\">xmlRecordNo</xsl:eval></xmlDSO__ARN><xmlDSO__RecordNo><xsl:eval language=\"JAVASCRIPT\">xmlRecordNo++</xsl:eval></xmlDSO__RecordNo><xmlDSO__Selected>0</xmlDSO__Selected><xmlDSO__Status>htmlcontrols/xmldso/blank.gif</xmlDSO__Status><xsl:for-each select=\"node()\"><xsl:copy><xsl:value-of/></xsl:copy></xsl:for-each></Record></xsl:template><xsl:script><![CDATA[var xmlRecordNo = 1;]]></xsl:script></xsl:stylesheet>");
	xmlDSO.xslTransformation = xslTransform
	
	var xslTransform = new ActiveXObject("Microsoft.XMLDOM");
	xslTransform.async = false;
	xslTransform.loadXML("<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\"><xsl:template match=\"/\"><root><xsl:apply-templates id=\"applytemplate\" select=\"//DefaultDataSet/\"/></root></xsl:template><xsl:template id=\"template\" match=\"DefaultDataSet/\"><Record><xsl:attribute name=\"RecordNo\"><xsl:eval language=\"JAVASCRIPT\">xmlRecordNo</xsl:eval></xsl:attribute><xmlDSO__ARN><xsl:eval language=\"JAVASCRIPT\">xmlRecordNo</xsl:eval></xmlDSO__ARN><xmlDSO__RecordNo><xsl:eval language=\"JAVASCRIPT\">xmlRecordNo++</xsl:eval></xmlDSO__RecordNo><xmlDSO__Selected>0</xmlDSO__Selected><xmlDSO__Status>htmlcontrols/xmldso/blank.gif</xmlDSO__Status><xsl:for-each select=\"node()\"><xsl:copy><xsl:value-of/></xsl:copy></xsl:for-each></Record></xsl:template><xsl:script><![CDATA[var xmlRecordNo = 1;]]></xsl:script></xsl:stylesheet>");
	xmlDSO.xslDataSet=xslTransform;
	//---DataSource Compression---/
	
	//---Bound Elements---
	if(xmlDSO.boundElements == null) {
		xmlDSO.boundElements = new Array();
	}
	//---Bound Elements---/
	
	//xmlDSO.preserveWhiteSpace = true;	
	xmlDSO.tagValues = xmlTagValues;
	xmlDSO.tagValues.getPropertyNode=new Function("sPropertyName","bCreateIfNull","HTMLControlID","return TagValues_getPropertyNode(sPropertyName, bCreateIfNull,'"+HTMLControlID+"');");
	xmlDSO.tagValues.getPropertyValue=new Function("sPropertyName","sDefaultValue","HTMLControlID","return TagValues_getPropertyValue(sPropertyName, sDefaultValue,'"+HTMLControlID+"');");	
	xmlDSO.EOF = new Function("xmlDSOID", "return xmlDSO_EOF('" + xmlDSOID + "');");
	xmlDSO.BOF = new Function("xmlDSOID", "return xmlDSO_BOF('" + xmlDSOID + "');");
	xmlDSO_InitDefaultParameters(xmlDSOID);
	xmlDSO_InitCommandSpecs(xmlDSOID);	
	xmlDSO.CreateInternalControlFields = new Function("xmlDSOID", "return xmlDSO_CreateInternalControlFields('" + xmlDSOID + "');");
	xmlDSO.SetRecordAttribute = new Function("RecordNo", "Attribute", "Value", "xmlDSOID", "return xmlDSO_SetRecordAttribute(RecordNo, Attribute, Value, '" + xmlDSOID + "');");
	xmlDSO.GetRecordAttribute = new Function("RecordNo", "Attribute", "xmlDSOID", "return xmlDSO_GetRecordAttribute(RecordNo, Attribute, '" + xmlDSOID + "');");
	xmlDSO.oncellchange = new Function("xmlDSOID", "xmlDSO_oncellchange('" + xmlDSOID + "');");
	xmlDSO.onrowenter = new Function("xmlDSOID", "xmlDSO_onrowenter('" + xmlDSOID + "');");
	xmlDSO.onrowexit = new Function("xmlDSOID", "xmlDSO_onrowexit('" + xmlDSOID + "');");
	xmlDSO.onreadystatechange = new Function("xmlDSOID", "xmlDSO_onreadystatechange('" + xmlDSOID + "');");
	xmlDSO.SetRecordFieldValue = new Function("RecordNo", "FieldName", "FieldValue", "xmlDSOID", "xmlDSO_SetRecordFieldValue(RecordNo, FieldName, FieldValue, '" + xmlDSOID + "');");
	xmlDSO.GetParameterValue = new Function("ParameterName", "xmlDSOID", "return xmlDSO_GetParameterValue(ParameterName, '" + xmlDSOID + "');");
	xmlDSO.SetParameterValue = new Function("ParameterName", "ParameterValue", "xmlDSOID", "return xmlDSO_SetParameterValue(ParameterName, ParameterValue, '" + xmlDSOID + "');");
	xmlDSO.ExecuteCMD = new Function("cmdName", "Direction", "PageNo", "PageSize", "IgnoreError", "bCompress", "xmlDSOID", "return xmlDSO_ExecuteCMD(cmdName, Direction, PageNo, PageSize, IgnoreError, bCompress, '" + xmlDSOID + "');");
	xmlDSO.ReNumber = new Function("xmlDSOID", "return xmlDSO_ReNumber('" + xmlDSOID + "');");
	xmlDSO.GetCurrentRecordStatus = new Function("xmlDSOID", "return xmlDSO_GetCurrentRecordStatus('" + xmlDSOID + "');");
	xmlDSO.InsertRecord = new Function("RecordNo", "xmlDSOID", "return xmlDSO_InsertRecord(RecordNo, '" + xmlDSOID + "');");
	xmlDSO.DeleteRecord = new Function("RecordNo", "xmlDSOID", "return xmlDSO_DeleteRecord(RecordNo, '" + xmlDSOID + "');");
	xmlDSO.SwapRecords = new Function("RecordNo1", "RecordNo2", "xmlDSOID", "return xmlDSO_SwapRecords(RecordNo1, RecordNo2, '" + xmlDSOID + "');");
	xmlDSO.ImportData = new Function("SourceData", "Schema", "xmlDSOID", "return xmlDSO_ImportData(SourceData, Schema, '" + xmlDSOID + "');");
	xmlDSO.SortByColumn = new Function("ColumnName", "GroupByField", "xmlDSOID", "return xmlDSO_SortByColumn(ColumnName, GroupByField, '" + xmlDSOID + "');");
	xmlDSO._ImportDataSet = new Function("oDataSet", "xmlDSOID", "return xmlDSO_ConvertXMLDataSet(oDataSet, '" + xmlDSOID + "');");
	var AutoLoadCommand = (xmlTagValues.selectNodes("//AutoLoadCommand").length > 0)?(xmlTagValues.selectSingleNode("//AutoLoadCommand").text):("");
		
	xmlDSO.onrowsinserted = new Function("xmlDSOID", "return xmlDSO_onrowsinserted('" + xmlDSOID + "');");
	
	xmlDSO.SelectAllRecords = new Function("xmlDSOID", "return xmlDSO_SelectAllRecords('" + xmlDSOID + "');");
	xmlDSO.DeSelectAllRecords = new Function("xmlDSOID", "return xmlDSO_DeSelectAllRecords('" + xmlDSOID + "');");
	xmlDSO.Refresh = new Function("ObjectID","bCompress", "xmlDSOID","return xmlDSO_ExecuteCMD_Refresh(ObjectID, bCompress, '" + xmlDSOID + "');");
	xmlDSO.Save = new Function("bCompress", "xmlDSOID","return xmlDSO_ExecuteCMD_Save(bCompress, '" + xmlDSOID + "');");
	xmlDSO.Delete = new Function("ObjectID","xmlDSOID","return xmlDSO_ExecuteCMD_Delete(ObjectID,'" + xmlDSOID + "');");
	xmlDSO.Commit = new Function("xmlDSOID","return xmlDSO_CommitCommand('" + xmlDSOID + "');");
	xmlDSO.SaveToCache = new Function("sUserDataStoreName", "return xmlDSO_SaveToCache(sUserDataStoreName, '" + xmlDSOID + "');")
	xmlDSO.LoadFromCache = new Function("sUserDataStoreName", "return xmlDSO_LoadFromCache(sUserDataStoreName, '" + xmlDSOID + "');")
	xmlDSO.CreateInternalControlFields();
	var Schema = (xmlTagValues.selectNodes("//root/Schema").length > 0)?(xmlTagValues.selectSingleNode("//root/Schema").text):("");
	xmlDSO.Schema = Schema;		
	xmlDSO.ActiveCommand = "";
	xmlDSO.ActiveCommandType = "";
	
	var cmdName=AutoLoadCommand;
	
	var CommandSpecs = xmlDSO.CommandSpecs;
	var CommandSpec = (CommandSpecs.selectNodes("//CommandSpecs/" + cmdName).length > 0)?(CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName)):(null);
	var DefaultOBJID = CommandSpec.getAttribute("DefaultOBJID");
	var OBJIDName = (CommandSpec.getAttribute("OBJIDName")=="") ? "OBJID" : CommandSpec.getAttribute("OBJIDName");
	xmlDSO.ActiveOBJID = xmlRequestObject.QueryString(OBJIDName);
	if (xmlDSO.ActiveOBJID == "") {
		xmlDSO.ActiveOBJID = DefaultOBJID;
	}
	var iCommandType = CommandSpec.getAttribute("type");
	if(AutoLoadCommand) {	
		//alert(xmlDSO.xml);	
		if((xmlDSO.selectNodes("/root/DSODetails").length > 0) || (xmlDSO.selectNodes("/root/xmlDSODetails").length > 0)) {
			switch(iCommandType) {
				case "1":
				case "2":
				case "3":
				case "8":
				case "9":
					xmlDSO_AutoLoad(xmlDSO, AutoLoadCommand);				
				break;
				
				default:					
					xmlDSO.ExecuteCMD(AutoLoadCommand, "", "", "", "");
				break;
			}			
		}
		else {			
			xmlDSO.ExecuteCMD(AutoLoadCommand, "", "", "", "");
		}
	}
}
function xmlDSO_AutoLoad(xmlDSO, cmdName) {	
	var xmlDSOID = xmlDSO.id;
	var CommandSpecs = xmlDSO.CommandSpecs;
	var CommandSpec = (CommandSpecs.selectNodes("//CommandSpecs/" + cmdName).length > 0)?(CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName)):(null);
	if(!CommandSpec){
		xmlDSO.LastErrorCode = "-3";
		xmlDSO.LastErrorDescription = "Invalid Command Name '" + cmdName + "' specified.";
		xmlDSO.ActiveCommand = "";
		xmlDSO.ActiveCommandType = "";
		alertErr(xmlDSOID,"DataSource","Autoload","Invalid Command Name '" + cmdName + "' specified.");		
		return;
	}
	var iCommandType = CommandSpec.getAttribute("type");	
	xmlDSO.ActiveCommand = cmdName;
	xmlDSO.ActiveCommandType = iCommandType;
	xmlDSO.columnSortOrder = null;
	
	//var DSODetails = (xmlDSO.selectNodes("//DSODetails").length > 0)?(xmlDSO.selectSingleNode("//DSODetails")):(null);
	var DSODetails = null
	if (xmlDSO.selectNodes("//DSODetails").length > 0) {
		DSODetails = xmlDSO.selectSingleNode("//DSODetails")
	} else if (xmlDSO.selectNodes("//xmlDSODetails").length > 0) {
		DSODetails = xmlDSO.selectSingleNode("//xmlDSODetails")
	}
	if(!DSODetails)return;	

	//var bCompressed = (xmlDSO.selectNodes("/root/DSODetails/Compressed").length > 0)?(xmlDSO.selectSingleNode("/root/DSODetails/Compressed").text):("0");	
	var bCompressed = "0"
	if (xmlDSO.selectNodes("/root/DSODetails/Compressed").length > 0) {
		bCompressed = xmlDSO.selectSingleNode("/root/DSODetails/Compressed").text;	
	} else if (xmlDSO.selectNodes("/root/xmlDSODetails/Compressed").length > 0) {
		bCompressed = xmlDSO.selectSingleNode("/root/xmlDSODetails/Compressed").text;
	}

	xmlDSO.documentElement.removeChild(DSODetails);
	if(iCommandType == 8) {
		//---Class Object Schema XML---
		xmlDSO.schemaInfo = new ActiveXObject("Microsoft.XMLDOM");
		xmlDSO.schemaInfo.async = false;	
		var root = xmlDSO.schemaInfo.createNode(1, "root", "");
		xmlDSO.schemaInfo.appendChild(root);
		var nodeList = DSODetails.selectNodes("schema/column");
		var node, i;
		for(i = 0; i < nodeList.length; i++)
		{
			node = nodeList.nextNode();
			xmlDSO.schemaInfo.documentElement.appendChild(node);
		}
		//---Active OBJID---
		var ActiveOBJID=(DSODetails.selectNodes("OBJID").length > 0)?(DSODetails.selectSingleNode("OBJID").text):("");
		xmlDSO.ActiveOBJID=ActiveOBJID;
	}
	var Schema = (DSODetails.selectNodes("xmlDSO_Schema").length > 0)?(DSODetails.selectSingleNode("xmlDSO_Schema").text):("");		
	xmlDSO.Schema = Schema;

	//----------DSO Compression Logic---------		
	if(bCompressed != "0") {
		var sReturnXML = xmlDSO_ExpandRecordSet(xmlDSO.id, xmlDSO, Schema);		
		xmlDSO.loadXML(sReturnXML);		
	}	
	//----------DSO Compression Logic---------/
	var TagValues = document.all(xmlDSO.HTMLControlID);
	if(TagValues.selectSingleNode("//root/Schema").text.length == 0)
		TagValues.selectSingleNode("//root/Schema").text = xmlDSO.Schema;
	PageNo = (DSODetails.selectNodes("PageNo").length > 0)?(DSODetails.selectSingleNode("PageNo").text):("");
	var BOF = (DSODetails.selectNodes("BOF").length > 0)?(DSODetails.selectSingleNode("BOF").text):("");
	var EOF = (DSODetails.selectNodes("EOF").length > 0)?(DSODetails.selectSingleNode("EOF").text):("");
	var LastErrorCode = (DSODetails.selectNodes("LastErrorCode").length > 0)?(DSODetails.selectSingleNode("LastErrorCode").text):("");
	var LastErrorDescription = (DSODetails.selectNodes("LastErrorDescription").length > 0)?(DSODetails.selectSingleNode("LastErrorDescription").text):("");
	var MaxPages = (DSODetails.selectNodes("MaxPages").length > 0)?(DSODetails.selectSingleNode("MaxPages").text):("");
	
	xmlDSO.Schema = Schema;
	xmlDSO.LastErrorCode = LastErrorCode;
	xmlDSO.LastErrorDescription = LastErrorDescription;
	if(LastErrorCode < 0){
		alert(LastErrorDescription);
		debugWrite(xmlDSOID + ": " + "xmlDSO_ExecuteCMD_Type1 - " + LastErrorDescription, LastErrorDescription);
	}
	CommandSpec.setAttribute("PageNo",PageNo);
	CommandSpec.setAttribute("BOF",BOF);
	CommandSpec.setAttribute("EOF",EOF);
	CommandSpec.setAttribute("MaxPages",MaxPages);
	if(LastErrorCode < 0)return;
	xmlDSO.loadXML(xmlDSO.xml);		
	xmlDSO.CreateInternalControlFields();
	xmlDSO.RecordSeed = (xmlDSO.selectNodes("//root/Record/xmlDSO__RecordNo").length > 0)?(xmlDSO.selectSingleNode("//root/Record/xmlDSO__RecordNo").text):(1);
	
	switch(iCommandType){		
		case "1": //SQL
		case "2"://ClassQuery
		case "3"://ClassMethod
		case "5"://File	
		case "7"://WebService	
		case "9"://ClassMethod
		case "11"://Custom
			xmlDSO_InitColumnSortOrder(xmlDSOID);			
		break;		
	}		
	try{
		xmlDSO.recordset("xmlDSO__RecordNo").value = "?";
	}	
	catch(err){};
}

function xmlDSO_RegisterControl(xmlDSOID, oControl) {	
	var oDSO = document.all(xmlDSOID);
	if(!oDSO){
		alertErr(xmlDSOID,"DataSource","xmlDSO_RegisterControl","Invalid DataSource ID specified.");		
		return;
	}
	var bFound = false;
	for(var i in oDSO.boundElements) {
		if(oDSO.boundElements[i] == oControl) {			
			var bFound = true;
			break;
		}
	}
	if(bFound == true) return true;
	oDSO.boundElements[oDSO.boundElements.length] = oControl;
	return true;
}

function xmlDSO_DeRegisterControl(xmlDSOID, oControl) {	
	var oDSO = document.all(xmlDSOID);
	if(!oDSO){
		alertErr(xmlDSOID,"DataSource","xmlDSO_DeRegisterControl","Invalid DataSource ID specified.");		
		return;
	}	
	var arrBoundElements = new Array();
	for(var i in oDSO.boundElements) {
		if(oDSO.boundElements[i] != oControl) {
			arrBoundElements[arrBoundElements.length] = oDSO.boundElements[i];
		}
	}			
	oDSO.boundElements = arrBoundElements;	
}

function xmlDSO_getSubListString(node)
{
	var listBuildString = "$LB(";
	var i, li, liList = node.selectNodes("li");
	for(i = 0; i < liList.length; i++)
	{
		li = liList.nextNode();				
		if(li.selectNodes("li").length > 0)
		{
			listBuildString += xmlDSO_getSubListString(li);
		}
		else
		{
			listBuildString += '"' + VBReplace(li.text, '"', '""') + '",';
		}
		
	}	
	listBuildString = (listBuildString.substr(listBuildString.length - 1, listBuildString.length) == ",")?(listBuildString.substr(0, listBuildString.length - 1)):(listBuildString);
	listBuildString += ")";
	return listBuildString;
}

function xmlDSO_getListString(node) {	
	var listString = "s list = ";
	var listBuildString = "$LB(";
	var i, li, liList = node.selectNodes("li");
	if (liList.length==0) {
		listString="set list = \"\"";
		return listString;
	}	
	for(i = 0; i < liList.length; i++) {
		li = liList.nextNode();		
		if(li.selectNodes("li").length > 0) {
			listBuildString += xmlDSO_getSubListString(li) + ",";
		}
		else {
			listBuildString += '"' + VBReplace(li.text, '"', '""') + '",';
		}		
	}
	listBuildString = (listBuildString.substr(listBuildString.length - 1, listBuildString.length) == ",")?(listBuildString.substr(0, listBuildString.length - 1)):(listBuildString);
	listBuildString += ")";
	listString = listString + listBuildString;
	return listString;
}

function xmlDSO_DisplayResponseText(responseText) {
	var oPopupBody = SYS__DSOPopupMenu.document.body;			
	var popHTML = "<DIV style='POSITION:absolute; BACKGROUND-COLOR:buttonface; HEIGHT:600px; WIDTH:800px; BORDER-WIDTH:1px; BORDER-WIDTH:2px; BORDER-STYLE: outset; FONT-SIZE:8pt; FONT-FAMILY:arial; OVERFLOW:auto'>";	
	popHTML += responseText + "</DIV>";
	oPopupBody.innerHTML = popHTML;
	SYS__DSOPopupMenu.show(50, 50, 800, 600, document.body);	
}

function xmlDSO_CommitCommand(sDataSrcID) {
	var oDataSrc = document.all(sDataSrcID);	
	var sCommandType = oDataSrc.ActiveCommandType; 
	var sCommandName = oDataSrc.ActiveCommand; 
	switch(sCommandType) {
		case "11":
		break;
		
		default:
			//return;
		break;
	}	
	//---Construct Request Envelope---
	var oXMLRequest = new ActiveXObject("Microsoft.XMLDOM");	
	oXMLRequest.async = false;
	oXMLRequest.loadXML("<root/>");
	
	var arrRecords = oDataSrc.selectNodes("/root/Record[@sysAction = 'S' || @sysAction = 'D']");
	var oRecord;
	if(arrRecords.length == 0)
		return true;
	iRequestCount = arrRecords.length;
	
	for(var i = 0; i < arrRecords.length; i++) {
		oRecord = arrRecords[i];
		oNewRecord = oRecord.cloneNode(true);	
		//===Optimization===		
		for(var x = 0; x < oNewRecord.attributes.length; x++) {
			if(oNewRecord.attributes[x].name != "sysAction")
				oNewRecord.removeAttribute(oNewRecord.attributes[x].name);
		}			
		//===Optimization===/
		oXMLRequest.documentElement.appendChild(oNewRecord);
	}		
	//===Optimization===	
	var arrDeleteNodes = oXMLRequest.selectNodes("//root/Record/*[nodeName() = 'xmlDSO__Selected' or nodeName() = 'xmlDSO__RecordNo' or nodeName() = 'xmlDSO__ARN' or nodeName() = 'xmlDSO__Status']");
	var oNode;	
	for(var i = 0; i < arrDeleteNodes.length; i++) {
		oNode = arrDeleteNodes[i];
		oNode.parentNode.removeChild(oNode);
	}	
	//===Optimization===/
	
	//---Call Commit Function---
	var oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
	
	var FileName=window.location.pathname.split("/")[window.location.pathname.split("/").length-1];
	var FormFileName=VBReplace(FormName,"_","") + ".csp"
	if ((document.Independent==true) && (xmlRequestObject.QueryString("SYS__Preview")!=1)) {
		var ActionURL = FormFileName + "?SYS__PagingHandlerMode=1&cmdName=" + sCommandName + "&HTMLControlID=" + oDataSrc.HTMLControlID + "&action=commit";		
	} 
	else {		
		var ActionURL = "htmlcontrols/xmldso/dsopaginghandler.csp?cmdName=" + sCommandName + "&HTMLControlID=" + oDataSrc.HTMLControlID + "&action=commit"
	}	
	iRequestLength = oXMLRequest.xml.length;
	oXMLHTTP.Open("POST", ActionURL, false);			
	oXMLHTTP.Send(oXMLRequest);		
	if(oXMLHTTP.status != 200) {
		alertErr(sDataSrcID,"DataSource","Commit", oXMLHTTP.statusText);		
		return false; 	
	}
	var oXMLResponse = new ActiveXObject("Microsoft.XMLDOM");
	oXMLResponse.async = false;
	iReturnLength = oXMLHTTP.responseText.length;
	oXMLResponse.loadXML(oXMLHTTP.responseText);
	if(oXMLResponse.parseError != 0) {	
		delete oXMLHTTP;
		alertErr(sDataSrcID,"DataSource","Commit", "Invalid response received from server. " + oXMLResponse.parseError.reason);
		return false;
	}
	var arrStatusRecords = oXMLResponse.selectNodes("/root/r");
	var oStatusRecord, oRecord;
	var bStatus, sAction, sStatusDescription, bCommitted;
	var iErrorCount = 0;
	var iStartRecord;
	
	var oCommandSpec=oDataSrc.tagValues.selectSingleNode("/root/CommandSpecs/" + sCommandName);
	if (oCommandSpec==null) {
		alertErr(sDataSrcID,"DataSource","Commit", "Could not get a handle to the command spec node.");		
		return false;
	}
	
	var iTransactionType=oCommandSpec.getAttribute("ts")
	if (iTransactionType==null)iTransactionType=0;
	var bErrorsOccured=false;
	if (iTransactionType==2) {
		bErrorsOccured=(oXMLResponse.selectNodes("/root/r[@s='0' or @c='0']").length>0);
	}
	//==========Update records==========
	for(var i = 0; i < arrStatusRecords.length; i++) {
		oStatusRecord = arrStatusRecords[i];
		oRecord = arrRecords[i];
		bStatus = oStatusRecord.getAttribute("s");
		sAction = oStatusRecord.getAttribute("a");
		sStatusDescription = oStatusRecord.selectSingleNode("sysSD").text;
		bCommitted = oStatusRecord.getAttribute("c");
		if(bStatus != "1") iErrorCount++;
		oRecord.setAttribute("sysStatus", bStatus);
		oRecord.setAttribute("sysStatusDescription", sStatusDescription);
		oRecord.setAttribute("sysCommitted", bCommitted);
		
		switch (iTransactionType) {
			case 1:
			case "1":
					if ((bStatus) && (bCommitted)) {
						oRecord.setAttribute("sysAction","");
						oRecord.setAttribute("Status","");
					}
				break;
				
			case 2:
			case "2":
					if (!bErrorsOccured) {
						oRecord.setAttribute("sysAction","");
						oRecord.setAttribute("Status","");
					}
				break;
				
			default:
				if (bStatus) {
					oRecord.setAttribute("sysAction","");
					oRecord.setAttribute("Status","");
				}
		}
		
		
		if((sAction == "D")&&(bStatus == "1")&&(bCommitted == "1"))
		{
			if(!iStartRecord)
			{
				iStartRecord = parseInt(oRecord.getAttribute("RecordNo"));
			}
			oDataSrc.documentElement.removeChild(oRecord);
		}
		var arrFields = oStatusRecord.selectNodes("*");
		var oField;
		//==========Update %Id() fields==========
		if ((bStatus == "1")&&(bCommitted == "1")) {
			for(var x = 0; x < arrFields.length; x++)
			{	
				oField = arrFields[x];
				if(oField.nodeName == "sysStatusDescription")
					continue;
				var oSchemaField = (oRecord.selectNodes(oField.nodeName).length > 0)?(oRecord.selectSingleNode(oField.nodeName)):(null);
				if(oSchemaField)
				{
					oSchemaField.text = oField.text;
				}
			}
		}
		//==========Update %Id() fields==========/		
	}
	//==========Update records==========/
	if(iStartRecord)
	{
		xmlDSO_ReNumber2(sDataSrcID, iStartRecord - 1, 1)
	}
	delete oXMLHTTP;
	delete oXMLResponse;	
	return (iErrorCount == 0)?(true):(false);
}

function xmlDSO_InitColumnSortOrder(DataSourceID)
{
	var dataSrc = document.all(DataSourceID);
	dataSrc.schemaInfo = new ActiveXObject("Microsoft.XMLDOM");
	dataSrc.schemaInfo.async = false;	
	var root = dataSrc.schemaInfo.createNode(1, "root", "");
	dataSrc.schemaInfo.appendChild(root);
	var arrSchema = dataSrc.Schema.split("|");	
	var i, fieldName, node;
	for(i = 0; i < arrSchema.length; i++)
	{
		fieldName = arrSchema[i];
		if(fieldName.length == 0)
			continue;
		node = dataSrc.schemaInfo.createNode(1, "column", "");
		node.setAttribute("name", fieldName);
		node.setAttribute("sort", "");
		dataSrc.schemaInfo.documentElement.appendChild(node);
	}	
}

function xmlDSO_onClick(HTMLControlID)
{	
	if(event.altKey)
		return;		
	var DataSourceTagValues = document.all(HTMLControlID.toString());
	var DataSourceID = (DataSourceTagValues.selectNodes("//root/ID").length)?(DataSourceTagValues.selectSingleNode("//root/ID").text):(null);
	var DataSource = document.all(DataSourceID);		
	var DataSourceXML = DataSource.xml;
	
	var DSOAlert = "<DIV style='BACKGROUND-COLOR:white; HEIGHT:100%; BORDER-WIDTH:1px; BORDER-STYLE: solid; FONT-SIZE:8pt; FONT-FAMILY:arial'><BR>";
	DSOAlert += "<FONT style='FONT-WEIGHT:bold;'>&nbsp;&nbsp;&nbsp;" + DataSourceID + ".LastErrorCode:</FONT><FONT style='FONT-SIZE:8pt;'> '" + DataSource.LastErrorCode + "'</FONT><BR>";
	DSOAlert += "<FONT style='FONT-WEIGHT:bold;'>&nbsp;&nbsp;&nbsp;" + DataSourceID + ".LastErrorDescription:</FONT><TEXTAREA style='POSITION:absolute; TOP:45; LEFT:10px; FONT-SIZE:8pt; FONT-FAMILY:arial; HEIGHT:70; WIDTH:480'>" + EscapeHTML(DataSource.LastErrorDescription) + "</TEXTAREA>";
	DSOAlert += "<FONT style='POSITION:absolute; TOP:118; LEFT:0px; FONT-WEIGHT:bold;'>&nbsp;&nbsp;&nbsp;" + DataSourceID + ".xml:</FONT><BR><BR><TEXTAREA style='POSITION:absolute; TOP:135; LEFT:10px; FONT-SIZE:8pt; FONT-FAMILY:arial; HEIGHT:260; WIDTH:480'>" + DataSourceXML + "</TEXTAREA><BR></DIV>";
	
	var oPopupBody = SYS__DSOPopupMenu.document.body;
	oPopupBody.innerHTML = DSOAlert;
	SYS__DSOPopupMenu.show(window.event.clientX, window.event.clientY, 500, 400, document.body);
}

function xmlDSO_SortByColumn(OrderByField, GroupByField, DataSourceID){
	var DataSource = document.all(DataSourceID);
	if(!DataSource){
		alertErr(DataSourceID, "DataSource", "SortByColumn","Invalid DataSource ID:'" + DataSourceID + "' specified.");
		return;
	}
	
	var xslTransformation = new ActiveXObject("Microsoft.XMLDOM");
	var xmlSourceData = new ActiveXObject("Microsoft.XMLDOM");
	xslTransformation.async = false;
	xmlSourceData.async = false;
	xmlSourceData.loadXML(DataSource.xml);
	xslTransformation.loadXML(DataSource.xslSortByColumn.xml);
	
	xslTransformation.selectSingleNode("//*[@id = 'Template']").setAttribute("order-by", DeCode(OrderByField));
	var TransformedXML = xmlSourceData.transformNode(xslTransformation);
	
	if(GroupByField.length > 0){
		xmlSourceData.loadXML(TransformedXML);
		xslTransformation.load("htmlcontrols/xmldso/xslgroupbytransformation.xsl");
		var GroupKey = xslTransformation.selectSingleNode("//*[@name = 'Group_Key']");
		GroupKey.setAttribute("use", GroupByField);
		var OuterLoop = xslTransformation.selectSingleNode("//xsl:template/root/xsl:for-each");
		OuterLoop.setAttribute("select", "//Record[generate-id(.) = generate-id(key('Group_Key', " + GroupByField + ")[1])]");
		var lngGroup = xslTransformation.selectSingleNode("//*[@name = 'lngGroup']/*");
		lngGroup.setAttribute("select", GroupByField);
		var lstGroup = xslTransformation.selectSingleNode("//*[@name = 'lstGroup']");
		lstGroup.setAttribute("select", "//Record[" + GroupByField + "=$lngGroup]");
		var InnerLoop = xslTransformation.selectSingleNode("//xsl:for-each[@select = '//Record[Type = $lstGroup[1]/Type]']");
		InnerLoop.setAttribute("select", "//Record[" + GroupByField + " = $lstGroup[1]/" + GroupByField + "]");
		TransformedXML = xmlSourceData.transformNode(xslTransformation);
	}
	
	
	DataSource.loadXML(TransformedXML);
	
	if(GroupByField.length > 0)
		DataSource.ReNumber();
		
	delete xslTransformation;
	delete xmlSourceData;
	delete DataSource;
}

function xmlDSO_SelectAllRecords(DataSourceID) {
	var DataSource = document.all(DataSourceID);
	if(!DataSource){
		alertErr(DataSourceID, "DataSource", "SelectAllRecords","Invalid DataSource ID:'" + DataSourceID + "' specified.");
		return;
	}
	var SelectedNode, SelectedNodeList = DataSource.selectNodes("//root/Record/xmlDSO__Selected");
	for(i = 0; i < SelectedNodeList.length; i++){
		SelectedNode = SelectedNodeList.nextNode();
		SelectedNode.text = -1;
	}
}

function xmlDSO_DeSelectAllRecords(DataSourceID) {
	var DataSource = document.all(DataSourceID);
	if(!DataSource){
		alertErr(DataSourceID, "DataSource", "DeSelectAllRecords","Invalid DataSource ID:'" + DataSourceID + "' specified.");
		return;
	}
	var SelectedNode, SelectedNodeList = DataSource.selectNodes("//root/Record/xmlDSO__Selected");
	for(i = 0; i < SelectedNodeList.length; i++){
		SelectedNode = SelectedNodeList.nextNode();
		SelectedNode.text = 0;
	}
}

function xmlDSO_BOF(DataSourceID) {
	var DataSource = document.all(DataSourceID);
	if(!DataSource){
		alertErr(DataSourceID, "DataSource", "BOF","Invalid DataSource ID:'" + DataSourceID + "' specified.");
		return;
	}	
	return (DataSource.recordset.absolutePosition <= 1)?(true):(false);
}

function xmlDSO_EOF(DataSourceID) {
	var DataSource = document.all(DataSourceID);
	if(!DataSource){
		alertErr(DataSourceID, "DataSource", "EOF","Invalid DataSource ID:'" + DataSourceID + "' specified.");
		return;
	}
	return (DataSource.recordset.absolutePosition >= DataSource.recordset.recordcount)?(true):(false);
}

function xmlDSO_onrowsinserted(DataSourceID) {
	var DataSource = document.all(DataSourceID);
	if(!DataSource){
		alertErr(DataSourceID, "DataSource", "onrowsinserted","Invalid DataSource ID:'" + DataSourceID + "' specified.");
		return;
	}
}

function xmlDSO_ImportData(SourceData, Schema, DataSourceID) {	
	var DataSource = document.all(DataSourceID);
	if(!DataSource){
		alertErr(DataSourceID, "DataSource", "ImportData","Invalid DataSource ID:'" + DataSourceID + "' specified.");
		return;
	}	
	DataSource.LastErrorCode = 0;
	DataSource.LastErrorDescription = "";
	DataSource.RecordSeed = 1;
	var xslTransformation = new ActiveXObject("Microsoft.XMLDOM");
	var xmlSourceData = new ActiveXObject("Microsoft.XMLDOM");
	xslTransformation.async = false;
	xmlSourceData.async = false;
	xmlSourceData.loadXML(SourceData);		
	xslTransformation.loadXML(DataSource.xslTransformation.xml);	
	try{
		var TransformedXML = xmlSourceData.transformNode(xslTransformation);		
	}
	catch(exception){
		DataSource.LastErrorCode = -666;
		DataSource.LastErrorDescription = exception.description;		
		if(LastErrorCode < 0){
			debugWrite(xmlDSOID + ": " + "xmlDSO_ExecuteCMD_Type1 - " + exception.description, exception.description);
		}
		var TransformedXML = false;
	}
	if(TransformedXML == false)
		return;
	DataSource.loadXML(TransformedXML);
	if(DataSource.parseError.errorCode != 0){
		alert(DataSource.parseError.reason);
		return;
	}
	DataSource.Schema = Schema;
	delete xslTransformation;
	delete xmlSourceData;
	delete DataSource;
}

function xmlDSO_DeleteRecord(RecordNo, xmlDSOID){
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","DeleteRecord","Invalid DataSource ID specified.");
		return;
	}
	if(xmlDSO.documentElement.childNodes.length == 0)return;	
	if((isNaN(RecordNo))||(RecordNo < 0)||(RecordNo > xmlDSO.recordset.recordcount)){
		alertErr(xmlDSOID,"DataSource","DeleteRecord","Record number is null or invalid.");		
		return;
	}	
	xmlDSO.documentElement.removeChild(xmlDSO.documentElement.childNodes(RecordNo - 1));
	xmlDSO_ReNumber2(xmlDSOID,RecordNo-1);
}

function xmlDSO_InsertRecord(RecordNo, xmlDSOID) {
	var hMode=false;
	if (RecordNo==null)hMode=true;
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","InsertRecord","Invalid DataSource ID specified.");
		return;
	}		
	if( (isNaN(RecordNo))||((RecordNo > xmlDSO.documentElement.childNodes.length)) ) {
		RecordNo = xmlDSO.documentElement.childNodes.length + 1;
	}	
	if(RecordNo < 0) {
		RecordNo = 0;
	}
	var PreviousFieldCount = xmlDSO.recordset.fields.count;	
	var xmlNewRecord = new ActiveXObject("Microsoft.XMLDom");
	xmlNewRecord.async = false;
	xmlNewRecord.loadXML("<root><Record RecordNo=\"1\"/></root>");
	var root = xmlNewRecord.documentElement;
	var NewRecord = root.childNodes(0);
	var Schema = xmlDSO.Schema;
	if(!Schema)return;
	var arrSchema = Schema.split("|");
	var i, SchemaCount = arrSchema.length - 1;
	var FieldName, NewNode;
	for(i = 1; i < SchemaCount; i++){
		FieldName = arrSchema[i];
		if(FieldName.substring(0, 8) != "xmlDSO__"){
			NewNode = xmlNewRecord.createNode(1, Encode(FieldName), "");
			NewRecord.appendChild(NewNode);
		}
	}
	NewNode = xmlNewRecord.createNode(1, "xmlDSO__ARN", "");
	NewRecord.appendChild(NewNode);	
	NewNode.text = RecordNo;
	NewNode = xmlNewRecord.createNode(1, "xmlDSO__RecordNo", "");
	NewRecord.appendChild(NewNode);	
	NewNode = xmlNewRecord.createNode(1, "xmlDSO__Selected", "");
	NewRecord.appendChild(NewNode);
	NewNode.text = 0;
	NewNode = xmlNewRecord.createNode(1, "xmlDSO__Status", "");
	NewRecord.appendChild(NewNode);
	NewNode.text = "htmlcontrols/xmldso/blank.gif";
	NewRecord = xmlDSO.documentElement.insertBefore(NewRecord, xmlDSO.documentElement.childNodes(RecordNo));
	if(PreviousFieldCount == 1){		
		xmlDSO.loadXML(xmlDSO.xml);
	} 
	else {
		if (!hMode) {
			xmlDSO_ReNumber2(xmlDSOID,RecordNo,1);
		} else {
			xmlDSO_ReNumber2(xmlDSOID,RecordNo-1,1);
		}
	}
	var TargetRecordNo = RecordNo - xmlDSO.recordset.absolutePosition;
	if( (xmlDSO.recordset.absolutePosition < 1)||(xmlDSO.recordset.absolutePosition + TargetRecordNo > xmlDSO.recordset.recordcount) ){
		xmlDSO.recordset.moveFirst();
	}
	else {		
		xmlDSO.recordset.move(TargetRecordNo);
	}
}

function xmlDSO_GetCurrentRecordStatus(xmlDSOID){
	var DSO = document.all(xmlDSOID)
	switch(DSO.documentElement.childNodes[DSO.recordset.absolutePosition -1].getAttribute("Status")){
		case "UPDATE":
			if (DSO.documentElement.childNodes[DSO.recordset.absolutePosition -1].getAttribute("Type") == "Insert"){
				return "Insert";
			}
			else{
				return "Update";
			}
		break;
		default:
			return "Unchanged";
		break;
	}
}

function xmlDSO_SetRecordAttribute(RecordNo, Attribute, Value, xmlDSOID){			
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","SetRecordAttribute","Invalid DataSource ID specified.");		
		return;
	}
	var Record = xmlDSO.documentElement.childNodes(parseInt(RecordNo) - 1);		
	if(!Record){
		alertErr(xmlDSOID,"DataSource","SetRecordAttribute","Invalid RecordNo:'" + RecordNo + "' specified.");		
		return;
	}
	try{
		Record.setAttribute(Attribute, Value);
	}
	catch(err){
		alertErr(xmlDSOID,"DataSource","SetRecordAttribute","Error #" + err.number + ": " + err.description);		
		return;
	}	
}

function xmlDSO_GetRecordAttribute(RecordNo, Attribute, xmlDSOID){
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","GetRecordAttribute","Invalid DataSource ID specified.");		
		return;
	}
	if(isNaN(RecordNo)){
		alertErr(xmlDSOID,"DataSource","GetRecordAttribute","Invalid RecordNo:'" + RecordNo + "' specified.");		
		return;
	}
	var Record = xmlDSO.documentElement.childNodes(parseInt(RecordNo) - 1);
	if(!Record){		
		alertErr(xmlDSOID,"DataSource","GetRecordAttribute","Invalid RecordNo:'" + RecordNo + "' specified.");		
		return;
	}	
	try{
		var AttributeReturnValue = Record.getAttribute(Attribute);
	}
	catch(err){
		alertErr(xmlDSOID,"DataSource","GetRecordAttribute","Error #" + err.number + ": " + err.description);		
		return;
	}	
	return AttributeReturnValue;	
}

function xmlDSO_onreadystatechange(xmlDSOID){
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","onreadystatechange","Invalid DataSource ID specified.");		
		return;
	}	
	var xmlTagValues = document.all(xmlDSO.HTMLControlID);
	if(!xmlTagValues){
		alertErr(xmlDSOID,"DataSource","onreadystatechange","Invalid TagValue ID:'" + xmlDSO.HTMLControlID + "' specified.");		
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(xmlDSOID,"DataSource","onreadystatechange","TagValue Error: " + xmlTagValues.parseError.reason + ".");		
		return;
	}
	
	var onreadystatechange = (xmlTagValues.selectNodes("//root/onreadystatechange").length > 0)?(xmlTagValues.selectSingleNode("//root/onreadystatechange").text):("");	
	if (onreadystatechange=="") return;
	try{
		debugWrite(xmlDSOID + ".onreadystatechange",new Array(document.all(xmlDSOID).HTMLControlID,"onreadystatechange"),"callstack");
		eval(onreadystatechange);	
	}
	catch(err){
		alertErr(xmlDSOID,"DataSource","onreadystatechange","User onreadystatechange event error #" + err.number + ": " + err.description + "\n" + onreadystatechange);		
		return;
	}		
}

function xmlDSO_onrowenter(xmlDSOID){	
	//if(document.readyState != "complete")return;	
	
	var xmlDSO = document.all(xmlDSOID);	
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","onrowenter","Invalid DataSource ID specified.");		
		return;
	}
	
	if(xmlDSO.readyState != "complete")return;
			
	if( (xmlDSO.documentElement.childNodes.length == 0)||(xmlDSO.recordset.fields.count == 0) )return;
	if(xmlDSO.recordset.absolutePosition < 1){
		if(xmlDSO.recordset.recordcount == 1)xmlDSO.recordset.absolutePosition = 1;				
		return;
	}
	
	var xmlTagValues = document.all(xmlDSO.HTMLControlID);
	if(!xmlTagValues){
		alertErr(xmlDSOID,"DataSource","onrowenter","Invalid TagValue ID:'" + xmlDSO.HTMLControlID + "' specified.");
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(xmlDSOID,"DataSource","onrowenter","TagValue Error: " + xmlTagValues.parseError.reason + ".");
		return;
	}	
	var onrowenter = (xmlTagValues.selectNodes("//onrowenter").length > 0)?(xmlTagValues.selectSingleNode("//onrowenter").text):("");			
	
	try{
		if (onrowenter!="") {
			debugWrite(xmlDSOID + ".onrowenter",new Array(document.all(xmlDSOID).HTMLControlID,"onrowenter"),"callstack");
			eval(onrowenter);
		}
	}
	catch(err){
		alertErr(xmlDSOID,"DataSource","onrowenter","User onrowenter event error #" + err.number + ": " + err.description + "\n" + onrowenter);		
		return;
	}
		
	try{
		xmlDSO.recordset("xmlDSO__RecordNo").value = "?";
	}	
	catch(err){};
	for(var i in xmlDSO.boundElements){		
		oBoundGrid = xmlDSO.boundElements[i];		
		if(oBoundGrid == null)
			continue;
		oBoundGrid.onDSORecordChange();
	}			
}

function xmlDSO_onrowexit(xmlDSOID){	
	//if(document.readyState != "complete")return;
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","onrowexit","Invalid DataSource ID specified.");		
		return;
	}
	
	if(xmlDSO.readyState != "complete")return;
	
	var xmlTagValues = document.all(xmlDSO.HTMLControlID);
	if(!xmlTagValues){
		alertErr(xmlDSOID,"DataSource","onrowexit","Invalid TagValue ID:'" + xmlDSO.HTMLControlID + "' specified.");		
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(xmlDSOID,"DataSource","onrowexit","TagValue Error: " + xmlTagValues.parseError.reason + ".");
		return;
	}	
	var onrowexit = (xmlTagValues.selectNodes("//onrowexit").length > 0)?(xmlTagValues.selectSingleNode("//onrowexit").text):("");
	
	try{
		if (onrowexit !="") {
			debugWrite(xmlDSOID + ".onrowexit",new Array(document.all(xmlDSOID).HTMLControlID,"onrowexit"),"callstack");
			eval(onrowexit);
		}
	}
	catch(err){
		alertErr(xmlDSOID,"DataSource","onrowexit","User onrowexit event error #" + err.number + ": " + err.description + "\n" + onrowexit);
		return;
	}	
	try {
		//xmlDSO.recordset.fields("xmlDSO__RecordNo").value = xmlDSO.recordset.absolutePosition;		
		var ARN = xmlDSO.recordset.absolutePosition - 1;
		var RecordNo = xmlDSO.documentElement.childNodes(ARN).getAttribute("RecordNo");		
		xmlDSO.recordset("xmlDSO__RecordNo").value = RecordNo;
	}
	catch(err){}
}

function xmlDSO_SetRecordFieldValue(RecordNo, FieldName, FieldValue, xmlDSOID){
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","SetRecordFieldValue","Invalid DataSource ID specified.");
		return;
	}
	var RowNo = RecordNo - 1;
	var Record = xmlDSO.documentElement.childNodes(RowNo);		
	if(!Record){
		alertErr(xmlDSOID,"DataSource","SetRecordFieldValue","Invalid RecordNo:'" + RecordNo.toString() + "' specified.");
		return;
	}
	if(Record.selectNodes(FieldName).length > 0){
		Record.selectSingleNode(FieldName).text = FieldValue;
		return true;
	}
	return false;
}

function xmlDSO_oncellchange(xmlDSOID){	
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","oncellchange","Invalid DataSource ID specified.");	
		return;
	}

	var xmlTagValues = document.all(String(xmlDSO.HTMLControlID));
	var onCellChange = (xmlTagValues.selectNodes("//oncellchange").length > 0)?(xmlTagValues.selectSingleNode("//oncellchange").text):("");
	if(xmlDSO.documentElement.childNodes.length == 0)return;
	if(xmlDSO.IgnoreCellChangeEvent == true){
		xmlDSO.IgnoreCellChangeEvent = false;
		return;
	}	
	var RecordNo = window.event.recordset.absolutePosition;
	var RowNo = RecordNo - 1
	if(RecordNo < 0)
		RecordNo = window.event.recordset.recordCount;
	var Record = xmlDSO.documentElement.childNodes(RowNo);	
	if(!Record){
		//alert("xmlDSO_oncellchange() error:\n____________________________________________________\n\nInvalid RecordNo:'" + RecordNo.toString() + "' specified.\n____________________________________________________");
		return;
	}
	var ColumnName = window.event.dataFld;
	if((ColumnName == "xmlDSO__RecordNo")||(ColumnName == "xmlDSO__Status")||(ColumnName == "xmlDSO__Selected")||(ColumnName == "xmlDSO__ARN"))
		return;
	
	var CurrentNode = Record.selectSingleNode(ColumnName);
	if (!CurrentNode)
		return;

	if (xmlDSO.ActiveCommandType && xmlDSO.ActiveCommand) {
		if (xmlTagValues.selectNodes("//root/CommandSpecs/" + xmlDSO.ActiveCommand + "[@fpt='1']").length == 0) {
			xmlDSO.SetRecordAttribute(RecordNo, "Status", "UPDATE");
		}
	} else {
		xmlDSO.SetRecordAttribute(RecordNo, "Status", "UPDATE");
	}

	var OrigValue = CurrentNode.getAttribute("OrigValue");
	if (OrigValue == null){
		if (xmlDSO.GetRecordAttribute(RecordNo, "RecordType") == "New"){
			CurrentNode.setAttribute("OrigValue", "");
		}
		else {
			CurrentNode.setAttribute("OrigValue", "" + CurrentNode.text);
		}
	}
	
	OrigValue = CurrentNode.getAttribute("OrigValue");
	xmlDSO.IgnoreCellChangeEvent = true;
	try{
		if (onCellChange != "") {
			debugWrite(xmlDSOID + ".oncellchange",new Array(document.all(xmlDSOID).HTMLControlID,"oncellchange"),"callstack");
			eval(onCellChange);
		}
	}
	catch(err){
		alertErr(xmlDSOID,"DataSource","oncellchange","User onrowenter event error #" + err.number + ": " + err.description + "\n" + onCellChange);
		return;
	}		
}

function xmlDSO_CreateInternalControlFields(xmlDSOID){
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","CreateInternalControlFields","Invalid DataSource ID specified.");
		return;
	}
	if(xmlDSO.parseError != 0){
		alertErr(xmlDSOID,"DataSource","CreateInternalControlFields","DataSource Parse Error: " + xmlDSO.parseError.reason + ".");
		return;
	}
	if(xmlDSO.documentElement.childNodes.length == 0)return;
	var root = xmlDSO.documentElement;	
	var xmlRecordCount = xmlDSO.selectNodes("//root/Record").length;
	
	var i, Record, currNode, RecordNoNode, SelectedNode, StatusNode;
	var RecordNo;
	var newNode;				
	var oRecordList = xmlDSO.selectNodes("//root/Record");
	var oRecord;
	for(i = 0; i < oRecordList.length; i++){			
		Record = oRecordList.nextNode();	
		RecordNoNode = xmlDSO.createNode(1, "xmlDSO__ARN", "");//---Absolute Record Number		
		Record.appendChild(RecordNoNode);
		RecordNoNode = Record.lastChild;
		//RecordNoNode.text = Record.getAttribute("RecordNo");			
		RecordNoNode.text = i + 1;	
			
		RecordNoNode = xmlDSO.createNode(1, "xmlDSO__RecordNo", "");
		Record.appendChild(RecordNoNode);
		RecordNoNode = Record.lastChild;
		//alert(Record.xml);
		RecordNoNode.text = (Record.getAttribute("RecordNo"))?(Record.getAttribute("RecordNo")):(i+1);
		//RecordNoNode.text = i + 1;					
		/*
		RecordNoNode.setAttribute("RecordNo", i + 1);		
		RecordNo = xmlDSO.createAttribute("RecordNo");
		RecordNo.text = i + 1;
		namedNodeMap = RecordNoNode.attributes;
		namedNodeMap.setNamedItem(RecordNo);
		*/
		
		SelectedNode = xmlDSO.createNode(1, "xmlDSO__Selected", "");
		Record.appendChild(SelectedNode);
		SelectedNode = Record.lastChild;
		SelectedNode.text = 0;
		StatusNode = xmlDSO.createNode(1, "xmlDSO__Status", "");
		Record.appendChild(StatusNode);
		StatusNode = Record.lastChild;
		StatusNode.text = "htmlcontrols/xmldso/blank.gif";		
	}	
	xmlDSO.loadXML(xmlDSO.xml);	
}

function xmlDSO_ExecuteCMD(cmdName, Direction, PageNo, PageSize, IgnoreError, bCompress, xmlDSOID){	
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","ExecuteCMD","Invalid DataSource ID specified.");		
		return;
	}
	var xmlTagValues = document.all(xmlDSO.HTMLControlID);
	if(!xmlTagValues){
		alertErr(xmlDSOID,"DataSource","ExecuteCMD","Invalid TagValue ID:'" + Grid.HTMLControlID + "' specified.");		
		return;
	}
	xmlDSO.LastErrorCode = 0;
	xmlDSO.LastErrorDescription = "";
	if(xmlTagValues.parseError != 0){
		xmlDSO.LastErrorCode = "-1";
		xmlDSO.LastErrorDescription = "TagValue Error: " + xmlTagValues.parseError.reason + ".";
		alertErr(xmlDSOID,"DataSource","ExecuteCMD","TagValue Error: " + xmlTagValues.parseError.reason + ".");		
		return;
	}
	var CommandSpecs = (xmlTagValues.selectNodes("//CommandSpecs").length > 0)?(xmlTagValues.selectSingleNode("//CommandSpecs")):(null);
	if(!CommandSpecs){
		xmlDSO.LastErrorCode = "-2";
		xmlDSO.LastErrorDescription = "CommandSpec Error.";
		alertErr(xmlDSOID,"DataSource","ExecuteCMD","CommandSpec Error.");		
		return;
	}
	var CommandSpec = (CommandSpecs.selectNodes(cmdName).length > 0) ? CommandSpecs.selectSingleNode(cmdName) : null;	
	if(!CommandSpec){
		xmlDSO.LastErrorCode = "-3";
		xmlDSO.LastErrorDescription = "Invalid Command Name '" + cmdName + "' specified.";
		xmlDSO.ActiveCommand = "";
		xmlDSO.ActiveCommandType = "";
		alertErr(xmlDSOID,"DataSource","ExecuteCMD","Invalid Command Name '" + cmdName + "' specified.");		
		return;
	}
	var CommandType = CommandSpec.getAttribute("type");		
	//alert("CommandType: " + CommandType);
	xmlDSO.ActiveCommand = cmdName;
	xmlDSO.ActiveCommandType = CommandType;
	xmlDSO.columnSortOrder = null;
	switch(CommandType){
		case "5"://File	
			xmlDSO_ExecuteCMD_Type5(cmdName, Direction, PageNo, PageSize, IgnoreError, bCompress, xmlDSOID);
			xmlDSO_InitColumnSortOrder(xmlDSOID);
		break;
		
		default:
		    alert("DSO type not supported : " + CommandType);
		    return;
	}	
	try{
		xmlDSO.recordset("xmlDSO__RecordNo").value = "?";
	}	
	catch(err){};
}

function xmlDSO_ExecuteCMD_Refresh(ObjectID,bCompress,xmlDSOID)
{
	if (ObjectID==null) ObjectID=""
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		xmlDSO.LastErrorCode = "-1";
		xmlDSO.LastErrorDescription = "Invalid DataSource ID specified.";
		alertErr(xmlDSOID,"DataSource","Type8","Invalid DataSource ID specified.");
		return false;
	}
	return xmlDSO_ExecuteCMD_Type5_Refresh(ObjectID,bCompress,xmlDSOID);
}

function xmlDSO_ExecuteCMD_Delete(ObjectID,xmlDSOID)
{
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		xmlDSO.LastErrorCode = "-1";
		xmlDSO.LastErrorDescription = "Invalid DataSource ID specified.";
		alertErr(xmlDSOID,"DataSource","Type8","Invalid DataSource ID specified.");
		return false;
	}
	if (!ObjectID) { 
	
		xmlDSO.LastErrorCode = "-1";
		xmlDSO.LastErrorDescription = "Invalid ID specified.";
		alertErr(xmlDSOID,"DataSource","Type8","Invalid ID specified.");
		return false;
	}
	
	return xmlDSO_ExecuteCMD_Type5_Delete(ObjectID,xmlDSOID);
}

function xmlDSO_ExecuteCMD_Save(bCompress, xmlDSOID)
{
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		xmlDSO.LastErrorCode = "-1";
		xmlDSO.LastErrorDescription = "Invalid DataSource ID specified.";
		alertErr(xmlDSOID,"DataSource","Type8","Invalid DataSource ID specified.");
		return false;
	}
	return xmlDSO_ExecuteCMD_Type5_Save(bCompress,xmlDSOID);
}

function xmlDSO_ExpandRecordSet(xmlDSOID, oDSO, sSchema) {		
	var xmlDSO = document.all(xmlDSOID);
	var xslTransform = xmlDSO.xslExpand;
	var oForEach = xslTransform.selectSingleNode("//*[@id = 'foreach']");	
	var oNewForEach = oForEach.cloneNode(false);	
	var oChooseNode = xslTransform.createNode(1, "xsl:choose", "http://www.w3.org/TR/WD-xsl");		
	var arrSchema = sSchema.split("|");
	var sFielName, oTestNode, oContentNode, oValueOf;
	var iNodeCounter = 1;
	for(var i in arrSchema) {
		sFielName = arrSchema[i];
		if(sFielName.length == 0) continue;
		oTestNode = xslTransform.createNode(1, "xsl:when", "http://www.w3.org/TR/WD-xsl");
		oTestNode.setAttribute("test", ".[nodeName() = 'f" + iNodeCounter++ + "']");
		oContentNode = xslTransform.createNode(1, sFielName, "");
		oValueOf = xslTransform.createNode(1, "xsl:value-of", "http://www.w3.org/TR/WD-xsl");
		oContentNode.appendChild(oValueOf);
		oTestNode.appendChild(oContentNode);
		oChooseNode.appendChild(oTestNode);
	}
	oNewForEach.appendChild(oChooseNode);
	oForEach.parentNode.replaceChild(oNewForEach, oForEach);	
	var sReturnXML = oDSO.transformNode(xslTransform);		
	return sReturnXML;
}

function xmlDSO_CompressRecordSet(xmlDSOID, sSchema) {
	var xmlDSO = document.all(xmlDSOID);
	var arrSchema = sSchema.split("|");
	for(var i in arrSchema) {
		sFielName = arrSchema[i];
		if(sFielName.length == 0) continue;	
		var oCurrentNode = xmlDSO.selectSingleNode("//root/Record/" + sFielName)
		alert(oCurrentNode.value);
	}
	
	return sReturnXML
}

function xmlDSO_ConvertXMLDataSet(oXMLDataSet, xmlDSOID) {		
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		xmlDSO.LastErrorCode = "-10";
		xmlDSO.LastErrorDescription = "Invalid DataSource ID specified.";
		alertErr(xmlDSOID,"DataSource","xmlDSO_ConvertXMLDataSet","Invalid DataSource ID specified.");
		return;
	}	
	var sDataSetID = oXMLDataSet.documentElement.childNodes(0).getAttribute("id");	
	var sRecordName = (oXMLDataSet.selectNodes("//s:schema[@id='" + sDataSetID + "']/*/*/*/s:element").length > 0)?(oXMLDataSet.selectSingleNode("//s:schema[@id='" + sDataSetID + "']/*/*/*/s:element").getAttribute("name")):(null);
	if(sRecordName == null)
	{
		alertErr(xmlDSOID,"DataSource","xmlDSO_ConvertXMLDataSet","Invalid response received from server.");
		return;
	}	
	var schemaList = oXMLDataSet.selectNodes("//s:schema[@id='" + sDataSetID + "']/*/*/*/*/*/*/s:element");	
	if(schemaList.length == 0)
	{
		alertErr(xmlDSOID,"DataSource","xmlDSO_ConvertXMLDataSet","Invalid response received from server.");
		return;
	}
	var sSchema = "|";
	for(i = 0; i < schemaList.length; i++)
	{
		oSchema = schemaList.nextNode();
		sSchema += oSchema.getAttribute("name") + "|"
	}
	xmlDSO.Schema = sSchema;
	var xslStyleSheet = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");	
	xslStyleSheet.async = false;

	xslStyleSheet.loadXML(xmlDSO.xslDataSet.xml);	
	xslStyleSheet.selectSingleNode("//xsl:apply-templates[@id = 'applytemplate']").setAttribute("select", "//" + sDataSetID + "/" + sRecordName);
	xslStyleSheet.selectSingleNode("//xsl:template[@id = 'template']").setAttribute("match", sDataSetID + "/" + sRecordName);
	var sRecordSet = oXMLDataSet.transformNode(xslStyleSheet);
	xmlDSO.loadXML(sRecordSet);
}

function xmlDSO_ExecuteCMD_Type5_Save(bCompress,xmlDSOID)
{
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		xmlDSO.LastErrorCode = "-8";
		xmlDSO.LastErrorDescription = "Invalid DataSource ID specified.";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid DataSource ID specified.");
		return false;
	}
	if (parseInt(xmlDSO.ActiveCommandType) != 5){
		xmlDSO.LastErrorCode = "-9";
		xmlDSO.LastErrorDescription = "Invalid command type active. Save command only available for file CRUD.";
		alertErr(xmlDSOID,"DataSource","Type"+xmlDSO.ActiveCommandType,"Invalid command type active. Save command only available for class command type.");
		return false;
	}
	
	var cmdName=xmlDSO.ActiveCommand;
	
	var CommandSpecs = xmlDSO.CommandSpecs;
	if(!CommandSpecs){
		xmlDSO.LastErrorCode = "-10";
		xmlDSO.LastErrorDescription = "CommandSpec Error.";
		alertErr(xmlDSOID, "xmldso", "Type5", "CommandSpec Error.")		
		return false;
	}		
	var CommandSpec = (CommandSpecs.selectNodes("//CommandSpecs/" + cmdName).length > 0)?(CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName)):(null);
	if(!CommandSpec){
		xmlDSO.LastErrorCode = "-11";
		xmlDSO.LastErrorDescription = "Invalid Command Name '" + cmdName + "' specified.";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid Command Name '" + cmdName + "' specified.");		
		return false;
	}
	
	if (CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName).getAttribute("fpt") !=1){
		xmlDSO.LastErrorCode = "-2";
		xmlDSO.LastErrorDescription = "Invalid command type active. Save command only available for file CRUD.";
		alertErr(xmlDSOID,"DataSource","Type"+xmlDSO.ActiveCommandType,"Invalid command type active. Save command only available for file CRUD.");
		return false;
	}
	
	if(bCompress == null) {
		bCompress = (CommandSpec.getAttribute("c"))?(CommandSpec.getAttribute("c")):(1);
		bCompress = (bCompress != 0)?(1):(0);
	}	
	var OBJID = xmlDSO.ActiveOBJID;
	var sAction="";
	if (OBJID.length < 1){
		sAction="Insert";
	}
	else{
		sAction="Update";
	}
	xmlDSO_ExecuteCMD_Type5(cmdName, "", "", "", "", bCompress, xmlDSOID,sAction,OBJID)
	return false;
}

function xmlDSO_ExecuteCMD_Type5_Refresh(ObjectID,bCompress,xmlDSOID) {
	if (ObjectID==null) ObjectID=""
	//alert(ObjectID);
	
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		xmlDSO.LastErrorCode = "-1";
		xmlDSO.LastErrorDescription = "Invalid DataSource ID specified.";
		alertErr(xmlDSOID,"DataSource","Type8","Invalid DataSource ID specified.");
		return false;
	}
	if (xmlDSO.ActiveCommandType != 5){
		xmlDSO.LastErrorCode = "-2";
		xmlDSO.LastErrorDescription = "Invalid command type active. Refresh command only available for file CRUD.";
		alertErr(xmlDSOID,"DataSource","Type"+xmlDSO.ActiveCommandType,"Invalid command type active. Refresh command only available for file CRUD.");
		
		return false;
	}
	var CommandSpecs = xmlDSO.CommandSpecs;
	var cmdName=xmlDSO.ActiveCommand;
	if(!CommandSpecs){
		xmlDSO.LastErrorCode = "-3";
		xmlDSO.LastErrorDescription = "CommandSpec Error.";
		alertErr(xmlDSOID, "xmldso", "Type5", "CommandSpec Error.")		
		return false;
	}
	
	var CommandSpec = (CommandSpecs.selectNodes("//CommandSpecs/" + cmdName).length > 0)?(CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName)):(null);
	if(!CommandSpec){
		xmlDSO.LastErrorCode = "-4";
		xmlDSO.LastErrorDescription = "Invalid Command Name '" + cmdName + "' specified.";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid Command Name '" + cmdName + "' specified.");		
		return false;
	}
	if (CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName).getAttribute("fpt") !=1){
		xmlDSO.LastErrorCode = "-2";
		xmlDSO.LastErrorDescription = "Invalid command type active. Refresh command only available for file CRUD.";
		alertErr(xmlDSOID,"DataSource","Type"+xmlDSO.ActiveCommandType,"Invalid command type active. Refresh command only available for file CRUD.");
		
		return false;
	}
	//alert(CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName).xml);
	xmlDSO_ExecuteCMD_Type5(cmdName, "", "", "", "", 1, xmlDSOID,"Read",ObjectID)
	return true;
}	

function xmlDSO_ExecuteCMD_Type5_Delete(ObjectID,xmlDSOID){
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		xmlDSO.LastErrorCode = "-16";
		xmlDSO.LastErrorDescription = "Invalid DataSource ID specified.";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid DataSource ID specified.");
		return false;
	}
	
	if (xmlDSO.ActiveCommandType != 5){
		xmlDSO.LastErrorCode = "-17";
		xmlDSO.LastErrorDescription = "Invalid command type active. Delete command only available for File CRUD type.";
		alertErr(xmlDSOID,"DataSource","Type"+xmlDSO.ActiveCommandType,"Invalid command type active. Delete command only available for File CRUD type.");
		return false;
	}
	
	var cmdName=xmlDSO.ActiveCommand;
	var CommandSpecs = xmlDSO.CommandSpecs;
	if(!CommandSpecs){
		xmlDSO.LastErrorCode = "-10";
		xmlDSO.LastErrorDescription = "CommandSpec Error.";
		alertErr(xmlDSOID, "xmldso", "Type5", "CommandSpec Error.");		
		return false;
	}		
	var CommandSpec = (CommandSpecs.selectNodes("//CommandSpecs/" + cmdName).length > 0)?(CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName)):(null);
	if(!CommandSpec){
		xmlDSO.LastErrorCode = "-11";
		xmlDSO.LastErrorDescription = "Invalid Command Name '" + cmdName + "' specified.";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid Command Name '" + cmdName + "' specified.");		
		return false;
	}
	
	if (CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName).getAttribute("fpt") !=1){
		xmlDSO.LastErrorCode = "-2";
		xmlDSO.LastErrorDescription = "Invalid command type active. Delete command only available for file CRUD.";
		alertErr(xmlDSOID,"DataSource","Type"+xmlDSO.ActiveCommandType,"Invalid command type active. Delete command only available for file CRUD.");
		
		return false;
	}
	
	var sAction="Delete";
	
	xmlDSO_ExecuteCMD_Type5(cmdName, "", "", "", "", 1, xmlDSOID,sAction,ObjectID);
	
	return false;	
}

function xmlDSO_ExecuteCMD_Type5(cmdName, Direction, PageNo, PageSize, IgnoreError, bCompress, xmlDSOID,sAction,ObjectID){
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		xmlDSO.LastErrorCode = "-16";
		xmlDSO.LastErrorDescription = "Invalid DataSource ID specified.";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid DataSource ID specified.");		
		return;
	}
	var HTMLControlID = xmlDSO.HTMLControlID;
	var xmlTagValues = document.all(HTMLControlID);
	if(!xmlTagValues){
		xmlDSO.LastErrorCode = "-17";
		xmlDSO.LastErrorDescription = "Invalid TagValue ID:'" + Grid.HTMLControlID + "' specified.";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid TagValue ID:'" + Grid.HTMLControlID + "' specified.");
		return;
	}
	if(xmlTagValues.parseError != 0){
		xmlDSO.LastErrorCode = "-18";
		xmlDSO.LastErrorDescription = "TagValue Error: " + xmlTagValues.parseError.reason + ".";
		alertErr(xmlDSOID,"DataSource","Type5","TagValue Error: " + xmlTagValues.parseError.reason + ".");		
		return;
	}
	var CommandSpecs = xmlDSO.CommandSpecs;
	
	if(!CommandSpecs){
		xmlDSO.LastErrorCode = "-19";
		xmlDSO.LastErrorDescription = "CommandSpec Error.";
		alertErr(xmlDSOID,"DataSource","Type5","CommandSpec Error.");
		return;
	}		
	
	var CommandSpec = (CommandSpecs.selectNodes("//CommandSpecs/" + cmdName).length > 0)?(CommandSpecs.selectSingleNode("//CommandSpecs/" + cmdName)):(null);
	
	if(!CommandSpec){
		xmlDSO.LastErrorCode = "-20";
		xmlDSO.LastErrorDescription = "Invalid Command Name '" + cmdName + "' specified.";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid Command Name '" + cmdName + "' specified.");
		return;
	}
	
	var FilePath = (CommandSpec.getAttribute("FilePath"))?(CommandSpec.getAttribute("FilePath")):("");		
	
	if(FilePath.length == 0){
		return;
	}
	
	var ParamNames = (CommandSpec.getAttribute("ParamNames"))?(CommandSpec.getAttribute("ParamNames")):("");
	var InsertRows = (CommandSpec.getAttribute("InsertRows"))?(CommandSpec.getAttribute("InsertRows")):("");
	var arrParamName = ParamNames.split("|");
	var i, ParamNameCount = arrParamName.length - 1;
	var ParamName, ParamValue, ParameterNames = "", ParameterValues = "";
	var xmlParameters = new ActiveXObject("Microsoft.XMLDOM");
	xmlParameters.async = false;
	xmlParameters.loadXML("<root/>");
	
	if (CommandSpec.getAttribute("fpt") == 1)
	{
		var sSchema=xmlDSO.Schema
		
		if (!sAction) sAction = "Read";
		ParamName = "Action";
		ParameterNames += "{" + escape(ParamName) + "}";
		ParameterValues += "{" + escape(sAction) + "}";
		var param = xmlParameters.createNode(1, "param", "")	
		param.setAttribute("name", ParamName);
		xmlParameters.documentElement.appendChild(param);
		var CDATA=xmlParameters.createCDATASection(sAction);
		param.appendChild(CDATA);
		
		ParamName = "IdentityValue";
		ParameterNames += "{" + escape(ParamName) + "}";
		ParameterValues += "{" + escape(ObjectID) + "}";
		var param = xmlParameters.createNode(1, "param", "")	
		param.setAttribute("name", ParamName);
		xmlParameters.documentElement.appendChild(param);
		var CDATA=xmlParameters.createCDATASection(ObjectID);
		param.appendChild(CDATA);
		
		if (sAction != "Read"){
			var sSchema = xmlDSO.Schema;
			var arrSchema = sSchema.split("|");
			var sNodeValue= "";
			for (var j=1;j<arrSchema.length-1;j++)
			{
				sNodeValue = xmlDSO.selectSingleNode("//root/Record/"+arrSchema[j]).text;
				ParameterNames += "{" + escape(arrSchema[j]) + "}";
				ParameterValues += "{" + escape(sNodeValue) + "}";
				var param = xmlParameters.createNode(1, "param", "")	
				param.setAttribute("name", arrSchema[j]);
				xmlParameters.documentElement.appendChild(param);
				var CDATA=xmlParameters.createCDATASection(sNodeValue);
				param.appendChild(CDATA);
			}
		}
	}
	else
	{
		for(i = 0; i < ParamNameCount; i++){
			ParamName = arrParamName[i];
			ParamValue = xmlDSO.GetParameterValue(ParamName);
			ParameterNames += "{" + escape(ParamName) + "}";
			ParameterValues += "{" + escape(ParamValue) + "}";
			var param = xmlParameters.createNode(1, "param", "")	
			param.setAttribute("name", ParamName);
			xmlParameters.documentElement.appendChild(param);
			var CDATA=xmlParameters.createCDATASection(ParamValue);
			param.appendChild(CDATA);
		}
	}
	if(bCompress == null) {
		bCompress = (CommandSpec.getAttribute("c"))?(CommandSpec.getAttribute("c")):(1);
	}	
	if(!PageNo){		
		PageNo = (CommandSpec.getAttribute("PageNo"))?(CommandSpec.getAttribute("PageNo")):(1);
	}		
	else if(PageNo.length == 0){		
		PageNo = (CommandSpec.getAttribute("PageNo"))?(CommandSpec.getAttribute("PageNo")):(1);
	}
	PageSize = (PageSize != null)?(PageSize):("");
	var RuntimeMode = (CommandSpec.getAttribute("RuntimeMode"))?(CommandSpec.getAttribute("RuntimeMode")):(0);
	if(bCompress == null) {
		bCompress = (CommandSpec.getAttribute("c"))?(CommandSpec.getAttribute("c")):(1);
		bCompress = (bCompress != 0)?(1):(0);
	}	
	var FileDelimeter = (VBInstring(FilePath, "?"))?("&"):("?");
	var ActionURL = FilePath + FileDelimeter + "HTMLControlID=" + HTMLControlID +
					"&ParameterNames=" + escape(ParameterNames) + 
					"&ParameterValues=" + escape(ParameterValues) +
					"&PageNo=" + escape(PageNo) +
					"&PageSize=" + escape(PageSize) +
					"&Direction=" + escape(Direction) +
					"&InsertRows=" + escape(InsertRows) +
					"&cmdName=" + escape(cmdName);		
	//alert(ActionURL);
	var xmlReturnData = new ActiveXObject("Microsoft.XMLDOM");
	xmlReturnData.async = false;		
	var href = ActionURL.split("?")[0];		
	var sMethod = ((href.substr(href.length - 4, 4).toLowerCase() == "xslt")||(href.substr(href.length - 3, 3).toLowerCase() == "xml"))?("load"):("http");
	//---load---
	if(sMethod == "load") {
		xmlReturnData.load(ActionURL);	
		if((xmlReturnData.parseError != 0)&&(!IgnoreError)){
			xmlDSO.LastErrorCode = "-21";
			xmlDSO.LastErrorDescription = "Invalid response received from server.\n" + xmlReturnData.parseError.reason + ".";
			alertErr(xmlDSOID,"DataSource","Type5","Invalid response received from server.\n" + xmlReturnData.parseError.reason + ".");
			return;
		}			
	}
	else //---xmlHTTP---
	{		
		//alert(ActionURL);
		var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
		if ((xmlDSO.AsyncJSFunction)&&(CommandSpec.getAttribute("fpt") != 1)){
			xmlHTTP.onreadystatechange = function () {
				xmlDSO_PostReadyState_Type5(xmlHTTP,xmlReturnData,IgnoreError,FilePath,xmlDSO,xmlDSOID,CommandSpec);
			}
			xmlHTTP.Open("POST", ActionURL, true);	
			xmlHTTP.Send(xmlParameters);
			delete xmlParameters;
			return;
		}
		
		xmlHTTP.Open("POST", ActionURL, false);	
		xmlHTTP.Send(xmlParameters);
		delete xmlParameters;
		var ResponseText = xmlHTTP.responseText;
		xmlReturnData.loadXML(ResponseText);
	}
	var ReturnXML = xmlReturnData.xml;	

	var arrFormParts = FilePath.split("/");
	var arrExtension = arrFormParts[arrFormParts.length-1].split(".")


	if((ReturnXML.length == 0)&&(!IgnoreError)){
		var ErrorStart = VBInstring(ResponseText, '<font face="Verdana,Arial,Helvetica,sans-serif" color=#FF0000>');		
		var ErrorEnd = VBInstring(ResponseText, "</ul><p>");
		var ErrorString = ResponseText.substring(ErrorStart - 1, ErrorEnd - 1) + "</font>";
		document.all("divForm1_SizeCalculator").innerHTML = ErrorString;
		xmlDSO.LastErrorCode = "-587";
		xmlDSO.LastErrorDescription = (document.all("divForm1_SizeCalculator").innerText != "") ? document.all("divForm1_SizeCalculator").innerText : "Malformed XML returned.";
		if (arrExtension[arrExtension.length-1].toLowerCase() != "asp" && arrExtension[arrExtension.length-1].toLowerCase() != "php") {
			if (window.confirm("An error has occured. Click OK to view the error details, or CANCEL to continue.")) {
				open(ActionURL,"","dialogWidth:750px;dialogHeight:550;center:yes;resizable:yes;scroll:yes;status:yes;");
				return;
			}
		}
		return;
	}	
	
	if((xmlReturnData.parseError != 0)&&(!IgnoreError)){
		xmlDSO.LastErrorCode = "-21";
		xmlDSO.LastErrorDescription = "Invalid response received from server.\n" + xmlReturnData.parseError.reason + ".";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid response received from server.\n" + xmlReturnData.parseError.reason + ".");
		return;
	}
	var DSODetails = (xmlReturnData.selectNodes("//DSODetails").length > 0)?(xmlReturnData.selectSingleNode("//DSODetails")):(null);
	if (DSODetails==null) var DSODetails = (xmlReturnData.selectNodes("//xmlDSODetails").length > 0)?(xmlReturnData.selectSingleNode("//xmlDSODetails")):(null);
	if(!DSODetails)return;		
	if (xmlReturnData.selectSingleNode("/root/DSODetails/Compressed")==null) {
		var bCompressed = (xmlReturnData.selectNodes("/root/xmlDSODetails/Compressed").length > 0)?(xmlReturnData.selectSingleNode("/root/xmlDSODetails/Compressed").text):("0");
	} else {
		var bCompressed = (xmlReturnData.selectNodes("/root/DSODetails/Compressed").length > 0)?(xmlReturnData.selectSingleNode("/root/DSODetails/Compressed").text):("0");
	}
	xmlReturnData.documentElement.removeChild(DSODetails)
	var Schema = (DSODetails.selectNodes("xmlDSO_Schema").length > 0)?(DSODetails.selectSingleNode("xmlDSO_Schema").text):("");
	xmlDSO.Schema = Schema;	
	
	if (CommandSpec.getAttribute("fpt") == 1){
		var sActiveOBJID = (DSODetails.selectNodes("xmlDSO_ActiveOBJID").length > 0)?(DSODetails.selectSingleNode("xmlDSO_ActiveOBJID").text):("");	
		xmlDSO.ActiveOBJID = sActiveOBJID;	
	}
	//----------DSO Compression Logic---------		
	if(bCompressed != "0") {
		var iStart = new Date().valueOf();
		var iStartSize = xmlReturnData.xml.length / 1024;
		var sReturnXML = xmlDSO_ExpandRecordSet(xmlDSOID, xmlReturnData, Schema);		
		xmlReturnData.loadXML(sReturnXML);
		//---Stats---
		var iEndSize = (sReturnXML.length / 1024);
		var iEnd = new Date().valueOf();	
		var iSaving = parseInt((((iEndSize - iStartSize) / iEndSize) * 100)) + "%";	
		var iCharSaving = iEndSize - iStartSize;
		var iTotalTime = (iEnd - iStart) / 1000 + " sec";
		//alert("execution time: " + iTotalTime + "\nun-compressed: " + iEndSize + "\ncompressed: " + iStartSize + "\nsaving: " + iSaving + "\nsaving size: " + iCharSaving);
		//---Stats---/
	}	
	//----------DSO Compression Logic---------/

	var TagValues = document.all(xmlDSO.HTMLControlID);
	if(TagValues.selectSingleNode("//root/Schema").text.length == 0)
		TagValues.selectSingleNode("//root/Schema").text = xmlDSO.Schema;
	
	
	PageNo = (DSODetails.selectNodes("PageNo").length > 0)?(DSODetails.selectSingleNode("PageNo").text):("");
	var BOF = (DSODetails.selectNodes("BOF").length > 0)?(DSODetails.selectSingleNode("BOF").text):("");
	var EOF = (DSODetails.selectNodes("EOF").length > 0)?(DSODetails.selectSingleNode("EOF").text):("");
	var LastErrorCode = (DSODetails.selectNodes("LastErrorCode").length > 0)?(DSODetails.selectSingleNode("LastErrorCode").text):("");
	var LastErrorDescription = (DSODetails.selectNodes("LastErrorDescription").length > 0)?(DSODetails.selectSingleNode("LastErrorDescription").text):("");
	var MaxPages = (DSODetails.selectNodes("MaxPages").length > 0)?(DSODetails.selectSingleNode("MaxPages").text):("");	
	
	xmlDSO.Schema = Schema;
	xmlDSO.LastErrorCode = LastErrorCode;
	xmlDSO.LastErrorDescription = LastErrorDescription;
	if(LastErrorCode < 0){
			debugWrite(xmlDSOID + ": " + "xmlDSO_ExecuteCMD_Type5- " + LastErrorDescription, LastErrorDescription);
	}
	CommandSpec.setAttribute("PageNo",PageNo);
	CommandSpec.setAttribute("BOF",BOF);
	CommandSpec.setAttribute("EOF",EOF);
	CommandSpec.setAttribute("MaxPages",MaxPages);
	
	//---Unescape ResultSet---
	var EscapeXML = (DSODetails.selectNodes("EscapeXML").length > 0)?(DSODetails.selectSingleNode("EscapeXML").text):("");
	if(EscapeXML == 1) {
		var iStart = new Date().valueOf();
		var arrNodes = xmlReturnData.selectNodes("/root/Record/*");
		for(var i = 0; i < arrNodes.length; i++) {
			arrNodes[i].text = unescape(arrNodes[i].text);
		}
		var iEnd = new Date().valueOf();
		//alert(iEnd - iStart);
	}
	//---Unescape ResultSet---
	
	xmlDSO.loadXML(xmlReturnData.xml);	
	xmlDSO.CreateInternalControlFields();	
	xmlDSO.RecordSeed = (xmlDSO.selectNodes("//root/Record/xmlDSO__RecordNo").length > 0)?(xmlDSO.selectSingleNode("//root/Record/xmlDSO__RecordNo").text):(1);
}

function xmlDSO_PostReadyState_Type5(xmlHTTP,xmlReturnData,IgnoreError,FilePath,xmlDSO,xmlDSOID,CommandSpec)
{
	if(xmlHTTP.readyState !=4)
		return;
	var ResponseText = xmlHTTP.responseText;
	xmlReturnData.loadXML(ResponseText);
	var ReturnXML = xmlReturnData.xml;	

	var arrFormParts = FilePath.split("/");
	var arrExtension = arrFormParts[arrFormParts.length-1].split(".")
	

	if((ReturnXML.length == 0)&&(!IgnoreError)){
		var ErrorStart = VBInstring(ResponseText, '<font face="Verdana,Arial,Helvetica,sans-serif" color=#FF0000>');		
		var ErrorEnd = VBInstring(ResponseText, "</ul><p>");
		var ErrorString = ResponseText.substring(ErrorStart - 1, ErrorEnd - 1) + "</font>";
		document.all("divForm1_SizeCalculator").innerHTML = ErrorString;
		xmlDSO.LastErrorCode = "-587";
		xmlDSO.LastErrorDescription = (document.all("divForm1_SizeCalculator").innerText != "") ? document.all("divForm1_SizeCalculator").innerText : "Malformed XML returned.";
		if (arrExtension[arrExtension.length-1].toLowerCase() != "asp" && arrExtension[arrExtension.length-1].toLowerCase() != "php") {
			if (window.confirm("An error has occured. Click OK to view the error details, or CANCEL to continue.")) {
				open(ActionURL,"","dialogWidth:750px;dialogHeight:550;center:yes;resizable:yes;scroll:yes;status:yes;");
				return;
			}
		}
		return;
	}
	if((xmlReturnData.parseError != 0)&&(!IgnoreError)){
		xmlDSO.LastErrorCode = "-21";
		xmlDSO.LastErrorDescription = "Invalid response received from server.\n" + xmlReturnData.parseError.reason + ".";
		alertErr(xmlDSOID,"DataSource","Type5","Invalid response received from server.\n" + xmlReturnData.parseError.reason + ".");
		return;
	}
	var DSODetails = (xmlReturnData.selectNodes("//DSODetails").length > 0)?(xmlReturnData.selectSingleNode("//DSODetails")):(null);
	if (DSODetails==null) var DSODetails = (xmlReturnData.selectNodes("//xmlDSODetails").length > 0)?(xmlReturnData.selectSingleNode("//xmlDSODetails")):(null);
	if(!DSODetails)return;		
	if (xmlReturnData.selectSingleNode("/root/DSODetails/Compressed")==null) {
		var bCompressed = (xmlReturnData.selectNodes("/root/xmlDSODetails/Compressed").length > 0)?(xmlReturnData.selectSingleNode("/root/xmlDSODetails/Compressed").text):("0");
	} else {
		var bCompressed = (xmlReturnData.selectNodes("/root/DSODetails/Compressed").length > 0)?(xmlReturnData.selectSingleNode("/root/DSODetails/Compressed").text):("0");
	}
	xmlReturnData.documentElement.removeChild(DSODetails)
	var Schema = (DSODetails.selectNodes("xmlDSO_Schema").length > 0)?(DSODetails.selectSingleNode("xmlDSO_Schema").text):("");
	xmlDSO.Schema = Schema;	
	
	
	//----------DSO Compression Logic---------		
	if(bCompressed != "0") {
		var iStart = new Date().valueOf();
		var iStartSize = xmlReturnData.xml.length / 1024;
		var sReturnXML = xmlDSO_ExpandRecordSet(xmlDSOID, xmlReturnData, Schema);		
		xmlReturnData.loadXML(sReturnXML);
		//---Stats---
		var iEndSize = (sReturnXML.length / 1024);
		var iEnd = new Date().valueOf();	
		var iSaving = parseInt((((iEndSize - iStartSize) / iEndSize) * 100)) + "%";	
		var iCharSaving = iEndSize - iStartSize;
		var iTotalTime = (iEnd - iStart) / 1000 + " sec";
		//alert("execution time: " + iTotalTime + "\nun-compressed: " + iEndSize + "\ncompressed: " + iStartSize + "\nsaving: " + iSaving + "\nsaving size: " + iCharSaving);
		//---Stats---/
	}	
	//----------DSO Compression Logic---------/

	var TagValues = document.all(xmlDSO.HTMLControlID);
	if(TagValues.selectSingleNode("//root/Schema").text.length == 0)
		TagValues.selectSingleNode("//root/Schema").text = xmlDSO.Schema;
	
	
	PageNo = (DSODetails.selectNodes("PageNo").length > 0)?(DSODetails.selectSingleNode("PageNo").text):("");
	var BOF = (DSODetails.selectNodes("BOF").length > 0)?(DSODetails.selectSingleNode("BOF").text):("");
	var EOF = (DSODetails.selectNodes("EOF").length > 0)?(DSODetails.selectSingleNode("EOF").text):("");
	var LastErrorCode = (DSODetails.selectNodes("LastErrorCode").length > 0)?(DSODetails.selectSingleNode("LastErrorCode").text):("");
	var LastErrorDescription = (DSODetails.selectNodes("LastErrorDescription").length > 0)?(DSODetails.selectSingleNode("LastErrorDescription").text):("");
	var MaxPages = (DSODetails.selectNodes("MaxPages").length > 0)?(DSODetails.selectSingleNode("MaxPages").text):("");	
	
	xmlDSO.Schema = Schema;
	xmlDSO.LastErrorCode = LastErrorCode;
	xmlDSO.LastErrorDescription = LastErrorDescription;
	if(LastErrorCode < 0){
			debugWrite(xmlDSOID + ": " + "xmlDSO_ExecuteCMD_Type5- " + LastErrorDescription, LastErrorDescription);
	}
	CommandSpec.setAttribute("PageNo",PageNo);
	CommandSpec.setAttribute("BOF",BOF);
	CommandSpec.setAttribute("EOF",EOF);
	CommandSpec.setAttribute("MaxPages",MaxPages);
	
	//---Unescape ResultSet---
	var EscapeXML = (DSODetails.selectNodes("EscapeXML").length > 0)?(DSODetails.selectSingleNode("EscapeXML").text):("");
	if(EscapeXML == 1) {
		var iStart = new Date().valueOf();
		var arrNodes = xmlReturnData.selectNodes("/root/Record/*");
		for(var i = 0; i < arrNodes.length; i++) {
			arrNodes[i].text = unescape(arrNodes[i].text);
		}
		var iEnd = new Date().valueOf();
		//alert(iEnd - iStart);
	}
	//---Unescape ResultSet---
	
	xmlDSO.loadXML(xmlReturnData.xml);	
	xmlDSO.CreateInternalControlFields();	
	xmlDSO.RecordSeed = (xmlDSO.selectNodes("//root/Record/xmlDSO__RecordNo").length > 0)?(xmlDSO.selectSingleNode("//root/Record/xmlDSO__RecordNo").text):(1);
	try{
		xmlDSO.AsyncJSFunction();
	}catch(err){
		alertErr("DSO","","Asyc JS Function","User Asyc JS Function #"+err.number+": "+err.description+"\n"+xmlDSO.AsyncJSFunction);
	}
}

function xmlDSO_GetParameterValue(ParamName, xmlDSOID){	
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","GetParameterValue","Invalid DataSource ID specified.");				
		return;
	}
	var xmlParameterValues = xmlDSO.Parameters;
	
	var ParameterValue = "";
	if (xmlParameterValues.selectNodes("//Parameters/Param[@Name = '" + EscapeHTML(ParamName) + "']").length > 0) {
		var xmlParameterNode = xmlParameterValues.selectSingleNode("//Parameters/Param[@Name = '" + EscapeHTML(ParamName) + "']");
		ParameterValue = xmlParameterNode.text;
	}	
	return ParameterValue;
}

function xmlDSO_SetParameterValue(ParameterName, ParameterValue, xmlDSOID){
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","SetParameterValue","Invalid DataSource ID specified.");				
		return;
	}	
	var xmlParameterValues = xmlDSO.Parameters;	
	try {
		var Parameter = (xmlParameterValues.selectNodes("//Parameters/Param[@Name = '" + EscapeHTML(ParameterName) + "']").length > 0)?(xmlParameterValues.selectSingleNode("//Parameters/Param[@Name = '" + EscapeHTML(ParameterName) + "']")):(null);		
	}
	catch(err){
		alertErr(xmlDSOID,"DataSource","GetParameterValue","Invalid Parameter details specified:\n" + err.description);
		return;
	}	
	
	if(Parameter){
		Parameter.text = ParameterValue;			
	}
	else {
		try {
			var NewParameter = xmlDSO.createNode(1, "Param", "");
			xmlParameterValues.documentElement.appendChild(NewParameter);		
			NewParameter.setAttribute("Name", ParameterName);
			NewParameter.text = ParameterValue;		
		}
		catch(err){
			alertErr(xmlDSOID,"DataSource","GetParameterValue","Invalid Parameter details specified:\n" + err.description);	
			return;
		}
	}
	return true;
}

function xmlDSO_InitCommandSpecs(xmlDSOID) {
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","InitCommandSpecs","Invalid DataSource ID specified.");
		return;
	}
	var HTMLControlID = xmlDSO.HTMLControlID;
	var xmlTagValues = document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(xmlDSOID,"DataSource","InitCommandSpecs","Invalid TagValue ID:'" + Grid.HTMLControlID + "' specified.");
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(xmlDSOID,"DataSource","InitCommandSpecs","TagValue Error: " + xmlTagValues.parseError.reason + ".");
		return;
	}
	var CommandSpecs = (xmlTagValues.selectNodes("//CommandSpecs").length > 0)?(xmlTagValues.selectSingleNode("//CommandSpecs")):(null);
	if(!CommandSpecs){
		alertErr(xmlDSOID,"DataSource","InitCommandSpecs","CommandSpec Error.");
		return;
	}
	var xmlCommandSpecs = new ActiveXObject("Microsoft.XMLDom");
	xmlCommandSpecs.async = false;
	xmlCommandSpecs.loadXML(CommandSpecs.xml);
	xmlDSO.CommandSpecs = xmlCommandSpecs;		
}

function xmlDSO_InitDefaultParameters(xmlDSOID) {
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","InitDefaultParameters","Invalid DataSource ID specified.");
		return;
	}
	var HTMLControlID = xmlDSO.HTMLControlID;
	var xmlTagValues = document.all(HTMLControlID);
	if(!xmlTagValues){
		alertErr(xmlDSOID,"DataSource","InitDefaultParameters","Invalid TagValue ID:'" + Grid.HTMLControlID + "' specified.");
		return;
	}
	if(xmlTagValues.parseError != 0){
		alertErr(xmlDSOID,"DataSource","InitDefaultParameters","TagValue Error: " + xmlTagValues.parseError.reason + ".");
		return;
	}
	var Parameters = (xmlTagValues.selectNodes("//Parameters").length > 0)?(xmlTagValues.selectSingleNode("//Parameters")):(null);
	if(!Parameters){
		alertErr(xmlDSOID,"DataSource","InitDefaultParameters","Parameter Error.");
		return;
	}	
	var xmlParameters = new ActiveXObject("Microsoft.XMLDom");
	xmlParameters.async = false;
	xmlParameters.loadXML(Parameters.xml);
	var InitQSNodes=xmlParameters.selectNodes("/Parameters/Param[@InitQS=1 || @InitQS='yes']");
	for (var i=0;i<InitQSNodes.length;i++) {
		var ParamName=InitQSNodes[i].getAttribute("Name");
		var ParamValue=(xmlRequestObject.documentElement.selectNodes("//QuerystringField[@name = '" + ParamName + "']").length > 0) ? (xmlRequestObject.documentElement.selectSingleNode("//QuerystringField[@name = '" + ParamName + "']").text) : (null);
		if (ParamValue!=null) {
			InitQSNodes[i].text=ParamValue;
		}
	}
	xmlDSO.Parameters = xmlParameters;
}

function xmlDSO_ReNumber(xmlDSOID) {
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","ReNumber","Invalid DataSource ID specified.");		
		return;
	}	
	var RecordCount = xmlDSO.documentElement.childNodes.length;		
	if(RecordCount == 0)return;
	if(!xmlDSO.selectSingleNode("//xmlDSO__RecordNo")){
		xmlDSO.CreateInternalControlFields();		
		return;
	}
	var i, RecordNoNode, arnNode;	
	xmlDSO.IgnoreCellChangeEvent = true;
	var RecordIndex = (xmlDSO.RecordSeed)?(parseInt(xmlDSO.RecordSeed)):(1);
	for(i = 0; i < RecordCount; i++){		
		RecordNoNode = xmlDSO.documentElement.childNodes(i).selectSingleNode("xmlDSO__RecordNo");
		arnNode = xmlDSO.documentElement.childNodes(i).selectSingleNode("xmlDSO__ARN");
		RecordNoNode.text = RecordIndex;
		RecordNoNode = xmlDSO.documentElement.childNodes(i);
		RecordNoNode.setAttribute("RecordNo", RecordIndex);
		arnNode.text = i + 1;
		RecordIndex = parseInt(RecordIndex + 1) ;
	}	
}

function xmlDSO_ReNumber2(xmlDSOID,iStart,iInternalFieldsAdded){
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","ReNumber","Invalid DataSource ID specified.");		
		return;
	}	
	var RecordCount = xmlDSO.documentElement.childNodes.length;		
	if(RecordCount == 0)return;
	if(!xmlDSO.selectSingleNode("//xmlDSO__RecordNo")){
		xmlDSO_CreateInternalControlFields2(xmlDSOID,iStart,iInternalFieldsAdded);		
		return;
	}
	var i, RecordNoNode, arnNode;
	
	var RecordIndex = (xmlDSO.RecordSeed)?(parseInt(xmlDSO.RecordSeed) + iStart):(iStart+1);
	for(i = iStart; i < RecordCount; i++) {
		RecordNoNode = xmlDSO.documentElement.childNodes(i).selectSingleNode("xmlDSO__RecordNo");
		arnNode = xmlDSO.documentElement.childNodes(i).selectSingleNode("xmlDSO__ARN");
		RecordNoNode.text = RecordIndex;
		RecordNoNode = xmlDSO.documentElement.childNodes(i);
		RecordNoNode.setAttribute("RecordNo", RecordIndex);
		arnNode.text = i + 1;
		RecordIndex = parseInt(RecordIndex + 1);
	}
}

function xmlDSO_CreateInternalControlFields2(xmlDSOID,iStart,iInternalFieldsAdded) {
	if (iStart==null)iStart=0
	var xmlDSO = document.all(xmlDSOID);
	if(!xmlDSO){
		alertErr(xmlDSOID,"DataSource","CreateInternalControlFields","Invalid DataSource ID specified.");
		return;
	}
	if(xmlDSO.parseError != 0){
		alertErr(xmlDSOID,"DataSource","CreateInternalControlFields","DataSource Parse Error: " + xmlDSO.parseError.reason + ".");
		return;
	}
	if(xmlDSO.documentElement.childNodes.length == 0)return;
	var root = xmlDSO.documentElement;	
	var xmlRecordCount = xmlDSO.selectNodes("//root/Record").length;
	
	var i, Record, currNode, RecordNoNode, SelectedNode, StatusNode;
	var RecordNo;
	var newNode;			
	var oRecordList = xmlDSO.selectNodes("//root/Record");
	var oRecord;
	for(i = iStart; i < oRecordList.length; i++){	
		Record = oRecordList[i];	
		RecordNoNode = xmlDSO.createNode(1, "xmlDSO__ARN", "");//---Absolute Record Number		
		Record.appendChild(RecordNoNode);
		RecordNoNode = Record.lastChild;
		RecordNoNode.text = i + 1;	
			
		RecordNoNode = xmlDSO.createNode(1, "xmlDSO__RecordNo", "");
		Record.appendChild(RecordNoNode);
		RecordNoNode = Record.lastChild;
		RecordNoNode.text = (Record.getAttribute("RecordNo"))?(Record.getAttribute("RecordNo")):(i+1);
		SelectedNode = xmlDSO.createNode(1, "xmlDSO__Selected", "");
		Record.appendChild(SelectedNode);
		SelectedNode = Record.lastChild;
		SelectedNode.text = 0;
		StatusNode = xmlDSO.createNode(1, "xmlDSO__Status", "");
		Record.appendChild(StatusNode);
		StatusNode = Record.lastChild;
		StatusNode.text = "htmlcontrols/xmldso/blank.gif";
		if (iInternalFieldsAdded!=null) {
			if ((i-iStart+1)==iInternalFieldsAdded) break;
		}
	}	
	xmlDSO.loadXML(xmlDSO.xml);	
}

function xmlDSO_SwapRecords(RecordNo1, RecordNo2, xmlDSOID) {	
	var xmlDSO = document.all(xmlDSOID);
	var x, tmpValues1 = new Array(), tmpValues2 = new Array();	
	var RecOne = xmlDSO.documentElement.childNodes(parseInt(RecordNo1) - 1);
	var RecTwo = xmlDSO.documentElement.childNodes(parseInt(RecordNo2) - 1);	
	if( (!RecOne)||(!RecTwo) )
		return false;	
	var FieldName;		
	
	for(x = 0; x < RecOne.childNodes.length; x++){
		FieldName = RecOne.childNodes(x).nodeName;		
		if ((FieldName != "xmlDSO__ARN") && (FieldName != "xmlDSO__RecordNo") && (FieldName != "RecordNo") && (FieldName != "$Text")) {
			tmpValues1[x] = RecOne.childNodes(x).text;
		}
	}	
	
	for(x = 0; x < RecTwo.childNodes.length; x++){
		FieldName = RecTwo.childNodes(x).nodeName;
		if ((FieldName != "xmlDSO__ARN") && (FieldName != "xmlDSO__RecordNo") && (FieldName != "RecordNo") && (FieldName != "$Text")) {
			tmpValues2[x] = RecTwo.childNodes(x).text;
			RecTwo.childNodes(x).text = tmpValues1[x];
		}
	}
	
	for(x = 0; x < RecOne.childNodes.length; x++) {
		FieldName = RecOne.childNodes(x).nodeName;
		if ((FieldName != "xmlDSO__ARN") && (FieldName != "xmlDSO__RecordNo") && (FieldName != "RecordNo") && (FieldName != "$Text")) {
			RecOne.childNodes(x).text = tmpValues2[x];
		}
	}
	return true;	
}

function xmlDSO_SaveToCache(sUserDataStoreName, DataSourceID) {	
	var DataSource = document.all(DataSourceID);
	if(!DataSource){
		alertErr(DataSourceID, "DataSource", "ImportData","Invalid DataSource ID:'" + DataSourceID + "' specified.");
		return false;
	}
	for (var i=0;i<DataSource.documentElement.childNodes.length;i++) {
		DataSource.documentElement.childNodes(i).removeAttribute("Status");
		for (var j=0;j<DataSource.documentElement.childNodes(i).childNodes.length;j++) {
			DataSource.documentElement.childNodes(i).childNodes(j).removeAttribute("OrigValue");		
			if (DataSource.documentElement.childNodes(i).childNodes(j).nodeName == "xmlDSO__RecordNo") {
				DataSource.documentElement.childNodes(i).childNodes(j).text = DataSource.documentElement.childNodes(i).getAttribute("RecordNo")
			}
		}		
	}	
	if (SYS__WABUserData) {
		SYS__WABUserData.setAttribute("xml",DataSource.xml);
		SYS__WABUserData.setAttribute("schema",DataSource.Schema);
		SYS__WABUserData.setAttribute("ActiveCommand",DataSource.ActiveCommand);
		SYS__WABUserData.setAttribute("ActiveCommandType",DataSource.ActiveCommandType);
		SYS__WABUserData.save("xmlDSO__" + sUserDataStoreName)
	}
}

function xmlDSO_LoadFromCache(sUserDataStoreName, DataSourceID) {	
	var DataSource = document.all(DataSourceID);
	if(!DataSource){
		alertErr(DataSourceID, "DataSource", "ImportData","Invalid DataSource ID:'" + DataSourceID + "' specified.");
		return;
	}	
	DataSource.LastErrorCode = 0;
	DataSource.LastErrorDescription = "";
	DataSource.RecordSeed = 1;
	var xslTransformation = new ActiveXObject("Microsoft.XMLDOM");
	var xmlSourceData = new ActiveXObject("Microsoft.XMLDOM");
	xslTransformation.async = false;
	xmlSourceData.async = false;
	SYS__WABUserData.load("xmlDSO__" + sUserDataStoreName)


    var sXML = SYS__WABUserData.getAttribute("xml")
	if((sXML == null) ||(sXML == "")){
		DataSource.LastErrorCode = 1000;
		DataSource.LastErrorDescription = "Invalid User Data Stored specified.";
		 if(DataSource.AsyncJSFunction){
            try{
                DataSource.AsyncJSFunction();
            }
            catch(err){
            }
        }
		return;
	}
	
	DataSource.loadXML(SYS__WABUserData.getAttribute("xml"));
	if(DataSource.parseError.errorCode != 0){
		DataSource.LastErrorCode = 1001;
		DataSource.LastErrorDescription = "Invalid XML stored in user data: " + DataSource.parseError.reason;
		if(DataSource.AsyncJSFunction){
            try{
                DataSource.AsyncJSFunction();
            }
            catch(err){
            }
        }
		return;
	}
	DataSource.Schema = SYS__WABUserData.getAttribute("schema");
	DataSource.ActiveCommand = SYS__WABUserData.getAttribute("ActiveCommand");
	DataSource.ActiveCommandType = SYS__WABUserData.getAttribute("ActiveCommandType");
	xmlDSO_InitColumnSortOrder(DataSourceID)
	delete xslTransformation;
	delete xmlSourceData;
	delete DataSource;
	
    if(DataSource.AsyncJSFunction){
        try{
            DataSource.AsyncJSFunction();
        }
        catch(err){
        }
    }
}
