



<widget name="Widget Header Script" group="" category="" description="Included at the top of all widgets displaying standard editable tables.  Sets the constants used for paging and to reload the widget depending on whether the widget is processed locally or remotely." type="Simple" Processing=3 metadata="" IncludeInViewer="false" PublicName="Widget Header Script" modified="05-15-2012 22:04:42" modifiedby="Keith-Dell2" TaskEnabled= TaskInitialStartTime= TaskIntervalType= TaskLastExecuted= TaskCatchUpMissedTasks= TaskYearsBetweenExecution= TaskMonthsBetweenExecution= TaskDaysBetweenExecution= TaskHoursBetweenExecution= TaskMinutesBetweenExecution= TaskSecondsBetweenExecution= TaskExecuteSun= TaskExecuteMon= TaskExecuteTue= TaskExecuteWed= TaskExecuteThu= TaskExecuteFri= TaskExecuteSat= TaskWindowForExecution=>
<!-- 
	<state>
		Widget Header Script State
		__widgeturl__
		__RemoteIP__
		__Client__
		__DriverName__
		__server__
		__Client__
		__filterArgs__
		__CalcStartRecord__
		__DisplayName__
		__DisplayOptions__
		__errormsg__
		__debugRemoteIP__
		__debugClient__
		__reloadurl__
		__valuesurl__
		__clientport__
		__widgeturl__
		__widgetServer__
		__resulturl__
		__processingmode__
		debug=false
	</state>
-->

<!-- This script sets constants used to reload the widget and to enable paging of the table -->
<!include type:script; commands:"
	//appendToLog("executing widget header script  Client=__Client__  remoteip=__remoteip__")
	strUrl="__widgeturl__"
	strRemoteIP=getElement("__RemoteIP__",0,":")
	strClientIP=getElement("__Client__",0,":")
	strClientPort=getElement("__Client__",1,":")
	strExternalIP=getToken("ExternalIPAddress")
	strSecurePort=getToken("GreenLight_Client_Https_Port")
	strDriverName="__DriverName__"
	strErrMsg=""

	if (startsWith("__Client__","__client"))
		strClientIP="undefined"
		strErrMsg=strErrMsg + "Missing 'Client' argument.  The external IP address of the computer requesting the widget must be passed as an argument."
	endif
	
	if (startsWith("__RemoteIP__","__remoteIP"))
		strRemoteIP="undefined"
		strErrMsg=strErrMsg + "Missing 'RemoteIP' argument.  The IP address of the computer ultimately displaying the document must be passed as an argument"
	endif
	
	if(false)
		appendToLog("Widget Header Script ServerProtocol=__serverprotocol__")
		appendToLog("Widget Header Script ClientIP=__Client__")
		appendToLog("Widget Header Script RemmoteIP=__RemoteIP__")
		appendToLog("Widget Header Script Server=__Server__")
		appendToLog("Widget Header Script WidgetURL=__WidgetURL__")
	endif
	
	sServerIP=getElement("__server__",0,":")
	if(("__RemoteIP__"<>"127.0.0.1") and (isLocalNetworkIP("__RemoteIP__")))
		//the request is being made from another machine on the local network
		//There is an issue using a secure connection from another machine on the local network.  E.g.
		//https://192.168.1.30:4447 will not work.  Could have to do with GreenLight
		intProcessingMode=3
		strProcessingMode="This widget was processed over the local network"
		strServer=getToken("InternalIPAddress")+":"+getToken("Greenlight_Client_Http_Port")
		strReloadUrl="http://"+strServer+strUrl
		strResultURL="htmlGetContent("+quote("http://__server__"+strUrl+"&remoteIP=__RemoteIP__&Client=__Client__&__filterArgs__&__DriverName__StartRecord=____DriverName___CalcStartRecord__&DisplayName=__DisplayName__&DisplayOptions=__DisplayOptions__")+")"
		strValuesUrl="http://"+strServer
	else
		if (strClientIP=strExternalIP)
			if (strRemoteIP="127.0.0.1")
				intProcessingMode=0
				strProcessingMode="This widget was processed locally and included in a document processed locally"
				strServer="127.0.0.1:"+strSecurePort
				strReloadUrl="https://__server__"+strUrl
				strResultURL="htmlGetContent("+quote("https://"+strServer+strUrl+"&remoteIP=__RemoteIP__&Client=__Client__&__filterArgs__&__DriverName__StartRecord=____DriverName___CalcStartRecord__&DisplayName=__DisplayName__&DisplayOptions=__DisplayOptions__")+")"
				strValuesUrl="https://"+strServer
			else
				intProcessingMode=2
				strProcessingMode="This widget was processed remotely and included in a document also processed remotely"
				strServer=strExternalIP+":"+strSecurePort
				strReloadUrl="https://"+strServer+strUrl
				strResultURL="htmlGetContent("+quote("https://127.0.0.1:"+strSecurePort+strUrl+"&remoteIP=__RemoteIP__&Client=__Client__&__filterArgs__&__DriverName__StartRecord=____DriverName___CalcStartRecord__&DisplayName=__DisplayName__&DisplayOptions=__DisplayOptions__")+")"
				strValuesUrl="https://"+strServer
			endif
		else
			intProcessingMode=1
			strProcessingMode="This widget was processed remotely and included in a document procesed locally"
			strServer=strExternalIP+":"+strSecurePort
			strReloadUrl="https://127.0.0.1:"+strClientPort+"/?Network=GreenLight&ID=getXmlHttpRequest&url=https://__server__"+replaceSubstring(strUrl,"&","|")
			strResultURL="htmlGetContent("+quote("https://127.0.0.1:"+strSecurePort+strUrl+"&remoteIP=__RemoteIP__&Client=__Client__&__filterArgs__&__DriverName__StartRecord=____DriverName___CalcStartRecord__&DisplayName=__DisplayName__&DisplayOptions=__DisplayOptions__")+")"
			strValuesUrl="https://127.0.0.1:"+strClientPort+"/?Network=GreenLight&ID=getXmlHttpRequest&url=https://"+strServer
		endif
	endif

	strWidgetServer=""

	strErrMsg=replaceSubstring(replaceSubstring(strErrMsg,"[",char(0x3c)),"]",char(0x3e))

	strResult=char(0x3c)+"constant name:__server__"+char(0x3b)+" value:"+quote(strServer)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__errormsg__"+char(0x3b)+" value:"+quote(strErrMsg)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__debugRemoteIP__"+char(0x3b)+" value:"+quote(strRemoteIP)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__debugClient__"+char(0x3b)+" value:"+quote(strClientIP)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__reloadurl__"+char(0x3b)+" value:"+quote(strReloadUrl)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__valuesurl__"+char(0x3b)+" value:"+quote(strValuesUrl)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__clientport__"+char(0x3b)+" value:"+quote(strClientPort)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__widgeturl__"+char(0x3b)+" value:"+quote(strUrl)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__widgetServer__"+char(0x3b)+" value:"+quote(strWidgetServer)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__resulturl__"+char(0x3b)+" value:"+quote(strResultURL)+char(0x3e)
	strResult=strResult + char(0x3c)+"constant name:__processingmode__"+char(0x3b)+" value:"+quote(strProcessingMode)+char(0x3e)
	
	scriptSetResult(strResult)
">

<!-- Display error message -->
<div style="color:red; font-weight:bold">__ErrorMsg__</div>

<!-- Debugging information -->
<conditional expression:boolean("__debug__")>
	<table class="basic1">
		<tr>
			<td colspan="7">Processing: __processingmode__</td>
		</tr>
		<tr>
			<td>Processed By: {ExternalIPAddress}</td>
			<td>Remote IP: __debugRemoteIP__</td>
			<td>Server: __server__</td>
			<td>Client: __debugClient__</td>
			<td>WidgetServer: __WidgetServer__</td>
		</tr>
		<tr>
			<td colspan="7">ReloadUrl: __reloadurl__</td>
		</tr>
		<tr>
			<td colspan="7">ResultUrl: __resulturl__</td>
		</tr>
		<tr>
			<td colspan="7">ValuesUrl: __valuesurl__ (The url used to retrieve fields when editing a record)</td>
		</tr>
	</table>
</conditional>
</widget><widget name="calendar-js" group="Javascript" category="" description="Javascript functions for calendar used to select dates" type="" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Calendar-Js" modified="11-09-2015 21:32:23" modifiedby="Thnikpad" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=09-03-2015 15:23:24:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
// Tigra Calendar v4.0.3 (01/12/2009) American (mm/dd/yyyy)
// http://www.softcomplex.com/products/tigra_calendar/
// Public Domain Software... You're welcome.

/*	Adds a calendar icon given a form name and control name 
	This function is used to dynamically create calendar icons for a form
	that has been loaded using an http request.  
*/
function addCalendarIcon(f,c) {
	new tcal({'formname':f,'controlname':c});
};

// default settins
var A_TCALDEF={
	'months' : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
	'weekdays' : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
	'yearscroll': true, // show year scroller
	'weekstart': 0, // first day of week: 0-Su or 1-Mo
	'centyear'  : 70, // 2 digit years less than 'centyear' are in 20xx, othewise in 19xx.
	//'imgpath' : 'http://www.aspect-software.net/Aspect7/images/' // directory with calendar images
	//'imgpath' : '{@getImageUrl("aspect_software_net_core","",true)+"calendar/"}'
	'imgpath' : '__RequestServer__/?Network=GreenLight&ID=getImage&filename={@replaceSubstring(getToken("packageurl_aspect_software_net_core"),"\","/")}core/doc/images/calendar/'
}
// date parsing function
function f_tcalParseDate (s_date) {
	//allow for time to be included after date
	var Int1=s_date.indexOf(" ");
	if (Int1>=0) s_date=s_date.substring(0,s_date.indexOf(" "));
	
	var re_date=/^\s*(\d{1,2})\/(\d{1,2})\/(\d{2,4})\s*$/;
	if (!re_date.exec(s_date)) {
		re_date=/^\s*(\d{1,2})\-(\d{1,2})\-(\d{2,4})\s*$/;
		if (!re_date.exec(s_date)) {
			return alert ("Invalid date: '" + s_date + "'.\nAccepted format is mm/dd/yyyy.")
		};
	};
	var n_day=Number(RegExp.$2),
		n_month=Number(RegExp.$1),
		n_year=Number(RegExp.$3);
	
	if (n_year < 100)
		n_year +=(n_year < this.a_tpl.centyear ? 2000 : 1900);
	if (n_month < 1 || n_month > 12)
		return alert ("Invalid month value: '" + n_month + "'.\nAllowed range is 01-12.");
	var d_numdays=new Date(n_year, n_month, 0);
	if (n_day > d_numdays.getDate())
		return alert("Invalid day of month value: '" + n_day + "'.\nAllowed range for selected month is 01 - " + d_numdays.getDate() + ".");

	return new Date (n_year, n_month - 1, n_day);
}
// date generating function
function f_tcalGenerDate (d_date) {
	return (
		 (d_date.getMonth() < 9 ? '0' : '') + (d_date.getMonth() + 1) + "-"
		+ (d_date.getDate() < 10 ? '0' : '') + d_date.getDate() + "-"
		+ d_date.getFullYear()
	);
}

function calendarExists(strFormName,strControlName)
{
	if (!window.A_TCALS) return(false);
	
	for (var i=0;i<window.A_TCALS.length;i++) {
		if ((window.A_TCALS[i].a_cfg.formname.toUpperCase()==strFormName.toUpperCase()) && (window.A_TCALS[i].a_cfg.controlname.toUpperCase()==strControlName.toUpperCase())) return(true);
	};
	
	return(false);
};

// implementation
function tcal (a_cfg, a_tpl) {
	//appendToLog("tcal: initialize"+a_cfg.formname+","+a_cfg.controlname,false,true);
	// apply default template if not specified
	if (!a_tpl)
		a_tpl=A_TCALDEF;

	// register in global collections
	if (!window.A_TCALS)
		window.A_TCALS=[];
	if (!window.A_TCALSIDX)
		window.A_TCALSIDX=[];
	
	this.s_id=a_cfg.id ? a_cfg.id : A_TCALS.length;
	window.A_TCALS[this.s_id]=this;
	window.A_TCALSIDX[window.A_TCALSIDX.length]=this;
	
	// assign methods
	this.f_show=f_tcalShow;
	this.f_hide=f_tcalHide;
	this.f_toggle=f_tcalToggle;
	this.f_update=f_tcalUpdate;
	this.f_relDate=f_tcalRelDate;
	this.f_parseDate=f_tcalParseDate;
	this.f_generDate=f_tcalGenerDate;
	
	// create calendar icon
	this.s_iconId='tcalico_' + this.s_id;
	this.e_icon=f_getElement(this.s_iconId);
	if (!this.e_icon) {
		if (false) {
			//Original code
			document.write('<img src="' + a_tpl.imgpath + 'cal.gif" id="' + this.s_iconId + '" onclick="A_TCALS[\'' + this.s_id + '\'].f_toggle()" class="tcalIcon" alt="Open Calendar" />');
			this.e_icon=f_getElement(this.s_iconId);
		}
		else {
			//This code places the calendar icon after the form element regardless of where the <script> is located to create the icon 
			this.e_icon=document.createElement("img");
			this.e_icon.src=a_tpl.imgpath + "cal.gif";
			this.e_icon.id=this.s_iconId;
			this.e_icon.onclick=Function("A_TCALS['" + this.s_id + "'].f_toggle()");
			this.e_icon.setAttribute("class","tcalIcon");
			this.e_icon.alt="Open Calendar"
			//note: an error will occur if two forms share the same name
			var eInput=document.forms[a_cfg.formname].elements[a_cfg.controlname];
			insertAfter(eInput,this.e_icon);
		};
	}

	// save received parameters
	this.a_cfg=a_cfg;
	this.a_tpl=a_tpl;
	
	return(this);
}

function f_tcalShow (d_date) {
	// find input field
	if (!this.a_cfg.controlname)
		throw("TC: control name is not specified");
	if (this.a_cfg.formname) {
		var e_form=document.forms[this.a_cfg.formname];
		if (!e_form)
			throw("TC: form '" + this.a_cfg.formname + "' can not be found");
		this.e_input=e_form.elements[this.a_cfg.controlname];
	}
	else
		this.e_input=f_getElement(this.a_cfg.controlname);

	if (!this.e_input || !this.e_input.tagName || this.e_input.tagName !='INPUT')
		throw("TC: element '" + this.a_cfg.controlname + "' does not exist in "
			+ (this.a_cfg.formname ? "form '" + this.a_cfg.controlname + "'" : 'this document'));

	// dynamically create HTML elements if needed
	this.e_div=f_getElement('tcal');
	if (!this.e_div) {
		this.e_div=document.createElement("DIV");
		this.e_div.id='tcal';
		document.body.appendChild(this.e_div);
	}
	else {
		this.e_div.style.display="block";
	};
	
	this.e_shade=f_getElement('tcalShade');
	if (!this.e_shade) {
		this.e_shade=document.createElement("DIV");
		this.e_shade.id='tcalShade';
		document.body.appendChild(this.e_shade);
	}
	else {
		this.e_div.style.display="block";
	};

	this.e_iframe=f_getElement('tcalIF')
	if (b_ieFix && !this.e_iframe) {
		this.e_iframe=document.createElement("IFRAME");
		this.e_iframe.style.filter='alpha(opacity=0)';
		this.e_iframe.id='tcalIF';
		this.e_iframe.src=this.a_tpl.imgpath + 'pixel.gif';
		document.body.appendChild(this.e_iframe);
	}
	else {
		this.e_div.style.display="block";
	};
	
	// hide all calendars
	f_tcalHideAll();

	// generate HTML and show calendar
	this.e_icon=f_getElement(this.s_iconId);
	if (!this.f_update())
		return;

	this.e_div.style.visibility='visible';
	this.e_shade.style.visibility='visible';
	if (this.e_iframe)
		this.e_iframe.style.visibility='visible';

	// change icon and status
	if(this.e_icon) {
		this.e_icon.src=this.a_tpl.imgpath + 'no_cal.gif';
		this.e_icon.title='Close Calendar';
	};
	this.b_visible=true;
}

/*	Called externally to close the calendar if it is visible */
function f_tcalHideCalendar() {
	if (window.A_TCALS) {
		if (A_TCALS['0'].b_visible) A_TCALS['0'].f_toggle();
	};
};

function f_tcalHide (n_date) {
	if (n_date) {
		//save time if it's included after the date
		var str=this.e_input.value;
		var Int1=str.indexOf(" ");
		var str2="";
		if (Int1>=0) str2=str.substring(Int1+1);
		this.e_input.value=this.f_generDate(new Date(n_date))+" "+str2;
		
		//execute the onChange event if there is one
		var s=this.e_input.getAttribute("onChange");
		if(s) {
			if(s.toUpperCase().indexOf("SUBMITDIALOGCELL")>=0) {
				submitDialogCell(this.e_input);
			}
			else if(s.toUpperCase().indexOf("SUBMITTABLECELL")>=0) {
				submitTableCell(this.e_input);
			};
		};
	};

	// no action if not visible
	if (!this.b_visible)
		return;

	// hide elements
	if (this.e_iframe)
		this.e_iframe.style.visibility='hidden';
	if (this.e_shade)
		this.e_shade.style.visibility='hidden';
	this.e_div.style.visibility='hidden';
	
	// change icon and status
	this.e_icon=f_getElement(this.s_iconId);
	this.e_icon.src=this.a_tpl.imgpath + 'cal.gif';
	this.e_icon.title='Open Calendar';
	this.b_visible=false;
}

function f_tcalToggle () {
	return this.b_visible ? this.f_hide() : this.f_show();
}

function f_tcalUpdate (d_date) {
	
	var d_today=this.a_cfg.today ? this.f_parseDate(this.a_cfg.today) : f_tcalResetTime(new Date());
	var d_selected=this.e_input.value==''
		? (this.a_cfg.selected ? this.f_parseDate(this.a_cfg.selected) : d_today)
		: this.f_parseDate(this.e_input.value);

	// figure out date to display
	if (!d_date)
		// selected by default
		d_date=d_selected;
	else if (typeof(d_date)=='number')
		// get from number
		d_date=f_tcalResetTime(new Date(d_date));
	else if (typeof(d_date)=='string')
		// parse from string
		this.f_parseDate(d_date);
		
	if (!d_date) return false;

	// first date to display
	var d_firstday=new Date(d_date);
	d_firstday.setDate(1);
	d_firstday.setDate(1 - (7 + d_firstday.getDay() - this.a_tpl.weekstart) % 7);
	
	var a_class, s_html='<table class="ctrl"><tbody><tr>'
		+ (this.a_tpl.yearscroll ? '<td' + this.f_relDate(d_date, -1, 'y') + ' title="Previous Year"><img src="' + this.a_tpl.imgpath + 'prev_year.gif" /></td>' : '')
		+ '<td' + this.f_relDate(d_date, -1) + ' title="Previous Month"><img src="' + this.a_tpl.imgpath + 'prev_mon.gif" /></td><th>'
		+ this.a_tpl.months[d_date.getMonth()] + ' ' + d_date.getFullYear()
			+ '</th><td' + this.f_relDate(d_date, 1) + ' title="Next Month"><img src="' + this.a_tpl.imgpath + 'next_mon.gif" /></td>'
		+ (this.a_tpl.yearscroll ? '<td' + this.f_relDate(d_date, 1, 'y') + ' title="Next Year"><img src="' + this.a_tpl.imgpath + 'next_year.gif" /></td></td>' : '')
		+ '</tr></tbody></table><table><tbody><tr class="wd">';

	//This is a hack.  Somehow, https://127.0.0.1:port is sometimes added to the start of the image path above even though this.a_tpl.imgpath does not contain it
	//This hack removes https://127.0.0.1:port from https://127.0.0.1:port/http://www.aspect...  Be aware that the port number may change and that it will not
	//necessarily be 4 digits.
	if (false) {
		var Int1=s_html.toUpperCase().indexOf("HTTPS://127.0.0.1");
		if (Int1>=0) {
			var Int2=s_html.toUpperCase().indexOf("/",Int1+8);
			var str=s_html.substring(Int1,Int2+1);
			s_html=replaceAllSubstrings(s_html,str,"");
		};
			
		//This hack cleans up http (versus https above)
		var Int1=s_html.toUpperCase().indexOf("HTTP://127.0.0.1");
		if (Int1>=0) {
			var Int2=s_html.toUpperCase().indexOf("/",Int1+7);
			var str=s_html.substring(Int1,Int2+1);
			//alert("Int1="+Int1+" Int2="+Int2+" str="+str);
			s_html=replaceAllSubstrings(s_html,str,"");
		};
	};
	
	// print weekdays titles
	for (var i=0; i < 7; i++)
		s_html +='<th>' + this.a_tpl.weekdays[(this.a_tpl.weekstart + i) % 7] + '</th>';
	s_html +='</tr>' ;

	// print calendar table
	var n_date, n_month, d_current=new Date(d_firstday);
	while (d_current.getMonth()==d_date.getMonth() ||
		d_current.getMonth()==d_firstday.getMonth()) {
	
		// print row heder
		s_html +='<tr>';
		for (var n_wday=0; n_wday < 7; n_wday++) {

			a_class=[];
			n_date=d_current.getDate();
			n_month=d_current.getMonth();

			// other month
			if (d_current.getMonth() !=d_date.getMonth())
				a_class[a_class.length]='othermonth';
			// weekend
			if (d_current.getDay()==0 || d_current.getDay()==6)
				a_class[a_class.length]='weekend';
			// today
			if (d_current.valueOf()==d_today.valueOf())
				a_class[a_class.length]='today';
			// selected
			if (d_current.valueOf()==d_selected.valueOf())
				a_class[a_class.length]='selected';

			s_html +='<td onclick="A_TCALS[\'' + this.s_id + '\'].f_hide(' + d_current.valueOf() + ')"' + (a_class.length ? ' class="' + a_class.join(' ') + '">' : '>') + n_date + '</td>'

			d_current.setDate(++n_date);
			while (d_current.getDate() !=n_date && d_current.getMonth()==n_month) {
				d_current.setHours(d_current.getHours + 1);
				d_current=f_tcalResetTime(d_current);
			}
		}
		// print row footer
		s_html +='</tr>';
	}
	s_html +='</tbody></table>';
	
	// update HTML, positions and sizes
	this.e_div.innerHTML=s_html;

	var n_width=this.e_div.offsetWidth;
	var n_height=this.e_div.offsetHeight;
	var n_top=f_getPosition (this.e_icon, 'Top') + this.e_icon.offsetHeight;
	var n_left=f_getPosition (this.e_icon, 'Left') - n_width + this.e_icon.offsetWidth;
	if (n_left < 0) n_left=0;
	
	this.e_div.style.left=n_left + 'px';
	this.e_div.style.top=n_top + 'px';

	this.e_shade.style.width=(n_width + 8) + 'px';
	this.e_shade.style.left=(n_left - 1) + 'px';
	this.e_shade.style.top=(n_top - 1) + 'px';
	
	if (false) {
		this.e_shade.innerHTML=b_ieFix
			? '<table><tbody><tr><td rowspan="2" colspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_tr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td height="' + (n_height - 7) + '" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_mr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td width="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bl.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bm.png\', sizingMethod=\'scale\');" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_br.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tbody></table>'
			: '<table><tbody><tr><td rowspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td rowspan="2"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7"><img src="' + this.a_tpl.imgpath + 'shade_tr.png"></td></tr><tr><td background="' + this.a_tpl.imgpath + 'shade_mr.png" height="' + (n_height - 7) + '"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td><img src="' + this.a_tpl.imgpath + 'shade_bl.png"></td><td background="' + this.a_tpl.imgpath + 'shade_bm.png" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td><img src="' + this.a_tpl.imgpath + 'shade_br.png"></td></tr><tbody></table>';
	}
	else {
		var str=b_ieFix
			? '<table><tbody><tr><td rowspan="2" colspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_tr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td height="' + (n_height - 7) + '" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_mr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td width="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bl.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bm.png\', sizingMethod=\'scale\');" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_br.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tbody></table>'
			: '<table><tbody><tr><td rowspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td rowspan="2"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7"><img src="' + this.a_tpl.imgpath + 'shade_tr.png"></td></tr><tr><td background="' + this.a_tpl.imgpath + 'shade_mr.png" height="' + (n_height - 7) + '"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td><img src="' + this.a_tpl.imgpath + 'shade_bl.png"></td><td background="' + this.a_tpl.imgpath + 'shade_bm.png" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td><img src="' + this.a_tpl.imgpath + 'shade_br.png"></td></tr><tbody></table>';

		//This is a hack to remove https://127.0.0.1:port from https://127.0.0.1:port/http://www.aspect...  in img src (see above)
		if (false) {
			var Int1=str.toUpperCase().indexOf("HTTPS://127.0.0.1");
			if (Int1>=0) {
				var Int2=str.toUpperCase().indexOf("/",Int1+8);
				var str=str.substring(Int1,Int2+1);
				str=replaceAllSubstrings(str,str,"");
			};
				
			//This hack cleans up http (versus https above)
			var Int1=str.toUpperCase().indexOf("HTTP://127.0.0.1");
			if (Int1>=0) {
				var Int2=str.toUpperCase().indexOf("/",Int1+7);
				var str=str.substring(Int1,Int2+1);
				//alert("Int1="+Int1+" Int2="+Int2+" str="+str);
				str=replaceAllSubstrings(str,str,"");
			};
		};
		
		this.e_shade.innerHTML=str;
	};
	
	if (this.e_iframe) {
		this.e_iframe.style.left=n_left + 'px';
		this.e_iframe.style.top=n_top + 'px';
		this.e_iframe.style.width=(n_width + 6) + 'px';
		this.e_iframe.style.height=(n_height + 6) +'px';
	}
	return true;
}

function f_getPosition (e_elemRef, s_coord) {
	var n_pos=0, n_offset,
		e_elem=e_elemRef;

	while (e_elem) {
		n_offset=e_elem["offset" + s_coord];
		n_pos +=n_offset;
		e_elem=e_elem.offsetParent;
	}
	// margin correction in some browsers
	if (b_ieMac)
		n_pos +=parseInt(document.body[s_coord.toLowerCase() + 'Margin']);
	else if (b_safari)
		n_pos -=n_offset;
	
	e_elem=e_elemRef;
	while (e_elem !=document.body) {
		n_offset=e_elem["scroll" + s_coord];
		if (n_offset && e_elem.style.overflow=='scroll')
			n_pos -=n_offset;
		e_elem=e_elem.parentNode;
	}
	return n_pos;
}

function f_tcalRelDate (d_date, d_diff, s_units) {
	var s_units=(s_units=='y' ? 'FullYear' : 'Month');
	var d_result=new Date(d_date);
	d_result['set' + s_units](d_date['get' + s_units]() + d_diff);
	if (d_result.getDate() !=d_date.getDate())
		d_result.setDate(0);
	return ' onclick="A_TCALS[\'' + this.s_id + '\'].f_update(' + d_result.valueOf() + ')"';
}

function f_tcalHideAll () {
	if (window.A_TCALSIDX) {
		for (var i=0; i < window.A_TCALSIDX.length; i++)
			window.A_TCALSIDX[i].f_hide();
	};
}

function f_tcalResetTime (d_date) {
	d_date.setHours(0);
	d_date.setMinutes(0);
	d_date.setSeconds(0);
	d_date.setMilliseconds(0);
	return d_date;
}

f_getElement=document.all ?
	function (s_id) { return document.all[s_id] } :
	function (s_id) { return document.getElementById(s_id) };

if (document.addEventListener)
	window.addEventListener('scroll', f_tcalHideAll, false);
if (window.attachEvent)
	window.attachEvent('onscroll', f_tcalHideAll);
	
// global variables
var s_userAgent=navigator.userAgent.toLowerCase(),
	re_webkit=/WebKit\/(\d+)/i;
var b_mac=s_userAgent.indexOf('mac') !=-1,
	b_ie5=s_userAgent.indexOf('msie 5') !=-1,
	b_ie6=s_userAgent.indexOf('msie 6') !=-1 && s_userAgent.indexOf('opera')==-1;
var b_ieFix=b_ie5 || b_ie6,
	b_ieMac=b_mac && b_ie5,
	b_safari=b_mac && re_webkit.exec(s_userAgent) && Number(RegExp.$1) < 500;
</widget><widget name="calendar-css" group="css" category="" description="Stylesheet for calendar used to select dates." modified="10-09-2010 01:23:15" modifiedby="Keith">
/* calendar icon */
img.tcalIcon {cursor: pointer;	margin-left: 1px; vertical-align: middle;}

/* calendar container element */
div#tcal {position: absolute; visibility: hidden;	 z-index: 10002;	width: 158px; padding: 2px 0 0 0;}

/* all tables in calendar */
div#tcal table {width: 100%; border: 1px solid silver; border-collapse: collapse; background-color: white;}

/* navigation table */
div#tcal table.ctrl {border-bottom: 0;}

/* navigation buttons */
div#tcal table.ctrl td {width: 15px; height: 20px;}

/* month year header */
div#tcal table.ctrl th {background-color: white; color: black; border: 0;}

/* week days header */
div#tcal th {border: 1px solid silver; border-collapse: collapse; text-align: center; padding: 3px 0; font-family: tahoma, verdana, arial; font-size: 10px; background-color: gray; color: white;}

/* date cells */
div#tcal td {border: 0; border-collapse: collapse; text-align: center; padding: 2px 0; font-family: tahoma, verdana, arial; font-size: 11px; width: 22px; cursor: pointer;}

/* date highlight in case of conflicting settings order here determines the priority from least to most important */
div#tcal td.othermonth {color: silver;}
div#tcal td.weekend {background-color: #ACD6F5;}
div#tcal td.today {border: 1px solid red;}
div#tcal td.selected {	background-color: #FFB3BE;}

/* iframe element used to suppress windowed controls in IE5/6 */
iframe#tcalIF {position: absolute; visibility: hidden; z-index: 10000; border: 0;}

/* transparent shadow */
div#tcalShade {position: absolute; visibility: hidden; z-index: 10001;}
div#tcalShade table {border: 0; border-collapse: collapse; width: 100%;}
div#tcalShade table td {border: 0; border-collapse: collapse; padding: 0;}
</widget>
</widget><widget name="Filter Dialog" group="Display Options" category="" description="Used to include standard display option fields for sorting and filtering a report.  This widget is included as text inside the filter form for a table." type="" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Filter Dialog" modified="03-03-2017 13:31:41" modifiedby="Thnikpad2" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=02-07-2016 10:42:42:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
<!-- 
	<state>
		Filter Dialog State
		__debug__
		__server__
		__ParentDocID__
		__ParentWidget__
		__WidgetID__
		__DisplayOptions__
		__Display__
		__Client__
		__DisplayReportName__
		__display_widget_library_location__
		__HorzDriverName__
		__VertDriverName__		
		__Sort1__
		__SortOrder1__
		__Subtotal1__
		__Sort2__
		__SortOrder2__
		__Subtotal2__
		__Sort3__
		__SortOrder3__
		__Subtotal3__
		__SubtotalsOnly__
		__GrandTotals__
		__ChartType__
		__ChartSeries__
		__ReloadURL__
		__FieldsSelected__
		__display_widget_library_location__
		debug=false
	</state>
-->

<!--
	Significant changes were made to the widget in 8-20-2011.  A backup prior to the changes is available in 
		WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Filter Dialog (before change on 8-20-2011).html
		
	Originally, the select options for the fields available and sort fields were created by a script at the start of this widget and
	recorded as a constant.  A script in each select tag used the constant to create the list for the select tag and to set the
	starting value.  All of the replaceSubstring calls were taking a lot of time, consuming 25% of the total time required to
	process a document (Customer Profiles in particular).
	
	This was all replaced with htmlSelect to create each select tag.  Even though there are multiple calls to get the collection,
	it is still considerably faster, requiring less than 4% of the total time now.  
	
	Separate sort lists are used depending on whether a horizontal consolidated driver is being processed.  Conditionals around
	each select tag address this.
-->
<!!conditional expression:(boolean("__debug__"))>
	<h2>Debugging for Filter Dialog: Debug=__debug__</h2>
	<table>
		<tr>
			<td>ParentDocID</td>
			<td>__ParentDocID__</td>
		</tr>
		<tr>
			<td>ParentWidget</td>
			<td>__ParentWidget__</td>
		</tr>
	</table>
</conditional>

<!-- Save display as...  This div is initially hidden and displayed when the user selects Save As -->
<div ID="Save_Display_As__WidgetID__" class="save_display_as" style="display:none; width:350px; height:150px;" print='false'>
	<table>
		<tr>
			<td>Name</td>
			<td><input type='text' name='save_display_as' value="" style="width:250px"></td>
		</tr>
		<tr>
			<td>Location</td>
			<td>
				<select name="save_display_as_location" style="width:250px">
					<conditional expression:"len(getToken('Aspect_Support_Report_Widgets_User'))>0">
						<option value="aspect">Aspect</option>
					</conditional>
					<option value="company">Company</option>
					<option value="local">This Computer</options>
				</select>
			</td>
		</tr>
	</table>
	<br>
	<input type="button" name="SaveDisplayAs" value="Save" onClick="javascript:saveDisplayAs('__WidgetID__','__ParentDocID__','__ParentWidget__',false)"> 
	<input type="button" name="cacelSaveAs" value="Cancel" onClick="javascript:setVisible('Save_Display_As__WidgetID__',false)"> 
</div>

<!-- Confirm delete.  This div is initially hidden and displayed when the user selects Delete -->
<div ID="Delete_Display__WidgetID__" class="delete_display" print='false'>
	<p>Delete this display: <span ID="Confirm_Delete_Message__WidgetID__"></span>?</p>
	<br>
	<input type="button" name="DeleteDisplay" value="Delete" onClick="javascript:deleteDisplay('__WidgetID__',false)"> 
	<input type="button" name="cacelDelete" value="Cancel" onClick="javascript:setVisible('Delete_Display__WidgetID__',false)"> 
</div>

<!-- Status message.  This div is initially hidden and displayed when a display is being saved or deleted -->
<div ID="Display_Options_Status__WidgetID__" class="display_options_status" print='false'>
	<br>
	<span ID="Display_Options_Status_Message__WidgetID__"></span>
	<br>
	<!--
		<input type="button" ID="Display_Options_Status_Button" name="status_button1" value="Close" onClick="setVisible('Display_Options_Status__WidgetID__',false)">
	-->
</div>

<!-- Select display, Refresh, Custom and Print buttons -->
<div ID="Filter__WidgetID__" class="filter_table" style="display:{@if("__DisplayOptions__"="false","none","block")}; width:700px;" noprint="true" print='false'>
	<table class='form'>
		<tr>
			<td>Display</td>
<!!!include type:script; commands:"
	bPlaceholder=true
	//appendToLog("Getting display names  Display=__Display__ ParentDocID=__ParentDocID__ ParentWidget=__ParentWidget__")
">
			<td><!!!include type:expression; expression:"htmlSelect(Widget_Names_For_Report_Filters,'Display','__Display__','onChange='+quote('selectDisplay('+char(0x27)+'__WidgetID__'+char(0x27)+char(0x2c)+'true)'),'','Metadata='+quote('__ParentDocID__'+'_'+'__ParentWidget__'))"></td>
			<!--
			<td><input type="button" name="Refresh" value="Refresh" onClick="refreshDisplay('__WidgetID__','Filter__WidgetID__')"></td>
			<td><input type="button" name="Custom" value="Custom" onClick="editFilter('__WidgetID__',this)"></td>
			-->

			<!-- If the document is local, use the icons in the greenlight package.  Otherwise, point to earthlink -->
			
			<!-- These were the original images, prior to 4/8/2012.  Needed to support access over the local network -->
			<!--
			<td><img src="<!!!include type:expression; expression:if(startsWith("__Client__",getToken("ExternalIPAddress")),getImageUrl("greenlight","refresh.png",true),"http://www.aspect-software.net/Aspect7/images/refresh.png")>" onClick="refreshDisplay('__WidgetID__','Filter__WidgetID__')"></td>
			<td><img src="<!!!include type:expression; expression:if(startsWith("__Client__",getToken("ExternalIPAddress")),getImageUrl("greenlight","customize.png",true),"http://www.aspect-software.net/Aspect7/images/customize.png")>" onClick="editFilter('__WidgetID__',this)"></td>
			-->
			
			<!-- This script loads the images from the local network, the local machine or aspect-software.net.  The !! is used so the server argument gets replaced before the script runs -->
			<!!include type:script; commands:"
				sIP=getElement("__server__",0,":")
				if((sIP<>"127.0.0.1") and (isLocalNetworkIP(sIP)))
					//document is accessed over the local network
					sImagePath="http://__server__/?network=greenlight&id=getImage&filename="+getToken("packageurl_greenlight")+"/doc/images/"
				elseif(startsWith("__Client__",getToken("ExternalIPAddress")))
					//document is accessed on the local machine
					sImagePath=getImageUrl("greenlight","",true)
				else
					//document is accessed from outside the local network
					sImagePath="http://www.aspect-software.net/Aspect7/images/"
				endif
				
				scriptSetResult(char(0x3c)+"constant name:__imagepath__"+char(0x3b)+" value:"+sImagePath+char(0x3e))
			">
			
			<td><img src="__imagepath__refresh.png" onClick="refreshDisplay('__WidgetID__','Filter__WidgetID__')"></td>
			<td><img src="__imagepath__customize.png" onClick="editFilter('__WidgetID__',this)"></td>
		</tr>
	</table>
</div>

<!--	This span defines where the custom speed filter fields will be inserted -->
<div ID="SpeedFilter__WidgetID__" style="margin:0px; padding:0px; display:{@if("__DisplayOptions__"="false","none","block")};" print='false'>
	<span ID="InsertSpeedFields__WidgetID__"></span>
</div>
	
<div ID="Customize__WidgetID__" class="customize_display" style="display:none; width:500px; height:500px;" print='false'>

	<!-- Save, save as and delete buttons -->
	<table class='form'>
		<tr>
			<td>Display</td>
			<td style="width:300px">
				<!-- Note: If this widget is included with !include -->
				<span ID="display_name___WidgetID__"><!!include type:expression; expression:"if(startsWith('__DisplayReportName__','__'),'',replaceSubstring('__DisplayReportName__','__ParentDocID_____ParentWidget__',''))"></span>
				(<span ID="__WidgetID__location">__display_widget_library_location__</span>)
			</td>
			<td><input type="button" name="save" value="Save" onClick="javascript:saveDisplay('__WidgetID__','__ParentDocID__','__ParentWidget__')"></td>
			<td><input type="button" name="saveAs" value="Save As" onClick="javascript:saveDisplayAs('__WidgetID__','__ParentDocID__','__ParentWidget__',true)"></td>
			<td><input type="button" name="btndelete" value="Delete" onClick="javascript:deleteDisplay('__WidgetID__',true)"></td>
		</tr>
	</table>
	<hr>
	<!-- Sort & Subtotal -->
	<table class='form'>
		<tr>
			<td>Sort 1</td>
			<td>
				<!conditional expression; expression:"(startsWith('__HorzDriverName__','__')) and (startsWith('__VertDriverName__','__'))">
					<!!!include type:expression; expression:"htmlSelect(StructureFields5WithSelect,'sort1','__Sort1__','save='+quote('aspect'),'',lookup(ResourceDriversLookupStructure,__driverID__))">
				</conditional>
				<!conditional expression; expression:"(not(startsWith('__HorzDriverName__','__')))">
					<!!!include type:expression; expression:"htmlHorzDriverSelect('__HorzDriverName__','sort1','__Sort1__','save='+quote('aspect'),true)">
				</conditional>
				<!conditional expression; expression:"(not(startsWith('__VertDriverName__','__')))">
					<!!!include type:expression; expression:"htmlVertDriverSelect('__VertDriverName__','sort1','__Sort1__','save='+quote('aspect'),true)">
				</conditional>
			</td>
			<td><!!!include type:expression; expression:"htmlSelect(41,'SortOrder1','__SortOrder1__','save='+quote('aspect'),'','')"></td>
			<td><input type='checkbox' name='subtotal1' save='aspect' <!!!include type:expression; expression:if(boolean("__Subtotal1__"),"checked="+quote("checked"),"")>> Subtotal</td>
		</tr>
		<tr>
			<td>Sort 2</td>
			<td>
				<!conditional expression; expression:"(startsWith('__HorzDriverName__','__')) and (startsWith('__VertDriverName__','__'))">
					<!!!include type:expression; expression:"htmlSelect(StructureFields5WithSelect,'sort2','__Sort2__','save='+quote('aspect'),'',lookup(ResourceDriversLookupStructure,__driverID__))">
				</conditional>
				<!conditional expression; expression:"(not(startsWith('__HorzDriverName__','__')))">
					<!!!include type:expression; expression:"htmlHorzDriverSelect('__HorzDriverName__','sort2','__Sort2__','save='+quote('aspect'),true)">
				</conditional>
				<!conditional expression; expression:"(not(startsWith('__VertDriverName__','__')))">
					<!!!include type:expression; expression:"htmlVertDriverSelect('__VertDriverName__','sort2','__Sort2__','save='+quote('aspect'),true)">
				</conditional>
			</td>
			<td><!!!include type:expression; expression:"htmlSelect(41,'SortOrder2','__SortOrder2__','save='+quote('aspect'),'','')"></td>
			<td><input type='checkbox' name='subtotal2' save='aspect' <!!!include type:expression; expression:if(boolean("__Subtotal2__"),"checked="+quote("checked"),"")>> Subtotal</td>
		</tr>
		<tr>
			<td>Sort 3</td>
			<td>
				<!conditional expression; expression:"(startsWith('__HorzDriverName__','__')) and (startsWith('__VertDriverName__','__'))">
					<!!!include type:expression; expression:"htmlSelect(StructureFields5WithSelect,'sort3','__Sort3__','save='+quote('aspect'),'',lookup(ResourceDriversLookupStructure,__driverID__))">
				</conditional>
				<!conditional expression; expression:"(not(startsWith('__HorzDriverName__','__')))">
					<!!!include type:expression; expression:"htmlHorzDriverSelect('__HorzDriverName__','sort3','__Sort3__','save='+quote('aspect'),true)">
				</conditional>
				<!conditional expression; expression:"(not(startsWith('__VertDriverName__','__')))">
					<!!!include type:expression; expression:"htmlVertDriverSelect('__VertDriverName__','sort3','__Sort3__','save='+quote('aspect'),true)">
				</conditional>
			</td>
			<td><!!!include type:expression; expression:"htmlSelect(41,'SortOrder3','__SortOrder3__','save='+quote('aspect'),'','')"></td>
			<td><input type='checkbox' name='subtotal3' save='aspect' <!!!include type:expression; expression:if(boolean("__Subtotal3__"),"checked="+quote("checked"),"")>> Subtotal</td>
		</tr>
	</table>
	
	<br>
	<input type='checkbox' name='SubtotalsOnly' save='aspect' <!!!include type:expression; expression:if(boolean("__SubtotalsOnly__"),"checked="+quote("checked"),"")>> Subtotals Only
	<input type='checkbox' name='GrandTotals' save='aspect' <!!!include type:expression; expression:if(boolean("__GrandTotals__"),"checked="+quote("checked"),"")>> Show Grand Totals
	&nbsp;&nbsp;&nbsp;Chart <!!!include type:expression; expression:"htmlSelect(GreenLight_Chart_Type,'ChartType','__ChartType__','save='+quote('aspect'),'','')">
	<conditional expression:(not(startsWith("__HorzDriverName__","__")))>
		<!!!include type:expression; expression:"htmlSelect(GreenLight_Chart_Series_Selection,'ChartSeries','__ChartSeries__','save='+quote('aspect'),'','')">
	</conditional>

	<!-- This div contains any custom fields specific to the table.  It is used so the section can be hidden if there are no hidden fields defined -->
	<div ID="CustomFieldsContainer__WidgetID__" style="padding:0px; margin:0px; display:{@if("__DisplayOptions__"="false","none","block")};">
		<hr style="color:#dddddd">
		<!--	This span defines where the custom fields will be inserted -->
		<span ID="InsertCustomFields__WidgetID__"></span>
	</div>
	<br>
	<hr style="color:#dddddd">
	
	<!-- Select Fields -->
	<table class="form">
		<tr>
			<td>Fields Available</td>
			<td>&nbsp;</td>
			<td>Fields Selected</td>
		</tr>
		<tr>
			<td valign='top'>
				<select class='field_list' name="FieldsAvailable" multiple='multiple'></select><br>
			</td>
			<td valign='top' align='center'>
				<input type="button" style="width:70px" name="add" value="Add" onClick="javascript:addSelectedFields('__WidgetID__')"><br>
				<input type="button" style="width:70px" name="remove" value="Remove" onClick="javascript:removeSelectedFields('__WidgetID__')"><br>
				<br>
				<input type="button" style="width:70px" name="up" value="Up" onClick="javascript:moveFieldsUp('__WidgetID__')">
				<input type="button" style="width:70px" name="down" value="Down" onClick="javascript:moveFieldsDown('__WidgetID__')">
			</td>
			<!-- 	FieldSelected are initialized by the javascript initializeReport() function when the widget is first loaded.  The Aspect initialization script
				sets the field list in the hidden field named "starting_fields_list" below.  The js function copies those fields to this select box -->
			<td valign='top'>
				<select class='field_list' name="FieldsSelected" multiple='multiple'></select><br>
			</td>
		</tr>
	</table>
	
	<!-- Okay / Cancel Buttons -->
	<div style="margin-top:5px; padding:0px;">
		<input type='button' name='submit' value=' Ok ' onClick="javascript:refreshDisplay('__WidgetID__','Filter__WidgetID__')">
		<input type='button' name='submit' value='Cancel' onClick="javascript:closeEditFilter('__WidgetID__')">
		<input type="hidden" name="url" value="__ReloadURL__">
	</div>

	<!-- This is a hidden select box containing the full list of fields.  It is used to populate the available fields select box -->
	<!conditional expression; expression:"(startsWith('__HorzDriverName__','__')) and (startsWith('__VertDriverName__','__'))">
		<!!!include type:expression; expression:"htmlSelect(StructureFields5,'AllFields','','style='+quote('display:none')+' save='+quote('aspect'),'',lookup(ResourceDriversLookupStructure,__driverID__))">
	</conditional>
	<!conditional expression; expression:"(not(startsWith('__HorzDriverName__','__')))">
		<!!!include type:expression; expression:"htmlHorzDriverSelect('__HorzDriverName__','AllFields','','style='+quote('display:none')+' save='+quote('aspect'),false)">
	</conditional>
	<!conditional expression; expression:"(not(startsWith('__VertDriverName__','__')))">
		<!!!include type:expression; expression:"htmlVertDriverSelect('__VertDriverName__','AllFields','','style='+quote('display:none')+' save='+quote('aspect'),false)">
	</conditional>

	<!-- A hidden field containing the original field list when the document is first displayed.  This value comes from loading the default display or the display
		passed to the widget -->
	<input type="hidden" name="starting_fields_list" value="__FieldsSelected__">
	<input type="hidden" name="starting_fields_initialized" value="false">
	<input type="hidden" name="starting_fields_WidgetID" value="__WidgetID__">
	
	<!-- 	A hidden field containing the address of the server providing the displays.  This is necessary when a server-side widget is included in a page since the 
		list of displays is taken from the server during processing.  The displays must be taken from the server because it is not possible to pass a local display
		to a server-side widget.  The Save As function needs to be modified to disallow saving of a display for a server-side widget anyplace other than the server -->
	<input type="hidden" name="display_server" value="__server__">
	
	<!-- 	A hidden field containing the location of the widget library the currently selected widget belongs to - aspect, company or local.  This field
		is initialized by a script when the document loads and updated by javascript whenever a different display is selected -->
	<input type="hidden" name="display_widget_library_location" value="__display_widget_library_location__">
	
	<!--	Hidden fields containing the user name/password used to save widgets to the Aspect server -->
	<input type="hidden" name="Aspect_Support_Report_Widgets_User" value="{Aspect_Support_Report_Widgets_User}">
	<input type="hidden" name="Aspect_Support_Report_Widgets_Pass" value="{Aspect_Support_Report_Widgets_Pass}">
	
	<!--	Provides the name of the currently selected display for when the page is refreshed.  Set whenever a new display is selected and
		when Save As is used to create a new widget -->
	<input type="hidden" name="DisplayName" value="__DisplayReportName__">
	
</div>

</widget><widget name="Widget Initialization Script" group="Display Options" category="" description="Reads the display options passed to the widget or a default if none is specified and initializes constants used to initialize fields in the customize dialog." type="Simple" Processing=0 metadata="" IncludeInViewer="false" PublicName="Widget Initialization Script" modified="05-15-2012 22:11:49" modifiedby="Keith-Dell2" TaskEnabled= TaskInitialStartTime= TaskIntervalType= TaskLastExecuted= TaskCatchUpMissedTasks= TaskYearsBetweenExecution= TaskMonthsBetweenExecution= TaskDaysBetweenExecution= TaskHoursBetweenExecution= TaskMinutesBetweenExecution= TaskSecondsBetweenExecution= TaskExecuteSun= TaskExecuteMon= TaskExecuteTue= TaskExecuteWed= TaskExecuteThu= TaskExecuteFri= TaskExecuteSat= TaskWindowForExecution=>
<!-- 
	<state> 
		Widget Initialization Script State
		__Metadata__
		__DisplayName__
		__debug__
		__Display__
		__DisplayReportName__
		__display_widget_library_location__
		__FieldsSelected__
		__Sort1__
		__Sort2__
		__Sort3__
		__Subtotal1__
		__Subtotal2__
		__Subtotal3__
		__subtotalargs1__
		__subtotalargs2__
		__subtotalargs3__
		__subtotalargs4__
	</state>
-->

<!-- 	This script reads the display passed to the widget or a default display if none was specified 
	The display is passed in the parameter DisplayName using the name of the widget containing the filter as the value (e.g. DisplayName=check details1)
	The document ID of the document being viewed is used to filter the widgets to those applicable to the current document and the name completes the filter.
-->

<!--	01/04/2011 - changed from !include to standard include because constants defined were not available in the driver table otherwise.
	For example, the subtotalsonly constant was not available -->
<include type:script; commands:"
	strResult=""

	intRecord=-1
	sDisplayName="__DisplayName__"
	
	//remove the Aspect:, Company:, and Local: prefix from the display name
	sDisplayName=replaceSubstring(sDisplayName,"Aspect: ","")
	sDisplayName=replaceSubstring(sDisplayName,"Company: ","")
	sDisplayName=replaceSubstring(sDisplayName,"Local: ","")
	
	strFilter="(Metadata="+quote("__Metadata__")+")"
	if (not(startsWith(sDisplayName,"__")))
		strFilter="(Metadata="+quote("__Metadata__")+")" + " and (Name="+quote(sDisplayName)+")"
		intRecord=driverFindRecordAbsolute(drvWidgetMetadata,0,strFilter)

		//If the display was not found, add the metadata to the display name.  Display names include the metadata plus the name so
		//multiple drivers can use widgets with the same name.  The user is insulated from the metadata in the name by removing
		//it before it is displayed to the user.  This additional search is included to support displays created before the
		//metadata was added to the display name
		if((intRecord<0) and (not(startsWith(strName,"__Metadata__"))))
			strFilter="(Metadata="+quote("__Metadata__")+")" + " and (Name="+quote("__Metadata__"+sDisplayName)+")"
		endif
	endif

	if(__debug__) 
		appendToLog("Begin Widget Initialization Script")
		appendToLog("Metadata=__Metadata__")
		appendToLog("DisplayName=__DisplayName__")
		appendToLog("Filter="+strFilter)
	endif

	intRecord=if(intRecord<0,driverFindRecordAbsolute(drvWidgetMetadata,0,strFilter),intRecord)
	
	if (intRecord<0) 
		if(__debug__)
			appendToLog("Cannot locate display: __DisplayName__.  Loading default.")
		endif
		strFilter="(Metadata="+quote("__Metadata__")+")"
		intRecord=driverFindRecordAbsolute(drvWidgetMetadata,0,strFilter)
		if(__debug__)
			appendToLog("Looking for default display.  Filter="+strFilter+" Record="+intRecord)
			appendToLog("Default record="+intRecord)
		endif
	else
		if(__debug__)
			appendToLog("Found display named "+driverGetFieldAbsolute(drvWidgetMetadata,"name",intRecord))
		endif
	endif
	
	if (intRecord>=0)
		strID=driverGetFieldAbsolute(drvWidgetMetadata,"ID",intRecord)
		strName=driverGetFieldAbsolute(drvWidgetMetadata,"Name",intRecord)
		//appendToLog("strID="+strID+" strName="+strName)
		strResult=strResult + char(0x3c)+"constant name:__Display__"+char(0x3b)+" value:"+quote(strID)+char(0x3e)+char(10)
		strResult=strResult + char(0x3c)+"constant name:__DisplayReportName__"+char(0x3b)+" value:"+quote(strName)+char(0x3e)+char(10)
		
		//set the constant used to indicate where the display is located - aspect, company or local widget library
		strLocation=scriptExec(GreenLight_getDisplayWidgetInfo,true,"WidgetID="+strID)
		strResult=strResult + char(0x3c)+"constant name:__display_widget_library_location__"+char(0x3b)+" value:"+quote(strLocation)+char(0x3e)+char(10)

		//initialize values used to calculate subtotal parameters for driver include
		//These will not be defined when the document is first loaded and need to be read from the display widget
		bSubtotalsOnly=false
		bSubtotal1=false
		bSubtotal2=false
		bSubtotal3=false
		bGrandTotal=false
		strSort1	=0
		strSort2	=0
		strSort3	=0
		
		strContent=scriptExec(Aspect_Common_getCachedWidget_By_ID,true,"WidgetID="+strID)
		if(__Debug__) 
			appendToLog("Display contents: "+strContent)
		endif
		strContent=replaceSubstring(strContent,char(10),"")
		strContent=replaceSubstring(strContent,char(13),"")
		strContent=replaceSubstring(strContent,char(9),"")
		//appendToLog("strContent="+strContent)
		cElements=getElementCount(strContent,"|")
		Cntr=0
		while(Cntr<cElements)
			arStr=getElement(strContent,Cntr,"|")
			if (getElementCount(arStr,"=")>1)
				strName=getElement(arStr,0,"=")
				strValue=getElement(arStr,1,"=")
				if(__Debug__)
					appendToLog("Name="+strName+" Value="+strValue)
				endif
				
				//add any additional elements to the value in case the value contains an equals symbol
				Cntr2=2
				while (Cntr2<getElementCount(arStr,"="))
					strValue=strValue + char(0x3D)+getElement(arStr,Cntr2,"=")
					Cntr2=Cntr2+1
				endwhile
				
				strValue=tokenizeSpecialChars(strValue,false)
				
				//appendToLog("Name: "+strName+" value: "+strValue)
				if (strName="FieldsSelected")
					if ((true) or (startsWith("__FieldsSelected__","__")))
						strFields=""
						cFields=getElementCount(strValue)
						cntrFields=0
						while (cntrFields<cFields)
							strFields=addElement(strFields,getElement(getElement(strValue,cntrFields),0,"^"))
							cntrFields=cntrFields + 1
						endwhile
						strResult=strResult + char(0x3c)+"constant name:__FieldsSelected__"+char(0x3b)+" value:"+quote(strFields)+char(0x3e)+char(10)
					endif
				else
					strName=substring(strName,6)
					//appendToLog("Set "+strName+"="+strValue)
					strResult=strResult + char(0x3c)+"constant name:__"+strName+"__"+char(0x3b)+" value:"+quote(strValue)+char(0x3e)+char(10)
					
					if (strName="SubtotalsOnly")
						strResult=strResult + char(0x3c)+"constant name:__"+ShowDetails+"__"+char(0x3b)+" value:"+quote(not(boolean(strValue)))+char(0x3e)+char(10)
						bSubtotalsOnly=true
					endif
						
					if (strName="GrandTotals")
						bGrandTotal=boolean(strValue)
					endif
					
					if (strName="Sort1")
						strSort1=initConstant("__Sort1__",strValue)
					endif
					if (strName="Sort2")
						strSort2=initConstant("__Sort2__",strValue)
					endif
					if (strName="Sort3")
						strSort3=initConstant("__Sort3__",strValue)
					endif

					if (strName="Subtotal1")
						bSubtotal1=initConstant("__Subtotal1__",strValue)
					endif
					if (strName="Subtotal2")
						bSubtotal2=initConstant("__Subtotal2__",strValue)
					endif
					if (strName="Subtotal3")
						bSubtotal3=initConstant("__Subtotal3__",strValue)
					endif
				endif
			endif
			Cntr=Cntr + 1
		endwhile

		//initialize constants for subtotals
		strSubtotal1=""
		strSubtotal2=""
		strSubtotal3=""
		strSubtotal4=""

		//The two methods below are used to set the subtotal fields.
		
		//The first method only allows a subtotal to be enabled when the previous subtotal has been enabled.  E.g. subtotal for sort2 cannot be
		//enabled if the subtotal for sort1 is not enabled.  This makes sure that lists including details will always be sorted in a way that 
		//makes sense to the user
		
		//The second method allows subtotals regardless of whether previous subtotals are enabled or not.  It can be used when details are not
		//included.  It is necessary in some cases - for example, a user may want to subtotal a timeclock by job code but sort by total pay.
		//With the first method, the user couldn't sort by total pay and then sort/subtotal by job code since the first subtotal isn't enabled.
		
		//The compromise is to use the first method when subtotals only is not enabled and the second when it is.
		
		if(not(bSubtotalsOnly))
			//details are included, so subtotals must be enabled sequentially - can't have subtotal for sort2 without subtotal for sort1
			cSubtotal=0
			if((bSubtotal1="true") and (strSort1<>"0"))
				cSubtotal=1
				if((bSubtotal2="true") and (strSort2<>"0"))
					cSubtotal=2
					if((bSubtotal3="true") and (strSort3<>"0"))
						cSubtotal=3
					endif
				endif
			endif

			if (cSubtotal>0)
				if (cSubtotal=1)
					strSubtotal1="Sum"+char(0x2c)+"strSort1"
				elseif (cSubtotal=2)
					strSubtotal1="Sum"+char(0x2c)+"strSort1"+char(0x2c)+"strSort2"
					strSubtotal2="Sum"+char(0x2c)+"strSort1"
				elseif (cSubtotal=3)
					strSubtotal1="Sum"+char(0x2c)+"strSort1"+char(0x2c)+"strSort2"+char(0x2c)+"strSort3"
					strSubtotal2="Sum"+char(0x2c)+"strSort1"+char(0x2c)+"strSort2"
					strSubtotal3="Sum"+char(0x2c)+"strSort1"
				endif
				if (bGrandTotal) 
					strSubtotal4="Sum"
				endif
			endif
		else
			//details are not included, so subtotals can be selected independent of other subtotals
			arSubTtlField=""
			if((bSubtotal1="true") and (strSort1<>"0"))
				arSubTtlField=addElement(arSubTtlField,strSort1)
			endif
			if((bSubtotal2="true") and (strSort2<>"0"))
				arSubTtlField=addElement(arSubTtlField,strSort2)
			endif
			if((bSubtotal3="true") and (strSort3<>"0"))
				arSubTtlField=addElement(arSubTtlField,strSort3)
			endif

			cSubtotal=getElementCount(arSubTtlField)
			if (cSubtotal>0)
				if (cSubtotal=1)
					strSubtotal1="Sum"+char(0x2c)+getElement(arSubTtlField,0)
				elseif (cSubtotal=2)
					strSubtotal1="Sum"+char(0x2c)+getElement(arSubTtlField,0)+char(0x2c)+getElement(arSubTtlField,1)
					strSubtotal2="Sum"+char(0x2c)+getElement(arSubTtlField,0)
				elseif (cSubtotal=3)
					strSubtotal1="Sum"+char(0x2c)+getElement(arSubTtlField,0)+char(0x2c)+getElement(arSubTtlField,1)+char(0x2c)+getElement(arSubTtlField,2)
					strSubtotal2="Sum"+char(0x2c)+getElement(arSubTtlField,0)+char(0x2c)+getElement(arSubTtlField,1)
					strSubtotal3="Sum"+char(0x2c)+getElement(arSubTtlField,0)
				endif
				if (bGrandTotal) 
					strSubtotal4="Sum"
				endif
			endif
		endif

		if (true) or (len(strSubtotal1)>0) 
			strResult=strResult + char(0x3c)+"constant name:__subtotalargs1__"+char(0x3b)+" value:"+quote(strSubtotal1)+char(0x3e)+char(10)
		endif
		if (true) or (len(strSubtotal2)>0) 
			strResult=strResult + char(0x3c)+"constant name:__subtotalargs2__"+char(0x3b)+" value:"+quote(strSubtotal2)+char(0x3e)+char(10)
		endif
		if (true) or (len(strSubtotal3)>0) 
			strResult=strResult + char(0x3c)+"constant name:__subtotalargs3__"+char(0x3b)+" value:"+quote(strSubtotal3)+char(0x3e)+char(10)
		endif
		if (true) or (len(strSubtotal4)>0) 
			strResult=strResult + char(0x3c)+"constant name:__subtotalargs4__"+char(0x3b)+" value:"+quote(strSubtotal4)+char(0x3e)+char(10)
		endif
		
		//appendToLog("strID="+strID)
	else
		bPlaceholder=false
		//appendToLog("Cannot locate default display or display named "+quote("__DisplayName__"))
	endif
	
	if(__Debug__)
		appendToLog("Widget initialization script strResult="+strResult)
	endif
	scriptSetResult(strResult)
">

<!-- Debugging information -->
<conditional expression:boolean("__debug__")>
	<h2>Debugging for widget initialization script</h2>
	<table class="basic1">
		<tr>
			<td>Metadata</td>
			<td>__Metadata__</td>
		</tr>
		<tr>
			<td>DisplayName</td>
			<td>__DisplayName__</td>
		</tr>
	</table>
</conditional>
</widget><widget name="Printer Wrapper" group="" category="" description="Page used to create printer-friendly content window." type="Simple" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Printer Wrapper" modified="04-23-2016 00:35:49" modifiedby="Thnikpad" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=03-09-2016 22:20:07:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
<!--!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"-->
<!-- Document Description  -->
<!-- Initialize constants -->

<!--
<constant name:__Server__; value:"{@if(len(getToken(ExternalIPAddress))>0,if((getToken(ExternalIPAddress)="__RemoteIP__") or ("__RemoteIP__"="127.0.0.1"),"127.0.0.1:"+getToken(GreenLight_Client_Https_Port),getToken(ExternalIPAddress)+":"+getToken(GreenLight_Client_Https_Port)),"127.0.0.1:"+getToken(GreenLight_Client_Https_Port))}";>
<constant name:__IsLocalServer__; value:"{@if((__RemoteIP__="127.0.0.1") or (getToken(ExternalIPAddress)="__RemoteIP__"),true,false)}">
-->
<html>

<head>
	<meta http-equiv="X-UA-Compatible" content="IE=Edge;chrome=1" >
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">		
	<meta name="viewport" content="user-scalable=yes,width=device-width,height=device-height,initial-scale=1.0,maximum-scale=6.0,minimum-scale=1.0"/>
	<script ID="JSPrint">
		<conditional expression:false>
		=======================================================================
		Formats all view containers that have not already been formatted or all
		view containers regardless of whether they've been formatted if bScreenResized
		is true.  
		=======================================================================
		</conditional>
		function formatViewContainers(bScreenResized) {
			var arDiv=document.getElementsByTagName("div");
			for(var i=0;i<arDiv.length;i++) {
				if(arDiv[i].getAttribute("ViewContainer")) {
					if((bScreenResized) || (!arDiv[i].getAttribute("ViewContainerFormated"))) {
						formatViewContainer(arDiv[i]);
					};
				};
			};
		};

		<conditional expression:false>
		=======================================================================
		This function sets the width and height of embedded divs in the view 
		container.  
		=======================================================================
		</conditional>
		function formatViewContainer(ID) {
			var eViewContainer=document.getElementById(ID);
			if(!eViewContainer) eViewContainer=ID;
			if(!eViewContainer) return;
			//if(!eViewContainer.offsetWidth==0) return;
			
			//get an array of all the different top positions in use
			var arTop=new Array();
			var arRowHeight=new Array();
			var arRowWidth=new Array();
			var MaxRowWidth=0;
			var arDiv=eViewContainer.getElementsByTagName("div");

			for(var i=0;i<arDiv.length;i++) {
				if(arDiv[i].getAttribute("ViewContainerItem")=="true") {
					//abort if the height of the div is 0, indicating that it is hidden.
					if(arDiv[i].offsetHeight==0) return;
					arDiv[i].style.width="auto";
					arDiv[i].style.height="auto";
					//arDiv[i].style.borderTop="1px solid black";
					//arDiv[i].style.borderLeftColor="black";
				};
			};

			for(var i=0;i<arDiv.length;i++) {
				if(arDiv[i].getAttribute("ViewContainerItem")=="true") {
					var Top=arDiv[i].offsetTop;
					var Height=arDiv[i].offsetHeight;
					var Width=arDiv[i].offsetWidth;
					var Index=arTop.indexOf(Top);
					if(Index<0) {
						Index=arTop.length;
						arTop[Index]=Top;
						arRowHeight[Index]=Height;
						arRowWidth[Index]=Width;
					}
					else {
						arRowHeight[Index]=Math.max(arRowHeight[Index],Height);
						arRowWidth[Index] +=Width;
					};
					MaxRowWidth=Math.max(MaxRowWidth,arRowWidth[Index]);
					arDiv[i].setAttribute("ViewContainerRow",Index);
				};
			};
			
			//set the height of each element on a row to the max height of any element on the row
			for(var i=0;i<arDiv.length;i++) {
				if(arDiv[i].getAttribute("ViewContainerItem")=="true") {
					var Row=arDiv[i].getAttribute("ViewContainerRow");
					arDiv[i].style.height=arRowHeight[Row]+"px";
				};
			};

			//make all rows the same width
			for(var Row=0;Row<arTop.length;Row++) {
				//get the current width of the row
				var CurrentWidth=0;
				var arDivsInRow=new Array();
				for(var i=0;i<arDiv.length;i++) {
					if(arDiv[i].getAttribute("ViewContainerItem")=="true") {
						if(arDiv[i].getAttribute("ViewContainerRow")==Row) {
							CurrentWidth +=arDiv[i].offsetWidth;
							arDivsInRow[arDivsInRow.length]=arDiv[i];

							//turn off top border for rows after row 0
							if(Row>0) arDiv[i].style.borderTop="none";
						};
					};
				};
				
				//Determine the number of pixels to add
				var PixelsToAdd=MaxRowWidth-CurrentWidth;
				if(PixelsToAdd>0) {
					var PixelsPerDiv=Math.floor(PixelsToAdd/arDivsInRow.length);
					var Remainder=PixelsToAdd - (PixelsPerDiv*arDivsInRow.length);
					for(var i=0;i<arDivsInRow.length;i++) {
						var W=PixelsPerDiv;
						if(i==arDivsInRow.length-1) W +=Remainder;
						arDivsInRow[i].style.width=(arDivsInRow[i].offsetWidth+W)+"px";
					};
				};

				//turn off left  border for columns after column 0
				for(var i=1;i<arDivsInRow.length;i++) {
					//boxes get out of alignment on the far right border if the left border is set to none.
					//Instead, set the color to transparent
					arDivsInRow[i].style.borderLeftColor="transparent";
				};
			};

			eViewContainer.setAttribute("ViewContainerFormated","true");
		};
	</script>
</head>

<body class="widgetcontainer" style="width:100%;padding:10px;" onLoad="self.print()" onresize="formatViewContainers(true)">
</widget><widget name="Compound Widget Viewer" group="Compound Widgets" category="" description="Accepts the document ID and name of a compound widget and generates the html to include all widgets in the compound widget." type="Simple" Processing=3 metadata="" IncludeInViewer="false" PublicName="Compound Widget Viewer" modified="03-17-2011 21:40:27" modifiedby="Keith">
<constant name:__Server__; value:"{@if(len(getToken(ExternalIPAddress))>0,if((getToken(ExternalIPAddress)="__RemoteIP__") or ("__RemoteIP__"="127.0.0.1"),"127.0.0.1:"+getToken(GreenLight_Client_Https_Port),getToken(ExternalIPAddress)+":"+getToken(GreenLight_Client_Https_Port)),"127.0.0.1:"+getToken(GreenLight_Client_Https_Port))}";>

<!-- Viewer for compound widgets
Params:
	CWDocID - The document ID of the compound widget in the widget metadata driver
	CWName - The name of the compound widget in the widget metadata driver
-->

<include type:script; commands:"
	appendToLog("Begin compound widget viewer script  CWDocID=__CWDocID__ CWName=__CWName__")
	//get the contents of the compound widget
	strContent=scriptExec(Aspect_Common_getCachedWidget,true,"DocumentID=__CWDocID__&Widget=__CWName__&Text=true")
	strContent=replaceSubstring(strContent,"\\"+"whash\\","#")
	
	//remove any leading cr or lf.  If not removed, the first value (orientation) will not be read properly
	strContent=replaceSubstring(strContent,char(10),"")
	strContent=replaceSubstring(strContent,char(13),"")
	//appendToLog("strContent="+strContent)
	
	//get the orientation
	strOrientation=getElementValue(strContent,"orientation","|")
	
	//get an array of widget document ID's and names included in the compound widget
	arWidgetDocID=""
	arWidgetName=""
	arWidgetBorder=""
	arWidgetWidth=""
	arWidgetHeight=""
	arWidgetBackground=""
	arWidgetStyle=""
	arWidgetTitle=""
	arWidgetMargin=""
	arInterval=""
	arRefresh=""
	arParams=""
	arIsIframe=""
	Cntr=1
	while (Cntr<=5)
		str=getElementValue(strContent,"Widget"+Cntr,"|")
		if ((len(str)>0) and (str<>"0"))
			Int1=pos("_",str)
			if (Int1>0)
				strID=substring(str,0,Int1)
				strName=substring(str,Int1+1)
				arWidgetDocID=addElement(arWidgetDocID,strID)
				arWidgetName=addElement(arWidgetName,strName)
				
				//determine if it a page that should go in an iframe
				strText=scriptExec(Aspect_Common_getCachedWidget,true,"DocumentID="+strID+"&Widget="+strName+"&Text=true")
				if (pos(char(0x3c)+"html"+char(0x3e),strText)>=0)
					arIsIframe=addElement(arIsIframe,"true")
				else
					arIsIframe=addElement(arIsIframe,"false")
				endif
				
				//get  border true/false
				str=getElementValue(strContent,"border"+Cntr,"|")
				if (len(str)=0)
					str="false";
				endif

				if (str="true")
					arWidgetBorder=addElement(arWidgetBorder,"solid")
				else
					arWidgetBorder=addElement(arWidgetBorder,"none")
				endif
				
				//get width
				str=getElementValue(strContent,"width"+Cntr,"|")
				if (len(str)=0)
					str="auto"
				else
					if ((pos("px",str)<0) and (pos("%",str)<0))
						str=str + "px"
					endif
				endif
				arWidgetWidth=addElement(arWidgetWidth,str)

				//get height
				str=getElementValue(strContent,"height"+Cntr,"|")
				if (len(str)=0)
					str="auto"
				endif
				arWidgetHeight=addElement(arWidgetHeight,str)
				
				//background color
				str=getElementValue(strContent,"background"+Cntr,"|")
				if (len(str)=0)
					str="white"
				endif
				arWidgetBackground=addElement(arWidgetBackground,str)
				
				//style
				//Extract any margin settings so they can be applied to the containing div.  This is done so the title lines up with the widget when a margin is specified
				str=getElementValue(strContent,"style"+Cntr,"|")
				str=replaceSubstring(str,"\\"+"wequals\\","=")
				str=replaceSubstring(str,"\\"+"whash\\","#")
				str=replaceSubstring(str,"\\"+"wquote\\",char(0x22))
				str=replaceSubstring(str,"\\"+"wlt\\",char(0x3c))
				str=replaceSubstring(str,"\\"+"wgt\\",char(0x3e))
				strStyleMargin=""
				strStyleOther=""
				cStyles=getElementCount(str," ")
				cntrStyle=0
				while (cntrStyle<cStyles)
					strStyle=getElement(str,cntrStyle," ")
					if (pos("margin",strStyle)>=0)
						strStyleMargin=strStyleMargin + strStyle
					else
						strStyleOther=strStyleOther + strStyle
					endif
					cntrStyle=cntrStyle + 1
				endwhile
				if (len(strStyleOther)=0)
					strStyleOther=" "
				endif
				if (len(strStyleMargin)=0)
					strStyleMargin=" "
				endif
				arWidgetStyle=addElement(arWidgetStyle,strStyleOther)
				arWidgetMargin=addElement(arWidgetMargin,strStyleMargin)
				
				//Title
				str=getElementValue(strContent,"title"+Cntr,"|")
				str=replaceSubstring(str,"\\"+"wequals\\","=")
				str=replaceSubstring(str,"\\"+"whash\\","#")
				str=replaceSubstring(str,"\\"+"quote\\","&#34"+char(0x3b))
				str=replaceSubstring(str,"\\"+"wlt\\",char(0x3c))
				str=replaceSubstring(str,"\\"+"wgt\\",char(0x3e))
				str=replaceSubstring(str,"\\"+"wamp\\","&amp"+char(0x3b))
				str=replaceSubstring(str,char(0x27),"&#39"+char(0x3b))
				if(len(str)=0)
					str=" "
				endif
				arWidgetTitle=addElement(arWidgetTitle,str)
				
				//Interval
				str=getElementValue(strContent,"interval"+Cntr,"|")
				if ((len(str)>0) and (value(str)>"0"))
					arRefresh=addElement(arRefresh,"true")
					arInterval=addElement(arInterval,str)
				else
					arRefresh=addElement(arRefresh,"false")
					arInterval=addElement(arInterval,0)
				endif
				
				//Params
				str=getElementValue(strContent,"Params"+Cntr,"|")
				str=replaceSubstring(str,"\\"+"wequals\\","=")
				str=replaceSubstring(str,"\\"+"whash\\","#")
				str=replaceSubstring(str,"\\"+"wquote\\","&#34"+char(0x3b))
				str=replaceSubstring(str,"\\"+"wlt\\",char(0x3c))
				str=replaceSubstring(str,"\\"+"wgt\\",char(0x3e))
				str=replaceSubstring(str,"\\"+"wamp\\","&")
				str=replaceSubstring(str,char(0x27),"&#39"+char(0x3b))
				if (len(str)=0)
					str=" "
				endif
				arParams=addElement(arParams,str,char(0xff))
			endif
		endif
		Cntr=Cntr + 1
	endwhile
	
	//set constants
	
	//orientation
	strResult=char(0x3c)+"constant name:__orientation__"+char(0x3B)+" value:"+strOrientation+char(0x3e)+char(10)
	
	//widget document ID's and names
	cElement=getElementCount(arWidgetDocID)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetDocID"+Cntr+"__"+char(0x3b)+" value:"+getElement(arWidgetDocID,Cntr)+char(0x3e)+char(10)
		strResult=strResult + char(0x3c)+"constant name:__WidgetName"+Cntr+"__"+char(0x3b)+" value:"+getElement(arWidgetName,Cntr)+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//iframe
	cElement=getElementCount(arIsIframe)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetIframe"+Cntr+"__"+char(0x3b)+" value:"+quote(getElement(arIsIframe,Cntr))+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile

	//borders
	cElement=getElementCount(arWidgetBorder)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetBorder"+Cntr+"__"+char(0x3b)+" value:"+getElement(arWidgetBorder,Cntr)+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//width
	cElement=getElementCount(arWidgetWidth)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetWidth"+Cntr+"__"+char(0x3b)+" value:"+getElement(arWidgetWidth,Cntr)+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//height
	cElement=getElementCount(arWidgetHeight)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetHeight"+Cntr+"__"+char(0x3b)+" value:"+getElement(arWidgetHeight,Cntr)+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//Background color
	cElement=getElementCount(arWidgetBackground)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetBackground"+Cntr+"__"+char(0x3b)+" value:"+getElement(arWidgetBackground,Cntr)+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//styles
	cElement=getElementCount(arWidgetStyle)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__Style"+Cntr+"__"+char(0x3b)+" value:"+quote(getElement(arWidgetStyle,Cntr))+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//margin
	cElement=getElementCount(arWidgetMargin)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetMargin"+Cntr+"__"+char(0x3b)+" value:"+quote(getElement(arWidgetMargin,Cntr))+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//titles
	cElement=getElementCount(arWidgetTitle)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__Title"+Cntr+"__"+char(0x3b)+" value:"+quote(getElement(arWidgetTitle,Cntr))+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile

	//interval
	cElement=getElementCount(arInterval)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetInterval"+Cntr+"__"+char(0x3b)+" value:"+quote(getElement(arInterval,Cntr))+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//refresh
	cElement=getElementCount(arRefresh)
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetRefresh"+Cntr+"__"+char(0x3b)+" value:"+quote(getElement(arRefresh,Cntr))+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//params
	cElement=getElementCount(arParams,char(0xff))
	Cntr=0
	while (Cntr<cElement)
		strResult=strResult + char(0x3c)+"constant name:__WidgetParams"+Cntr+"__"+char(0x3b)+" value:"+quote(getElement(arParams,Cntr,char(0xff)))+char(0x3e)+char(10)
		Cntr=Cntr + 1
	endwhile
	
	//appendToLog("strResult="+strResult)
	//appendToLog("arWidgetWidth="+arWidgetWidth)
	scriptSetResult(strResult)
">
<!--
<h1>Compound Widget Viewer</h1>
CWDocID=__CWDocID__<br>
CWName=__CWName__<br>
-->

<table class='compound_widget'>
	<tr>
		<!-- Widget 1 -->
		<td class="compound_widget" style="width:__WidgetWidth0__;">
			<!conditional expression:not(startsWith('__WidgetDocID0__','__'))>
				<!-- This div is used to set the margin.  It keeps the title in line with the widget -->
				<div style="padding:0px; border-style:0px; <!!include type:expression; expression:"if(not(startsWith('__WidgetMargin0__','__')),'__WidgetMargin0__'+char(0x3b),'')">">
					<!-- Title1 -->
					<!!include type:expression; expression:"if((not(startsWith('__Title0__','__'))) and (len('__Title0__')>0),'__Title0__','')">
						<!-- Iframe -->
						<!conditional expression:"'__WidgetIframe0__'='true'">
							<iframe style="border-style:__WidgetBorder0__; border-width:1px; width:__WidgetWidth0__; height:__WidgetHeight0__px; background-color:__WidgetBackground0__; __Style0__" src="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID0__&Widget=__WidgetName0__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams0__"></iframe>
						</conditional>

						<!conditional expression:"not('__WidgetIframe0__'='true')">
							<!-- Dynamic widget -->
							<!conditional expression:"'__WidgetRefresh0__'='true'">
								<div class="compound_widget" interval="__WidgetInterval0__" style="border-style:__WidgetBorder0__; border-width:1px; width:100%; height:__WidgetHeight0__px; background-color:__WidgetBackground0__; overflow:auto; __Style0__" url="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID0__&Widget=__WidgetName0__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams0__">
									<img src="https://__server__/?Network=GreenLight&ID=fileGetContent&filename={packageurl_aspect_software_net_core}core/doc/images/StatusActive01.gif">
								</div>
							</conditional>
							<!-- Static widget -->
							<!conditional expression:"not('__WidgetRefresh0__'='true')">
								<div class="compound_widget" style="border-style:__WidgetBorder0__; border-width:1px; width:auto; height:__WidgetHeight0__px; background-color:__WidgetBackground0__; overflow:auto; __Style0__">
									<!!include type:widget; server:cache; secure:true; documentID:__WidgetDocID0__; widget:__WidgetName0__; params:"remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&user-agent=__user-agent__&__WidgetParams0__";>	
								</div>
							</conditional>
						</conditional>
				</div>
			</conditional>
		</td>
	<!conditional expression:"'__orientation__'='vertical'">
	</tr>
	<tr>
	</conditional>
		<!-- Widget 2 -->
		<td class="compound_widget" style="width:__WidgetWidth1__">
			<!conditional expression:not(startsWith('__WidgetDocID1__','__'))>
				<!-- This div is used to set the margin.  It keeps the title in line with the widget -->
				<div style="padding:0px; border-style:0px; <!!include type:expression; expression:"if(not(startsWith('__WidgetMargin1__','__')),'__WidgetMargin1__'+char(0x3b),'')">">
					<!-- Title2 -->
					<!!include type:expression; expression:"if((not(startsWith('__Title1__','__'))) and (len('__Title1__')>0),'__Title1__','')">
						<!-- Iframe -->
						<!conditional expression:"'__WidgetIframe1__'='true'">
							<iframe style="border-style:__WidgetBorder1__; border-width:1px; width:__WidgetWidth1__; height:__WidgetHeight1__px; background-color:__WidgetBackground1__; __Style1__" src="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID1__&Widget=__WidgetName1__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams1__"></iframe>
						</conditional>

						<!conditional expression:"not('__WidgetIframe1__'='true')">
							<!-- Dynamic widget -->
							<!conditional expression:"'__WidgetRefresh1__'='true'">
								<div class="compound_widget" interval="__WidgetInterval1__" style="border-style:__WidgetBorder1__; border-width:1px; width:100%; height:__WidgetHeight1__px; background-color:__WidgetBackground1__; overflow:auto; __Style1__" url="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID1__&Widget=__WidgetName1__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams1__">
									<img src="https://__server__/?Network=GreenLight&ID=fileGetContent&filename={packageurl_aspect_software_net_core}core/doc/images/StatusActive01.gif">
								</div>
							</conditional>
							<!-- Static widget -->
							<!conditional expression:"not('__WidgetRefresh1__'='true')">
								<div class="compound_widget" style="border-style:__WidgetBorder1__; border-width:1px; width:auto; height:__WidgetHeight1__px; background-color:__WidgetBackground1__; overflow:auto; __Style1__">
									<!!include type:widget; server:cache; secure:true; documentID:__WidgetDocID1__; widget:__WidgetName1__; params:"remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&user-agent=__user-agent__&__WidgetParams1__";>	
								</div>
							</conditional>
						</conditional>
				</div>
			</conditional>
		</td>
	<!conditional expression:"'__orientation__'='vertical'">
	</tr>
	<tr>
	</conditional>
		<!-- Widget 3 -->
		<td class="compound_widget" style="width:__WidgetWidth2__">
			<!conditional expression:not(startsWith('__WidgetDocID2__','__'))>
				<!-- This div is used to set the margin.  It keeps the title in line with the widget -->
				<div style="padding:0px; border-style:0px; <!!include type:expression; expression:"if(not(startsWith('__WidgetMargin2__','__')),'__WidgetMargin2__'+char(0x3b),'')">">
					<!-- Title3 -->
					<!!include type:expression; expression:"if((not(startsWith('__Title2__','__'))) and (len('__Title2__')>0),'__Title2__','')">
						<!-- Iframe -->
						<!conditional expression:"'__WidgetIframe2__'='true'">
							<iframe style="border-style:__WidgetBorder2__; border-width:1px; width:__WidgetWidth2__; height:__WidgetHeight2__px; background-color:__WidgetBackground2__; __Style2__" src="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID2__&Widget=__WidgetName2__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams2__"></iframe>
						</conditional>

						<!conditional expression:"not('__WidgetIframe2__'='true')">
							<!-- Dynamic widget -->
							<!conditional expression:"'__WidgetRefresh2__'='true'">
								<div class="compound_widget" interval="__WidgetInterval2__" style="border-style:__WidgetBorder2__; border-width:1px; width:100%; height:__WidgetHeight2__px; background-color:__WidgetBackground2__; overflow:auto; __Style2__" url="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID2__&Widget=__WidgetName2__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams2__">
									<img src="https://__server__/?Network=GreenLight&ID=fileGetContent&filename={packageurl_aspect_software_net_core}core/doc/images/StatusActive01.gif">
								</div>
							</conditional>
							<!-- Static widget -->
							<!conditional expression:"not('__WidgetRefresh2__'='true')">
								<div class="compound_widget" style="border-style:__WidgetBorder2__; border-width:1px; width:auto; height:__WidgetHeight2__px; background-color:__WidgetBackground2__; overflow:auto; __Style2__">
									<!!include type:widget; server:cache; secure:true; documentID:__WidgetDocID2__; widget:__WidgetName2__; params:"remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&user-agent=__user-agent__&__WidgetParams2__";>	
								</div>
							</conditional>
						</conditional>
				</div>
			</conditional>
		</td>
	<!conditional expression:"'__orientation__'='vertical'">
	</tr>
	<tr>
	</conditional>
		<!-- Widget 4 -->
		<td class="compound_widget" style="width:__WidgetWidth3__">
			<!conditional expression:not(startsWith('__WidgetDocID3__','__'))>
				<!-- This div is used to set the margin.  It keeps the title in line with the widget -->
				<div style="padding:0px; border-style:0px; <!!include type:expression; expression:"if(not(startsWith('__WidgetMargin3__','__')),'__WidgetMargin3__'+char(0x3b),'')">">
					<!-- Title4 -->
					<!!include type:expression; expression:"if((not(startsWith('__Title3__','__'))) and (len('__Title3__')>0),'__Title3__','')">
						<!-- Iframe -->
						<!conditional expression:"'__WidgetIframe3__'='true'">
							<iframe style="border-style:__WidgetBorder3__; border-width:1px; width:__WidgetWidth3__; height:__WidgetHeight3__px; background-color:__WidgetBackground3__; __Style3__" src="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID3__&Widget=__WidgetName3__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams3__"></iframe>
						</conditional>

						<!conditional expression:"not('__WidgetIframe3__'='true')">
							<!-- Dynamic widget -->
							<!conditional expression:"'__WidgetRefresh3__'='true'">
								<div class="compound_widget" interval="__WidgetInterval3__" style="border-style:__WidgetBorder3__; border-width:1px; width:100%; height:__WidgetHeight3__px; background-color:__WidgetBackground3__; overflow:auto; __Style3__" url="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID3__&Widget=__WidgetName3__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams3__">
									<img src="https://__server__/?Network=GreenLight&ID=fileGetContent&filename={packageurl_aspect_software_net_core}core/doc/images/StatusActive01.gif">
								</div>
							</conditional>
							<!-- Static widget -->
							<!conditional expression:"not('__WidgetRefresh3__'='true')">
								<div class="compound_widget" style="border-style:__WidgetBorder3__; border-width:1px; width:auto; height:__WidgetHeight3__px; background-color:__WidgetBackground3__; overflow:auto; __Style3__">
									<!!include type:widget; server:cache; secure:true; documentID:__WidgetDocID3__; widget:__WidgetName3__; params:"remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&user-agent=__user-agent__&__WidgetParams3__";>	
								</div>
							</conditional>
						</conditional>
				</div>
			</conditional>
		</td>
	<!conditional expression:"'__orientation__'='vertical'">
	</tr>
	<tr>
	</conditional>
		<!-- Widget 5 -->
		<td class="compound_widget" style="width:__WidgetWidth4__">
			<!conditional expression:not(startsWith('__WidgetDocID4__','__'))>
				<!-- This div is used to set the margin.  It keeps the title in line with the widget -->
				<div style="padding:0px; border-style:0px; <!!include type:expression; expression:"if(not(startsWith('__WidgetMargin4__','__')),'__WidgetMargin4__'+char(0x3b),'')">">
					<!-- Title5 -->
					<!!include type:expression; expression:"if((not(startsWith('__Title4__','__'))) and (len('__Title4__')>0),'__Title4__','')">
						<!-- Iframe -->
						<!conditional expression:"'__WidgetIframe4__'='true'">
							<iframe style="border-style:__WidgetBorder4__; border-width:1px; width:__WidgetWidth4__; height:__WidgetHeight4__px; background-color:__WidgetBackground4__; __Style4__" src="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID4__&Widget=__WidgetName4__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams4__"></iframe>
						</conditional>

						<!conditional expression:"not('__WidgetIframe4__'='true')">
							<!-- Dynamic widget -->
							<!conditional expression:"'__WidgetRefresh4__'='true'">
								<div class="compound_widget" interval="__WidgetInterval4__" style="border-style:__WidgetBorder4__; border-width:1px; width:100%; height:__WidgetHeight4__px; background-color:__WidgetBackground4__; overflow:auto; __Style4__" url="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=__WidgetDocID4__&Widget=__WidgetName4__&remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&__WidgetParams4__">
									<img src="https://__server__/?Network=GreenLight&ID=fileGetContent&filename={packageurl_aspect_software_net_core}core/doc/images/StatusActive01.gif">
								</div>
							</conditional>
							<!-- Static widget -->
							<!conditional expression:"not('__WidgetRefresh4__'='true')">
								<div class="compound_widget" style="border-style:__WidgetBorder4__; border-width:1px; width:auto; height:__WidgetHeight4__px; background-color:__WidgetBackground4__; overflow:auto; __Style4__">
									<!!include type:widget; server:cache; secure:true; documentID:__WidgetDocID4__; widget:__WidgetName4__; params:"remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&user-agent=__user-agent__&__WidgetParams4__";>	
								</div>
							</conditional>
						</conditional>
				</div>
			</conditional>
		</td>
	</tr>
</table>


</widget><widget name="Compound Widget Viewer Page" group="Compound Widgets" category="" description="Wraps the compound widget viewer." type="Simple" Processing=3 metadata="" IncludeInViewer="false" PublicName="" modified="03-17-2011 21:38:43" modifiedby="Keith">
<!-- Document Description  -->
<!-- Initialize constants -->
<constant name:__Server__; value:"{@if(len(getToken(ExternalIPAddress))>0,if((getToken(ExternalIPAddress)="__RemoteIP__") or ("__RemoteIP__"="127.0.0.1"),"127.0.0.1:"+getToken(GreenLight_Client_Https_Port),getToken(ExternalIPAddress)+":"+getToken(GreenLight_Client_Https_Port)),"127.0.0.1:"+getToken(GreenLight_Client_Https_Port))}";>
<constant name:__IsLocalServer__; value:"{@if((__RemoteIP__="127.0.0.1") or (getToken(ExternalIPAddress)="__RemoteIP__"),true,false)}">

<DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
	<style>
		<include type:widget; server:cache; secure:true; documentID:77NaWu0FhKDKXL7C70JpnKmy; widget:stylesheet; params:"remoteIP=__remoteIP__&user-agent=__user-agent__";>
		<include type:widget; server:cache; secure:true; documentID:77NaWu0FhKDKXL7C70JpnKmy; widget:calendar-css; params:"remoteIP=__remoteIP__&user-agent=__user-agent__";>
	</style>

	<script language='javascript'>
		<include type:widget; server:cache; secure:true; documentID:77NaWu0FhKDKXL7C70JpnKmy; widget:javascript1; params:"remoteIP=__remoteIP__&user-agent=__user-agent__";>
		<include type:widget; server:cache; secure:true; documentID:77NaWu0FhKDKXL7C70JpnKmy; widget:calendar-js; params:"remoteIP=__remoteIP__&user-agent=__user-agent__";>
	</script>

</head>

<body onload='aspectinit();'>
	<include type:widget; server:cache; secure:true; documentID:77NaWu0FhKDKXL7C70JpnKmy; widget:Compound Widget Viewer; params:"remoteIP=__remoteIP__&Client={ExternalIPAddress}:{GreenLight_Client_Https_Port}&user-agent=__user-agent__&CWDocID=__CWDocID__&CWName=__CWName__";>
</body>

</html>
</widget><widget name="HTML Status Message" group="" category="" description="Used to display a status message from Javascript.  The message to be displayed is passed in and argument named msg." type="Simple" Processing=0 metadata="" IncludeInViewer="false" PublicName="Html Status Message" modified="05-17-2011 14:47:59" modifiedby="dell2">
<!-- This widget is used to display a status message or dialog in an html page.  
	It is called by the Javascript showDialog function
	
	The following arguments can be defined:
	
	icon - If the value is true, a status icon is displayed before the message
	msg - the message to be displayed.  
	
	(these arguments cause a button to be displayed when defined.  The argument defines the
	 function to be called when the button is pressed.  For example fnOK=myfunction()&fnCancel=
	 The value can also be 'close' which will just hide the dialog without calling a function
	fnOk
	fnYes
	fnNo
	fnCancel
	fnOther1 - Pass a value in Other1 to set the label of the button
	fnOther2 - ""			    
	fnOther3 - ""			    
	
	Quotes can be included in the function definitions by using $q

	examples:
	showDialog('icon=true&msg=this is a test')
	showDialog('icon=true&msg=this is a test&top=200&left=200&width=400&height=100')
	showDialog('icon=true&msg=this is a test&fnOk=alert($qtest$q)&fnCancel=close')
	showDialog('icon=true&msg=this is a test&fnOk=alert($qtest$q)&fnOther1=alert($qOther$q)&Other1=Other&fnCancel=close')
	showDialog('close')
-->

<include type:expression; expression:htmlConstant("fnOk","__","")>
<include type:expression; expression:htmlConstant("fnYes","__","")>
<include type:expression; expression:htmlConstant("fnNo","__","")>
<include type:expression; expression:htmlConstant("fnCancel","__","")>
<include type:expression; expression:htmlConstant("fnOther1","__","")>
<include type:expression; expression:htmlConstant("fnOther2","__","")>
<include type:expression; expression:htmlConstant("fnOther3","__","")>

<div ID="SystemDialog" style="position:absolute; top:100px; left:100px; width:300px; height:auto; border:solid 3px #3366ff; text-align:left; padding:10px 10px 10px 10px; z-index:99; background:white;">
	<conditional expression:(__icon__)>
		<img src="{@getImageUrl("aspect_software_net_core","StatusActive01.gif",true)}">
	</conditional>
	__msg__

	<div style="padding-top:10px">
		<conditional expression:"(len('__fnOK__')>0)">
			<input type="button" value="Ok" onClick="setVisible('SystemDialogContainer',false); if(!('__fnOk__'.equalsIgnoreCase('close'))) eval(replaceAllSubstrings('__fnOk__','$q','\x22'));">
		</conditional>
		
		<conditional expression:"(len('__fnYes__')>0)">
			<input type="button" value="Yes" onClick="setVisible('SystemDialogContainer',false); if(!('__fnYes__'.equalsIgnoreCase('close'))) eval(replaceAllSubstrings('__fnYes__','$q','\x22'));">
		</conditional>
		
		<conditional expression:"len('__fnNo__')>0)">
			<input type="button" value="No" onClick="setVisible('SystemDialogContainer',false); if(!('__fnNo__'.equalsIgnoreCase('close'))) eval(replaceAllSubstrings('__fnNo__','$q','\x22'));">
		</conditional>
		
		<conditional expression:"len('__fnCancel__')>0)">
			<input type="button" value="Cancel" onClick="setVisible('SystemDialogContainer',false); if(!('__fnCancel__'.equalsIgnoreCase('close'))) eval(replaceAllSubstrings('__fnCancel__','$q','\x22'));">
		</conditional>

		<conditional expression:"len('__fnOther1__')>0)">
			<input type="button" value="__Other1__" onClick="setVisible('SystemDialogContainer',false); if(!('__fnOther1__'.equalsIgnoreCase('close'))) eval(replaceAllSubstrings('__fnOther1__','$q','\x22'));">
		</conditional>

		<conditional expression:"len('__fnOther2__')>0)">
			<input type="button" value="__Other2__" onClick="setVisible('SystemDialogContainer',false); if(!('__fnOther2__'.equalsIgnoreCase('close'))) eval(replaceAllSubstrings('__fnOther2__','$q','\x22'));">
		</conditional>

		<conditional expression:"len('__fnOther3__')>0)">
			<input type="button" value="__Other3__" onClick="setVisible('SystemDialogContainer',false); if(!('__fnOther3__'.equalsIgnoreCase('close'))) eval(replaceAllSubstrings('__fnOther3__','$q','\x22'));">
		</conditional>
	</div>
</div>
</widget><widget name="stylesheet_2012" group="2012" category="" description="" type="Simple" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Stylesheet_2012" modified="10-06-2015 10:48:59" modifiedby="Thnikpad" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=09-03-2015 15:23:24:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
<include type:expression; expression:htmlConstant("AspectLightGrey","__","#faf5f5")>
<include type:expression; expression:htmlConstant("EmFactor1","__","1.60em")>
<include type:expression; expression:htmlConstant("EmFactor2","__","1.4em")>
<include type:expression; expression:htmlConstant("EmFactor3","__","1.2em")>
<include type:expression; expression:htmlConstant("EmFactor4","__","1em")>

/*********************************************************************
Original Styles
*********************************************************************/
h1 						{font-family:tahoma; font-size: 10pt; color:#1d398f; margin-top:10px; margin-bottom:5px;}
h2						{font-family:tahoma; font-size: 10pt; color:black; padding-bottom:3px; margin-bottom:0px; margin-top:10px;}
h3						{font-family:tahoma; font-size: 10pt; font-style:italic; padding-bottom:0px; margin-bottom:0px;}
p						{font-family: tahoma, helvetica, arial, sans-serif; font-size:8pt; margin-top:5px; margin-bottom:5px;color:black}
ul						{margin: 0; padding-top:0px; padding-left: 20; }
ul li					{margin: 0; padding-top: 5; list-style-type: circle;}
ol						{margin: 0; padding-top:0px; padding-left: 20; }
ol li					{margin: 0; padding-top: 5;}

table 					{font-family: tahoma, helvetica, arial, sans-serif; font-size:8pt; color: black; border-width:0px; border-collapse:collapse;}
th 						{vertical-align:top; border-width:0px; padding-top:5px; padding-left:0px; padding-right:5px; padding-bottom:5px;}
td 						{vertical-align:top; border-width:0px; padding-top:5px; padding-left:0px; padding-right:5px; padding-bottom:0px;}

textarea			{-moz-tab-size:2; -o-tab-size:2; -webkit-tab-size:2; tab-size:2;}

/* set background color of disabled inputs */
:disabled {background-color:__AspectLightGrey__;}

/* Class for showDialog() */
div.showdialog {position:absolute;top:100px;left:200px;background-color:white;color:black;border:1px solid black;padding:10px;height:auto;z-index:99}

/* Class for table message */
div.tablemessage			{min-width:200px;position:absolute;top:0px;left:0px;background-color:white;color:black;padding:10px 30px 10px 30px;z-index:99;border:1px solid black}

/* Class for divs surrounding tabs in dialog */
div.dialogtab				{border:solid 1px black;padding:10px}

/*	from http://stackoverflow.com/questions/4698054/css-does-the-width-include-the-padding
	used to standardize padding in IE */
* {box-sizing:border-box; -moz-box-sizing:border-box; -webkit-box-sizing:border-box}

/* styles for drop-down menus */
ul.dmenu			{margin:0; padding:0; z-index:30;}
li.dmenu			{margin:0; padding:0; list-style:none; float:left; width:60px;}
a.dmenu			{display:block; margin:0 1px 0 0; padding:3px; width:30px; background:transparent; color:black; text-align:center; text-decoration:none; font:normal normal normal 8pt tahoma;}
a.dmenu:hover		{margin:0; padding:3px; width:30px; background-color:transparent; border-style:none; border-width:1px; text-decoration:underline; font:normal normal normal 8pt tahoma;}
span.dmenu			{cursor:pointer; display:block; margin:0 1px 0 0; padding:3px; width:30px; background:transparent; color:black; text-align:center; text-decoration:none; font:normal normal normal 8pt tahoma;}
span.dmenu:hover		{cursor:pointer; margin:0; padding:3px; width:30px; background-color:transparent; border-style:none; border-width:1px; text-decoration:underline; font:normal normal normal 8pt tahoma;}
div.dmenu		{position:absolute; margin:0; padding:0; display:none; background-color:white; border:1px solid #5970B2;}
a.dmenuitem		{position:relative; display:block; margin:0; padding:3px; width:auto; white-space:nowrap; text-align:left; text-decoration:none; background-color:white; color:black; font:normal normal normal 8pt tahoma;}
a.dmenuitem:hover	{margin:0; padding:3px; background:#dddddd; font:normal normal normal 8pt tahoma;}
span.dmenuitem		{cursor:pointer; position:relative; display:block; margin:0; padding:3px; width:auto; white-space:nowrap; text-align:left; text-decoration:none; background-color:white; color:black; font:normal normal normal 8pt tahoma;}
span.dmenuitem:hover	{cursor:pointer; margin:0; padding:3px; background:#dddddd; font:normal normal normal 8pt tahoma;}
span.dmenuitemdisabled	{cursor:pointer; position:relative; display:block; margin:0; padding:3px; width:auto; white-space:nowrap; text-align:left; text-decoration:none; background-color:white; color:#999999; font:normal normal normal 8pt tahoma;}

span.cautiontext		{color:yellow}
span.cautiontextbold	{color:yellow;font-weight:bold}
span.errortext		{color:red}
span.errortextbold	{color:red;font-weight:bold}
span.oktext			{color:green}
span.oktextbold		{color:green;font-weight:bold}

div.cautiontext		{color:yellow}
div.cautiontextbold	{color:yellow;font-weight:bold}
div.errortext			{color:red}
div.errortextbold		{color:red;font-weight:bold}
div.oktext			{color:green}
div.oktextbold		{color:green;font-weight:bold}

/* used to display a pointer over clickable images */
img.click {cursor:pointer}

/* Used for forms.  Centers vertical alignment so text and inputs line up */
table.form				{}
table.form td				{vertical-align:middle;}
table.form td.formbordered	{vertical-align:top; border:solid 1px #b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px; background-color:#f0f0f0;}

/* used to format and position charts associated with tables */
div.table_chart {width:auto;margin:0px;border:solid 2px black;background-color:white;position:absolute;top:0px;left:0px;z-index:2}
img.table_chart_close {float:right;padding:5px 5px 5px 5px; position:relative;top:0px;left:0px;z-index:3}

/* used to format dialogs used to edit table records */
div.dialog_header {display:none; margin:0px; padding:0px 5px 5px 5px; border-bottom:solid 1px black; background-color:white}
div.default_table_dialog {position:absolute;top:0px;left:0px;display:none;z-index:2;padding:0px; background-color:white;border:solid 2px black}
div.default_table_dialog_only {display:block;z-index:2;padding:0px; background-color:white;border:solid 2px black}

img.hyperlink:hover		{cursor:pointer;}

/* used to create hyperlinks without the href tag */
h1.hyperlink				{text-decoration:underline}
h1.hyperlink:hover		{text-decoration:underline;cursor:pointer;}
h2.hyperlink				{text-decoration:underline}
h2.hyperlink:hover		{text-decoration:underline;cursor:pointer;}
h3.hyperlink				{text-decoration:underline}
h3.hyperlink:hover		{text-decoration:underline;cursor:pointer;}
p.hyperlink				{text-decoration:underline}
p.hyperlink:hover			{text-decoration:underline;cursor:pointer;}
span.hyperlink			{text-decoration:underline}
span.hyperlink:hover		{text-decoration:underline;cursor:pointer;}

a.menu_option:link		{font-size:8pt;color:black;text-decoration:underline;}
a.menu_option:visited		{font-size:8pt;color:black;text-decoration:underline;}
a.menu_option:active		{font-size:8pt;color:black;text-decoration:underline;}
a.menu_option:hover		{font-size:8pt;color:black;text-decoration:underline;}
div.menu_option			{width:100%;height:100%;font-size:8pt;color:black;text-decoration: underline; cursor:pointer}
table.menu_option			{}
table.menu_option td		{border-top:none 1px black;padding:5px;}

table.table_controls		{width:100%;margin:0px;padding:0px}

/* tables */
table.basic1				{} 
th.basic1				{text-align:left; background-color:white; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
td.basic1				{vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
table.basic1				{} 
table.basic1 th			{text-align:left; background-color:white; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
table.basic1 td			{vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:3px; padding-left:5px; padding-right:5px; padding-bottom:2px;}
table.basic1 tr.section	{border:solid 1px #b8b8b8}
td.basic1_subtotal		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
td.basic1_subtotal0		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
td.basic1_subtotal1		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
td.basic1_subtotal2		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
td.basic1_subtotal3		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
td.basic1_subtotal4		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
td.basic1_subtotal5		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}
td.basic1_subtotal6		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}

/* bordered table */
table.bordered			{border-style:solid; border-width:1; padding:10px; border-color:cccccc;}
table.bordered th			{vertical-align: bottom; border-style:solid; border-width:1; margin:0px; padding-left:5px; padding-top:0px; padding-right:10px; padding-bottom:0px; border-color:cccccc;}
table.bordered td			{border-style:solid; border-width:1; margin:0px; padding-left:5px; padding-top:0px; padding-right:10px; padding-bottom:0px; border-color:cccccc;}

/* table - no border */
table.noborder			{} 
th.noborder				{text-align:left; vertical-align:top; border-width:0px; border-style:none; border-color:#b8b8b8; padding:2px 2px 2px 2px;}
td.noborder				{vertical-align:top; border-width:0px; border-style:none; border-color:#b8b8b8; padding:2px 2px 2px 2px;}
table.noborder th			{text-align:left; vertical-align:top; border-width:0px; border-style:none; border-color:#b8b8b8; padding:2px 2px 2px 2px;}
table.noborder td			{vertical-align:top; border-width:0px; border-style:none; border-color:#b8b8b8; padding:2px 2px 2px 2px;}

/* Tabbed dialog styles */
/* These were the original styles and require the tabed dialog table to use the ID "toc" */
table#toc 				{height: 20px; list-style: none; margin: 0; padding: 0; border-collapse:collapse; border-width:1px;}
table#toc td 				{background:#e9e9e9 url("__RequestServer__/?Network=Greenlight&ID=getImage&filename={packageurl_greenlight}doc/images/tabgrey.png");  margin: 0 1px 0 0; padding-left: 10px; padding-top:0px; padding-bottom:0px; padding-right:0px;}
table#toc a 				{background: url("__RequestServer__/?Network=Greenlight&ID=getImage&filename={packageurl_greenlight}doc/images/tabgrey.png") 100% 0; color: #e9e9e9; display: block; height: 2em; line-height: 2em; padding-right: 10px; text-decoration: none; outline: none;}
table#toc a:link			{}
table#toc a:visited		{}
table#toc a:hover			{text-decoration:underline;}
table#toc a:active		{}
table#toc span 			{background: url("__RequestServer__/?Network=Greenlight&ID=getImage&filename={packageurl_greenlight}doc/images/tabgrey.png") 100% 0; color: #e9e9e9; display: block; height: 2em; line-height: 2em; padding-right: 10px; outline: none;}
table#toc td.current 		{background-color: #48f; background-position: 0 -60px; padding-top:0px; padding-right:0px; padding-bottom:0px;}
table#toc td.current a		{background-position: 100% -60px;	color:#ffffff; font-weight: bold;}
table#toc td.current span	{background-position: 100% -60px;	color:#fff; font-weight: bold;}

/*	These are the new styles that allow for multiple tabbed dialogs at one time   Tabs should use span tags instead of a because the a tag jumps around in IE
	The rounded corners are produced by displaying the left side of the image in the TD tag and the right side of the image in the span tag.
*/
table.tabdialog 			{list-style: none; margin: 0; padding: 0; border-collapse:collapse; border-width:1px;}
table.tabdialog td 		{background:#e9e9e9 url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png");  margin: 0px 10px 0px 0px; padding: 0px 0px 0px 10px;}
table.tabdialog span		{cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background:url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png") 100% 0}
table.tabdialog span:hover	{text-decoration:underline;}
table.tabdialog a 		{display: block; margin:0px 0px 0px 0px;padding:0px 10px 0px 0px; background:url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png") 100% 0; color: #e9e9e9; text-decoration: none; outline: none;}
table.tabdialog a:hover	{text-decoration:underline;}

/* These are styles load the image off of earthlink rather than the local host */
table.tabdialog1 			{height: 20px; list-style: none; margin: 0; padding: 0; border-collapse:separate; border-width:1px;}
table.tabdialog1 td 		{background:#e9e9e9 url("http://www.aspect-software.net/tabgrey.png");  margin: 0 1px 0 0; padding-left: 10px; padding-top:0px; padding-bottom:0px; padding-right:0px;}
span.tabdialog1 	 		{background: url("http://www.aspect-software.net/tabgrey.png") 100% 0; color: #e9e9e9; display: block; height: 2em; line-height: 2em; padding-right: 10px; text-decoration: none; outline: none;}
span.tabdialog1:hover		{text-decoration:underline;}
table.tabdialog1 a 		{background: url("http://www.aspect-software.net/tabgrey.png") 100% 0; color: #e9e9e9; display: block; height: 2em; line-height: 2em; padding-right: 10px; text-decoration: none; outline: none;}
table.tabdialog1 a:hover	{text-decoration:underline;}

/* styles for tabs in tab dialogs.  JS sets the class to one of these */
span.tabdialogtabselected	{font-size:__EmFactor1__;text-decoration:underline;color:black;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color:#e9e9e9;background:url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png") 100% 0}
span.tabdialogtabunselected {font-size:__EmFactor1__;text-decoration:none;color:black;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color:#e9e9e9;background:url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png") 100% 0}

/* used to display the content of a tab in a tabbed dialog */
div.content 				{border-style:solid; border-top-width:3px; border-left-width:0px; border-right-width:0px; border-bottom-width:0px; border-color:#48f; padding:0px; margin:0px;}		

div.tooltip 				{position:absolute; width:auto; height:auto; border-width:1px; border-style:solid; background:#ffffe1; z-index:9100; padding:0px;}

/* iframe element used to suppress windowed controls in IE5/6 */
iframe#tcalIF {position: absolute; visibility: hidden; z-index: 10000; border: 0;}

/* transparent shadow */
div#tcalShade {position: absolute; visibility: hidden; z-index: 10001;}
div#tcalShade table {border: 0; border-collapse: collapse; width: 100%;}
div#tcalShade table td {border: 0; border-collapse: collapse; padding: 0;}

/*********************************************************************
styles for calendar
*********************************************************************/
/* calendar icon */
img.tcalIcon {cursor: pointer;	margin-left: 1px; vertical-align: middle;}

/* calendar container element */
div#tcal {position: absolute; visibility: hidden;	 z-index: 10002;	width: 158px; padding: 2px 0 0 0;}

/* all tables in calendar */
div#tcal table {width: 100%; border: 1px solid silver; border-collapse: collapse; background-color: white;}

/* navigation table */
div#tcal table.ctrl {border-bottom: 0;}

/* navigation buttons */
div#tcal table.ctrl td {width: 15px; height: 20px;}

/* month year header */
div#tcal table.ctrl th {background-color: white; color: black; border: 0;}

/* week days header */
div#tcal th {border: 1px solid silver; border-collapse: collapse; text-align: center; padding: 3px 0; font-family: tahoma, verdana, arial; font-size: 10px; background-color: gray; color: white;}

/* date cells */
div#tcal td {border: 0; border-collapse: collapse; text-align: center; padding: 2px 0; font-family: tahoma, verdana, arial; font-size: 11px; width: 22px; cursor: pointer;}

/* date highlight in case of conflicting settings order here determines the priority from least to most important */
div#tcal td.othermonth {color: silver;}
div#tcal td.weekend {background-color: #ACD6F5;}
div#tcal td.today {border: 1px solid red;}
div#tcal td.selected {	background-color: #FFB3BE;}

/*********************************************************************
styles for table icons - graph, print, next, prev... 
padding is added to the top and bottom to make the icons appear completely, otherwise the height is not sufficient
*********************************************************************/
li.TableIconMenu {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_more_horiz_black_18dp_2x.png") no-repeat center;}
li.TableIconInfo {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=info32x32.png") no-repeat center;}
li.TableIconExport {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=download32x32.png") no-repeat center;} 
li.TableIconPrint {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=print32x32.png") no-repeat center;} 
li.TableIconGraph {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_equalizer_black_18dp_2x.png") no-repeat center;} 
li.TableIconFirst {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_skip_previous_black_18dp_2x.png") no-repeat center;} 
li.TableIconPrev {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_navigate_before_black_18dp_2x.png") no-repeat center;} 
li.TableIconNext {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_navigate_next_black_18dp_2x.png") no-repeat center;} 
li.TableIconLast {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_skip_next_black_18dp_2x.png") no-repeat center;} 
li.TableIconAdd {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_add_black_18dp_2x.png") no-repeat center;} 
li.TableIconDelete {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_remove_black_18dp_2x.png") no-repeat center;} 

/* don't show the refresh icon for tables on small screens. */
li.TableIconRefresh {display:none;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_refresh_black_18dp_2x.png") no-repeat center;} 

li.TableIconMenu:hover {border-bottom:solid 1px black}
li.TableIconInfo:hover {border-bottom:solid 1px black}
li.TableIconExport:hover {border-bottom:solid 1px black}
li.TableIconPrint:hover {border-bottom:solid 1px black}
li.TableIconGraph:hover {border-bottom:solid 1px black}
li.TableIconRefresh:hover {border-bottom:solid 1px black}
li.TableIconFirst:hover {border-bottom:solid 1px black}
li.TableIconPrev:hover {border-bottom:solid 1px black}
li.TableIconNext:hover {border-bottom:solid 1px black}
li.TableIconLast:hover {border-bottom:solid 1px black}
li.TableIconAdd:hover {border-bottom:solid 1px black}
li.TableIconDelete:hover {border-bottom:solid 1px black}

/*********************************************************************
Back-Office Styles
*********************************************************************/
/* table used to format inventory sizes */
table.format_size {border-collapse:collapse; margin:0px; padding:0px; border:none}
td.format_size_prefix {text-align:right; margin:0px; padding:0px; border:none} 
td.format_size_quantity {text-align:right; margin:0px; padding:0px; border:none} 
td.format_size_description {text-align:left; margin:0px; padding:0px 0px 0px 5px; border:none} 

/************************************************************************
 styles for controls in table header 
*************************************************************************/
/*	TD cpmtaomomg table header.  The table is laid out as:
	
		<tr><th>Table controls</th></tr>
		<tr><th>Table header columns</th></tr>
		<tr><td>Refular table data</td></tr>
			
		The table controls are included in a TH so they can be made to match the
		width of the table.

		The styles in TableHeaderTD are ultimately determined by the class of the
		table being displayed.  The border, padding and margin are set explicitly
		by TAspectDriver when the table is created.
*/
td.TableHeaderTD {padding:0px}

/*	ul containing all header elements.  
*/
ul.TableHeaderUL {width:100%;padding:0px 0px 0px 0px;margin:0px;height:auto;overflow-y:hidden;}

/* li containing each element in the header */
li.TableHeaderSelectDisplay {display:block;border:none;white-space:nowrap;width:90%;max-width:400px}
li.TableHeaderAddDelete {display:block;border:none;padding:0px 0px 0px 0px}
li.TableHeaderLISub1 {display:none;border:none;padding:0px 0px 0px 0px}
li.TableControls {display:block;padding:0px 0px 0px 0px;height:32px;border:none}

/* ul used to place the menu, record count and timestamp inside TableHeaderLISub1 */
ul.TableHeaderULSub1 {display:inline;padding:0px 0px 10px 0px;margin:0px;height:auto}

/* li used in TableHeaderULSub1 */
li.TableRecordCount {display:inline;border:none;padding:0px 0px 0px 0px;white-space:normal}
li.TableHeaderMenu {display:inline;border:none;padding:0px 0px 0px 10px}
li.TableTimestampContainer {display:inline;border:none;padding:0px 0px 0px 10px;white-space:normal}

/* span surrounding table timestamp */
span.TableTimestamp {white-space:nowrap}

/* span surrounding table record count */
span.TableRecordCountSpan {white-space:nowrap}

/* ul containing add/delete icons */
ul.ULTableIconAddDelete {display:inline}

/*	styles for popup table menu containing print, export... */
div.TableMenu {display:none;z-index:2;position:fixed;top:20px;left:50px;border:solid 1px black;background-color:white;width:auto;height:auto;padding:5px 10px 10px 10px}
div.TableMenu ul {border:none;padding:0px;margin:0px}
div.TableMenu li {display:block;font-size:__EmFactor1__;list-style-type:none;cursor:pointer;border:none;width:auto;min-width:200px}
div.TableMenu li:hover {text-decoration:underline}

/* ul containing table icons.  This is embedded in the li.TableControls */
ul.TableControlsUL {width:auto;height:auto;border:none;padding:0px 0px 20px 0px;}
ul.TableControlsUL li {padding-top:15px 0px 0px 0px;height:auto}

/* icon used to edit display.  Hidden for small screen.  */
div.DisplayDialogIconEditDisplay {display:none}

/************************************************************************
styles for dialog header.  This is the header that allows records to be 
selected in a dialog using the previous and next buttons or the drop-down list
*************************************************************************/
ul.TableHeaderDialogUL {margin:0px;padding:0px}
ul.TableHeaderDialogUL li {list-style-type:none;display:inline;}
li.TableHeaderDialogLISelect {white-space:nowrap;display:inline}
li.TableHeaderDialogLISpacer {line-height:30px}
span.DialogHeaderIconAdd {padding:5px 0px 5px 36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_add_black_18dp_2x.png") no-repeat center;} 
span.DialogHeaderIconDelete {padding:5px 0px 5px 36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_remove_black_18dp_2x.png") no-repeat center;} 
span.DialogHeaderIconFirst {padding:5px 0px 5px 36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_skip_previous_black_18dp_2x.png") no-repeat center;} 
span.DialogHeaderIconPrev {padding:5px 0px 5px 36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_navigate_before_black_18dp_2x.png") no-repeat center;} 
span.DialogHeaderIconNext {padding:5px 0px 5px 36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_navigate_next_black_18dp_2x.png") no-repeat center;} 
span.DialogHeaderIconLast {padding:5px 0px 5px 36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_skip_next_black_18dp_2x.png") no-repeat center;} 
span.DialogHeaderIconClose {padding:5px 0px 5px 36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_18dp_2x.png") no-repeat center;} 

/************************************************************************
styles for display dialog
*************************************************************************/
<include type:expression; expression:htmlConstant("display_tab_height","__","275px")>
<include type:expression; expression:htmlConstant("display_tab_width","__","400px")>

/* the dimensions of this div are used to set the dimensions of all controls in the dialog */
div.DisplayDialogFormContainer {width:100%;max-width:500px;height:375px}

div.DisplayDialogContainer {}
div.DisplayDialog {display:none;width:100%;max-width:500px;position:absolute;left:0px;top:0px;padding:5px;background-color:white;border:solid 1px black;}
div.DisplayDialogMessage {z-index:99; position:absolute; left:30px; top:40px; display:none; padding:15px; background-color:white; width:325px; height:auto; border:solid 1px black;}
div.SaveDiaplayAs {z-index:4; position:absolute; left:30px; top:40px; display:none; padding:5px; background-color:white; width:325px; height:150px; border:solid 1px black;}

/* display name and icone used to save, delete displays */
ul.ULDisplayDialogNameAndIcons {width:90%;margin:0px;padding:0px;overflow-y:auto}
ul.ULDisplayDialogNameAndIcons select {width:100%}
li.ULDisplayDialogNameAndIconsName {float:left;display:block;list-style-type:none}
li.ULDisplayDialogNameAndIconsIcons {width:100%;float:left;display:block;list-style-type:none}

/* icons for display dialog */
div.DisplayDialogIconSave {display:block;float:right;cursor:pointer;width:20%;height:32px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_folder_open_black_18dp_2x.png") no-repeat center;}
div.DisplayDialogIconSaveAs {display:block;float:right;cursor:pointer;width:20%;height:32px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_add_black_18dp_2x.png") no-repeat center;}
div.DisplayDialogIconRestore {display:block;float:right;cursor:pointer;width:20%;height:32px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_refresh_black_18dp_2x.png") no-repeat center;}
div.DisplayDialogIconDelete {display:block;float:right;cursor:pointer;width:20%;height:32px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_remove_black_18dp_2x.png") no-repeat center;}
div.DisplayDialogIconOk {display:block;float:right;cursor:pointer;width:20%;height:32px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_done_black_18dp_2x.png") no-repeat center;}
div.DisplayDialogCloseIcon {display:block;float:right;cursor:pointer;width:32px;height:32px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_18dp_2x.png") no-repeat center;}

/* switch between tabs and a select box to select divs in the display dialog */
div.DisplayDialogTabSelectContainer {display:block;width:100%}
div.DisplayDialogTabSelectContainer select {width:100%}
div.DisplayDialogTabTableContainer {display:none}

div.DisplayDialogSort {width:100%}
div.DisplayDialogSort select {width:50%}

div.DisplayDialogFields {width:75%;height:80%}
div.DisplayDialogFields table {width:80%;height:70%}
div.DisplayDialogFieldsTableContainer {width:100%;height:80%;overflow:auto;border:solid 1px black}
table.DisplayDialogFields {border-collapse:collapse}

div.DisplayDialogFilter {width:100%;height:100%;padding:0px 0px 0px 0px}
div.DisplayDialogFilter textarea {width:100%;height:80%}

div.DisplayDialogPivot {width:100%}
div.DisplayDialogPivot table {width:100%}
select.DisplayDialogPivotField {width:100%}

/************************************************************************
Styles for table info dialog
*************************************************************************/
div.TableInfo {z-index:99;position:absolute;top:0px;left:0px;width:100%;max-width:600px;height:auto;padding:10px;background-color:white;border:solid 1px black}
div.TableInfoCloseIcon {float:right;padding:0px 0px 0px 36px;height:36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_18dp_2x.png") no-repeat center;} 
table.TableInfoGeneral {}
div.TableInfoDebugContainer {border:solid 1px black;height:100%;max-height:300px;overflow:auto}
table.TableInfoDebug {}

/************************************************************************
Default styles for all devices
*************************************************************************/
select {font-size:__EmFactor1__;padding:5px 0px 5px 0px}
option {font-size:1.0em}
input {font-size:__EmFactor1__}

/************************************************************************
Styels for UI menu bar
*************************************************************************/
/* Container surrounding the menu bar */
#MenuBarComtainer {margin:0px;padding:0px;width:100%}

/*	UL containing selected user, computer and view
		In the LI element, using float:left instead of display:inline causes the width
		to be implemented.  Margin sets spacing outside the li element and padding adjusts
		the position of the text within the li element 
*/
ul.MenuBar {width:100%;padding:0px;margin:0px}
ul.MenuBar li {font-weight:normal;font-size:__EmFactor1__}

/*	LI elements used for the selected user, computer and view.  One class is used
		when the element is not selected and another when it is.  The border and background
		color change when the element is selected.  Borders in both cases are done so that
		a double border does not occur where two elements share a border
*/
li.MenuBarLeft {float:left;display:block;border-top:solid 1px black;border-bottom:solid 1px black;border-left:solid black 1px;border-right:none;background-color:#F0F0F0;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}
li.MenuBarMiddle {float:left;display:block;border-top:solid 1px black;border-bottom:solid 1px black;border-left:solid black 1px;border-right:none;background-color:#F0F0F0;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}
li.MenuBarRight {float:left;display:block;border-top:solid 1px black;border-bottom:solid 1px black;border-left:solid black 1px;border-right:solid 1px black;background-color:#F0F0F0;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}

li.MenuBarLeftSelected {float:left;display:block;border-top:solid 1px black;border-bottom:none;border-left:solid black 1px;border-right:none;background-color:#FFFFFF;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}
li.MenuBarMiddleSelected {float:left;display:block;border-top:solid 1px black;border-bottom:none;border-left:solid black 1px;border-right:none;background-color:#FFFFFF;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}
li.MenuBarRightSelected {float:left;display:block;border-top:solid 1px black;border-bottom:none;border-left:solid black 1px;border-right:solid 1px black;background-color:#FFFFFF;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}

/* list items included in the top bar.  Widths are set here */
#UISelectedUser {width:30%;height:36px}
#UISelectedComputer {width:30%;height:36px}
#UISelectedView {width:30%;height:36px}
#UISettings {width:10%;height:36px}

/* icons displayed in the top bar */
#UISelectedUserIcon {float:left;margin:0px 0px 0px 40%;padding:36px 0px 0px 36px;width:36px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_perm_identity_black_18dp_2x.png") no-repeat left;}
#UISelectedComputerIcon {float:left;margin:0px 0px 0px 40%;padding:36px 0px 0px 36px;width:36px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_laptop_windows_black_18dp_2x.png") no-repeat left;}
#UISelectedViewIcon {float:left;margin:0px 0px 0px 40%;padding:36px 0px 0px 36px;width:36px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_web_black_18dp_2x.png") no-repeat left;}
#UISettingsIcon {float:left;margin:0px 0px 0px 0px;padding:36px 0px 0px 36px;width:36px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_menu_black_18dp_2x.png") no-repeat left;}

/* text displayed in the top bar */
#UISelectedUserText {display:none;padding:0px 0px 0px 5px;line-height:36px;vertical-align:bottom;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#UISelectedComputerText {display:none;padding:0px 0px 0px 5px;line-height:36px;vertical-align:bottom;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#UISelectedViewText {display:none;padding:0px 0px 0px 5px;line-height:36px;vertical-align:bottom;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#UISettingsText {display:none;padding:0px 0px 0px 5px;line-height:36px;vertical-align:bottom}

/************************************************************************
Styles for UI Popups (user, computer, view)
*************************************************************************/
div.UIPopup {position:absolute;top:50px;left:20px;width:250px;height:300px;padding:10px;border-top:none;border-left:solid 1px black;border-right:solid 1px black;border-bottom:solid 1px black;background-color:#FFFFFF;z-index:3}

/* Containers (div) surrounding popup content for user, computer and view */
#UIUserPopup {}
#UIComputerPopup {}
#UIViewPopup {}
#UISettingsPopup {}

/* Title text in popup windows */
h1.PopupTitle {padding:0px;margin:0px}

/* Button clicked to open a view from the view popup */
#OpenViewButton {width:150px;margin:5px 0px 0px 0px}

/* div for popup content */
div.UIPopup1 {border-top:none;height:300px};

/* UL containing list items for user name / password */
#ULUserProfile {border:none;float:none;display:block;margin:0px;padding:0px}
#ULUserProfile li {border:none;display:block;list-style-type:none;}

/* UL containing list items for company and computer in popup content */
#ULCompanyComputer {border:none;float:none;display:block;margin:0px;padding:0px}
#ULCompanyComputer li {border:none;display:block;}

/* UL containing package, category and view in popup content */
#ULPackageCategoryView {width:100%;border:none;float:none;display:block;margin:0px;padding:0px}
#ULPackageCategoryView li {width:100%;border:none;display:block}

/*	Input elements used to get user, company, computer, package, category and view 
		Setting the width to 60% causes them to align with the User and Computer menu options
		in the top menubar
*/
#UIselect_user_profile {width:60%;max-width:300px}
#UISelectUserCompany {width:60%;max-width:300px}
#UISelectUserComputer {width:60%;max-width:300px}
#UISelectPackage {width:60%;max-width:300px}
#UISelectViewCategory {width:60%;max-width:300px}
#UISelectView {width:60%;max-width:300px}

/* UL used for view parameters */
#ULViewParams {padding:0px;margin:0px;}
#ULViewParams li {list-style-type:none;}

/* div surrounding all view output, including the select box and table used to select views */
#ViewOutputContainer {padding-left:0.0%;width:100.0%}

/* select box for open views */
#OutputSelectContainer {display:inline;width:100%;overflow:auto;}
#OutputSelect {display:none;width:100%}

/****************************************************************
 styles for select box mirror in the views popup 
*****************************************************************/
#UIOutputSelectMirror {width:200px} 
#UIOutputSelectMirrorClose {padding:18px 0px 18px 36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_18dp_2x.png") no-repeat center;} 
#UIOutputSelectMirrorRefresh {padding:18px 0px 18px 36px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_refresh_black_18dp_2x.png") no-repeat center;} 

/* Element used to display Close All option to close all open views */
#UICloseAllViews {float:right;display:none}

/*	Element used to close the current display.  Displayed when the view selection
		is made using the select box.
*/
#UICloseSelectedView {float:right;border:none;padding:0px 0px 0px 20px;width:10%;height:20px;margin:5px 0px 0px 0px;display:none;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_18dp_2x.png") no-repeat center;}

/****************************************************************
styles for displaying views
*****************************************************************/
/* container surrounding the view, including the title bar */
div.ViewContainer {width:100%;border:none;width:100%}

/* container surrounding the view content, not including the title bar */
div.ViewContent {border-top:solid 1px black;overflow-y:auto;width:100%}

/* table containing tabs for open views */
#OutputTabs {display:none}

/* styles for the view tab and image used to close the tab */
td.view_tab {whitespace:no-wrap;border:none;}
div.ViewTabCloseIcon {display:inline;padding-left:36px;line-height:36px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_18dp_2x.png") no-repeat center;}
AAAimg.view_tab {position:relative;top:0px;left:5px;padding:0px 5px 0px 0px}

/* Image displayed at top of view to refresh the view */
div.view_refresh {width:30px;height:20px;border:none;float:right;padding:0px;margin:0px;position:relative;top:0px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_refresh_black_18dp_2x.png") no-repeat center;}

/* Image displayed at top of view to close the view */
div.view_close {width:30px;height:20px;float:right;padding:0px;margin:0px;position:relative;top:0px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_18dp_2x.png") no-repeat center;}

/*	These divs contain the source name, elapsed time and icons used to refresh and close the view
		Because all elements in the title are float left or right, overflow-y is set to auto to prevent
		the div from collapsing since it contains no content 

		The bottom border is set to none for title1 because a top border is set for ViewContent.  This
		keeps the border in place when the select box is used to select views and the title is hidden.
*/
div.view_title1 {width:100%;overflow-y:auto;overflow-x:hidden;background-color:#e9e9e9;font-size:__EmFactor1__;padding:0px;margin:0px;border:border:solid 1px black;border-bottom:none}
div.view_title2 {width:100%;margin:5px}

/* Name of source computer displayed in view title */
div.view_source_name {font-weight:normal;width:75%;float:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* Elapsed time for view to load - hidden for small screens */
div.view_elapsed_time {font-weight:normal;display:none}

/************** [2] Screen width >=320px **************/
@media only screen and (min-width:320px) {
}

/************** [3] Screen width >=519px **************/
@media only screen and (min-width:519px) {
	/* icons displayed in the top bar */
	#UISelectedUserIcon {margin:0px 0px 0px 5px;}
	#UISelectedComputerIcon {margin:0px 0px 0px 5px;}
	#UISelectedViewIcon {margin:0px 0px 0px 5px;}
	#UISettingsIcon {margin:0px 0px 0px 5px;}

	/* show text in top menu bar (user, computer, view) */
	#UISelectedUserText {display:inline}
	#UISelectedComputerText {display:inline}
	#UISelectedViewText {display:inline}
	#UISettingsText {display:inline}
}

/************** [4] Screen width >=759px **************/
@media only screen and (min-width:759px) {
	/************************************************************************
	 styles for controls in table header 
	*************************************************************************/
	/*	li containing each element in the table header 
			Display them inline
	*/
	li.TableHeaderSelectDisplay {display:inline;border:none;white-space:nowrap;width:90%;max-width:400px}
	li.TableControls {float:none;display:inline;padding:0px 0px 0px 20px;height:auto;border:none}
	ul.TableControlsUL {display:inline;float:right;padding:0px 0px 20px 0px}

	/* show the icon used to edit a display next to the display select box */
	/* NOTE: This icon now continues to be hidden.  It creates clutter */
	div.DisplayDialogIconEditDisplay {display:none;padding:10px 32px 10px 0px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_search_black_18dp_2x.png") no-repeat center;}

	/* add the refresh icon to the table icons */
	/* this icon is not left hidden.  It creates clutter */
	li.TableIconRefresh {display:none}

	/* icon used to edit display.  Hidden for small screen.  */
	div.DisplayDialogIconEditDisplay {display:inline;padding:10px 32px 10px 0px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_search_black_18dp_2x.png") no-repeat center;}
}

/************** [5] Screen width >=959px **************/
@media only screen and (min-width:959px) {
	select {font-size:__EmFactor3__;padding:0px 0px 0px 0px}
	option {font-size:__EmFactor3__}
	input {font-size:__EmFactor3__}
	body {font-size:__EmFactor3__}
	p {font-size:__EmFactor3__}
}

/************** [5] Screen width >=1281px **************/
@media only screen and (min-width:1281px) {
	/* add a small margin to the left of the top menu */
	#MenuBarComtainer {padding-left:0.0%;width:100%}

	/* adjust size of list items in menu bar */
	ul.MenuBar li {font-size:__EmFactor4__}

	/* adjust widths of menu bar items */
	#UISelectedUser {width:30%;max-width:200px;height:24px}
	#UISelectedComputer {width:30%;max-width:200px;height:24px}
	#UISelectedView {width:30%;max-width:200px;height:24px}
	#UISettings {width:45px;height:24px}

	/* adjust icon sizes and dimensions */
	#UISelectedUserIcon {padding:24px 0px 0px 24px;width:24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_perm_identity_black_24dp_1x.png") no-repeat left;}
	#UISelectedComputerIcon {padding:24px 0px 0px 24px;width:24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_laptop_windows_black_24dp_1x.png") no-repeat left;}
	#UISelectedViewIcon {padding:24px 0px 0px 24px;width:24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_web_black_24dp_1x.png") no-repeat left;}
	#UISettingsIcon {padding:24px 0px 0px 24px;width:24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_menu_black_24dp_1x.png") no-repeat left;}
	
	/* adjust dimensions of text in the menu bar */
	#UISelectedUserText {padding:0px 0px 0px 5px;line-height:24px;}
	#UISelectedComputerText {padding:0px 0px 0px 5px;line-height:24px;}
	#UISelectedViewText {padding:0px 0px 0px 5px;line-height:24px;}
	#UISettingsText {padding:0px 0px 0px 5px;line-height:24px;}

	/* adjust size of select boxes */
	select {font-size:__EmFactor4__;padding:0px 0px 0px 0px}
	option {font-size:__EmFactor4__}
	input {font-size:__EmFactor4__}
	body {font-size:__EmFactor4__}
	p {font-size:__EmFactor4__}

	/* adjust size of view title */
	div.view_title1 {font-size:__EmFactor4__;}

	/* styles for the view tab and image used to close the tab */
	div.ViewTabCloseIcon {padding-left:24px;line-height:24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_24dp_1x.png") no-repeat center;}
	
	#DELETEUILeftBarIcon {display:inline;padding-left:16px;padding-right:16px;height:12px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=menu12x12.png") no-repeat center;}

	/* Name of source computer displayed in view title */
	div.view_source_name {width:auto;font-weight:bold;display:block;float:left}

	/* Show elapsed time for view to load.  It's hidden for small screens */
	div.view_elapsed_time {font-weight:bold;display:block;float:left}

	/* adjust size of image displayed at top of view to refresh the view */
	div.view_refresh {width:25px;height:20px;border:none;float:right;position:relative;top:-5px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_refresh_black_24dp_1x.png") no-repeat center;}

	/* adjust size of image displayed at top of view to close the view */
	div.view_close {width:25px;height:20px;float:right;position:relative;top:-5px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_24dp_1x.png") no-repeat center;}

	#OutputSelectContainer {display:none;}
	#OutputTabs {display:block}

	/* the dimensions of this div are used to set the dimensions of all controls in the dialog */
	div.DisplayDialogFormContainer {width:500px;height:375px}
	div.DisplayDialog {left:40px;top:40px;padding:5px;width:500px}

	/* display name and icone used to save, delete displays */
	ul.ULDisplayDialogNameAndIcons {width:100%;margin:0px;padding:0px;overflow-y:auto}
	ul.ULDisplayDialogNameAndIcons select {width:100%}
	ul.ULDisplayDialogNameAndIcons li {width:auto;float:left;display:block;list-style-type:none}
	li.ULDisplayDialogNameAndIconsName {width:70%;}
	li.ULDisplayDialogNameAndIconsIcons {width:25%;}

	/* switch between tabs and a select box to select divs in the display dialog */
	div.DisplayDialogTabSelectContainer {display:none}
	div.DisplayDialogTabTableContainer {display:block}

	/* icons for display dialog */
	div.DisplayDialogIconSave {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_folder_open_black_24dp_1x.png") no-repeat center;}
	div.DisplayDialogIconSaveAs {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_add_black_24dp_1x.png") no-repeat center;}
	div.DisplayDialogIconRestore {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_refresh_black_24dp_1x.png") no-repeat center;}
	div.DisplayDialogIconDelete {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_remove_black_24dp_1x.png") no-repeat center;}
	div.DisplayDialogIconOk {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_done_black_24dp_1x.png") no-repeat center;}
	div.DisplayDialogCloseIcon {display:block;float:right;cursor:pointer;width:32px;height:32px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_24dp_1x.png") no-repeat center;}

	/************************************************************************
	 styles for controls in table header 
	*************************************************************************/
	/*	li containing each element in the table header 
			Display them inline
	*/
	li.TableHeaderSelectDisplay {display:inline;border:none;white-space:nowrap;width:90%;max-width:400px}
	li.TableHeaderAddDelete {display:inline;border:none;padding:0px 0px 0px 20px}
	li.TableHeaderLISub1 {display:inline;border:none;padding:0px 0px 0px 20px}
	li.TableControls {float:none;display:inline;padding:0px 0px 0px 20px;height:auto;border:none}

	ul.TableControlsUL {padding:0px 0px 10px 0px}
	
	/* icon used to edit display */
	div.DisplayDialogIconEditDisplay {padding:0px 0px 0px 30px;height:24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_search_black_24dp_1x.png") no-repeat center;}

	/*	reduce font size in table menu */
	div.TableMenu li {font-size:__EmFactor4__;}

	/************************************************************************
	styles for dialog header
	*************************************************************************/
	span.DialogHeaderIconAdd {padding:5px 0px 5px 24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_add_black_24dp_1x.png") no-repeat center;} 
	span.DialogHeaderIconDelete {padding:5px 0px 5px 24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_remove_black_24dp_1x.png") no-repeat center;} 
	span.DialogHeaderIconFirst {padding:5px 0px 5px 24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_skip_previous_black_24dp_1x.png") no-repeat center;} 
	span.DialogHeaderIconPrev {padding:5px 0px 5px 24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_navigate_before_black_24dp_1x.png") no-repeat center;} 
	span.DialogHeaderIconNext {padding:5px 0px 5px 24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_navigate_next_black_24dp_1x.png") no-repeat center;} 
	span.DialogHeaderIconLast {padding:5px 0px 5px 24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_skip_next_black_24dp_1x.png") no-repeat center;} 
	span.DialogHeaderIconClose {padding:5px 0px 5px 24px;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_24dp_1x.png") no-repeat center;} 

	/************************************************************************
	Styles for table info dialog
	*************************************************************************/
	div.TableInfoCloseIcon {padding:0px 0px 0px 24px;height:24px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_24dp_1x.png") no-repeat center;} 

	/****************************************************************
	 styles for select box mirror in the views popup 
	*****************************************************************/
	#UIOutputSelectMirrorClose {padding:12px 0px 12px 24px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_clear_black_24dp_1x.png") no-repeat center;} 
	#UIOutputSelectMirrorRefresh {padding:12px 0px 12px 24px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_refresh_black_24dp_1x.png") no-repeat center;} 

	/* styles for tabs in tab dialogs.  JS sets the class to one of these */
	span.tabdialogtabselected	{font-size:__EmFactor4__;text-decoration:none;color:black;font-weight:bold;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color:#e9e9e9;background:url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png") 100% 0}
	span.tabdialogtabunselected {font-size:__EmFactor4__;text-decoration:none;color:black;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color:#e9e9e9;background:url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png") 100% 0}

	/* icons for table icons - graph, print, next, prev... */
	li.TableIconMenu {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_more_horiz_black_24dp_1x.png") no-repeat center;}	
	li.TableIconInfo {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=info20x20.png") no-repeat center;}	
	li.TableIconExport {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=download20x20.png") no-repeat center;} 
	li.TableIconPrint {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=print20x20.png") no-repeat center;} 
	li.TableIconGraph {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_equalizer_black_24dp_1x.png") no-repeat center;} 
	/* the refresh icon is now hidden.  It creates clutter */
	li.TableIconRefresh {display:none;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_refresh_black_24dp_1x.png") no-repeat center;} 
	li.TableIconFirst {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_skip_previous_black_24dp_1x.png") no-repeat center;} 
	li.TableIconPrev {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_navigate_before_black_24dp_1x.png") no-repeat center;} 
	li.TableIconNext {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_navigate_next_black_24dp_1x.png") no-repeat center;} 
	li.TableIconLast {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_skip_next_black_24dp_1x.png") no-repeat center;} 
	li.TableIconAdd {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_add_black_24dp_1x.png") no-repeat center;} 
	li.TableIconDelete {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url("__RequestServer__/?network=greenlight&id=getimage&filename=ic_remove_black_24dp_1x.png") no-repeat center;} 
}


</widget><widget name="javascript 2012" group="Javascript" category="" description="" type="Simple" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Javascript 2012" modified="10-06-2015 02:02:18" modifiedby="Thnikpad" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=09-03-2015 15:23:24:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
var PendingSubmissionBackgroundColor="#f5f5a3"

var imageStatusActive=new Image();
imageStatusActive.src="__RequestServer__/?Network=Greenlight&ID=getImage&filename={@replacesubstring(getToken("packageurl_aspect_software_net_core"),"\","/")}core/doc/images/StatusActive01.gif";

var imgOverlay=new Image();
imgOverlay.src="__RequestServer__/?Network=GreenLight&ID=getImage&filename=disableoverlay.png";

//This is set to true for mobile devices in TCacheWidget:initializeWidgetContainer()
var bIsMobileDevice=false;

//Set by mergeList() in the widget container when all items have been loaded.  Used to avoid updating url's in refreshWidgets()
//that are in processed items with the ID __processed before they have been moved to the actual item.
var bContainerLoaded=false;

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-61801084-1', 'auto');
  ga('send', 'pageview');

/*************************************************************************
Gets the coordinates that would be used to position the element using 
fixed positioning.  Called by getPosition2012().
*************************************************************************/
//for debugging
var sPositionLog="";

function getOrientation(){
    return((Math.abs(window.orientation) - 90==0) ? "landscape" : "portrait");
};

function getFixedCoord(e) {
	sPositionLog +="getPosition for "+e.id+"\r\n";
	var topValue=0,leftValue=0;

	//get fixed coordinates
	var e2=e;
	var bDone=false;
	while((e2) && (bDone==false)) {
		if(e2.style) {
			var sNodeName=(e2.nodeName) ? e2.nodeName : "";
			leftValue+=e2.offsetLeft;
			topValue+=e2.offsetTop;
			sPosition=e2.style.position;
			if(sPosition.equalsIgnoreCase("fixed")) bDone=true;
			sPositionLog +="offset ["+sNodeName+":"+sPosition+"] "+e2.id+" x="+e2.offsetLeft+" y="+e2.offsetTop+" left="+leftValue+" top="+topValue+"\r\n";
		};
		e2=e2.offsetParent;
	};

	//adjust for scrolling
	bDone=false;
	var e2=e;
	while((e2) && (!bDone)) {
		var sNodeName=(e2.nodeName) ? e2.nodeName : "";
		if(e2.style) {
			if(sNodeName.equalsIgnoreCase("body")) {
				if(e2.scrollLeft) leftValue -=e2.scrollLeft;
				if(e2.scrollTop) topValue -=e2.scrollTop;
				sPositionLog +="scroll ["+sNodeName+":"+sPosition+"] "+e2.id+" x="+e2.scrollLeft+" y="+e2.scrollTop+" left="+leftValue+" top="+topValue+"\r\n";
			}
			else {
				sPosition=e2.style.position;
				if(sPosition.equalsIgnoreCase("fixed")) {
					bDone=true;
				}
				else {
					//Note: Checking for auto in the width and height addresses a situation with items in widget containers that
					//have width and height set to auto but also have the autoscroll property set to true.  If this was not here,
					//an item with a scrollbar would be positioned too high on the page.  Editing the call log item after scrolling
					//down the calls is an example.
					if(e2.scrollLeft) {
						if(e2.style.width.equalsIgnoreCase("auto")) {
						}
						else {
							leftValue -=e2.scrollLeft;
						};
					};
					if(e2.scrollTop) {
						if(e2.style.height.equalsIgnoreCase("auto")) {
						}
						else {
							topValue -=e2.scrollTop;
						};
					};
				};
				sPositionLog +="scroll ["+sNodeName+":"+sPosition+"] "+e2.id+" x="+e2.scrollLeft+" y="+e2.scrollTop+" left="+leftValue+" top="+topValue+"\r\n";
			};
		};
		e2=e2.parentNode;
	};

	return(new Array(leftValue,topValue));
};

/*************************************************************************
Returns an array containing the left and top values for positioning an
element using either fixed or absolute.  
e		- The element on which the positioning is based 
Method	- fixed or absolute
eParent	- The parent element to which the positioned element will be added
*************************************************************************/
function getPosition2012(e,Method,eParent)
{
	var bDebug=false;
	sPositionLog="";

	//get the coordinates that would be used to position the item using "fixed"
	var arXY=getFixedCoord(e);

	if(bDebug) {
		var eFixed1=document.getElementById("DebugPositioning1");
		if(!eFixed1) {
			eFixed1=document.createElement("div");
			eFixed1.id="DebugPositioning1";
			eFixed1.style.position="fixed";
			eFixed1.style.background="yellow";
			eFixed1.style.zIndex="99";
			eFixed1.style.width="60px";
			eFixed1.style.height="10px";
			eFixed1.innerHTML="fixed-1";
			document.getElementsByTagName('BODY')[0].appendChild(eFixed1);
		};
		eFixed1.style.left=arXY[0]+"px";
		eFixed1.style.top=arXY[1]+"px";
	};
	
	//if method is absolute, make coordinates relative to parent
	if(Method.equalsIgnoreCase("absolute")) {
		if(eParent) {
			sPositionLog+="Converting to relative coordinates\r\n";
			var ParentXY=getFixedCoord(eParent);

			if(bDebug) {
				var eFixed2=document.getElementById("DebugPositioning2");
				if(!eFixed2) {
					eFixed2=document.createElement("div");
					eFixed2.id="DebugPositioning2";
					eFixed2.style.position="fixed";
					eFixed2.style.background="yellow";
					eFixed2.style.zIndex="99";
					eFixed2.style.width="60px";
					eFixed2.style.height="10px";
					eFixed2.innerHTML="fixed-2";
					document.getElementsByTagName('BODY')[0].appendChild(eFixed2);
				};
				
				eFixed2.style.left=ParentXY[0]+"px";
				eFixed2.style.top=ParentXY[1]+"px";
			};
			
			sPositionLog +="Parent X="+ParentXY[0]+" Y="+ParentXY[1]+"\r\n";
			arXY[0] -=ParentXY[0];
			arXY[1] -=ParentXY[1];
			sPositionLog +="New X="+arXY[0]+" Y="+arXY[1]+"\r\n";
		}
		else {
			alert("Missing parent element in getPosition()");
		};
	};

		
	if(bDebug) appendToLog(sPositionLog,false,true);
	return arXY;
};

function getPosition2012old(e,Method,eParent)
{
	var topValue=0,leftValue=0;

	//calculate offset
	var e2=e;
	var bDone=false;
	while((e2) && (bDone==false)) {
		leftValue+=e2.offsetLeft;
		topValue+=e2.offsetTop;
		e2=e2.offsetParent;
		if((e2) && (Method.equalsIgnoreCase("absolute"))) {
			var s=e2.style.position;
			if((s) && (s.equalsIgnoreCase("absolute"))) bDone=true;
		};
	};

	//adjust for scrolling
	var e2=e;
	while(e2){
		//This differs from javascript1 because the page is not in an iframe
		var sNodeName=(e2.nodeName) ? e2.nodeName : "";
		
		//only account for scrolling of the body element when the method is fixed.  This was modified then tooltips
		//were changed to fixed positioning.  The tooltips require body scrolling to be included.  However, table
		//dialogs, which use absolute positioning, require scrolling of the body to be ignored
		if((Method.equalsIgnoreCase("fixed")) || (e2.nodeName.equalsIgnoreCase("body")==false)) {
			if(e2.scrollLeft) leftValue -=e2.scrollLeft;
			if(e2.scrollTop) topValue -=e2.scrollTop;
		};
		
		e2=e2.parentNode;
	};
	
	var arXY=new Array(leftValue,topValue);
	return arXY;
};

/******************************************************************************************************
Debugging
******************************************************************************************************/
function appendToLog(msg,boolClear,bAddToActivityLog) {
	var strMsg=replaceAllSubstrings(replaceAllSubstrings(msg,"<","&lt;"),">","&gt;");
	var strMsg=replaceAllSubstrings(msg,"&","@");

	//add the message to the Aspect activity log
	if(bAddToActivityLog) {
		if("{AspectHashID}"=="4idczse67") {
			//var strUrl="https://127.0.0.1:{greenlight_client_https_port}/?Network=GreenLight&ID=execScript&ScriptID=GreenLight_appendToLog&msg=Browser: "+strMsg;
			//var strUrl=getServer()+"/?Network=GreenLight&ID=execScript&ScriptID=GreenLight_appendToLog&msg=Browser: "+strMsg;
			var strUrl=getServer()+"/?Network=GreenLight&ID=appendToLog&msg=Browser: "+strMsg;
			asynchInclude(null,strUrl); 
		};
	};
	
	var e=document.getElementById("debug_console");
	if (e) {
		strMsg=formatDate(new Date(),"HH:mm:ss")+" "+strMsg;
		(boolClear) ? e.innerHTML=strMsg+"<br>" : e.innerHTML+=strMsg+"<br>";
	};
};

/******************************************************************************************************
INITIALIZATION FUNCTIONS
******************************************************************************************************/
var intRefreshingWidgets=0;

function aspectinit()
{
	refreshWidgets();
	initializeTabbedDialogs();
	
	//set unique identifier for this browser
	var s=getCookie("webid");
	if((!s) || (s.trim().length==0)) {
		setCookie("webid",getSalt(6));
	};
};

function logout()
{
	var CloseSessionID=getCookie("session");
	deleteCookie("session");
	window.open(getServer()+"/?Network=Greenlight&ID=getWidget&DocumentID=&Widget=&TargetPage=&CloseSession="+CloseSessionID,"_self");
};

function isMobileDevice()
{
	if(navigator.userAgent.toUpperCase().indexOf("MOBILE")>=0) return(true);
	return(false);
};

function switchToDesktop() {
	window.open(getServer()+"/?Network=Greenlight&ID=getWidget&RequestDesktop=true","_self");
};

function switchToMobile() {
	window.open(getServer()+"/?Network=Greenlight&ID=getWidget&RequestMobile=true","_self");
};

/******************************************************************************
Returns the protocol and host in the form http://xxx.xxx.xxx.xxx:xxxx/
******************************************************************************/
function getServer() {
	return(window.location.protocol+"//"+window.location.host);
};

/******************************************************************************
Returns the host name and port in the form xxx.xxx.xxx.xxx:xxxx
******************************************************************************/
function getHost() {
	return(window.location.host);
};

/******************************************************************************
Returns the name part of the host
******************************************************************************/
function getHostName() {
	return(window.location.hostname);
};

/******************************************************************************
Returns the port number of host
******************************************************************************/
function getPort() {
	return(window.location.port);
};

/******************************************************************************
Returns the protocol (http: or https:)
******************************************************************************/
function getProtocol() {
	return(window.location.protocol);
};

/******************************************************************************
Returns the path of the current url
******************************************************************************/
function getPathname() {
	return(window.location.pathname);
};

/******************************************************************************************************
FUNCTIONS USED TO DISPLAY SYSTEM DIALOG

The showDialog function is called to display the dialog.  params is a & delimited string of 
arguments.  The following arguments can be defined:

icon - If the value is true, a status icon is displayed before the message
msg - the message to be displayed.  

(these arguments cause a button to be displayed when defined.  The argument defines the
 function to be called when the button is pressed.  For example fnOK=myfunction()&fnCancel=
 The value can also be 'close' which will just hide the dialog without calling a function
fnOk
fnYes
fnNo
fnCancel
fnOther1 - Pass a value in Other1 to set the label of the button
fnOther2 - ""			    
fnOther3 - ""			    

Quotes can be included in the function definitions by using $q

examples:
showDialog('icon=true&msg=this is a test')
showDialog('icon=true&msg=this is a test&top=200&left=200&width=400&height=100')
showDialog('icon=true&msg=this is a test&fnOk=alert($qtest$q)&fnCancel=close')
showDialog('icon=true&msg=this is a test&fnOk=alert($qtest$q)&fnOther1=alert($qOther$q)&Other1=Other&fnCancel=close')
showDialog('close')
******************************************************************************************************/
var bShowingSystemDialog=false;

function showDialog(params)
{
	//always close the dialog to avoid multiple ones being opened 
	var e=document.getElementById("SystemDialog");
	if(e) document.body.removeChild(e);

	//if no params were passed, just exit after closing the dialog
	if(!params) return;
	
	var d=document.createElement('div');
	d.id="SystemDialog";
	
	d.style.zIndex=99;
	d.className="showdialog";
	//d.style.width=(bIsMobileDevice) ? "270px" : "300px";
	d.style.width="75%";
	d.style.maxWidth="300px";
	
	var bTopSpecified=false;
	var bLeftSpecified=false;

	var arCommands=new Array("ICON","MSG","LEFT","TOP","WIDTH","HEIGHT","FNOK","FNYES","FNNO","FNCANCEL","FNOTHER1","FNOTHER2","FNOTHER3","POSITION");
	aParams=getSubStringArray(params,"&",true);
	for (var i=0;i<aParams.length;i++) {
		var n=aParams[i].indexOf("=");
		if(n>0) {
			var sName=aParams[i].substring(0,n);
			var sNameUpper=sName.toUpperCase();
			var sValue=aParams[i].substring(n+1);
			if(sValue.equalsIgnoreCase("close")) sValue="showDialog()";
			
			var iCommand=-1;
			for (var j=0;j<arCommands.length;j++) {
				//alert("j="+j+" arCommands[j]="+arCommands[j]);
				if(sName.equalsIgnoreCase(arCommands[j])) iCommand=j;
			};
			
			//alert("sName="+sName+" sValue="+sValue+" iCommand="+iCommand+" len="+arCommands.length);
			switch(iCommand) {
				case  0:	var img=new Image();
						img.src=imageStatusActive.src;
						img.style.paddingRight="10px";
						d.appendChild(img);
						break;
				case  1:	//this method allows for html tag inside the message.  The Aspect6 install uses them.
						var t=document.createElement("span");
						t.innerHTML=sValue;
						d.appendChild(t);
						
						/* this method doesn't
						var t=document.createTextNode(sValue);
						d.appendChild(t);
						d.appendChild(document.createElement("br"));
						d.appendChild(document.createElement("br"));
						*/
						break;
				case  2:	d.style.left=sValue;
									bLeftSpecified=true;
						break;
				case  3:	d.style.top=sValue;			
									bTopSpecified=true;
						break;
				case  4:	d.style.width=sValue;
						break;
				case  5:	d.style.height=sValue;
						break;
				case  6:	
				case  7:
				case  8:
				case  9:	var b=document.createElement("input");
						b.setAttribute('type','button');
						b.setAttribute('name',sName.substring(2));
						b.setAttribute('value',sName.substring(2));
						b.setAttribute("onclick",sValue);	//this works for firefox
						b.onclick=Function(sValue);		//this works for IE
						d.appendChild(b);
						break;
				case 10:
				case 11:
				case 12:	break;
				case 13: d.style.position=sValue;
			};
		};
	};

	document.body.appendChild(d);

	//set top and left position if not specified
	if(!bLeftSpecified) {
		//position in the middle of the screen
		var Middle=document.body.offsetWidth/2 - d.offsetWidth/2;
		d.style.left=Middle+"px";
	};

	if(!bTopSpecified) {
		d.style.top="100px";
	};
};

function showDialogSub(t,top,left,width,height)
{
	//appendToLog("showDialogSub");
	bShowingSystemDialog=false;
	var e=document.getElementById("SystemDialogContainer");
	if(!e) {
		e=document.createElement("div");
		e.id="SystemDialogContainer";
		document.body.appendChild(e);
	};

	e.style.zIndex=99;
	e.innerHTML=t;

	var e2=document.getElementById("SystemDialog");
	if(e2) {
		(top==0) ? e2.style.top="100px" : e2.style.top=top+"px";
		(left==0) ? e2.style.left="100px" : e2.style.left=left+"px";
		(width==0) ? e2.style.width="300px" : e2.style.width=width+"px";
		(height==0) ? e2.style.height="auto" : e2.style.height=height+"px";
	};
	setVisible(e,true);
};

function oldshowDialog(params,count) {
	//appendToLog("showDialog params="+params+" count="+count);

	if(!params) {
		//If the system dialog is still initializing, then wait 1 second and try again to hide it
		//Otherwise, the dialog will not be hidden if the dialog is shown and then hidden before it becomes visible
		(bShowingSystemDialog) ? setTimeout("showDialog()",1000) : setVisible("SystemDialogContainer",false);
		return;
	};

	bShowingSystemDialog=false;

	//var strUrl="http://127.0.0.1:{greenlight_client_http_port}/?Network=GreenLight&ID=getCachedWidget&DocumentID=77NaWu0FhKDKXL7C70JpnKmy&Widget=HTML Status Message";
	var strUrl=getServer()+"/?Network=GreenLight&ID=getCachedWidget&DocumentID=77NaWu0FhKDKXL7C70JpnKmy&Widget=HTML Status Message";
	if (params) strUrl +="&"+params;

	//Try to load the dialog up to 5 times if an error occurs
	//Count will only be defined if an error has occurred in asynchInclude
	var n=0;
	if(count) {
		if(count>5) {
			alert("An error has occurred.	Please refresh the page.");
			return;
		};
		n=count+1;
		setTimeout("showDialog(\""+params+"\","+n+")",1000);
		return;
	};

	var t=getElementValue(params,"top","&");
	var l=getElementValue(params,"left","&");
	var w=getElementValue(params,"width","&");
	var h=getElementValue(params,"height","&");

	(t.length>0) ? t=parseInt(t) : t=0;
	(l.length>0) ? l=parseInt(l) : l=0;
	(w.length>0) ? w=parseInt(w) : w=0;
	(h.length>0) ? h=parseInt(h) : h=0;

	var sFuncOk="showDialogSub(req.responseText,"+t+","+l+","+w+","+h+")";
	var sFuncErr="showDialog(\""+params+"\",1)";
	bShowingSystemDialog=true;
	asynchInclude(null,strUrl,sFuncOk,sFuncErr);
};

/******************************************************************************************************
FUNCTIONS USED FOR DROP-DOWN MENUS
******************************************************************************************************/
var timerDropDownMenu=null;

// open drop-down list
function menuOpen(id) {	
	menuCancelTimeout();
	menuCloseAll();
	setVisible(id,true);
};

// close drop-down list
function menuCloseAll() {
	var arMenu=document.getElementsByTagName("div");
	for (var i=0;i<arMenu.length;i++) {
		if (arMenu[i].getAttribute("isMenu")) setVisible(arMenu[i],false);
	};
};

//go close timer
function menuSetTimeout()	{
	//The timeout here is important.  If it is too short, the menu will disappear in IE before the mouse is moved to a selection
	timerDropDownMenu=window.setTimeout("menuCloseAll()",500);
};

// cancel close timer
function menuCancelTimeout() {
	if(timerDropDownMenu) {
		window.clearTimeout(timerDropDownMenu);
		timerDropDownMenu=null;
	};
};

/******************************************************************************************************
FUNCTIONS USED FOR TABBED DIALOG
******************************************************************************************************/
function setDialogTabStyle(aCell,aLink,bSelected) {
	if(!aCell) return;
	
	if (bSelected) {
		aLink.className="tabdialogtabselected";
		//aLink.style.color="black";
		//aLink.style.fontWeight="bold";
		//aCell.style.backgroundColor="#e9e9e9";
	}
	else {
		aLink.className="tabdialogtabunselected";
		//aLink.style.color="black";
		//aLink.style.fontWeight="normal";
		//aCell.style.backgroundColor="#e9e9e9";
	};
};

//Searches for tabbed dialogs and sets the style of the default tab.  Called directly and by refreshWidgets() every second.
function initializeTabbedDialogs() {
//appendToLog("initializeTabbedDialogs started",false,true);
	//initialize all tabbed dialogs
	var arTable=document.getElementsByTagName("TABLE");

	for (var i=0;i<arTable.length;i++) {
		if(!boolVal(arTable[i].getAttribute("tabsInitialized")))
		{
			var bAllTabsLoaded=true;
			var bInitialized=false;
			var arTableRow=arTable[i].getElementsByTagName("tr");
			for (var j=0;j<arTableRow.length;j++) {
				var arTableCell=arTableRow[j].getElementsByTagName("td");
				for (var k=0;k<arTableCell.length;k++) {
					var arChild=arTableCell[k].childNodes;
					for (var l=0;l<arChild.length;l++) {
						if ((arChild[l].nodeName.equalsIgnoreCase("A")) || (arChild[l].nodeName.equalsIgnoreCase("SPAN"))) {
							if(arChild[l].onclick) {
								var str1=String(arChild[l].onclick);
								if(str1.toUpperCase().indexOf("SHOWTAB")>=0) {
									var n1=str1.toUpperCase().indexOf("SHOWTAB(");
									var n2=str1.indexOf(")",n1);
									var str2=str1.substring(n1+8,n2);
									var arStr=getSubStringArray(str2,",",true);
									var s=replaceAllSubstrings(replaceAllSubstrings(arStr[1],"'",""),"\"","");
									var arTabName=getSubStringArray(s,"|");

									//see if all tabs have been loaded completely before setting the TabsInitialized attribute to true
									for(var cTab=0;cTab<arTabName.length;cTab++) {
										if(arTabName[cTab].length>0) {
											var eCheckLoaded=document.getElementById(arTabName[cTab]);
											if(!eCheckLoaded) {
												//the item has not been loaded at all
												bAllTabsLoaded=false;
											}
											else {
												//sLoaded is defined when the element is a container item.  This extra check makes sure the item
												//has been completely loaded by the container, including items that may require processing.  Not
												//all elements will have sLoaded defined.  For example, the dialog used to edit an item in a container
												//will not have sLoaded defined.
												var sLoaded=eCheckLoaded.getAttribute("IsLoaded");
												if(sLoaded) {
													//the item has been loaded but has not been flagged as completely loaded by the container
													if(sLoaded.equalsIgnoreCase("true")==false) bAllTabsLoaded=false;
												};
											};
										};
									};

									if(bInitialized) {
										setDialogTabStyle(arTableCell[j],arChild[l],false);
										for(var cTab=0;cTab<arTabName.length;cTab++) setVisible(arTabName[cTab],false);
									}
									else {
										setDialogTabStyle(arTableCell[j],arChild[l],true);
										for(var cTab=0;cTab<arTabName.length;cTab++) {
											//give consideration to widget containers and don't display tabs that are not flagged as visible
											var eItem=document.getElementById(arTabName[cTab]);
											if(eItem) {
												var sAttr=eItem.getAttribute("visible");
												if(sAttr) {
													if(sAttr instanceof String) {
														if(sAttr.equalsIgnoreCase("true")) setVisible(arTabName[cTab],true);
													}
													else {
														if(sAttr==true) setVisible(arTabName[cTab],true);
													}
												}
												else {
													setVisible(arTabName[cTab],true);
												};
											}
											else {
												setVisible(arTabName[cTab],true);
											};
										};

										//record the currently selected tab so it can be displayed if the table and it's tab contents are hidden
										arTable[i].setAttribute("SelectedTab",s);
										
										//appendToLog(strTabName+" visible");
										bInitialized=true;
									};
								};
							};
						};
					};
				};
			};
			arTable[i].setAttribute("tabsInitialized",bAllTabsLoaded);
		};
	};

	//initialize all select boxes
	var arSelect=document.getElementsByTagName("SELECT");
	for (i=0;i<arSelect.length;i++) 
	{
		var s=String(arSelect[i].onchange);
		if(s.toUpperCase().indexOf("SHOWTAB")>=0) 
		{
			//The dialog header includes a select box containing the ID of every record in the table.  Do not treat this as a tab selector
			//because spans or divs used in the table with the record ID as the ID will be hidden.  This occurs in the notifications table
			//when the ID of the record is used to create a span tag used to view a notification
			var bIsDialogHeader=false;
			if(arSelect[i].onchange) {
				var sOnChange=String(arSelect[i].onchange);
				bIsDialogHeader=sOnChange.toUpperCase().indexOf("DIALOGRECORDSELECTED")>=0;
			};

			if((bIsDialogHeader==false) && (arSelect[i].options.length>0)) {
				if(!boolVal(arSelect[i].getAttribute("tabsInitialized"))) {
					bAllTabsLoaded=true;
					for (var j=0;j<arSelect[i].options.length;j++) 
					{
						if(arSelect[i].options[j].value.length>0) {
							var arItems=getSubStringArray(arSelect[i].options[j].value,"|",true);
							for(var k=0;k<arItems.length;k++) {
								if (document.getElementById(arItems[k])) {
									setVisible(arItems[k],arSelect[i].options[j].selected);
								}
								else {
									bAllTabsLoaded=false;
								};
							};
						};
					};
					arSelect[i].setAttribute("tabsInitialized",bAllTabsLoaded);
				};
			};
		};
	};

	//initialize all drop-down menus
	menuCloseAll();
//appendToLog("initializeTabbedDialogs complete",false,true);
};

/*
Returns an array of all child elements in e where e is a table of tabs, a select element
or a span element containing a drop-down menu.  The child elements are the ID's 
associated with each element in the control.  An ID may contain one or more ID's
separated by pipes (e.g. div1|div2|div3.  
*/
function getTabIDs(e)
{
	var arChildID=new Array();
	
	if(e.nodeName.equalsIgnoreCase("table")) {
		var arTableRow=e.getElementsByTagName("tr");
		for (var i=0;i<arTableRow.length;i++) {
			var arTableCell=arTableRow[i].getElementsByTagName("td");
			for (var j=0;j<arTableCell.length;j++) {
				var arChild=arTableCell[j].childNodes;
				for (var k=0;k<arChild.length;k++) {
					if ((arChild[k].nodeName.equalsIgnoreCase("A")) || (arChild[k].nodeName.equalsIgnoreCase("SPAN")))
					{
						var str1=String(arChild[k].onclick);
						var n1=str1.toUpperCase().indexOf("SHOWTAB(");
						var n2=str1.indexOf(")",n1);
						var str2=str1.substring(n1+8,n2);
						var arStr=getSubStringArray(str2,",",true);
						arChildID[arChildID.length]=replaceAllSubstrings(replaceAllSubstrings(arStr[1],"'",""),"\"","");
					};
				};
			};
		};
	}
	else if(e.nodeName.equalsIgnoreCase("span")) {
		var arLink=eDiv.getElementsByTagName("a");
		for (var i=0;i<arLink.length;i++) {
			var str1=String(arLink[i].onclick);
			var n1=str1.toUpperCase().indexOf("SHOWTAB(");
			var n2=str1.indexOf(")",n1);
			var str2=str1.substring(n1+8,n2);
			var arStr=getSubStringArray(str2,",",true);
			arChildID[arChildID.length]=replaceAllSubstrings(replaceAllSubstrings(arStr[1],"'",""),"\"","");
		};
	}
	else if(e.nodeName.equalsIgnoreCase("select")) {
		for (var i=0;i<e.options.length;i++) {
			var arStr=getSubStringArray(e.options[i].value,"|",true);
			for (var j=0;j<arStr.length;j++) {
				arChildID[arChildID.length]=arStr[j];
			};
		};
	};

	return(arChildID);
};

/*
Hides all child elements defined in e where e is a table of tabs, a select element
or a span element containing a drop-down menu
*/
function hideTabElements(e) {
	var arTabs=getTabIDs(e);
	if(arTabs) {
		for (var i=0;i<arTabs.length;i++) {
			var ar=getSubStringArray(arTabs[i],"|",true);
			//if(ar==null) alert("ar=null in hideTabElements");
			for (var j=0;j<ar.length;j++) {
				setVisible(ar[j],false);
			};
		};
	};
};

function showTab(eClicked,aName,InitializeTab) {
	appendToLog("showTab: "+eClicked+" Name: "+aName);
	if((eClicked.nodeName.equalsIgnoreCase("a")) || (eClicked.nodeName.equalsIgnoreCase("span")))
	{
		//get the table the hyperlink belongs to
		var eTable=null;
		var eDiv=null;
		var e=eClicked.parentNode;
		while ((e) && (!eTable) && (!eDiv)) {
			if(e.nodeName.equalsIgnoreCase("table")) eTable=e;
			if(e.nodeName.equalsIgnoreCase("div")) eDiv=e;
			e=e.parentNode;
		};
		
		if((!eTable) && (!eDiv)) {
			appendToLog("Cannot locate table containing tabs or div containing menu");
			return;
		};

		if(eTable)
		{
			//hide all divs and set the font for the selected/unselected tabs
			var arTableRow=eTable.getElementsByTagName("tr");
			for (var i=0;i<arTableRow.length;i++) {
				var arTableCell=arTableRow[i].getElementsByTagName("td");
				for (var j=0;j<arTableCell.length;j++) {
					var arChild=arTableCell[j].childNodes;
					for (var k=0;k<arChild.length;k++) {
						if ((arChild[k].nodeName.equalsIgnoreCase("A")) || (arChild[k].nodeName.equalsIgnoreCase("SPAN")))
						{
							//hide all divs except the selected one
							var str1=String(arChild[k].onclick);
							var n1=str1.toUpperCase().indexOf("(THIS");
							var n2=str1.indexOf(")",n1);
							var str2=str1.substring(n1+1,n2);
							var arStr=getSubStringArray(str2,",",true);
							var sTabs=replaceAllSubstrings(replaceAllSubstrings(arStr[1],"'",""),"\"","");
							var arTabName=getSubStringArray(sTabs,"|");
							for(var cTab=0;cTab<arTabName.length;cTab++) {
								var bShow=(("|"+aName).toUpperCase().indexOf("|"+arTabName[cTab].toUpperCase())>=0);
								if(arTabName[cTab].length>0) {
									setVisible(arTabName[cTab],bShow);
									//appendToLog("setVisible: "+arTabName[cTab]+" Show="+bShow+" Equals aName:"+arTabName[cTab].equalsIgnoreCase(aName));
								};
								
								if(bShow) {
									eTable.setAttribute("SelectedTab",sTabs);
									if(InitializeTab) {
										var s="loadContent";
										if(eval('typeof '+s)=="function") {
											var eTab=document.getElementById(arTabName[cTab]);
											if(eTab) {
												var sInitialized=eTab.getAttribute("AspectTabInitialized");
												if((!sInitialized) || (!sInitialized.equalsIgnoreCase("true"))) {
													loadContent(arTabName[cTab],"InitializeTab=true");
													eTab.setAttribute("AspectTabInitialized",true);
												};
											};
										};
									};
								};
							};
							
							setDialogTabStyle(arTableCell[j],arChild[k],arChild[k]==eClicked);
							if(false) {
								//set the font for the tab
								if (arChild[k]==eClicked) {
									arChild[k].style.color="black";
									arChild[k].style.fontWeight="bold";
									arTableCell[j].style.backgroundColor="#48f";
								}
								else {
									arChild[k].style.color="black";
									arChild[k].style.fontWeight="normal";
									arTableCell[j].style.backgroundColor="#bdf";
								};
							};
						};
					};
				};
			};

			//Set the tabsinitialized flag.  This is for when a tab is selected manually before content has been fully loaded
			//If it is not set, the table will keep defaulting back to the original tab
			eTable.setAttribute("tabsInitialized",true);
		}
		else {
			//the control is a drop-down menu, so hide the menu and show the tab
			menuCloseAll();
			var arLink=eDiv.getElementsByTagName("a");
			for (var i=0;i<arLink.length;i++) {
				var str1=String(arLink[i].onclick);
				var n1=str1.toUpperCase().indexOf("SHOWTAB(");
				var n2=str1.indexOf(")",n1);
				var str2=str1.substring(n1+8,n2);
				var arStr=getSubStringArray(str2,",",true);
				var strTabName=replaceAllSubstrings(replaceAllSubstrings(arStr[1],"'",""),"\"","");
				setVisible(strTabName,strTabName.equalsIgnoreCase(aName));
			};
			
			var arSpan=eDiv.getElementsByTagName("span");
			for (var i=0;i<arSpan.length;i++) {
				var str1=String(arSpan[i].onclick);
				var n1=str1.toUpperCase().indexOf("SHOWTAB(");
				var n2=str1.indexOf(")",n1);
				var str2=str1.substring(n1+8,n2);
				var arStr=getSubStringArray(str2,",",true);
				var strTabName=replaceAllSubstrings(replaceAllSubstrings(arStr[1],"'",""),"\"","");
				setVisible(strTabName,strTabName.equalsIgnoreCase(aName));
			};
		};
	}
	else if (eClicked.nodeName.equalsIgnoreCase("select")) 
	{
		//the contol is a select box - so show the selected tab
		for (var i=0;i<eClicked.options.length;i++) {
			if(eClicked.options[i].value.length>0) {
				var arTabName=getSubStringArray(replaceAllSubstrings(replaceAllSubstrings(eClicked.options[i].value,"'",""),"\"",""),"|");
				for(var cTab=0;cTab<arTabName.length;cTab++) {
					if(arTabName[cTab].length>0) {
						var e=document.getElementById(arTabName[cTab]);
						if(e) {
							//show/hide elements
							setVisible(e,eClicked.options[i].selected);
						};
					};
				};
			};
		};
	};
	
};

/******************************************************************************************************
Cookie functions
******************************************************************************************************/
function setCookie(name,value,exp_y,exp_m,exp_d,path,domain,secure) {
	var sCookie=name + "=" + escape(value);

	if (exp_y) {
		var expires=new Date(exp_y,exp_m,exp_d);
		sCookie +="; expires=" + expires.toGMTString();
	}

	if (path) sCookie +="; path=" + escape(path);
	if (domain) sCookie +="; domain=" + escape(domain);
	if (secure) sCookie +="; secure";
	document.cookie=sCookie;
};

function getCookie(cookie_name) {
	var sResult=document.cookie.match ('(^|;) ?' + cookie_name + '=([^;]*)(;|$)');
	if(sResult) {
		return(unescape(sResult[2]));
	}
	else {
		return null;
	};
};

function deleteCookie(name) {
	setCookie(name,"",1970,1,1);
};

/******************************************************************************************************
TEXT FUNCTIONS
******************************************************************************************************/
function getSalt(n) {
	var arChars="0123456789abcdefghijklmnopqrstuvwxyz";
	var s="";
	for (var i=0;i<n;i++) {
		r=Math.floor(Math.random()*36);
		s +=arChars.charAt(r);
	};
	return(s);
};

/*
	Returns a unique numberic value for the given string.  The result is limited to 32 bits.
	The result is not guaranteed to be unique since strings can be of any length, but for 
	practical purposes it is.  This function is used to generate widget ID's in the reports
	container using the selected report and stores as the string.
*/
function getHashCode(s)
{
	var h=0;
	var off=0;
	var len=s.length;
	for (var i=0;i<len;i++) {
		h=31*h + s.charCodeAt(off);
		while(h>4294967296)  h -=4294967296;
		off++;
	};
	return(h.toString());
};

Array.prototype.indexOf=function(s){
	for(var i=0;i<this.length;i++) {
		if (typeof(this[i])=="string") {
			if(this[i].equalsIgnoreCase(s)) return(i);
		}
		else {
			if(this[i]==s) return(i);
		};
	};
	return(-1);
};

String.prototype.trim=function() {
	return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};

String.prototype.deleteCharAt=function(index) {
	if (index==0) return(this.substring(1));
	return this.substring(0,index) + this.substring(index+1);
};

String.prototype.startsWith=function(str){
    return (this.toUpperCase().indexOf(str.toUpperCase())===0);
}

String.prototype.equalsIgnoreCase=function(str){
	if(!str) return(false);
    return (this.toUpperCase()==str.toUpperCase());
}

String.prototype.setLength=function(len){
	if (len>this.length) return(this);
	return(this.substring(0,len));
}

	String.prototype.replaceAll=function(str1, str2, ignore) {
		return this.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),(ignore?"gi":"g")),(typeof(str2)=="string")?str2.replace(/\$/g,"$$$$"):str2);
	} ;

function replaceAllSubstrings(str,target,replacement) 
{
	if(!str) return("");
	return(str.replaceAll(target,replacement,false));
};

function oldreplaceAllSubstrings(str,target,replacement) 
{
	if(!str) return("");
	
	if (replacement.toUpperCase().indexOf(target.toUpperCase())>=0) {
		var s="The replacement: "+replacement+" includes the target: "+target+" while replacing\n"
		s +=target+"\nwith\n"+replacement;
		alert(s);
		return(str);
	};

	var n=-1;
	do {
		n=str.indexOf(target);
		if(n>=str.length) {
			appendToLog("replaceAllSubstrings target="+target+" replacement="+replacement+" n="+n+" str="+str,false,true);
			n=-1;
		}
		else {
			if (n>=0) str=str.substring(0,n)+replacement+str.substring((n+target.length),str.length);
		};
	} while (n>=0);

	return(str);
};

function quote(str) {
	return("\""+str+"\"");
};

Object.prototype.toType=function() {
  return ({}).toString.call(this).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
};

function getSubStringArray(Src,ADelimit,ARemoveQuotes)
{
	if(Src=="") {
		var arString=new Array();
		arString[0]="";
		return(arString);
	};

	if((!Src) || (Src==null)) {
		appendToLog("Src is null in getSubStringArray1",false,true);
		printStackTrace();
		return(null);
	};
	
	//check for non-string variable
	try {
		var Ch=Src.charAt(0);
	}
	catch(e) {
		printStackTrace();
		appendToLog("getSubStringArray: Error: "+e.toString(),false,true);
	};
	
	var Str1="";
	var Len=Src.length;
	var cDelimiters	=0;
	var LastIndex=0;
	var InQuotes=false;

	if (Len==0) return("");
	
	//initialize array for recording location of commas
	var arDelimit=new Array(Len+1);

	//get locations of delimiters
	for (var i=0;i<Len;i++) {
		var Ch=Src.charAt(i);
		if (Ch=='\x22') {
			InQuotes=!InQuotes;
		}
		else {
			if ((Ch==ADelimit) && (!InQuotes)) {
				arDelimit[cDelimiters]=i;
				cDelimiters++;
			};
		};
	};

	//fake a delimiter at the end of the string
	arDelimit[cDelimiters]=Len;
	cDelimiters++;
	
	var arString=new Array(cDelimiters);
	
	for (var i=0;i<cDelimiters;i++)	
	{
		Str1="";
		
		if (arDelimit[i]>LastIndex) 
		{
			Str1 +=Src.substring(LastIndex,arDelimit[i]);

			//remove quotes
			if (ARemoveQuotes) {
				if (Str1.length>0) {
					if (Str1.charAt(0)=="\x22") {
						Str1=Str1.deleteCharAt(0);
						if ((Str1.length>0) && (Str1.charAt(Str1.length-1)=='\x22')) {
							Str1=Str1.setLength(Str1.length-1);
						};
					};
				}
			};

			//trim
			Str1=Str1.trim();
			//while ((Str1.length>0) && (Str1.charAt(0)==' ')) Str1=Str1.deleteCharAt(0);
			//while ((Str1.length>0) && (Str1.charAt(Str1.length-1)==' ')) Str1=Str1.setLength(Str1.length-1);

			arString[i]=Str1;
		}
		else {
			arString[i]="";
		}

		LastIndex=arDelimit[i]+1;
	};

	if (false) {
		String1="";
		for (var i=0;i<arString.length;i++) String1 +=arString[i]+"\n";
		alert("arString="+String1);
	};

	return(arString);
};

//returns the element at the given index from the delimited array in str
function getElement(str,index,delimiter)
{
	arString=getSubStringArray(str,delimiter,true);
	if (index>=arString.length) {
		alert("index out of bounds in getElement("+str+","+index+","+delimiter+")");
		return("");
	};
	return(arString[index]);
};

//returns the value of the element with the given name in a delimited string of the form "name1=value2|name2=value2..."
function getElementValue(str,name,delimiter)
{
	if(str==null) {
		appendToLog("str is null in getElementValue for "+name,false,true);
		return("");
	};
	
	var arElement=getSubStringArray(str,delimiter,true);
	for (var i=0;i<arElement.length;i++) {
		var arString=getSubStringArray(arElement[i],"=",true);
		if (arString.length>0) {
			if (arString[0].equalsIgnoreCase(name)) {
				var strValue="";
				for (var j=1;j<arString.length;j++) strValue=addElement(strValue,arString[j],"=");
				return(strValue);
			};
		};
	};

	return("");
};

function addElement(str,name,Delimiter)
{
	if (!Delimiter) Delimiter=",";
	if (str.length>0) str +=Delimiter;
	str +=name;
	return(str);
};

function padLeft(str,ch,len)
{
	var strResult=str.toString();
	while (strResult.length<len) strResult=ch + strResult;
	return(strResult);
};

function formatDate(dt,Pattern)
{
	//set a default pattern used to pass time to Aspect
	var strResult="MM-dd-yyyy HH:mm:ss z";
	if (Pattern) strResult=Pattern;
	
	strResult=replaceAllSubstrings(strResult,"MM",padLeft(dt.getMonth()+1,"0",2));
	strResult=replaceAllSubstrings(strResult,"dd",padLeft(dt.getDate(),"0",2));
	strResult=replaceAllSubstrings(strResult,"yyyy",padLeft(dt.getFullYear(),"0",4));
	strResult=replaceAllSubstrings(strResult,"HH",padLeft(dt.getHours(),"0",2));
	strResult=replaceAllSubstrings(strResult,"mm",padLeft(dt.getMinutes(),"0",2));
	strResult=replaceAllSubstrings(strResult,"ss",padLeft(dt.getSeconds(),"0",2));
	strResult=replaceAllSubstrings(strResult,"SSS",padLeft(dt.getMilliseconds(),"0",3));

	switch(dt.getTimezoneOffset()) {
		case 300: strResult=replaceAllSubstrings(strResult,"tz","(EST)"); break;
		case 360: strResult=replaceAllSubstrings(strResult,"tz","(CST)"); break;
		case 420: strResult=replaceAllSubstrings(strResult,"tz","(MST)"); break;
		case 480: strResult=replaceAllSubstrings(strResult,"tz","(PST)"); break;
		default: strResult=replaceAllSubstrings(strResult,"tz","GMT-"+padLeft((dt.getTimezoneOffset()/60),"0",2)+"00");
	};
	
	strResult=replaceAllSubstrings(strResult,"z","-"+padLeft((dt.getTimezoneOffset()/60),"0",2)+"00");
	strResult=replaceAllSubstrings(strResult,"Z","-"+padLeft((dt.getTimezoneOffset()/60),"0",2)+"00");
//appendToLog("formatDate dt="+dt+" pattern="+Pattern+" result="+strResult,false,true);
	return(strResult);
};

function formatNumber(n,Pattern) 
{
	if (typeof(n).equalsIgnoreCase("string")) {
		Num=parseFloat(n);
	}
	else if ((typeof(n)=="int") || (typeof(n)=="float")) {
		Num=n;
	}
	else {
		return("Unrecognized type: "+n+" type: "+typeof(n));
	};
	
	//for right now, just look for a decimal in the pattern and return two digits if there's a decimal.
	//Otherwise return no digits after the decimal
	var strResult="";
	var n=Pattern.indexOf(".");
	if (n>=0) {
		var NumDecimals=Pattern.length-n-1;
		strResult=Num.toFixed(NumDecimals);
	}
	else {
		strResult=Num.toFixed(0);
	};
	
	return(strResult);
};

//Replaces special characters with tokens and vice versa
function tokenizeSpecialChars(str,bool) 
{
	//alert("tokenizeSpecialChars "+bool+" "+str);
	if (bool) {
		var strResult=replaceAllSubstrings(str,"&","\\\\am"+"p\\\\");
		strResult=replaceAllSubstrings(strResult,"+","\\\\pl"+"us\\\\");
		strResult=replaceAllSubstrings(strResult,"\"","\\\\qu"+"ot\\\\");
		strResult=replaceAllSubstrings(strResult,"'","\\\\ap"+"os\\\\");
		strResult=replaceAllSubstrings(strResult,"#","\\\\pou"+"nd\\\\");
	}
	else {
		var strResult=replaceAllSubstrings(str,"\\\\am"+"p\\\\","&");
		strResult=replaceAllSubstrings(strResult,"\\\\pl"+"us\\\\","+");
		strResult=replaceAllSubstrings(strResult,"\\\\qu"+"ot\\\\","\"");
		strResult=replaceAllSubstrings(strResult,"\\\\ap"+"os\\\\","'");
		strResult=replaceAllSubstrings(strResult,"\\\\pou"+"nd\\\\","#");

		strResult=replaceAllSubstrings(strResult,"//am"+"p//","&");
		strResult=replaceAllSubstrings(strResult,"//pl"+"us//","+");
		strResult=replaceAllSubstrings(strResult,"//qu"+"ot//","\"");
		strResult=replaceAllSubstrings(strResult,"//ap"+"os//","'");
		strResult=replaceAllSubstrings(strResult,"//pou"+"nd//","#");
	};
	
	//alert("strResult="+strResult);
	return(strResult);
};

//Use this in place of Boolean(value).  IE and Firefox handle booleans differently.
function boolVal(s) {
	if(!s) return(false);
	if(s=="true") return(true);
	if(s==true) return(true);
	return(false);
};

/******************************************************************************************************
DOCUMENT FUNCTIONS
******************************************************************************************************/
function documentWidth() {
	var w=630;

	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") w=window.innerWidth;
		if (navigator.appName.indexOf("Microsoft")!=-1) w=document.body.offsetWidth;
	};
	
	return(w);
};

function documentHeight() {
	var h=460;

	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") h=window.innerHeight;
		if (navigator.appName.indexOf("Microsoft")!=-1) h=document.body.offsetHeight;
	};

	return(h);
};

function setInnerHtml(strID,strValue)
{
	e=document.getElementById(strID);
	if (e) e.innerHTML=strValue;
};

function getBrowserCodeName() {
	return(navigator.appCodeName);
};

function getBrowserName() {
	return(navigator.appName);
};

function getBrowserVersion() {
	return(navigator.appVersion);
};

function getBrowserCookiesEnabled() {
	return(navigator.cookieEnabled);
};

function getBrowserPlatform() {
	return(navigator.platform);
};

function getBrowserUserAgent() {
	return(navigator.userAgent);
};

function isVisible(aitem) {
	var e=document.getElementById(aitem);
	if(!e) e=aitem;
	if(!e) return(false);
	if(!e.nodeName) return(false);

	//if no display style is defined, consider it visible
	if(!e.style) return(true);
	if(!e.style.display) return(true);
	if(e.style.display.length==0) return(true);

	if (e) {
		var strOn="block";
		var strOff="none";
		
		//if it's a table row, need to use inline or table-row
		if (e.nodeName.equalsIgnoreCase("tr")) {
			strOn="inline";
			if (getBrowserName().toUpperCase().indexOf("NETSCAPE")>=0) strOn="table-row";
		};

		//get the current display status
		if (getBrowserName().toUpperCase().indexOf("EXPLORER")>=0) {
			//Internet Explorer
			if ((e.style.display.length==0) || (e.style.display.equalsIgnoreCase(strOff))) {return(false);} else {return(true);};
		}
		else {
			//Everything else
			if ((e.style.display.length==0) || (e.style.display.equalsIgnoreCase(strOff))) {return(false);}	else {return(true);};
		};
	}
	else {
		alert("Error: isVisible cannot find element with ID="+aitem);
	};
};

/*********************************************************************************
Shows or hides an element.  The element may be specified using an ID or as an
html element.  The optional interval argument is passed to setVisible() so the
content of an item may be updated when it is made visible.
*********************************************************************************/
function toggleVisible(aitem,Interval,ShowStatusIcon,Msg) {
	var e=document.getElementById(aitem);
	if(!e) e=aitem;
	if(!e.nodeName) return;
	
	if (e) {
		var strOn="block";
		var strOff="none";
		
		//if it's a table row, need to use inline or table-row
		if (e.nodeName.equalsIgnoreCase("tr")) {
			strOn="inline";
			if (getBrowserName().toUpperCase().indexOf("NETSCAPE")>=0) {
				strOn="table-row";
			};
		};
		
		//get the current display status
		if (getBrowserName().toUpperCase().indexOf("EXPLORER")>=0) {
			//Internet Explorer
			(Interval!=null) ? setVisible(aitem,(e.style.display==strOff),Interval,ShowStatusIcon,Msg) : setVisible(aitem,(e.style.display==strOff));
		}
		else {
			//Everything else
			(Interval!=null) ? setVisible(aitem,(e.style.display==strOff),Interval,ShowStatusIcon,Msg) : setVisible(aitem,(e.style.display==strOff));
		};
	}
	else {
		//alert("Error: toggleVisible cannot find element with ID="+strID);
	};
};

function setDimensions(e) {
	var bDebug=((e.id) && (e.id.equalsIgnoreCase("588702")));
	if((e.getAttribute("AutoWidth")) && (boolVal(e.getAttribute("AutoWidth")))) {
		e.style.width="auto";
	};
	if((e.getAttribute("AutoHeight")) && (boolVal(e.getAttribute("AutoHeight")))) {
		e.style.height="auto";
	};

	if (bDebug) appendToLog(e.id+" w1="+e.style.width+" h1="+e.style.height+" offsetw="+e.offsetWidth+" offseth="+e.offsetHeight);
	
	if((e.offsetWidth>0) && (e.offsetHeight>0)) {
		if(e.getAttribute("minwidth")) {
			var n=parseInt(e.getAttribute("minwidth"));
			if((n>0) && (e.offsetWidth<n)) e.style.width=n+"px";
		};
		if(e.getAttribute("maxwidth")) {
			var n=parseInt(e.getAttribute("maxwidth"));
			if((n>0) && (e.offsetWidth>n)) e.style.width=n+"px";
		};
		if(e.getAttribute("minheight")) {
			var n=parseInt(e.getAttribute("minheight"));
			if((n>0) && (e.offsetHeight<n)) e.style.height=n+"px";
		};
		if(e.getAttribute("maxheight")) {
			var n=parseInt(e.getAttribute("maxheight"));
			if((n>0) && (e.offsetHeight>n)) e.style.height=n+"px";
		};
	};
	
	if (bDebug) appendToLog(e.id+" w2="+e.style.width+" h2="+e.style.height);
};

/*********************************************************************************
*********************************************************************************/
function setInterval(aitem,Interval,ShowStatusIcon,Msg)
{
	var e=document.getElementById(aitem);
	if(!e) e=aitem;
	if(!e.nodeName) {
		appendToLog("Error in setInterval: "+aitem+" not found");
		return;
	};
	
	e.setAttribute("interval",Interval);
	if((ShowStatusIcon) || (Msg)) {
		e.innerHTML="";
		if(ShowStatusIcon) {
			var img=document.createElement("img");
			img.src=imageStatusActive.src;
			e.appendChild(img);
		};
		if(Msg) {
			e.innerHTML +="&nbsp;"+Msg;
		};
	};
	
	if(Interval==0) refreshWidgets();
};
				
/*********************************************************************************
Sets the display attribute for an element.  The element (aitem) may be passed as
an ID or as an html element.  If an interval is specified, the element's interval
attribute is updated as follows"
	- If the item is being hidden, interval is set to -1 regardless of the Interval value
	- If the item is being shown, interval is set to the Interval value 
		EXCEPT when Interval=0.  If Interval=0, then the interval is set to 0 if
		the item hasn't already been updated by an asynchinclude.
		
The interval argument allows an item to be displayed and for it to refresh at a given
interval.  It also allows for the content of an item to be updated only once, even
if it is displayed or hidden multiple times.  The idea is to allow many elements 
on a page, to only get the content for an element when it is displayed and to avoid
getting the content again if the item is hidden and displayed again.
*********************************************************************************/
function setVisible(aitem,boolVisible,Interval,ShowStatusIcon,Msg)
{
	var e=document.getElementById(aitem);
	if(!e) e=aitem;
	if(!e) return;
	if(!e.nodeName) {
		appendToLog("Error in setVisible: "+aitem+" bVisible="+boolVisible);
		//printStackTrace();
		return;
	};
	
	if (e) {
		var strOn="block";
		var strOff="none";
		
		//if it's a table row, need to use inline or table-row
		if (e.nodeName.equalsIgnoreCase("tr")) {
			strOn="inline";
			if (getBrowserName().toUpperCase().indexOf("NETSCAPE")>=0) strOn="table-row";
		};
		
		//if it's a span, use inline
		if(e.nodeName.equalsIgnoreCase("span")) strOn="inline";
		
		//set the display on/off
		if (getBrowserName().toUpperCase().indexOf("EXPLORER")>=0) {
			//Internet Explorer
			if (boolVisible) {
				e.style.display=strOn;
				e.display=strOn;
			}
			else {
				e.style.display=strOff;
				e.display=strOff;
			};
		}
		else {
			//Everything else
			(boolVisible) ? e.style.display=strOn : e.style.display=strOff;
		};
		if(boolVisible) setDimensions(e);
		
		//if the element contains a table of tabs, also show or hide tabs belonging to the table
		var arTable=e.getElementsByTagName("table");
		if(arTable) {
			for (var i=0;i<arTable.length;i++) {
				var sClass=arTable[i].getAttribute("class");
				if((sClass) && (sClass.equalsIgnoreCase("tabdialog"))) {
					if(boolVisible) {
						//show the last tab selected
						s=arTable[i].getAttribute("SelectedTab");
						if(s) {
							var ar=getSubStringArray(s,"|");
							//if(ar==null) alert("ar=null in setVisible");
							for (var j=0;j<ar.length;j++) setVisible(ar[j],true);
						};
					}
					else {
						//hide all tabs associated with the table
						hideTabElements(arTable[i]);
					};
				};
			};
		};

		//if an interval is defined, set the interval attribute of the item
		if(Interval!=null) {
			if(boolVisible) {
				//only set the interval if it's greater than zero or if the element has not yet been updated
				//by an asynchinclude.  This allows a 0 interval to be specified to update the item only once,
				//even if it is shown and hidden multiple times.
				var bIsLoaded=false;
				if(e.getAttribute("AspectASynchInclude")) {
					if(e.getAttribute("AspectASynchInclude").trim().length>0) bIsLoaded=true;
				};
				if((parseInt(Interval)>0) || (!bIsLoaded)) {
					e.setAttribute("interval",Interval);
					if((ShowStatusIcon) || (Msg)) {
						e.innerHTML="";
						if(ShowStatusIcon) {
							var img=document.createElement("img");
							img.src=imageStatusActive.src;
							e.appendChild(img);
						};
						if(Msg) {
							e.innerHTML +="&nbsp;"+Msg;
						};
					};
					if(Interval==0) refreshWidgets();
				};
			}
			else {
				e.setAttribute("interval","-1");
			};
		};
	};
};

/*********************************************************************************
Clears the innerHTML of the given item and displays the status icon.  Used to 
display the status icon when refreshing content of an element
*********************************************************************************/
function showStatusIcon(aitem)
{
	var e=document.getElementById(aitem);
	if(!e) e=aitem;
	if(!e.nodeName) {
		alert("Error in setVisible: "+aitem);
		return;
	};
	
	var img=document.createElement("img");
	img.src=imageStatusActive.src;
	e.innerHTML="";
	e.appendChild(img);
};

function setElementValue(strElementID,strValue)
{
	e=document.getElementById(strElementID);
	if (e) {
		e.value=strValue;
	}
	else {
		alert("Cannot locate element: "+strElementID+" in setElementValue()");
	};
};

/* Inserts a node after another  node */
function insertAfter( referenceNode, newNode ) {
	if(referenceNode==null) {
		appendToLog("Error in insertAfter.  reference=null newNode="+newNode.ID);
		printStackTrace();
		return;
	};
	
	if(referenceNode.parentNode) {
		referenceNode.parentNode.insertBefore( newNode, referenceNode.nextSibling );
	}
	else {
		alert("Missing parent node when adding node "+newNode.ID+" before: "+referenceNode+"\n\n"+referenceNode.innerHTML);
	};
};

function hideTooltip(e)
{
	if (e) e.style.display="none";
};

function showTooltip(e,Msg,OffsetX,OffsetY,MaxWidth)
{
	//don't show tooltips for mobile devices
	if(bIsMobileDevice) return;
	if(screen.width<1024) return; //just a guess.  May not work for tablets.
	
	//disable tooltips for Microsoft version 6 (which shows as version 4 in getBrowserVersion) because the tooltips are not z-indexed properly
	//if ((getBrowserName().startsWith("Microsoft")) && (getBrowserVersion().startsWith("4.0"))) return;
	strMsg=replaceAllSubstrings(Msg,"||q"+"uot||","&#34;");
	strMsg=replaceAllSubstrings(strMsg,"||a"+"pos||","&#39;");
	strMsg=replaceAllSubstrings(strMsg,"%3c","<");
	strMsg=replaceAllSubstrings(strMsg,"%3e",">");

	//these are used to handle tooltips for scheduled tasks.  There is a problem with characters in expressions being turned into
	//greater than/less than symbols rather than staying tokenized.  TTaskScheduler.getTaskTooltip converts the symbols to #60 and #62
	//12-07-2013 - This is still a problem to be resolved.  For a workaround, see the tooltip for the ID field in Aspect_Performance_Profile_DriverStruct_Detail
	strMsg=replaceAllSubstrings(strMsg,"#60","&lt;");
	strMsg=replaceAllSubstrings(strMsg,"#62","&gt;");

	//Follow any commas and right parenthesis with a space so expressions are allowed to wrap
	strMsg=replaceAllSubstrings(strMsg,",","\xFF");
	strMsg=replaceAllSubstrings(strMsg,"\xFF",", ");
	strMsg=replaceAllSubstrings(strMsg,"(","\xFF");
	strMsg=replaceAllSubstrings(strMsg,"\xFF","( ");

	if (OffsetX==0) OffsetX=10;
	if (OffsetY==0) OffsetY=10;
	
	if ((MaxWidth==null) || (MaxWidth==0)) MaxWidth=400;
	
	var div=document.getElementById("tooltip");
	
	if (div==null) {
		tagBody=document.getElementsByTagName('BODY')[0];
		div=document.createElement('div');
		div.id="tooltip";
		div.className="tooltip"; //apparently setAttrubute("class"...) doesn't work in IE
		div.onclick=Function("javascript:hideTooltip(this);");
		tagBody.appendChild(div);		
	};

	div.innerHTML=strMsg;

	//don't use the event (e) if just hiding with a blank message.  This allows the showTooltip method to be called
	//without an event if it needs to be cleared manually.  One example of this is when a div is made visible under
	//a tooltip that is being displayed.  
	if (strMsg.length>0) {
		var W=div.offsetWidth;
		var H=div.offsetHeight;

		//modified 10-23-2012 to get the source element for the event and calculate the position
		//from that.  Otherwise tooltips are positioned incorrectly when the page or elements on the
		//page are scrolled.
		var eTarget=null;
		if (e.target) {
			eTarget=e.target;
		}
		else {
			if (e.srcElement) eTarget=e.srcElement;
		};
		if (eTarget.nodeType==3) eTarget=eTarget.parentNode;// defeat Safari bug

		//div.style.position="fixed";
		var xy=getPosition2012(eTarget,"absolute",document.getElementsByTagName('BODY')[0]);
		var X=xy[0];
		var Y=xy[1]+eTarget.offsetHeight;

		//var X=e.clientX;
		//var Y=e.clientY;
		var Top	=Y+OffsetY;
		var Left=X+OffsetX;
		div.style.border="1pt solid";
		div.style.top=Top+"px";
		div.style.left=Left+"px";

		if (div.offsetWidth>MaxWidth) {
			div.style.width=MaxWidth+"px";
		};
		
		div.style.padding="5px";
		//div.style.border=5;
	}
	else {
		div.style.padding=0;
		//alert("border="+div.style.border);
		div.style.border="none";
		div.style.width="auto";
	};

	//div.innerHTML="W:"+W+" H:"+H+" ScreenX:"+e.screenX+" ScreenY:"+e.screenY+" clientX="+e.clientX+" clientY="+e.clientY;
};

//======================================================================================================
//Refreshes all span and div tags that have an interval and url defined.  Also initiates refreshing of tables that have an interval
//specified.
//======================================================================================================
function refreshWidgets() {
	if(bContainerLoaded==false) {
		setTimeout("refreshWidgets()",1000);
		return;
	};
	
	if (intRefreshingWidgets>0) return;
	intRefreshingWidgets++;

	//enable refresh on interval for any tables that have an interval specified
	var arTable=document.getElementsByTagName("table");
	for(var i=0;i<arTable.length;i++) {
		var bRefreshOnIntervalInitiated=false;
		if(arTable[i].getAttribute("AspectRefreshOnIntervalInitiated")) {
			bRefreshOnIntervalInitiated=arTable[i].getAttribute("AspectRefreshOnIntervalInitiated").equalsIgnoreCase("true");
		};
		
		if(!bRefreshOnIntervalInitiated) {
			var iRefreshIntervalLocal=0;
			var iRefreshIntervalRemote=0;
			if(arTable[i].getAttribute("AspectRefreshInterval")) iRefreshIntervalLocal=parseInt(arTable[i].getAttribute("AspectRefreshInterval"));
			if(arTable[i].getAttribute("AspectRefreshIntervalRemote")) iRefreshIntervalRemote=parseInt(arTable[i].getAttribute("AspectRefreshIntervalRemote"));
			
			if((iRefreshIntervalLocal>0) || (iRefreshIntervalRemote>0)) {
				var iActiveInterval=0;
				var sActiveRefreshWhenHidden=false;
				if(arTable[i].getAttribute("AspectHashID").equalsIgnoreCase("{AspectHashID}")) {
					iActiveInterval=iRefreshIntervalLocal*1000;
					sActiveRefreshWhenHidden=arTable[i].getAttribute("RefreshWhenHidden");
				}
				else {
					iActiveInterval=iRefreshIntervalRemote*1000;
					sActiveRefreshWhenHidden=arTable[i].getAttribute("RefreshWhenHiddenRemote");
				};

				if(iActiveInterval>0) {
					arTable[i].setAttribute("AspectActiveRefreshInterval",iActiveInterval);
					arTable[i].setAttribute("AspectActiveRefreshWhenHidden",sActiveRefreshWhenHidden);
					arTable[i].setAttribute("AspectRefreshOnIntervalInitiated","true");
					setTimeout("refreshTableOnInterval(\""+arTable[i].id+"\")",iActiveInterval);
				};
			};
		};
	};
	
	//see if an edit window is open and don't refresh if it is (this is for dialogs used to edit an item in a widget container)
	var arDiv=document.getElementsByTagName("div");
	for (var i=0;i<arDiv.length;i++) {
		var strID=arDiv[i].getAttribute("ID");
		if (strID) {
			if ((strID.toUpperCase().indexOf("EDITOVERLAY")>0) || (strID.toUpperCase().indexOf("DELETEOVERLAY")>0)) {
				if (arDiv[i].style.display.equalsIgnoreCase("block")) {
					intRefreshingWidgets--;
					//Don't refresh too frequently because initializeTabbedDialogs() might be costly
					setTimeout("refreshWidgets()",10000);
					return;
				};
			};
		};
	};
	
	var arTagNames=new Array(2);
	arTagNames[0]="span";
	arTagNames[1]="div";
	
	var tNow=new Date().getTime();
	
	for(var i=0;i<arTagNames.length;i++) {
		var e=document.getElementsByTagName(arTagNames[i]);
		//appendToLog("refreshWidgets e.length="+e.length);
		for (var j=0;j<e.length;j++) {
			var strUrl=e[j].getAttribute("url");
			if (strUrl) {
			
				//check for any tables in the item and see if a dialog is opened for a table
				//Note:  This takes too long.  Can't initialize a list of dialog ID's one time
				//because they may change if new items are added to the page.  
				var bDialogOpen=false;
				/*
				var arTable=e[j].getElementsByTagName("table");
				for(var k=0;k<arTable.length;k++) {
					var sDialogID=arTable[k].getAttribute("EditDialogID");
					if(sDialogID) {
						var sDisplay=document.getElementById(sDialogID).style.display;
						if((sDisplay) && (sDisplay.equalsIgnoreCase("block"))) {
							bDialogOpen=true;
						};
					};
				};
				*/
				
				if(!bDialogOpen) {
					strUrl=replaceAllSubstrings(strUrl,"\n","");
					strUrl=replaceAllSubstrings(strUrl,"\r","");
					strUrl=replaceAllSubstrings(strUrl,"\t","");

					var intInterval=e[j].getAttribute("interval");
					
					//only update if an interval has been specified and if it's >=0
					if ((intInterval) && (intInterval>=0)) 
					{
	//appendToLog("getting url for "+e[j].id+" url=["+strUrl+"]",false,true);			
						//if it's 0, set it to -1 so it's only updated one time and does not repeat
						if(intInterval==0) e[j].setAttribute("interval","-1");
						
						var intCntr=e[j].getAttribute("counter");
						if (!intCntr) {
							e[j].setAttribute("counter","0");
							intCntr=0;
						};
						
						var boolUpdating=e[j].getAttribute("updating");
						//appendToLog("Counter="+intCntr+" updating="+boolUpdating+" url="+strUrl);
						
						//NOTE: 10-08-2012 It looks like this function may be running twice because the 
						//timeout is set to 10,000 but it appears to be running twice that fast.
						//The counter is decremented by 5 instead of 10 below for now to account for it.
						if((boolUpdating==null) || (boolUpdating=="false") || (boolUpdating==false))
						{
							if (intCntr<=0) {
								var bShouldUpdate=true;
								var LastUpdate=e[j].getAttribute("AspectASynchInclude");
								if(LastUpdate) {
									var tElapsed=(tNow-parseInt(LastUpdate))/1000;
									if(tElapsed<intInterval) {
										bShouldUpdate=false;
										//alert("aborting update because only "+tElapsed+" seconds have elapsed of "+intInterval+"\nUrl="+strUrl);
									}
									else {
										//alert("Allowing update because "+tElapsed+" seconds have elapsed of "+intInterval+"\nUrl="+strUrl);
									};
								};
								
								if(bShouldUpdate) {
									e[j].setAttribute("counter",intInterval);
									e[j].setAttribute("updating",true);
									var sFuncOk="initializeReport()";
									var sUrlFunc=e[j].getAttribute("urlfunc");
									if(sUrlFunc) sFuncOk +=";"+sUrlFunc;
									var sErrFunc="";
									var sID=e[j].ID;
									asynchInclude(e[j],strUrl,sFuncOk,sFuncOk);
								}
								else {
									intCntr-=10;
									e[j].setAttribute("counter",intCntr);
								};
							}
							else {
								intCntr-=10;
								e[j].setAttribute("counter",intCntr);
							};
						}
						else {
							intCntr-=10;
							
							//if the item has been updating for x minutes, set the updating flag to false
							//This is to correct a situation in which the updating flag is not cleared do to an undetermined error 
							//asynchInclude() sets the update flag to false so this should never happen but it has
							if(intCntr<-240) e[j].setAttribute("updating",false);
							
							e[j].setAttribute("counter",intCntr);
							//alert("already updating");
						};
					};
				};
			};
		};
	};

	intRefreshingWidgets--;
	if (intRefreshingWidgets==0) {
		//Don't refresh too frequently because initializeTabbedDialogs() might be costly
		//Need to always refresh even if no url's are found in this pass because others might be added dynamically
		setTimeout("refreshWidgets()",10000);
	};
};

/******************************************************************************************************
XMLHTTPREQUEST FUNCTIONS
******************************************************************************************************/
function getxmlHttpRequestObject()
{
	var req=false;

	// For Safari, Firefox, and other non-MS browsers
	if (window.XMLHttpRequest) {
		try {req=new XMLHttpRequest();} 
		catch (e) {req=false;}
	} 
	else if (window.ActiveXObject) {
		// For Internet Explorer on Windows
		try {
			req=new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) {
			try {req=new ActiveXObject("Microsoft.XMLHTTP");} 
			catch (e) {req=false;}
		}
	}
	
	return(req);
};

//Executes a synchrounous request for content and returns the result.  This method waits until the content is received before returning.
//The asynchInclude function can be used to make an asynchronous request.
function getxmlHttpRequest(url)
{
	var req=getxmlHttpRequestObject();

	if (req) {
		var strUrl=url;
		if(strUrl.indexOf("127.0.0.1")>=0) {
			strUrl +="&random="+Math.floor(Math.random()*99999999);
			strUrl +="&HashID={AspectHashID}";
		};
		
		try {
			req.open('GET',strUrl,false);

			if (getBrowserName().toUpperCase().indexOf("EXPLORER")<0) {
				//req.timeout=60000; //not recognized by IE (IE6 at least)
			};
			
			//chrome doesn't like accept-encoding
			if(getBrowserUserAgent().toUpperCase().indexOf("CHROME")<0) {
				req.setRequestHeader("Accept-Encoding","gzip");
			};
			req.send(null);
			return(req.responseText);
		}
		catch(e) {
			//A false error is returned when a display is deleted.  Don't show an alert until this is worked out.  
			//alert("Error getting request. ["+e+"]\nPlease refresh the page and try again.");
			return("");
		};
	} 
	else {
		alert("Error getting request.  Please refresh the page and try again.");
		return("");
	}
	
	return("Error in getxmlHttpRequest: "+url);
};

/************************************************************************
	Using asynchInclue to return a result:
	
	Basically, this function calls itself again after the request is complete.
	
	function myfunc(arg) {
		if (!arg) {
			asynchInclude(null,url,"myfunc(req.responseText)");
		}
		else {
			alert("Results: "+arg);
		};
	};
************************************************************************/

//Entry for asynchInclude.  Used to allow recursion in asynchIncludesub so that an include can be tried a 2nd time if an empty string is returned
function asynchInclude(element,url,func,errfunc) {
	//for some reason, href="#" gets mangled in firefox.  The # symbol is replaced with a goofy url.  This prevents that from happening.
	var strUrl=replaceAllSubstrings(url,"href=\"#\"","href=\"%23\"");
	strUrl=replaceAllSubstrings(url,"href='#'","href='%23'");
	//appendToLog("asynchInclude: "+url);
	asynchIncludesub(0,element,strUrl,func,errfunc);
};

//Does an asynchronous request to set the content for the given element.  This method allows the content of an element to be set
//without waiting for the server to return the content.  
function asynchIncludesub(count,element,url,func,errfunc)
{
	var req=getxmlHttpRequestObject();

	//Post is used because long urls required to submit a container item to the Aspect server
	//are truncated with get.  However, they are not truncated when the request is made to the local machine.
	var sMethod="post";
	
	var sUserAgent=getBrowserUserAgent();
	var bSafari=(sUserAgent.toUpperCase().indexOf("SAFARI")>=0) ? true : false;
	var bChrome=(sUserAgent.toUpperCase().indexOf("CHROME")>=0) ? true : false;
	
	//Safari on IPOD doesn't seem to support Post method.  Throws errors on content-length and connection headers
	if(bSafari) {
		if(sUserAgent.toUpperCase().indexOf("ANDROID")<0) sMethod="get";
	};
	
	if (req) {
		//var strUrl=url+"&random="+Math.floor(Math.random()*99999999);
		//strUrl +="&HashID={AspectHashID}";
		var strUrl=url;
		if(strUrl.indexOf("127.0.0.1")>=0) {
			strUrl +="&random="+Math.floor(Math.random()*99999999);
			strUrl +="&HashID={AspectHashID}";
		};

		var n=strUrl.indexOf("?");
		if(n<1) alert("Error getting host and params in asynchInclude");
		var sHost=strUrl.substring(0,n-1);
		var sParams=strUrl.substring(n+1);
		//alert("Host="+sHost+"\nParams="+sParams);
		
		req.onreadystatechange=function()
		{ 
			if(req.readyState==4) {
				if (req.status==200) {
					var s=req.responseText;
					if (element!=null) {
						
						if ((s.length==0) && (count<5) && (url.toUpperCase().indexOf("REFRESHTABLEONINTERVAL=TRUE")<0)) {
							//appendToLog("asynchInclude failed.  Making attempt: "+(count+2),false,true);
							asynchIncludesub(count+1,element,url,func,errfunc);
							return;
						};
						
						if(s.trim().length==0) {
							//appendToLog("asynchinclude request failed.  url="+url,false,true);
						}
						else {
							//set a flag indicating the item has been successfully updated.
							element.setAttribute("AspectASynchInclude",new Date().getTime());
						};
						
						element.innerHTML=replaceAllSubstrings(s,"__Request"+"Server__",getServer());
						element.setAttribute("updating",false);
						
						//initialize tables if a table is included in the content.  This is necessary to initialize the
						//dialog for a table.  Otherwise, the dialog will not be initialized if the table is hidden and 
						//the dialog is shown initially.
						if(s.toUpperCase().indexOf("ASPECTVER")>=0) {
							initializeTables2012();
						};
					};
					//if ((func) && (func.indexOf("b")>=0)) appendToLog("Executing function: "+func,false,true);
					if (func) eval(func);
				}
				else {
					//Remember: Browser security prevents request across different domains
					if((count<5) && (url.toUpperCase().indexOf("REFRESHTABLEONINTERVAL=TRUE")<0)) {
						//appendToLog("asynchInclude failed.  Making attempt: "+(count+2),false,true);
						asynchIncludesub(count+1,element,url,func,errfunc);
						return;
					};

					//alert("asynchInclude error: "+req.status+" url: "+strUrl);
					if (element!=null) {
						element.setAttribute("updating",false);
						element.setAttribute("counter",60);
					};
					if (errfunc) eval(errfunc);
				};
			};
		}; 
		
		try {
			if(sMethod=="post") {
				req.open('POST',sHost,true);
				req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				req.setRequestHeader("Content-length",sParams.length);
				req.setRequestHeader("Connection", "close");
			}
			else {
				req.open('GET',strUrl, true);
			};
		}
		catch(e) {
			if (errfunc) eval(errfunc);
		};

		//chrome doesn't like accept-encoding
		try {
			if((bChrome==false) && (bSafari==false)) req.setRequestHeader("Accept-Encoding","gzip");
		}
		catch(e) {
			appendToLog("Error setting encoding in request "+e);
		};
		
		try {
			if(sMethod=="post") {
				req.send(sParams);
			}
			else {
				req.send(null);
			};
		}
		catch(e) {appendToLog("Error sending request: "+e);};
	} 
	else {
		element.innerHTML="Sorry, your browser does not support XMLHTTPRequest objects. This page requires Internet Explorer 5 or better for Windows, or Firefox for any system, or Safari. Other compatible browsers may also exist.";
	}
};

/*	Concatenates all elements in a form to create a string used to submit the form.  E.g. param1=value1&param2=value2...
	The result does not include the server address or the /?
	One way this can be used it to submit a form to an Aspect script for processing without reloading the page.
	See the form named sendFilesForm in the Send Files widget in the Customer Support library for an example.
*/
function getFormSubmissionUrl(f)
{
	var strUrl="";
	for (var i=0;i<f.elements.length;i++) {
		if ((f.elements[i].name) && (f.elements[i].value) && ((f.elements[i].type!="button"))) {
			if (f.elements[i].type=='checkbox') {	
				//don't submit checkboxes that aren't checked
				if (f.elements[i].checked) strUrl=addElement(strUrl,f.elements[i].name+"="+tokenizeSpecialChars(f.elements[i].value,true),"&");
			}
			else {
				strUrl=addElement(strUrl,f.elements[i].name+"="+tokenizeSpecialChars(f.elements[i].value,true),"&");
			};
		};
	};
	return(strUrl);
};
	
/******************************************************************************************************
Functions used for editing displays
******************************************************************************************************/
function printIFrame(strElementID)
{ 
	var iframe=document.getElementById(strElementID);
	if (!iframe) {
		alert("No content defined for printing");
		return;
	};

	var strUrl="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=77NaWu0FhKDKXL7C70JpnKmy&Widget=Printer Wrapper";
	var strDoc=getxmlHttpRequest(strUrl);
	

	//strDoc +="<iframe src=\""+iframe.src+"\"></iframe>"
	strDoc +=window.frames["widget_iframe"].document.body.innerHTML;
	strDoc +="</body></html>"
	var eStyle=document.getElementsByTagName("style")[0];
	strDoc=replaceAllSubstrings(strDoc,"$style$",eStyle.innerHTML);

	var docprint=window.open("","","toolbar=yes,location=no,directories=yes,menubar=yes,scrollbars=yes,width=650, height=600, left=100, top=25"); 
	docprint.document.open(); 
	docprint.document.write(strDoc); 

	var arTagNames=new Array("div","form");
	for (var i=0;i<arTagNames.length;i++) {
		var arTag=docprint.document.getElementsByTagName(arTagNames[i]);
		var j=0;
		while (j<arTag.length) {
			var attr1=arTag[j].getAttribute("noprint");
			var attr2=arTag[j].getAttribute("print");
//alert("attr1="+attr1+" attr2="+attr2);			
			if (((attr1) && (attr1.toString().equalsIgnoreCase("true"))) || ((attr2) && (attr2.toString().equalsIgnoreCase("false")))) {
				arTag[j].style.display="none";
				arTag[j].display="none";
				arTag[j].innerHTML="&nbsp;";
				arTag[j].parentNode.removeChild(arTag[j]); 
			}
			else {
				j++;
			};
		};
	};
	
	//remove script tags
	var arTag=docprint.document.getElementsByTagName("script");
	while (arTag.length>0) {
		arTag[0].parentNode.removeChild(arTag[0]); 
	};

	docprint.document.close(); 
	docprint.focus(); 
}

function printReport(strWidgetID)
{ 
	var e=document.getElementById("Report_Content"+strWidgetID);
	if (!e) {
		alert("No content defined for printing");
		return;
	};
	var strContent=e.innerHTML; 
	var disp_setting="toolbar=yes,location=no,directories=yes,menubar=yes,scrollbars=yes,width=650, height=600, left=100, top=25"; 

	var strUrl="https://__server__/?Network=GreenLight&ID=getCachedWidget&DocumentID=77NaWu0FhKDKXL7C70JpnKmy&Widget=Printer Wrapper";
	var strDoc=getxmlHttpRequest(strUrl);
	strDoc +=strContent;
	strDoc +="</body></html>"

	var docprint=window.open("","",disp_setting); 
	docprint.document.open(); 
	//docprint.document.write('<html><head><title>Aspect Software</title>'); 
	//docprint.document.write('</head><body onLoad="self.print()"><center>');          
	//docprint.document.write(strContent);          
	//docprint.document.write('</center></body></html>'); 
	docprint.document.write(strDoc); 
	docprint.document.close(); 
	docprint.focus(); 
}

//Initializes all custom controls in a document by iterating through each form
//An initialized attribute is used to determine if controls have already been initialized to avoid initializing them twice
function initializeCustomControls() 
{
	for (var cntrForm=0;cntrForm<document.forms.length;cntrForm++) {
		var f=document.forms[cntrForm];
		for (var cntrNode=0;cntrNode<f.elements.length;cntrNode++) {
			var n=f.elements[cntrNode];
			var inputtype=n.getAttribute("control");
			var initialized=n.getAttribute("initialized");
			
			//04-24-2013 - Calendar icons are initialized a number of times when the page is loaded.  For some reason,
			//the control is not initialized properly until the last call.  This function has been modified to 
			//initialize the control during each call.  The previous icon is removed before a new one is created
			//if ((inputtype) && (!initialized)) {
			if (inputtype){
				if (inputtype.equalsIgnoreCase("date")) {
					if((f.name) && (n.name) && (f.name.length>0) && (n.name.length>0)) {
						//remove the current icon if there is one
						var sTcalicon=n.getAttribute("tcalicon");
						if(sTcalicon) {
							var eTcalicon=document.getElementById(sTcalicon);
							if(eTcalicon) eTcalicon.parentNode.removeChild(eTcalicon);
						};
						
						var t=new tcal({formname:f.name,controlname:n.name});
						//appendToLog("Initialize calendar form:"+f.name+" name:"+n.name+" id="+t.e_icon.id,false,true);
						n.setAttribute("tcalicon",t.e_icon.id);
					}
					else {
						appendToLog("Missing form or element name in date control",false,true);
					};
				}
				else if (inputtype.equalsIgnoreCase("combobox")) {
					new comboBox(f.name,"ComboBox"+n.name,n.name);
				};
				n.setAttribute("initialized","true");
			};
		};
	};
};

/****************************************************************************
Begin compare Javascript1 and Javascript2012 here
****************************************************************************/

//Initializes fields selected when the report is first loaded
function initializeReport() 
{
	//The widget ID is not available at this point, so check every form in the document for field named "starting_fields_initialized" with a value of false
	//This value is set when the widget is initially loaded by a script in the widget.  The widget also sets the fields "starting_fields_list" and "starting_fields_WidgetID"
	//This procedure is only necessary so that the display options can be initialized when the widget is first loaded.
	for (var cntrForm=0;cntrForm<document.forms.length;cntrForm++) {
		f=document.forms[cntrForm];
		if ((f.starting_fields_initialized) && (f.starting_fields_initialized.value=="false"))
		{
			var strWidgetID=f.starting_fields_WidgetID.value;
			var strStartingFields=f.starting_fields_list.value;
			
			//Need to be careful to not crash this function due to a missing field.  Otherwise, remaining forms will
			//not be initialized.
			if(document.forms["Filter"+strWidgetID]) {
				var SelectAll=document.forms["Filter"+strWidgetID].AllFields;
				var Select2=document.forms["Filter"+strWidgetID].FieldsSelected;
			};

			if((!SelectAll) || (!SelectAll.options)) {
				appendToLog("Error in initializeReport.  SelectOptions not valid.  WidgetID="+strWidgetID);
			}
			else {
				//Add the selected fields in the order they are listed 
				if (true) //This was replaced by selectDisplay() above 12/28/10
				{
					var arStartingFields=getSubStringArray(strStartingFields,",",true);
					for (var i=0;i<arStartingFields.length;i++) {
						var boolFound=false;
						for (var j=0;((!boolFound) && (j<SelectAll.options.length));j++) {
							if (SelectAll.options[j].value.equalsIgnoreCase(arStartingFields[i])) {
								Select2.options[Select2.options.length]=new Option(SelectAll.options[j].text,SelectAll.options[j].value,false,false);
								boolFound=true;
							};
						};
						//if(!boolFound) appendToLog("Could not find field in all fields: "+arStartingFields[i]);
					};

					//update the list of fields available to remove those in the selected list
					updateFieldsAvailable(strWidgetID);
				};
				
				//set the field to indicate that the fields selected list has been initiazed
				f.starting_fields_initialized.value="true";
				
				//move the speed filter fields div 
				eInsertBefore=document.getElementById("InsertSpeedFields"+strWidgetID);
				eCustomFields=document.getElementById("FilterSpeedFields"+strWidgetID);
				if((eInsertBefore) && (eCustomFields)) {
					eParent=document.getElementById("SpeedFilter"+strWidgetID);
					eParent.insertBefore(eCustomFields,eInsertBefore);
				};

				//move the custom fields div inside the customize dialog
				//Note: These fields may not be defined if the "filter dialog" widget is not included in the page
				eInsertBefore=document.getElementById("InsertCustomFields"+strWidgetID);
				eCustomFields=document.getElementById("FilterCustomFields"+strWidgetID);
				if((eInsertBefore) && (eCustomFields)) {
					eParent=document.getElementById("CustomFieldsContainer"+strWidgetID);
					if(eParent) {
						eParent.insertBefore(eCustomFields,eInsertBefore);

						//hide the custom fields section inside the custom dialog if none are defined.
						(eCustomFields.innerHTML.trim().length==0) ? setVisible("CustomFieldsContainer"+strWidgetID,false) : setVisible("CustomFieldsContainer"+strWidgetID,true);
					};
				};

				//alert("selectDisplay: "+strWidgetID+" Name: "+document.forms["Filter"+strWidgetID].Display.value);
				//selectDisplay(strWidgetID);
			};
		};
	};
	
	initializeCustomControls();
	
	//This is necessary in case this function is being called by refreshWidgets() after including content using an interval
	initializeTabbedDialogs();
	
	addScripts();
};

//Refresh the table
var arRefreshing="";
function refreshDisplay(strWidgetID,strFormName,status) {
	if (status) {
		arRefreshing=replaceAllSubstrings(arRefreshing,strWidgetID+"|","");
		initializeReport();
		showDialog();
		if(status==-1) {
			showDialog("msg=Error refreshing page.&fnOk=close");
		};
	}
	else {
		//don't allow the refresh button to be pressed more than once
		//Need to consider that there may be multiple calls from different widgets at one time
		if(arRefreshing.indexOf(strWidgetID+"|")>=0) return;
		arRefreshing+=strWidgetID+"|";
		
		//hide the customize dialog
		setVisible("Customize"+strWidgetID,false);
		
		showDialog("icon=true&msg=Loading...");
		var strFuncOk="refreshDisplay('"+strWidgetID+"','"+strFormName+"',1)";
		var strFuncErr="refreshDisplay('"+strWidgetID+"','"+strFormName+"',-1)";
		filterTable(strWidgetID,strFormName,strFuncOk,strFuncErr);
	};
};

//Initializes display settings when a display is selected
function selectDisplay(strWidgetID,boolRefresh) {
	f=document.forms["Filter"+strWidgetID];
	
	//disable buttons
	f.Display.disabled=true;
	//f.Refresh.disabled=true;
	//f.Custom.disabled=true;

	//disable all elements
	for (var i=0;i<f.elements.length;i++) {
		f.elements[i].disabled=true;
	};

	//set the name of the display in the custom dialog
	strDisplayID=f.Display.value;
	for (var i=0;i<f.Display.options.length;i++) {
		if (f.Display.options[i].value==strDisplayID) {
			document.getElementById("display_name_"+strWidgetID).innerHTML=f.Display.options[i].text;
			f.DisplayName.value=f.Display.options[i].text;
		};
	};
	
	//get the location of the widget library that contains the display
	var strDisplayServer=f.display_server.value;
	//var strUrl="https://__server__/?Network=GreenLight&ID=execScript&ScriptID=GreenLight_getDisplayWidgetInfo&WidgetID="+strDisplayID
	var strUrl="https://__server__/?Network=greenlight&ID=getXmlHttpRequest&url=https://"+strDisplayServer+"/?Network=GreenLight|ID=execScript|ScriptID=GreenLight_getDisplayWidgetInfo|WidgetID="+strDisplayID
	var strLocation=getxmlHttpRequest(strUrl);
	f.display_widget_library_location.value=strLocation;
	
	//add the location of the display to the name at the top of the customize dialog
	if(strLocation.toUpperCase().indexOf("ERROR")<0) {
		document.getElementById(strWidgetID+"location").innerHTML=strLocation;
	}
	else {
		document.getElementById(strWidgetID+"location").innerHTML="Error";
	};

	//alert("DisplayID="+strDisplayID);
	//var strUrl="https://"+strDisplayServer+"/?Network=GreenLight&ID=execScript&ScriptID=Aspect_Common_getCachedWidget_By_ID&WidgetID="+strDisplayID
	var strUrl="https://__server__/?Network=greenlight&ID=getXmlHttpRequest&url=https://"+strDisplayServer+"/?Network=GreenLight|ID=execScript|ScriptID=Aspect_Common_getCachedWidget_By_ID|WidgetID="+strDisplayID;
	//alert("strUrl="+strUrl);
	var strContent=getxmlHttpRequest(strUrl);
	//alert("display Content="+replaceAllSubstrings(strContent,"|","\x0A"));
	
	var arArgs=getSubStringArray(strContent,"|",true);
	for (var i=0;i<arArgs.length;i++) {
		var arStr=getSubStringArray(arArgs[i],"=",true);
		if (arStr.length>1) {
			if (arStr[0].equalsIgnoreCase("FieldsSelected")) {
				var options=f.elements["FieldsSelected"].options;
				options.length="";
				arFields=getSubStringArray(arStr[1],",");
				for (var j=0;j<arFields.length;j++) {
					arPair=getSubStringArray(arFields[j],"^");
					if (arPair.length>1) {
						options[options.length]=new Option(arPair[1],arPair[0],false,false);
					};
				};
			}
			else {
				var strName=arStr[0].substring(6); //field_ is prepended to all form field names
				var strValue=arStr[1];
				for (var j=2;j<arStr.length;j++) strValue+="="+arStr[j]; //add any additional elements in case the value field contains an equals sign

				strValue=tokenizeSpecialChars(strValue,false);
				var e=f.elements[strName];
				if (e) {
					if (e.type=='checkbox') {	
						(strValue.equalsIgnoreCase("true")) ? e.checked=true : e.checked=false;
					}
					else {
						//appendToLog("set "+arStr[0]+" to "+strValue);
						//alert("set "+arStr[0]+" to "+strValue);
						e.value=strValue;
					};
				}
				else {
					//alert("Cannot locate field named "+arStr[0]);
				};
			};
		};
	};
	
	//update list of available fields
	updateFieldsAvailable(strWidgetID);
	
	//enable buttons
	f.Display.disabled=false;
	//f.Refresh.disabled=false;
	//f.Custom.disabled=false;

	//enable all elements
	for (var i=0;i<f.elements.length;i++) {
		f.elements[i].disabled=false;
	};

	//Enable/disable the save & delete button depending on the location
	if (f.Aspect_Support_Report_Widgets_User.value.startsWith("\x7B")) {
		if (strLocation.equalsIgnoreCase("Aspect")) {
			f.btndelete.disabled=true;
			f.save.disabled=true;
		}
		else {
			f.btndelete.disabled=false;
			f.save.disabled=false;
		};
	}
	else {
		f.btndelete.disabled=false;
	};

	//refresh the report - but do not refresh if the customize dialog is open
	//This allows different displays to be selected from the drop-down list while the customize dialog is open
	//so they can be modified and saved without generating a new report each time
	if ((boolRefresh) && (!isVisible("Customize"+strWidgetID))) refreshDisplay(strWidgetID,"Filter"+strWidgetID);
};

//Get display widget content.  Reads all of the fields in the form to create the content that will be saved in the widget so the form can be 
//initialized again when the display is selected
function convertFormToWidgetContent(strWidgetID) 
{
	var f=document.forms["Filter"+strWidgetID];

	var strContent="";
	
	//get the location the widget will be saved to - aspect, company or local
	var strLocation=f.display_widget_library_location.value;
	//alert("strLocation="+strLocation);
	
	//get all form fields with the attribute "save"
	for (var i=0;i<f.elements.length;i++) {
		if ((f.elements[i].name) && ((f.elements[i].type!="button"))) {
			var strAttr=f.elements[i].getAttribute("save");
			if (strAttr) {
				//alert("strAttr="+strAttr);
				if ((strAttr.equalsIgnoreCase("aspect")) || (strLocation.equalsIgnoreCase("company")) || (strLocation.equalsIgnoreCase("local"))) 
				{
					if (f.elements[i].type=='checkbox') {	
						(f.elements[i].checked) ? strContent +="field_"+f.elements[i].name+"=true|" : strContent +="field_"+f.elements[i].name+"=false|";
					}
					else {
						strContent +="field_"+f.elements[i].name+"="+tokenizeSpecialChars(f.elements[i].value,true)+"|";
					};
				};
			};
		};
	};

	//get the list of fields selected
	var arFieldsSelected=new Array();
	var Select2=document.forms["Filter"+strWidgetID].FieldsSelected;
	for (var i=0;i<Select2.options.length;i++) {
		arFieldsSelected[arFieldsSelected.length]=Select2.options[i].value+"^"+Select2.options[i].text;
		//arFieldsSelected[arFieldsSelected.length]=Select2.options[i].value;
	};
	strContent +="FieldsSelected="+arFieldsSelected.toString()+"|";
	
	return(strContent);
};

//Shows or hides the div showing the status while saving a widget
function showDisplayOptionsStatus(strWidgetID,strDisplayName,strMsg,boolShow,boolShowCloseButton) {
	if (boolShow) {
		divFilter=document.getElementById("Filter"+strWidgetID);
		divStatus=document.getElementById("Display_Options_Status"+strWidgetID);
		divStatus.style.left=(divFilter.offsetLeft+30)+"px";
		var intTopAdjust=getContainerAdjustment(document.getElementById("Customize"+strWidgetID));
		divStatus.style.top=(divFilter.offsetTop+divFilter.offsetHeight+30-intTopAdjust)+"px";
		divStatus.style.zIndex=4;
		
		document.getElementById("Display_Options_Status_Message"+strWidgetID).innerHTML=strMsg;
		setVisible("Display_Options_Status"+strWidgetID,true);
		(boolShowCloseButton) ? setVisible("Display_Options_Status_Button",boolShowCloseButton) : setVisible("Display_Options_Status_Button",false);

		var arXY=getPosition(divFilter);
		divStatus.style.top=(arXY[1]+60-intTopAdjust)+"px";
	}
	else {
		setVisible("Display_Options_Status"+strWidgetID,false);
	};
};

//Saves display settings to the selected widget.  The documentID and widget name are used to create the metadata field for the widget
//so it can be associated with a particular table.  The script looks up the location of the widget (Aspect, Company Widgets or Local Widgets)
//before saving
function saveDisplay(strWidgetID,strDocumentID,strWidgetName) {
	//alert("save display DocumentID="+strDocumentID+" WidgetID="+strWidgetID+" WidgetName="+strWidgetName);
	var str=convertFormToWidgetContent(strWidgetID);
	str=replaceAllSubstrings(str,"|","\\\\"+"pipe\\\\");
	var strDisplayWidgetID=document.forms["Filter"+strWidgetID].Display.value;
	if (strDisplayWidgetID.trim().length==0) {
		alert("Cannot save unnamed display.  Select Save As to enter a name for the display.");
		return;
	};
	
	//show status message
	var strDisplayName=document.getElementById("display_name_"+strWidgetID).innerHTML;
	var strLocation=document.forms["Filter"+strWidgetID].display_widget_library_location.value;
	var strMsg="Saving \""+strDisplayName+"\" to "+strLocation+" displays."
	showDisplayOptionsStatus(strWidgetID,strWidgetName,strMsg,true);
	
	var strUrl="https://__server__/?Network=Library&ID=acceptWidgetByID&WidgetID="+strDisplayWidgetID+"&metadata="+strDocumentID+"_"+strWidgetName+"&Content="+str;
	
	//need to use xmlhttprequest when the page is served by a remote server.  The problem with this though is that the local widget cache
	//is not updated when the display is saved because acceptWidgetByID is not called locally
	var strDisplayServer=document.forms["Filter"+strWidgetID].display_server.value;
	if (strDisplayServer.indexOf("127.0.0.1")<=0) {
		strUrl="https://__server__/?Network=greenlight&ID=getXmlHttpRequest&url=https://"+strDisplayServer+"/?Network=Library|ID=acceptWidgetByID|WidgetID="+strDisplayWidgetID+"|metadata="+strDocumentID+"_"+strWidgetName+"|Content="+str;
	};

	appendToLog("Saving Display.  Url="+strUrl,false,true);

	strResult=getxmlHttpRequest(strUrl);
	
	//hide status message
	showDisplayOptionsStatus(strWidgetID,strWidgetName,"",false);
	
	//alert("strResult="+strResult);
};

//Used to save a display to a new name.  The boolGetName argument is set to true when the function is first called.
//This displays the dialog used to get the display name and location.  When the function is called again from the
//dialog, boolGetName is false and the display is saved as a widget
function saveDisplayAs(strWidgetID,strDocumentID,strWidgetName,boolGetName) 
{
	var f=document.forms["Filter"+strWidgetID];
	var strDisplayName=f.save_display_as.value;

	if ((boolGetName) || (strDisplayName.trim().length==0)) {
		divFilter=document.getElementById("Filter"+strWidgetID);
		divSaveAs=document.getElementById("Save_Display_As"+strWidgetID);
		divSaveAs.style.left=(divFilter.offsetLeft+30)+"px";
		var intTopAdjust=getContainerAdjustment(document.getElementById("Customize"+strWidgetID));
		divSaveAs.style.top=(divFilter.offsetTop+divFilter.offsetHeight+30-intTopAdjust)+"px";
		divSaveAs.style.zIndex=4;
		setVisible("Save_Display_As"+strWidgetID,true);

		var arXY=getPosition(divFilter);
		divSaveAs.style.top=(arXY[1]+60-intTopAdjust)+"px";
	}
	else {
		setVisible("Save_Display_As"+strWidgetID,false);
		//alert("save display DocumentID="+strDocumentID+" WidgetID="+strWidgetID+" WidgetName="+strWidgetName);

		var strLocation=f.save_display_as_location.value;
		var str=convertFormToWidgetContent(strWidgetID);

		//show status message
		showDisplayOptionsStatus(strWidgetID,strDisplayName,"Saving display: "+strDisplayName,true);
		
		var strTokenizedName=tokenizeSpecialChars(strDisplayName,true);
		var strUrl="https://__server__/?Network=Library&ID=acceptWidgetByID&new=true&Name="+strTokenizedName+"&Location="+strLocation+"&metadata="+strDocumentID+"_"+strWidgetName+"&Content="+str;
		appendToLog("strUrl="+strUrl);

		var strResult="";
		strResult=getxmlHttpRequest(strUrl);
		
		//add the display to the list of displays
		if (strResult.startsWith("ok")) {
			var arString=getSubStringArray(strResult,"|",true);
			if (arString.length>2) {
				var f=document.forms["Filter"+strWidgetID];
				arString[2]=tokenizeSpecialChars(arString[2],false);
				
				//add the display to the drop down list and select it
				f.Display.options[f.Display.options.length]=new Option(arString[2],arString[1],false,false);
				f.Display.value=arString[1];	
				
				//set the name of the display in the customize div
				document.getElementById("display_name_"+strWidgetID).innerHTML=arString[2];
				
				//set the name of the display passed when refreshing the widget
				f.DisplayName.value=arString[2];
			};

			//hide status message
			showDisplayOptionsStatus(strWidgetID,strWidgetName,"",false);
		}
		else {
			showDisplayOptionsStatus(strWidgetID,strWidgetName,strResult,true,true);
		};
	};
};

//Deletes a display.  The boolConfirm argument is set to true the first time this function is called which causes the confirmation
//dialog to be displayed.  When this function is called from the confirmation dialog, the widget is deleted
function deleteDisplay(strWidgetID,boolConfirm) {
	if (boolConfirm) {
		divFilter=document.getElementById("Filter"+strWidgetID);
		divDelete=document.getElementById("Delete_Display"+strWidgetID);
		divDelete.style.left=(divFilter.offsetLeft+30)+"px";
		var intTopAdjust=getContainerAdjustment(document.getElementById("Customize"+strWidgetID));
		divDelete.style.top=(divFilter.offsetTop+divFilter.offsetHeight+30-intTopAdjust)+"px";
		divDelete.style.zIndex=4;
		document.getElementById("Confirm_Delete_Message"+strWidgetID).innerHTML=document.getElementById("display_name_"+strWidgetID).innerHTML;
		setVisible("Delete_Display"+strWidgetID,true);

		var arXY=getPosition(divFilter);
		divDelete.style.top=(arXY[1]+60-intTopAdjust)+"px";
	}
	else {
		setVisible("Delete_Display"+strWidgetID,false);

		//show status message
		var strDisplayName=document.getElementById("display_name_"+strWidgetID).innerHTML;
		showDisplayOptionsStatus(strWidgetID,strDisplayName,"Deleting display: "+strDisplayName,true,false);
		
		var str=convertFormToWidgetContent(strWidgetID);
		var strDisplayWidgetID=document.forms["Filter"+strWidgetID].Display.value;
		var strUrl="https://__server__/?Network=Library&ID=acceptWidgetByID&WidgetID="+strDisplayWidgetID+"&delete=true";

		//need to use xmlhttprequest when the page is served by a remote server.  The problem with this though is that the local widget cache
		//is not updated when the display is saved because acceptWidgetByID is not called locally
		var strDisplayServer=document.forms["Filter"+strWidgetID].display_server.value;
		if (strDisplayServer.indexOf("127.0.0.1")<=0) {
			//strUrl="https://__server__/?Network=greenlight&ID=getXmlHttpRequest&url=https://"+strDisplayServer+"/?Network=Library|ID=acceptWidgetByID|WidgetID="+strDisplayWidgetID+"|delete=true";
			strUrl="https://"+strDisplayServer+"/?Network=Library&ID=acceptWidgetByID&WidgetID="+strDisplayWidgetID+"&delete=true";
		};

		strResult=getxmlHttpRequest(strUrl);

		//alert("delete display Result="+strResult);
		if ((true) || (strResult.startsWith("ok"))) {
			//remove the display from the drop-down list and select the next one up
			var f=document.forms["Filter"+strWidgetID];
			var intNewSelection=-1;
			for (var i=0;i<f.Display.options.length;i++) {
				if (f.Display.options[i].value==strDisplayWidgetID) {
					intNewSelection=i-1;
					f.Display.options[i]=null;
				};
			};
			
			if (intNewSelection<0) intNewSelection=0;
			if (intNewSelection<f.Display.options.length) {
				f.Display.value=f.Display.options[intNewSelection].value;
				selectDisplay(strWidgetID);
			};

			//hide status message
			showDisplayOptionsStatus(strWidgetID,strDisplayName,"",false);
		}
		else {
			showDisplayOptionsStatus(strWidgetID,strDisplayName,strResult,true,true);
		};
	};
};

//Updates tooltips for selected fields
function setTooltipsForFieldsSelected(strWidgetID) {
	if (document.forms["Filter"+strWidgetID]) {
		var SelectAll=document.forms["Filter"+strWidgetID].AllFields;
		var Select2=document.forms["Filter"+strWidgetID].FieldsSelected;
		for (var i=0;i<Select2.options.length;i++) {
			for (var j=0;j<SelectAll.options.length;j++) {
				if (SelectAll.options[j].value==Select2.options[i].value) {
					if (SelectAll.options[j].getAttribute("tooltip")) {
						Select2.options[i].setAttribute("onMouseOver","javascript:showTooltip(event,'"+SelectAll.options[j].getAttribute("tooltip")+"',10,10)");
						Select2.options[i].setAttribute("onMouseOut","javascript:showTooltip(event,'',0,0)");
					};
				};
			};
		};
	};
};

//updates the list of fields available from the AllFields select box
//this provides a single function that can be used to update the list whenever fields are added or removed from the selectd field
//so the list only displays those fields not in the selected field list
function updateFieldsAvailable(strWidgetID) {
	var SelectAll=document.forms["Filter"+strWidgetID].AllFields;
	var Select1=document.forms["Filter"+strWidgetID].FieldsAvailable;
	var Select2=document.forms["Filter"+strWidgetID].FieldsSelected;
	
	//make an array of all the values in the list of fields selected
	var strValues="|";
	for (var i=0;i<Select2.options.length;i++) strValues +=Select2.options[i].value + "|";

	//clear the list of fields available
	Select1.options.length=0;
	
	//add in all fields not in the list of selected fields
	for (var i=0;i<SelectAll.options.length;i++) {
		if (strValues.indexOf("|"+SelectAll.options[i].value+"|")<0) {
			var ndx=Select1.options.length;
			Select1.options[ndx]=new Option(SelectAll.options[i].text,SelectAll.options[i].value,false,false);
			if (SelectAll.options[i].getAttribute("tooltip")) {
				Select1.options[ndx].setAttribute("onMouseOver","javascript:showTooltip(event,'"+SelectAll.options[i].getAttribute("tooltip")+"',10,10)");
				Select1.options[ndx].setAttribute("onMouseOut","javascript:showTooltip(event,'',0,0)");
			};
		};
	};
	
	//set tooltips for all fields selected
	setTooltipsForFieldsSelected(strWidgetID);
};

//adds fields to the list of selected fields.  Called when the 'Add' button is selected
function addSelectedFields(strWidgetID) {
	var Select1=document.forms["Filter"+strWidgetID].FieldsAvailable;
	var Select2=document.forms["Filter"+strWidgetID].FieldsSelected;
	
	//get insertion index - This is the first field selected in the list of selected fields
	var intInsertIndex=-1;
	for (var i=0;(intInsertIndex<0) && (i<Select2.options.length);i++) {
		if (Select1.options[i].selected) intInsertIndex=i;
	};
	
	for (var i=0;i<Select1.options.length;i++) {
		if (Select1.options[i].selected) {
			var intInsertAt=Select2.options.length;
			Select2.options[intInsertAt]=new Option(Select1.options[i].text,Select1.options[i].value,false,false);
			if (Select1.options[i].getAttribute("tooltip")) {
				Select2.options[ndx].setAttribute("onMouseOver","javascript:showTooltip(event,'"+Select1.options[i].getAttribute("tooltip")+"',10,10)");
				Select2.options[ndx].setAttribute("onMouseOut","javascript:showTooltip(event,'',0,0)");
			};
		};
	};
	
	updateFieldsAvailable(strWidgetID);
};

//removes fields from the list of selected fields.  Called when the remove button is pressed
function removeSelectedFields(strWidgetID) {
	var Select2=document.forms["Filter"+strWidgetID].FieldsSelected;
	var Cntr=0;
	do {
		(Select2.options[Cntr].selected) ? Select2.options[Cntr]=null : Cntr++;
	} while (Cntr<Select2.options.length);
				
	updateFieldsAvailable(strWidgetID);
};

//moves a field up or down by one
function moveField(Select,Index,Direction) {
	if (Index>=Select.options.length) return;
	if ((Index+Direction>Select.options.length-1) || (Index+Direction<0)) return;
	
	var strText=Select.options[Index].text;
	var strValue=Select.options[Index].value;
	var boolSelected=Select.options[Index].selected;
	Select.options[Index].text=Select.options[Index+Direction].text;
	Select.options[Index].value=Select.options[Index+Direction].value;
	Select.options[Index].selected=Select.options[Index+Direction].selected;
	Select.options[Index+Direction].text=strText;
	Select.options[Index+Direction].value=strValue;
	Select.options[Index+Direction].selected=boolSelected;
};

//moves selected fields up
function moveFieldsUp(strWidgetID) {
	var Select2=document.forms["Filter"+strWidgetID].FieldsSelected;
	for (var i=0;i<Select2.options.length;i++) {
		if (Select2.options[i].selected) moveField(Select2,i,-1);
	};
	
	//set tooltips for all fields selected
	setTooltipsForFieldsSelected(strWidgetID);
};

//moves selected fields down
function moveFieldsDown(strWidgetID) {
	var Select2=document.forms["Filter"+strWidgetID].FieldsSelected;
	for (var i=Select2.options.length-1;i>=0;i--) {
		if (Select2.options[i].selected) moveField(Select2,i,1);
	};
	
	//set tooltips for all fields selected
	setTooltipsForFieldsSelected(strWidgetID);
};

//Displays the dialog used to customize a display
function editFilter(strWidgetID,e)
{
	//Abort if the display is refreshing
	if(arRefreshing.indexOf(strWidgetID+"|")>=0) return;

	//initialize fields available from the master list (less those in the selected list)
	updateFieldsAvailable(strWidgetID);
	
	divFilter=document.getElementById("Filter"+strWidgetID);	//The div containing the display drop-down and save/delete/refresh buttons
	divCustom=document.getElementById("Customize"+strWidgetID); //The div containing the display settings.  This is the div that will be made visible.
	divCustomFields=document.getElementById("FilterCustomFields"+strWidgetID); //The div containing fields specific to the selected table.  It is contained in the custom div

	//just close the filter dialog if it's already open - this allows the custom option to act as a toggle
	if(isVisible(divCustom)) {
		setVisible(divCustom,false);
		return;
	};
	
	var intTop=divFilter.offsetTop+divFilter.offsetHeight;
	
	//adjust the top coordinate if the widget is being displayed inside an absolutely positioned div in a widget container.
	//The absolute positioning of the div causes the filter dialog to be positioned relative to the container div
	var intTopAdjust=getContainerAdjustment(document.getElementById("Customize"+strWidgetID));
	
	divCustom.style.left=divFilter.offsetLeft+"px";
	//divCustom.style.width=divFilter.offsetLeft+divFilter.offsetWidth+"px";
	divCustom.style.top=intTop-intTopAdjust;
	divCustom.style.zIndex=3;
	setVisible("Customize"+strWidgetID,true);
	divCustom.style.height=(400+divCustomFields.offsetHeight)+"px";

	if (e) {
		var d=document.getElementById("Customize"+strWidgetID);
		var arXY=getPosition(e);
		d.style.top=(arXY[1]+30-intTopAdjust)+"px";
		//(arXY[1]>=20) ? d.style.top=(arXY[1]-20)+"px" : d.style.top="0px";
		//d.style.left=0;
	};
	
	//divCustom.style.width=divContainer.offsetWidth;
};

//Closes the dialog used to customize a display
function closeEditFilter(strWidgetID) {
	setVisible("Customize"+strWidgetID,false)
};

/******************************************************************************************************
MISCELLANEOUS UTILITIES
******************************************************************************************************/
//Returns a property for the border of the given element.  
//sborder is top, left, right or bottom
//sprop is width, style or color.  "px" is removed from the width in the return value
function getBorderProperty(e,sborder,sprop) {
	if(sborder.equalsIgnoreCase("top")) {
		var s=e.style.borderTop;
	}
	else if(sborder.equalsIgnoreCase("left")) {
		var s=e.style.borderLeft;
	}
	else if(sborder.equalsIgnoreCase("bottom")) {
		var s=e.style.borderBottom;
	}
	else if(sborder.equalsIgnoreCase("right")) {
		var s=e.style.borderRight;
	}
	else {
		return("error");
	};
//alert("border="+s);	
	//Get array of properties.  Of course, they're in a different order in each browser (e.g. 1px solid #ffffff or solid 1px #ffffff
	var arString=getSubStringArray(s," ",true);
	if(arString!=null) {
		if(sprop.equalsIgnoreCase("width")) {
			for (var i=0;i<arString.length;i++) {
				if(arString[i].toUpperCase().indexOf("PX")>0) return(parseInt(replaceAllSubstrings(arString[i],"px","")));
			};
			return("error");
		};

		if(sprop.equalsIgnoreCase("style")) {
			for (var i=0;i<arString.length;i++) {
				if((arString[i].toUpperCase().indexOf("PX")<0) && (arString[i].indexOf("#")<0) && (arString[i].toUpperCase().indexOf("RGB")<0)) return(arString[i]);
			};
			return("error");
		};

		if(sprop.equalsIgnoreCase("color")) {
			for (var i=0;i<arString.length;i++) {
				if((arString[i].toUpperCase().indexOf("RGB")>=0) || (arString[i].indexOf("#")>=0)) return(arString[i]);
			};
			return("error");
		};
	};
	return("error");
};

/*	Gets the xy position of an element relative to the body of the document */
function getPosition(e){
	var topValue=0,leftValue=0;
	while(e){
		leftValue+=e.offsetLeft;
		topValue+=e.offsetTop;
		e=e.offsetParent;
	}
	var arXY=new Array(leftValue,topValue);
	return arXY;
};

/*	Gets the description associated with the selected option in a select input */
function getOptionDescription(strFormName,strElementName)
{
	var e=document.forms[strFormName];
	if (e) {
		e=document.forms[strFormName].elements[strElementName];
		if (e) {
			for (var i=0;i<e.options.length;i++) {
				if (e.options[i].value.equalsIgnoreCase(e.value)) return(e.options[i].innerHTML);
			};
		};
	};
	
	return("");
};

/*************************************************************************************
Returns the name of the currently selected option in the given select element
**************************************************************************************/
function getOptionName(eSelect) {
	if(!eSelect) return("");
	for (var i=0;i<eSelect.options.length;i++) {
		if (eSelect.options[i].value.equalsIgnoreCase(eSelect.value)) return(eSelect.options[i].innerHTML);
	};
	return("");
};

/****************************************************************************************************
Updates the options in a select box by making a call to the request server to get a current list
of options.  Relies on select boxes generated by htmlSelect which include a source, filter, 
driver params and system driver name in the select tag
****************************************************************************************************/
function updateOptions(ID,s)
{	
	//appendToLog("updateOptions ID="+ID+" s="+s);
	var e=document.getElementById(ID);
	if(!e) {
		appendToLog("Error: updateOptions() cannot locate select with ID="+ID);
		return;
	};
	
	if(s) {
		setOptions(e,s);
		return;
	}
	
	var sCollectionID=e.getAttribute("CollectionID");
	var sSource=e.getAttribute("source");
	var sFilter=e.getAttribute("filter");
	var sParams=e.getAttribute("params");
	var sSysDriverName=e.getAttribute("SysDriverName");
	
	var sUrl=getServer()+"/?Network=Greenlight&ID=getWidget&DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em&Widget=Notification Queries";
	sUrl +="&query=getHtmlSelectOptions";
	sUrl +="&CollectionID="+sCollectionID;
	sUrl +="&Source="+sSource;
	sUrl +="&Filter="+sFilter;
	sUrl +="&DriverParams="+sParams;
	sUrl +="&SystemDriverName="+sSysDriverName;
	
	var sFunc="updateOptions(\""+ID+"\",s)";
	asynchInclude(null,sUrl,sFunc,sFunc);
};

/* Sets the contents of a select box given a string of options in the form option1=value1|option2=value2 */
function setOptions(eSelect,strOptions) {
	if(eSelect==null) {
		appendToLog("eSelect is null in setOptions.  Options="+strOptions,false,true);
		printStackTrace();
	};
	
	//save the current selection.  It will be restored if it is in the new set of options.
	var Selection=eSelect.value;
	var bKeepSelection=false;
	
	var options=eSelect.options;
	options.length=0;
	arCollection=getSubStringArray(strOptions,"|",true);
	if(arCollection!=null) {
		for(var i=0;i<arCollection.length;i++) {
			arPair=getSubStringArray(arCollection[i],"=",true);
			if((arPair) && (arPair.length>1)) {
				options[options.length]=new Option(arPair[1],arPair[0],false,false);
				if(arPair[0].equalsIgnoreCase(Selection)) bKeepSelection=true;
			};
		};
		if(bKeepSelection) eSelect.value=Selection;
	}
	else {
		appendToLog("Error in setOptions.  Options is empty.",false,true);
		printStackTrace();
	};
};

function getViewportWidth() {
	// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
	if (typeof window.innerWidth !='undefined') return(window.innerWidth);

	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
	if (typeof document.documentElement !='undefined' && typeof document.documentElement.clientWidth !=
	 'undefined' && document.documentElement.clientWidth !=0) return(document.documentElement.clientWidth);

	// older versions of IE
	return(document.getElementsByTagName('body')[0].clientWidth);
};

function getViewportHeight() {
	// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
	if (typeof window.innerHeight !='undefined') return(window.innerHeight);

	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
	if (typeof document.documentElement !='undefined' && typeof document.documentElement.clientWidth !=
	 'undefined' && document.documentElement.clientHeight !=0) return(document.documentElement.clientHeight);

	// older versions of IE
	return(document.getElementsByTagName('body')[0].clientHeight);
};

function getViewportSize() {
	// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
	if (typeof window.innerWidth !='undefined') return(window.innerHeight);

	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
	if (typeof document.documentElement !='undefined' && typeof document.documentElement.clientWidth !=
	 'undefined' && document.documentElement.clientWidth !=0) return(document.documentElement.clientHeight);

	// older versions of IE
	return(document.getElementsByTagName('body')[0].clientHeight);
};

function sizeTextareaHeight(e) {
	var iStartRows=e.rows;

	while ((e.rows > 1) && (e.scrollHeight < e.offsetHeight)) e.rows--;
	
	var h=0;
	while ((e.scrollHeight > e.offsetHeight) && (h!==e.offsetHeight)) {
		h=e.offsetHeight;
		e.rows++;
	}
	
	if (getBrowserName().toUpperCase().indexOf("EXPLORER")>=0) e.rows++;

	if(e.rows!=iStartRows) positionItems();
};

/******************************************************************************************************
Videos
******************************************************************************************************/
//Plays the video with the given ID
//Right now, the ID represents a youtube video ID.  In the future, it could be changed to indicate a file on another server
function playVideo(strVideoID) 
{
	//get the div that will display the video
	var div=document.getElementById("video_display");
	
	//add a div if one has not been included on the page
	if (!div) {
		div=document.createElement('div');
		div.className="play_video";
		div.setAttribute("class","play_video");
		div.id="video_display";
		div.style.position="absolute";
		div.style.top="50px";
		div.style.left="0px"; 
		div.style.width="1024px";
		div.style.height="596px";
		div.style.borderStyle="solid";
		div.style.borderWidth="1px";
		div.style.padding="0px";
		div.style.margin="0px";
		div.style.backgroundColor="white";
		div.style.zIndex=99;
		document.body.appendChild(div);
	};

	var str="<div class='close_video'><a href='#home' onClick='setVisible(\"video_display\",false)'>Close this window</a></div>";
	str +="<object ID='embedded_video'>";
	str +="<embed src=http://www.youtube.com/v/"+strVideoID+"?fs=1&amp;hl=en_US type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='1024' height='576'>";
	str +="</object>";
	div.innerHTML=str;
	setVisible("video_display",true);
};

// This function does not work in IE.  Errors are thrown in the appendChild functions
function playVideo1(strVideoID) 
{
	//create the embed object
	var obj=document.createElement('object');
	obj.setAttribute("ID","embedded_video");

	//set the parameters
	var param=document.createElement('param');
	param.setAttribute("allowFullScreen","true");
	param.setAttribute("allowscriptaccess","always");
	param.setAttribute("name","movie");
	obj.appendChild(param);

	var param=document.createElement('embed');
	param.setAttribute("src","http://www.youtube.com/v/"+strVideoID+"?fs=1&amp;hl=en_US");  
	param.setAttribute("type","application/x-shockwave-flash");
	param.setAttribute("allowscriptaccess","always");
	param.setAttribute("allowfullscreen","true");
	param.setAttribute("width","1024");
	param.setAttribute("height","576");
	obj.appendChild(param);

	//get the div that will display the video
	var div=document.getElementById("video_display");
	
	//add a div if one has not been included on the page
	if (!div) {
		div=document.createElement('div');
		div.setAttribute("class","play_video");
		div.setAttribute("id","video_display");
		var divClose=document.createElement('div');
		divClose.setAttribute("class","close_video");
		var a=document.createElement('a');
		a.setAttribute("href","javascript:setVisible('video_display',false)");
		a.onclick=Function("setVisible('video_display',false)");
		a.innerHTML="Close this window";
		divClose.appendChild(a);
		div.appendChild(divClose);
		
		document.body.appendChild(div);
	};

	//remove any existing video from the div
	var v=document.getElementById("embedded_video");
	if (v) div.removeChild(v);
	
	//add the new video
	div.appendChild(obj);
	setVisible("video_display",true);
};

/******************************************************************************************************
ComboBox
******************************************************************************************************/
function comboBox(aFormName,aInputName,aSelectName)
{
//alert("initializing comboBox("+aFormName+","+aInputName+","+aSelectName+")");
appendToLog("initialize combobox("+aFormName+","+aInputName+","+aSelectName+")");	
	//Array of options originally added to the select box
	this.arOptionName=new Array();
	this.arOptionValue=new Array();
	
	//Create an ID for the combobox and add it to the array of comboboxes
	if (!window.arComboBox) window.arComboBox=[];
	this.ID=window.arComboBox.length;
	window.arComboBox[this.ID]=this;
	
	this.comboBoxShow=f_comboBoxShow;
	this.comboBoxHide=f_comboBoxHide;
	this.comboBoxHideIfNotSelectFocused=f_comboBoxHideIfNotSelectFocused;
	this.comboBoxToggle=f_comboBoxToggle;
	this.comboBoxUpdateList=f_comboBoxUpdateList;
	this.comboBoxSetValue=f_comboBoxSetValue;
	this.comboBoxSelectHasFocus=f_comboBoxSelectHasFocus;

	eForm=document.forms[aFormName];
	if (eForm) {
		this.eInput=eForm.elements[aInputName];
		this.eSelect=eForm.elements[aSelectName];
		if (!this.eInput) alert("Error initializing comboBox.  Input does not exist: "+aInputName);
		if (!this.eSelect) alert("Error initializing comboBox.  Select does not exist: "+aSelectName);
		if ((!this.eInput) || (!this.eSelect)) return;
		
		this.SelectHasFocus=false;
		
		//add functions to the input and select controls
		this.eInput.onclick=Function("arComboBox['" + this.ID + "'].comboBoxShow()");
		this.eInput.onkeyup=Function("arComboBox['" + this.ID + "'].comboBoxUpdateList()");
		this.eInput.onblur=Function("arComboBox['" + this.ID + "'].comboBoxHideIfNotSelectFocused()");
		this.eSelect.onclick=Function("arComboBox['"+ this.ID + "'].comboBoxHide()");
		this.eSelect.onfocus=Function("arComboBox['"+ this.ID + "'].comboBoxSelectHasFocus()");
		this.eSelect.onblur=Function("arComboBox['"+ this.ID + "'].comboBoxHide()");
		
		//save a copy of the options defined in the select input
		for (var i=0;i<this.eSelect.length;i++) {
			this.arOptionName[i]=this.eSelect.options[i].text;
			this.arOptionValue[i]=this.eSelect.options[i].value;
			if ((i==0) || (this.eSelect.options[i].value==this.eSelect.value)) this.eInput.value=this.eSelect.options[i].text;
		};
	}
	else {
		alert("Error initializing comboBox.  Form does not exist: "+aFormName);
	};
};

function f_comboBoxSetValue() 
{
	if ((this.eInput) && (this.eSelect)) {
		for (var i=0;i<this.eSelect.length;i++) {
			if (this.eSelect.options[i].value.equalsIgnoreCase(this.eSelect.value)) {
				this.eInput.value=this.eSelect.options[i].text.trim();
				return;
			};
		};
	};
};

function f_comboBoxUpdateList() 
{
	//clear the select box
	while (this.eSelect.length>0) this.eSelect.remove(0);
	
	//get the text displayed in the input box
	var str=this.eInput.value.toUpperCase();
	
	//add options that contain the text
	for (var i=0;i<this.arOptionName.length;i++) 
	{
		if ((str.length==0) || (this.arOptionName[i].toUpperCase().indexOf(str)>=0))
		{
			var eOption=document.createElement("option");
			eOption.text=this.arOptionName[i];
			eOption.value=this.arOptionValue[i];
			try {
				this.eSelect.add(eOption,null);	// standards compliant; doesn't work in IE
			}
			catch(ex) {
				this.eSelect.add(eOption);	// IE only
			};
		};
	};
};

function f_comboBoxHideIfNotSelectFocused() {
	if (this.SelectHasFocus==false) this.comboBoxHide();
};

function f_comboBoxSelectHasFocus() {
	this.SelectHasFocus=true;
};

function f_comboBoxShow() {
	if (this.eSelect) {
		//position and size the select box
		this.eSelect.style.left=this.eInput.offsetLeft;
		this.eSelect.style.top=this.eInput.offsetTop+this.eInput.offsetHeight;
		this.eSelect.style.zIndex=10000;
		this.eSelect.style.width=this.eInput.offsetWidth;
		
		this.eSelect.style.display="block";
	};
};

function f_comboBoxHide() {
	if (this.eSelect) {
		this.comboBoxSetValue();
		this.eSelect.style.display="none";
		this.SelectHasFocus=false;
	};
};

function f_comboBoxToggle() {
	//alert("toggle combobox");
	if (this.eSelect) {
		if (this.eSelect.style.display=="none") {
			this.comboBoxShow();
		}
		else {
			this.comboBoxHide();
		};
	};
};

/******************************************************************************
Tokenize or de-tokenize a value for a cell in a table
******************************************************************************/
function tokenizeTableValue(sValue,bTokenize)
{
	if(bTokenize) {
		sValue=replaceAllSubstrings(sValue,",","%%com"+"ma%%");
		sValue=replaceAllSubstrings(sValue,"\r\n","%%cr"+"l"+"f%%");
		sValue=replaceAllSubstrings(sValue,"\"","%%qu"+"ot%%");
		sValue=replaceAllSubstrings(sValue,"'","%%ap"+"os%%");
		sValue=replaceAllSubstrings(sValue,">","%%g"+"t%%");
		sValue=replaceAllSubstrings(sValue,"<","%%l"+"t%%");
	}
	else {
		sValue=replaceAllSubstrings(sValue,"%%com"+"ma%%",",");
		sValue=replaceAllSubstrings(sValue,"%%cr"+"l"+"f%%","\r\n");
		sValue=replaceAllSubstrings(sValue,"%%qu"+"ot%%","\"");
		sValue=replaceAllSubstrings(sValue,"%%ap"+"os%%","'");
		sValue=replaceAllSubstrings(sValue,"%%g"+"t%%",">");
		sValue=replaceAllSubstrings(sValue,"%%l"+"t%%","<");
	};
	return(sValue);
};


function printTable(sTableID,sWrapper)
{
	//Look for a div with the ID print[tableid] and print the contnts of that
	//This allows for including content above or below the table
	//If not defined, use the div surrounding the table
	var eTable=document.getElementById(sTableID);
	var eToPrint=document.getElementById("print"+sTableID);
	if(!eToPrint) eToPrint=document.getElementById("div"+sTableID);
	var eTable=document.getElementById(sTableID);

	//abort if surrounding div is not found
	if(!eToPrint) {
		alert("Cannot locate table div with ID=div"+sTableID);
		return;
	};

	//if the printer wrapper was retrieved, open the document in a new window
	if(sWrapper) {
		sWrapper +=eToPrint.innerHTML;
		sWrapper +="</body></html>"
		var arStyle=document.getElementsByTagName("style");
		var sStyle="";
		for(var i=0;i<arStyle.length;i++) {
			sStyle +=arStyle[i].innerHTML;
		};
		sWrapper=replaceAllSubstrings(sWrapper,"$style$",sStyle);

		//show message
		showTableMessage(sTableID,"Preparing report...",true);

		//apply overlay to disable table
		applyOverlay(eToPrint,"overlay"+sTableID);
		
		var docprint=window.open("","","toolbar=yes,location=no,directories=yes,menubar=yes,scrollbars=yes,width=650, height=600, left=100, top=25"); 
		docprint.document.open(); 
		docprint.document.write(sWrapper); 

		var arTagNames=new Array("div","form","thead");
		for (var i=0;i<arTagNames.length;i++) {
			var arTag=docprint.document.getElementsByTagName(arTagNames[i]);
			var j=0;
			while (j<arTag.length) {
				var attr1=arTag[j].getAttribute("noprint");
				var attr2=arTag[j].getAttribute("print");
	//alert("attr1="+attr1+" attr2="+attr2);			
				if (((attr1) && (attr1.toString().equalsIgnoreCase("true"))) || ((attr2) && (attr2.toString().equalsIgnoreCase("false")))) {
					arTag[j].style.display="none";
					arTag[j].display="none";
					arTag[j].innerHTML="&nbsp;";
					arTag[j].parentNode.removeChild(arTag[j]); 
				}
				else {
					j++;
				};
			};
		};
		
		//hide cells in tables used to select and edit records
		var arCells=docprint.document.getElementsByName("selectrecord");
		for(var i=0;i<arCells.length;i++) arCells[i].style.display="none";

		var arCells=docprint.document.getElementsByName("editrecord");
		for(var i=0;i<arCells.length;i++) arCells[i].style.display="none";
		
		//remove script tags
		var arTag=docprint.document.getElementsByTagName("script");
		while (arTag.length>0) {
			arTag[0].parentNode.removeChild(arTag[0]); 
		};

		//hide message
		showTableMessage(sTableID,"",false);

		//remove overlay
		var eOverlay=document.getElementById("overlay"+sTableID);
		eOverlay.parentNode.removeChild(eOverlay);
		
		docprint.document.close(); 
		docprint.focus(); 
		return;
	}
	
	//get the printer wrapper
	var sUrl="__RequestServer__/?Network=GreenLight&ID=getCachedWidget&DocumentID=77NaWu0FhKDKXL7C70JpnKmy&Widget=Printer Wrapper";
	var sFunc="printTable(\""+sTableID+"\",req.responseText)";
	asynchInclude(null,sUrl,sFunc,sFunc);

};

/******************************************************************************
Called on mobile devices to focus the given dialog and hide all the others.  The
current state is recorded so it can be restord.  Called for dialogs used to
edit records in a table and for display dialogs.  Allows for dialogs to be opened
on top of each other.  For example, a dialog used to edit a record may contain
a table with a display dialog and an edit-record dialog.

Information about the current state of all divs is recorded in a string and added to the
arFocusDialog array which acts like a stack.  When the dialog is closed, the string
is pulled from and the state of all divs is restored.  The defocusDialog() function is 
caled to restore the state of the divs.
******************************************************************************/
var arFocusDialog=new Array();
var bInFocusDialog=false;

function focusDialog(ID)
{
	bInFocusDialog=true;
	location.hash="#edit";

	//The first two elements in the string are the dialog ID and the y position of the document
	s=ID+"|"+window.scrollY;;
	var sDebug="";
	
	//add information about the remaining divs
	var arDiv=document.getElementsByTagName("div");
	for (var i=0;i<arDiv.length;i++) {
		if((boolVal(arDiv[i].getAttribute("isItem"))) || (arDiv[i].getAttribute("IsMobileDialog"))) {
			if(!arDiv[i].id.equalsIgnoreCase(ID)) {
				if(isVisible(arDiv[i])) {
					s+="|"+arDiv[i].id+"=true";
					setVisible(arDiv[i],false);
					sDebug+="Hide "+arDiv[i].id+"\r\n";
				}
				else {
					s+="|"+arDiv[i].id+"=false";
				};
			};
		};
	};
	arFocusDialog[arFocusDialog.length]=s;
	sDebug +="Show "+ID+"=true\r\n"
	
	//add an attribute that can be used in the loop above to identify divs that are not items but that should be hidden.
	//This happens when a dialog is opened to edit a record and the dialog contains a table.  When the display options
	//are opened in the tablr or a record is edited, the edit dialog opened from the first table will have been moved
	//to the body and it will no longer be inside a container item.  This attibute is used to hide dialogs like these
	//that have been opened on the way to tue current dialog.
	document.getElementById(ID).setAttribute("IsMobileDialog","true");
	setVisible(ID,true);
	
	sDebug +="arFocusDialog length="+arFocusDialog.length+"\r\n";
	//sDebug +="arFocusDialog["+(arFocusDialog.length-1)+"]="+arFocusDialog[arFocusDialog.length-1]+"\r\n";
	//alert(sDebug);
	//appendToLog(sDebug,false,true);
	bInFocusDialog=false;
};

function defocusDialog()
{
	//abort if this is being called by hashChange when the location is set in focusDialog
	if(bInFocusDialog) return;
	
	//abort if there are no records in arFocusDialog
	if(arFocusDialog.length==0) {
		appendToLog("deFocusDialog Error: length=0",false,true);
		return;
	};
	
	//get the last string recorded in arFocusDialog
	var sDebug="defocusDialog restoring "+arFocusDialog[arFocusDialog.length-1]+"\r\n";
	var a=getSubStringArray(arFocusDialog[arFocusDialog.length-1],"|",true);
	
	//the ID of the dialog is the first element in the array
	sDebug +="defocusDialog setVisible "+a[0]+"=false\r\n";
	setVisible(a[0],false);

	//restore the y position
	sDebug +="defocusDialog scrollto "+parseInt(a[1])+"\r\n";
	window.scrollTo(0,parseInt(a[1]));

	//restore the visibility of the remaining items
	for(var i=2;i<a.length;i++) {
		var n=a[i].indexOf("=");
		var sID=a[i].substring(0,n);
		var bVisible=boolVal(a[i].substring(n+1));
		sDebug +="Show "+sID+"="+bVisible+"\r\n";
		setVisible(sID,bVisible);
	};
	
	//remove the string from the array
	arFocusDialog.length--;

	//alert(sDebug);
	//appendToLog(sDebug,false,true);
};

/******************************************************************************
Called when the edit dialog is closed on a mobile device by pressing the back button
This is implemented by onhashchange="hashChange()" in the body element of the widget
container.  When the dialog is displayed, #edit is added to window.location.  When the 
back button is pressed, the location no longer contains #edit.

This function is not called when the close icon in the top right of a dialog is clicked 
to close the dialog.  Instead, the defocusDialog function is called directly.
******************************************************************************/
function hashChange()
{
	var sLocation=window.location.toString().toUpperCase();
	if(sLocation.indexOf("EDIT")<=0) defocusDialog();
	
	if(false) {
		if(sLocation.toUpperCase().indexOf("EDIT")<=0) {
			var arDiv=document.getElementsByTagName("div");
			for (var i=0;i<arDiv.length;i++) {
				if(arDiv[i].getAttribute("hideafteredit")=="true") {
					setVisible(arDiv[i],false);
				}
				else if(arDiv[i].getAttribute("ShowAfterEdit")=="true") {
					setVisible(arDiv[i],true);
				};
			};
			
			window.scrollTo(0,document.body.getAttribute('RestoreScrollTop'));
		};
	};
};


/******************************************************************************
Opens the edit dialog for a record in a table.  e is the icon clicked to being editing.
******************************************************************************/
function showTableEditDialog(e)
{
	//the td element is passed when a cell is clicked in a mobile document
	var td=e;

	//if it isn't a td in a mobile document, it's content inside the td
	if(td.nodeName.equalsIgnoreCase("td")==false) td=e.parentNode;
	
	//if the parent is not a td, look one more level up.  This is used when the function is called by clicking on a field
	//in the table instead of the normal edit icon included in the table.  The field looks like <td><text><span onClick=xxx></span></text></td>
	if(td.nodeName.equalsIgnoreCase("td")==false) td=td.parentNode;
	
	var tr=td.parentNode;
	var tbody=tr.parentNode;
	var table=tbody.parentNode;
	if(table.nodeName.equalsIgnoreCase("table")==false) {
		alert("Error reading driver information");
		return;
	};

	var sTableID=table.getAttribute("ID");
	var sDialogID=table.getAttribute("EditDialogID");

	//initialize the dialog header.  It is initially outside the dialog div and needs to be
	//moved inside the div
	initializeTableDialogHeader(sTableID,sDialogID,tr.getAttribute("KeyValue"));
	
	//hide the disable div 
	if(document.getElementById("EditDialogDisable"+sTableID)) setVisible("EditDialogDisable"+sTableID,false);
	
	//get array of all field ID's and field types from the table header
	sAllFieldID=table.getAttribute("aspectAllFieldID");
	sAllFieldType=table.getAttribute("aspectAllFieldType");
	if((sAllFieldID==null) || (sAllFieldType==null)) {
		alert("No fields included for editing");
		return;
	};
	
	var arFieldID=getSubStringArray(sAllFieldID,",",true);
	var arFieldType=getSubStringArray(sAllFieldType,",",true);

	//get array of all values from the row
	var arValues=getSubStringArray(getAttr(tr,"aspectAllValues"),",",true);
	for(var i=0;i<arValues.length;i++) {
		arValues[i]=tokenizeTableValue(arValues[i],false);
	};

	//set value of all elements in the dialog
	var div=document.getElementById(sDialogID);
	if(!div) {
		alert("Cannot locate dialog: "+sDialogID);
		return;
	};
	var arRefresh=setDialogValues(sTableID,div,arFieldID,arValues);

	//set the table ID and KeyValue in the dialog
	div.setAttribute("TableID",sTableID);
	div.setAttribute("KeyValue",tr.getAttribute("KeyValue"));

	//if it's a mobile device...
	if(bIsMobileDevice) {
		div.parentNode.removeChild(div);
		document.body.appendChild(div);
		
		//Hide all divs on the page and display the dialog.  
		focusDialog(div.id);
		
		/*
			09-18-2015: Don't know why this is disabled.  It may be better to record Informaiton about the scroll position
			of divs in the focusDialog() function
		*/
		if(false) {
			//record the current scrolling position of the page so it can be restored when the dialog is closed
			var iScrollTop=0;
			//iScrollTop=document.pageYOffset;
			iScrollTop=window.scrollY;
			//iScrollTop=document.body.scrollTop;
			//iScrollTop=document.html.scrollTop;
			//iScrollTop=document.documentElement.scrollTop;
			
			appendToLog("iScrollTop="+iScrollTop,false,true);
			
			document.body.setAttribute("RestoreScrollTop",iScrollTop);
			//document.body.setAttribute("RestoreScrollTop",document.body.scrollTop);
			//document.body.setAttribute("RestoreScrollLeft",document.body.scrollLeft);

			//move the dialog to the body element
			div.parentNode.removeChild(div);
			document.body.appendChild(div);
			
			//Hide all other divs.  Set an attribute to indicate the items that should be 
			//displayed when the dialog is closed
			var arDiv=document.getElementsByTagName("div");
			for (var i=0;i<arDiv.length;i++) {
				if (boolVal(arDiv[i].getAttribute("isItem"))) {
					if(isVisible(arDiv[i])) {
						arDiv[i].setAttribute("ShowAfterEdit","true");
						setVisible(arDiv[i],false);
					}
					else {
						arDiv[i].setAttribute("ShowAfterEdit","false");
					};
				};
			};
			
			//set an attribute in the dialog used to identify and hide the dialog
			div.setAttribute("HideAfterEdit","true");
		};
	};
	
	//make sure the dialog is positioned
	if(bIsMobileDevice) {
		div.style.position="absolute";
		div.style.left="0px";
		div.style.top="0px";
	}
	else {
		//position the dialog for desktop browsers.  Use either "fixed" or "absolute" positioning.  They both position
		//the dialog immediately to the right of the edit icon.  Fixed positioning displays the 
		//dialog without requiring it to fit within the parent div.  The dialog is displayed over the
		//parent div and can be any size.  Absolute positioning displays the dialog in the constraints
		//of the parent div's boundaries and it may be chopped off.  
		//Absolute positioning must be used on mobile devices, otherwise the dialog will not scroll
		//and it is not possible to move it to view the input fields when the devices keyboard is displayed
		//May need to add the ability to specify when a dialog should be fixed or absolute.  Could include
		//an attribute in the dialog div
		var sMethod="absolute";
		div.style.position=sMethod;
		//var xy=getPosition2012(e,sMethod,div.parentNode);
		var xy=getPosition2012(e,sMethod,div.parentNode);
		if(isMobileDevice()) {
			div.style.left="0px";
			div.style.top=xy[1]+"px";
		}
		else {
			//div.style.left=(xy[0]+e.offsetWidth+5)+"px";
			//div.style.top=xy[1]+"px";
			div.style.left=xy[0]+"px";
			div.style.top=(xy[1]+e.offsetHeight+5)+"px";
		};
	};
	
	//call initialization function for dialog if one is defined
	var s="initializeDialog"+sDialogID;
	if(eval('typeof '+s)=="function") eval(s+"()");

	//look for initialization function in the aspectinit attribute of the div
	//This is used so a single function can be called even when the dialog ID is random
	//The ID of the dialog div is passed as an argument.  Additional arguments can be
	//made available to the function by including them in the dialog div's attributes or
	//as hidden inputs inside the dialog.
	var s=div.getAttribute("aspectinit");
	if(s) {
		if(eval('typeof '+s)=="function") eval(s+"('"+sDialogID+"')");
	};

	//initialize calendar and other controls
	initializeCustomControls();

	//show the dialog.  If it's a mobile device, navigate to the #edit hash in the widget container.  This is done so when
	//the back button is pressed on the device, the hash is removed from the location and the table can be restored
	setVisible(sDialogID,true);
	//if(bIsMobileDevice) location.hash="#edit";
	
	initializeTabbedDialogs();
	
	//refresh tables - It's important that tables be refreshed after the dialog is made visible so the table message
	//is displayed in the correct position.  This is why the setDialogValues returns a list of tables to be refreshed
	//rather than refreshing them as they're found.  If an element was included in the table div, the message could be
	//displayed there and some of this mess would go away.
	if(arRefresh.length>0) {
		for(var i=0;i<arRefresh.length;i++) {
			//check to see if the table still exists.  This is necessary because a dialog might include a table that
			//is created on the fly by an initialization function when the dialog is loaded and the table may no longer exist.
			if(document.getElementById(arRefresh[i])) refreshTable(arRefresh[i]);
		};
	};
};

/******************************************************************************
Initializes fields in the dialog used to edit a record in a table.  If the table
contains a readonly attribute with a value of true, fields in the dialog belonging
to the structure are disabled.  

TableID		ID of the table the dialog is associated with
e			The div containing the dialog to be updated 
ArFieldID	Array of field ID's from the table's aspectAllFieldID attribute
arValues		Array of de-tokenized values from the table's aspectAllValues attribute
ExcludeInputs	If defined and true, only span tags will be updated.  This is done to avoid
			overwriting edits that may not be reflected yet when a record is refreshed
******************************************************************************/
function setDialogValues(TableID,e,ArFieldID,ArValues,ExcludeInputs)
{
	if(!bContainerLoaded) return;
	
	var bExcludeInputs=((ExcludeInputs) && (ExcludeInputs==true));
	
//printStackTrace();
//appendToLog("setDialogValues TableID="+TableID+" Fields="+ArFieldID+" Values="+ArValues,false,true);
//appendToLog("setDialogValues TableID="+TableID+" bContainerLoaded="+bContainerLoaded,false,true);
	if(!e) {
		appendToLog("Invalid edit dialog in setDialogValues.  TableID:"+TableID);
		return;
	};
	
	var eTable=document.getElementById(TableID);
	var attr=eTable.getAttribute("aspectreadonly");
	var bReadOnly=((attr) && (attr.equalsIgnoreCase("true")));
	
	//initialize an array of table ID's that will be updated when the other values have been set.  Tables need to be refreshed
	//last because external filters and driver params may be include in the dialog values
	var arTablesToRefresh=new Array();
	
	for(var i=0;i<e.childNodes.length;i++) {
		var eChild=e.childNodes[i];
		if(eChild.nodeName.indexOf("\x23")<0) {
			//refresh any driver tables included in the dialog.  Check for 'ver' attribute to exclude standard
			//tables used to format the dialog
			if((eChild.nodeName.equalsIgnoreCase("table")) && (eChild.getAttribute("aspectver"))) {
				var sID=eChild.getAttribute("ID");
				if(sID) {
					arTablesToRefresh[arTablesToRefresh.length]=sID;
					setVisible(document.getElementById(sID).tBodies[0],false);
				};
			}
			else {
				var sName=eChild.getAttribute("name");
				if(sName) {
					var n=getFieldIndex(sName,ArFieldID);
					if(n>=0) {
//appendToLog("Setting value of "+sName+"="+ArValues[n],false,true);
						if(eChild.nodeName.equalsIgnoreCase("span")) {
							//eChild.innerHTML=ArValues[n];
							eChild.innerHTML=formatField(TableID,eChild,ArValues[n]);
						}
						else if(eChild.nodeName.equalsIgnoreCase("img")) {
							eChild.src="";
							eChild.src=ArValues[n];
						}
						else {
							var bIsActiveElement=false;
							if(document.activeElement) {
								bIsActiveElement=(document.activeElement==eChild);
							};

							if((!bExcludeInputs) && (!bIsActiveElement) && (eChild.type)) {
								if(eChild.type=="hidden") {
									eChild.value=ArValues[n];
								}
								if(eChild.type=="checkbox") {
									eChild.checked=ArValues[n].equalsIgnoreCase("true");
								}
								else if(eChild.type=="select-one") {
									//if a value is not supplied for a drop-down, set it to 0.  This can happen if default values
									//are not specified for a field in the structure
									if(ArValues[n].length>0) {
										//This is a quick fix for a problem that occurs when the AspectAllValues attribute is updated when a record is edited.
										//The updated values include lookups instead of the value (e.g. --select-- instead of 0).
										
										//NOTE:	03-17-2013
										//This is because TAspectDriver.getRecordValues was calling getEmbeddedFieldInfo with InfoType set to 4
										//which causes it to use getFieldForHtml instead of getField.  
										//The InfoTypeis now 2 which should work properly.
										//This also affects select-multiple below
										var bSetIt=false;
										
										//try to match the value
										for (var j=0;j<eChild.options.length;j++) {
											if(eChild.options[j].value.equalsIgnoreCase(ArValues[n])) {
												eChild.value=ArValues[n];
												bSetIt=true;
											};
										};
										
										//if no match found, set it to the option with text matching the value
										if(bSetIt==false) {
											for (var j=0;j<eChild.options.length;j++) {
												if(eChild.options[j].text.equalsIgnoreCase(ArValues[n])) {
													eChild.value=eChild.options[j].value;
												};
											};
										};
									}
									else {
										eChild.value="0";
									};
								} 
								else if(eChild.type=="select-multiple") {
									//NOTE:	03-17-2013
									//See note above for select box values

//appendToLog("select-multiple value="+ArValues[n],false,true);
									//select each option for which a matching value is found
									var a=getSubStringArray(ArValues[n],"|",true);
									for (var j=0;j<eChild.options.length;j++) {
//appendToLog("value="+eChild.options[j].value+" index="+a.indexOf(eChild.options[j].value),false,true);
										eChild.options[j].selected=((a!=null) && (a.indexOf(eChild.options[j].value)>=0));
									};
								}
								else if(eChild.type=="textarea") {
									eChild.value=replaceAllSubstrings(ArValues[n],"//co"+"mma//",",");
								}
								else if((eChild.type.equalsIgnoreCase("text")) || (eChild.type.equalsIgnoreCase("password")) || (eChild.type.equalsIgnoreCase("hidden"))){
									//Note: Weirdness in Javascript considers an empty string as "not defined".  The formatField function uses the
									//value of the element as a starting point if a value is not defined.  Have to set the value of the element
									//before calling the function
									eChild.value=replaceAllSubstrings(ArValues[n],"//co"+"mma//",",");
									eChild.value=formatField(TableID,eChild,ArValues[n]);
								}
								else {
									appendToLog("Error in setDialogValues: Unknown type - "+eChild.type,false,true);
								};
								
								eChild.disabled=bReadOnly;
							};
						};
					};
				};
				arTablesToRefresh=arTablesToRefresh.concat(setDialogValues(TableID,eChild,ArFieldID,ArValues));
			};
		};
	};
	
	return(arTablesToRefresh);
};

/******************************************************************************
Submits data edited in a dialog.  The TableID and KeyExpression are recorded as attributes in the
dialog when it is displayed.  

The ADialogID parameter is not required.  The parent dialog will
be determined by checking the parent nodes of e until a dialog div is found.  However, ADialogID
can be passed to explicitly indicate the parent dialog div.  This can be used when a dialog contains
a 2nd dialog inside of it with data from another driver (e.g. the BackOffice registration container).
The format might be
<div dialog1>
	field from 1
	<div dialog2>
		field from 2
	</div>
	field from 1
</div>
******************************************************************************/
function submitDialogCell(e,ADialogID)
{
	appendToLog("submitDialogCell: "+e.getAttribute("name"));
	
	if(!ADialogID) {
		//go up the parent list until the dialog div is located.  This is the first div with a TableID attribute 
		var div=null;
		var node=e;
		while((div==null) && (e.parentNode)) {
			if(node.getAttribute("TableID")) {
				div=node;
			}
			else {
				node=node.parentNode;
			};
		};
	}
	else {
		div=document.getElementById(ADialogID);
	};

	if(div==null) {
		alert("could not locate dialog div");
		return;
	};

	//set the background color of the cell and the attribute indicating it's saving
	var eParent=e.parentNode;
	if((eParent.nodeName.equalsIgnoreCase("td")) || (eParent.nodeName.equalsIgnoreCase("span"))) {
		appendToLog("submitDialogCell setting pending status for "+eParent+" Name="+e.getAttribute("name"));;
		setPendingSubmissionStyle(e,false,true);
		//eParent.style.backgroundColor=PendingSubmissionBackgroundColor;
		eParent.setAttribute("AspectSubmissionPending","new");
	};
	
	//get the table ID from the dialog div
	sTableID=div.getAttribute("TableID");
	sKeyValue=div.getAttribute("KeyValue");
	sFieldID=e.getAttribute("name");
	var sValue="";
	if (e.type=="select-multiple") {
		for (var i=0;i<e.options.length;i++) {
			if(e.options[i].selected) {
				if(sValue.length>0) sValue +="|";
				sValue +=e.options[i].value;
			};
		};
	}
	else {
		sValue=(e.type=="checkbox") ? e.checked : e.value;
	};
	
	//format the contents of the cell
	if((e.type!="select-one") && (e.type!="select-multiple") && (e.type!="checkbox")) e.value=formatField(sTableID,e);
//appendToLog("submitDialogCell: sValue="+sValue);

	//update the corresponding cell in the table if there is one.  Setting the value of the control
	//in the table does not cause the onChange event to fire so the data is not submitted twice
	var table=document.getElementById(sTableID);
//appendToLog("submitDialogCell: getTableCellControl table ID="+sTableID+" table="+table.id+" KeyValue="+sKeyValue+" FieldID="+sFieldID);
	var Control=getTableCellControl(table,sKeyValue,sFieldID);
if(Control) {
	//appendToLog("submitDialogCell: Control="+Control.id);
}
else {
	//appendToLog("submitDialogCell: Control is null");
};
	var sDebug="";
	if(Control!=null) {
		sDebug="submitDialogCell setting table cell Control="+Control+" type="+Control.type+" nodename="+Control.nodeName;
		if((Control.nodeName.equalsIgnoreCase("text")) || (Control.nodeName.equalsIgnoreCase("password"))) {
			if(e.type=="select-one") {
				//set the table cell to the description of the lookup, not the value
				for (var i=0;i<e.options.length;i++) {
					if(e.options[i].value.equalsIgnoreCase(e.value)) Control.innerHTML=e.options[i].innerHTML;
				};
				sDebug +=" set select-one"
			}
			else if(e.type=="select-muliple") {
				//set the table cell to the description of the lookup, not the value
				Control.innerHTML="";
				for (var i=0;i<e.options.length;i++) {
					if(e.options[i].selected) Control.innerHTML +=e.options[i].innerHTML;
				};
				sDebug +=" set select-multiple"
			}
			else {
				if(Control.nodeName.equalsIgnoreCase("text")) {
					Control.innerHTML=e.value;
					sDebug +=" set other innerHTML"
				}
				else {
					Control.value=e.value;
					sDebug +=" set other value"
				};
			};
		}
		else {
			(Control.type=="checkbox") ? Control.checked=sValue : Control.value=e.value;
			sDebug +=" set checkbox"
		};

		var td=Control.parentNode;
		if(td.nodeName.equalsIgnoreCase("td")) {
			setPendingSubmissionStyle(Control,true,true);
			//td.style.backgroundColor=PendingSubmissionBackgroundColor;
			td.setAttribute("AspectSubmissionPending","new");
		};
	}
	else {
		sDebug="submitDialogCell setting table cell control was null";
	};

//appendToLog("submitDialogCell: "+sDebug,false,true);
	
	var s="";
//appendToLog("submitDialogCell: sValue="+sValue);
	((typeof sValue)=="boolean") ? s=sValue.toString() : s=replaceAllSubstrings(sValue,",","//co"+"mma//");
//appendToLog("submitDialogCell: calling submitTableData.  TableID="+sTableID+" KeyValue="+sKeyValue+" FieldID="+sFieldID+" s="+s);
	submitTableData(sTableID,sKeyValue,sFieldID,s);
};

/******************************************************************************
Formats the data in an input field.  arFieldID and arPattern are optional.  
******************************************************************************/
//function formatInputField(TableID,e,AarFieldID,AarPattern)

/******************************************************************************
Functions to move table rows
******************************************************************************/
function selectTableSort(img)
{
	sOrder=img.getAttribute("AspectSortOrder");
	if(sOrder.equalsIgnoreCase("ascending")) {
		img.setAttribute("AspectSortOrder","descending");
		if(bIsMobileDevice) {
			img.src="{ImageHostUrl}arrowDown32x32white.png";
		}
		else {
			img.src="{ImageHostUrl}arrowDown12x12.png";
		};
	}
	else {
		img.setAttribute("AspectSortOrder","ascending");
		if(bIsMobileDevice) {
			img.src="{ImageHostUrl}arrowUp32x32white.png";
		}
		else {
			img.src="{ImageHostUrl}arrowUp12x12.png";
		};
	};7
};

function getSelectedTableRow(eTable) {
	for (var r=0;r<eTable.rows.length;r++) {
		if(eTable.rows[r].getAttribute("selected")=="true") return(r);
	};
	return(-1);
};
	
function moveTableRow(TableID,iDirection) {
	var table=document.getElementById(TableID);
	r=getSelectedTableRow(table);
	if((r+iDirection>=0) && (r+iDirection<table.rows.length)){
		var sHtml1=table.rows[r+iDirection].innerHTML;
		var sHtml2=table.rows[r].innerHTML;
		var ckValue1=table.rows[r+iDirection].cells[0].firstChild.checked;
		var ckValue2=table.rows[r].cells[0].firstChild.checked;
		table.rows[r+iDirection].innerHTML=sHtml2;
		table.rows[r].innerHTML=sHtml1;
		table.rows[r+iDirection].cells[0].firstChild.checked=ckValue2;
		table.rows[r].cells[0].firstChild.checked=ckValue1;
		table.rows[r+iDirection].setAttribute("selected","true");
		table.rows[r].setAttribute("selected","false");
	};
};

function tableCellSelected(cell) {
	appendToLog("tableCellSelected");
	tableRowSelected(cell.parentNode);
};

var imgRowSelected=null;

function tableRowSelected(row) {
	appendToLog("tableRowSelected");
	var table=row.parentNode;
	
	for (var r=0;r<table.rows.length;r++) {
		table.rows[r].setAttribute("selected","false");
		var cell=table.rows[r].cells[2];
		if(cell.childNodes.length>0) {
			cell.removeChild(cell.childNodes[0]);
		};
	};

	//initialize image used to indicate selected row	
	if(imgRowSelected==null) {
		imgRowSelected=new Image();
		imgRowSelected.src=getServer()+"/?Network=Greenlight&Id=getImage&filename={packageurl_greenlight}doc/images/leftarrowgreen12x12.png";
	};
	
	row.setAttribute("selected","true");
	var img=new Image();
	img.src=imgRowSelected.src;
	row.cells[2].appendChild(img);
};

/******************************************************************************
Returns a count of the selected fields.  Used to ensure that at least one field is selected
******************************************************************************/
function countSelectedFields(sTableID)
{
	var table=document.getElementById("FieldsSelected_"+sTableID);
	var cSelected=0;
	for (var i=0;i<table.rows.length;i++) {
		if(table.rows[i].cells[0].firstChild.checked) cSelected++;
	};
	return(cSelected);
};

function enableExternalFilters(TableID,b)
{
	var table=document.getElementById(TableID);
	if(!table) {
		appendToLog("Error in enableExternalFilters.  Invalid table ID: "+TableID,false,true);
		return;
	};
	var sExternalFilter=table.getAttribute("externalfilters");
	if((sExternalFilter) && (sExternalFilter.length>0)) {
		var ar=getSubStringArray(sExternalFilter,",",true)
		for (var i=0;i<ar.length;i++) {
			var e=document.getElementById(ar[i]);
			if(e) e.disabled=!b;
		};
	};
};

function enableExternalParams(TableID,b)
{
	var table=document.getElementById(TableID);
	if(!table) return;
	
	var sExternalParam=table.getAttribute("externalparams");
	if((sExternalParam) && (sExternalParam.length>0)) {
		var arExternalParam=getSubStringArray(sExternalParam,",",true);
		for (var i=0;i<arExternalParam.length;i++) {
			var e=document.getElementById(arExternalParam[i]);
			if(e) e.disabled=!b;
		};
	};
};

function getExternalFilters(TableID)
{
	var sContent="";
	var table=document.getElementById(TableID);
	var sExternalFilter=table.getAttribute("externalfilters");
	if((sExternalFilter) && (sExternalFilter.length>0)) {
		var ar=getSubStringArray(sExternalFilter,",",true)
		//if(ar==null) alert("ar=null in getExternalFilters");
		for (var i=0;i<ar.length;i++) {
			var e=document.getElementById(ar[i]);
			if(e) {
				var sExpression=e.getAttribute("Expression");
				if(!sExpression) {
					sExpression="(true)";
					appendToLog("Missing expression for filter with ID="+ar[i],false,true);
				};

				//get the conditional expression which is used to determine if the expression should be included in the
				//driver filter.  This is used to speed up processing by eliminating filters that are not in use
				var sCondition=e.getAttribute("Condition");
				if(!sCondition) sCondition="(true)";
				
				//get the operator
				var sOperator=e.getAttribute("operator");
				if(!sOperator) sOperator="and";
				
				var sValue=(e.type=="checkbox") ? sValue=(e.checked) : sValue=e.value;
				sContent +="|XFilter_"+ar[i]+"="+sExpression+"^"+sValue+"^"+sCondition+"^"+sOperator;
				//appendToLog("Adding external filter: "+sExpression+"^"+sValue+"^"+sCondition);
			}
			else {
				appendToLog("Cannot locate external filter with ID="+ar[i]);
			};
		};
	};
	return(sContent);
};

/*****************************************************************************************************
Returns a pipe-delimited list of external params in the form:
expression^value|expression^value 
where expression is generally in the form xxx=$value$
*****************************************************************************************************/
function getExternalDriverParams(TableID)
{
	//appendToLog("getExternalDriverParams table="+TableID,false,true);
	var sContent="";
	var table=document.getElementById(TableID);
	var sExternalParam=table.getAttribute("externalparams");
	if((sExternalParam) && (sExternalParam.length>0)) {
		var arExternalParam=getSubStringArray(sExternalParam,",",true);
		for (var j=0;j<arExternalParam.length;j++) {
			var eExternalParam=document.getElementById(arExternalParam[j]);
			if(eExternalParam) {
				var sExpression=eExternalParam.getAttribute("param");
				var sValue="";
				(eExternalParam.type=="checkbox") ? sValue=(eExternalParam.checked) : sValue=eExternalParam.value;
				if(sContent.length>0) sContent +="|";
				sContent +=sExpression+"^"+sValue;
			}
			else {
				appendToLog("refreshTable cannot locate external driver param with ID="+arExternalParam[j],false,true);
			};
		};
	};
	//appendToLog("getExternalDriverParams table="+TableID+" returns "+sContent,false,true);
	return(sContent);
};

function getTableDriverParams(TableID,bIncludeExternalParams)
{
	var table=document.getElementById(TableID);
	var sParams=table.getAttribute("aspectParams");
	if(!bIncludeExternalParams) return(sParams);
	
	//add external params, overwriting the 
	var sExternalParams=getExternalDriverParams(TableID);
	if(sExternalParams.length>0) {
		var arExternalParams=getSubStringArray(sExternalParams,"|",true);
		for(var i=0;i<arExternalParams.length;i++) {
			var a=getSubStringArray(arExternalParams[i],"^",true);
			if(a.length==2) {
				if(sParams.length>0) sParams +="|";
				sParams +=replaceAllSubstrings(a[0],"$value$",a[1]);
			};
		};
	};
	appendToLog("getTableDriverParams returns "+sParams,false,true);
	return(sParams);
};


/******************************************************************************
Gets values from display dialog to be passed as a widget
******************************************************************************/
function getDisplayFormValues(sTableID) 
{
	var table=document.getElementById(sTableID);
	var f=document.forms["Display_Dialog_"+sTableID];

	var sContent="";
	
	//get the location the widget will be saved to - aspect, company or local
	var sLocation=f.library_location.value;

	//get sort and subtotal information
	sContent +="|field_sort1="+f.sort1.value+"|field_sort2="+f.sort2.value+"|field_sort3="+f.sort3.value;
	if(f.sort4) sContent +="|field_sort4="+f.sort4.value;
	sContent +="|field_subtotal1="+f.subtotal1.checked+"|field_subtotal2="+f.subtotal2.checked+"|field_subtotal3="+f.subtotal3.checked;
	if(f.subtotal4) sContent +="|field_subtotal4="+f.subtotal4.checked;
	
	for (var i=1;i<5;i++) {
		var e=document.getElementById("SortOrder"+i+"_"+sTableID);
		if(e) {
			var s=e.getAttribute("src");
			(s.toUpperCase().indexOf("ARROWUP")>0) ? sContent +="|field_SortOrder"+i+"=0" : sContent +="|field_SortOrder"+i+"=1" ;
		};
	};

	//get subtotal, grand total and chart settings
	sContent +="|field_SubtotalsOnly="+f.SubtotalsOnly.checked;
	sContent +="|field_GrandTotals="+f.GrandTotals.checked;
	sContent +="|field_chartType="+f.ChartType.value;
	if(f.ChartSeries) sContent +="|field_ChartSeries="+f.ChartSeries.value;

	//get filter
	sContent +="|field_filter="+f.Filter.value;
	
	//get fields selected in table
	var sFieldsSelected="";
	var FieldsTable=document.getElementById("FieldsSelected_"+sTableID);
	for (var i=0;i<FieldsTable.rows.length;i++) {
		if(FieldsTable.rows[i].cells[0].firstChild.checked) {
			if(sFieldsSelected.length>0) sFieldsSelected +=",";
			sFieldsSelected +=FieldsTable.rows[i].cells[0].getAttribute("AspectFieldID");
			sFieldsSelected +="^"+FieldsTable.rows[i].cells[1].innerHTML;
		};
	};
	
	sContent +="|FieldsSelected="+sFieldsSelected;
	
	//get external filters
	var sExternalFilters=getExternalFilters(sTableID);
	if(sExternalFilters.length>0) sContent +="|" + sExternalFilters;
	
	//get pivot fields
	for(var i=1;i<4;i++) {
		var e=document.getElementById("pivotvalue"+i+"_"+sTableID);
		if(e) {
			sContent +="|pivotvalue"+i+"="+e.value;
			sContent +="|pivotname"+i+"="+document.getElementById("pivotname"+i+"_"+sTableID).value;
		};
	};

	//appendToLog("getDisplayFormValues returns "+sContent,false,true);
	return(sContent);
};

/******************************************************************************
display the chart for a table.  e is the icon used to open the graph and
is probably not needed
******************************************************************************/
function displayChart(TableID,e)
{
	var sID="chart"+TableID;
	
	if(isVisible(sID)) {
		setVisible(sID,false);
		return;
	};
	
	var d=document.getElementById(sID);

	//replace the __requestserver__ token in the url for the chart image
	//This is not handled by TRpoxyHandler:handleNotification
/*	
	var arImg=d.getElementsByTagName("img");
	alert("Found "+arImg.length+" image tags in chart element");
	if(arImg.length>1) {
		var imgChart=arImg[1];
		var sSrc=imgChart.src;
		alert("src="+sSrc);
		if(sSrc.toUpperCase().indexOf("REQUESTSERVER")>=0) {
			if(sSrc.startsWith(getServer())) {
				sSrc=replaceAllSubstrings(sSrc,"__request"+"server__/","");
			}
			else {
				sSrc=replaceAllSubstrings(sSrc,"__request"+"server__",getServer());
			};
			imgChart.setAttribute("src",sSrc);
		};
		alert("new src="+imgChart.src);
	};
*/
	
	//make sure the chart is displayed relative to the body.  This is necessary
	//to position it properly.
	d.parentNode.removeChild(d);
	document.body.appendChild(d);
	
	var table=document.getElementById(TableID);
	d.style.position="absolute";
	//var xy=getPosition2012(table,"absolute",d.parentNode);
	var xy=getPosition2012(table,"absolute",document.getElementsByTagName('BODY')[0]);
	d.style.left=(xy[0]+0)+"px"; //(table.offsetLeft+20)+"px";
	d.style.top=(xy[1]+40)+"px"; //(table.offsetTop+40)+"px";
	setVisible(d,true);
};

/******************************************************************************
open the display dialog.  e is the icon used to open the display dialog
and will not be defined if called from refreshDisplayDialog.  Probably is 
not needed
******************************************************************************/
function openDisplayDialog(TableID,e) {
	var div=document.getElementById("Display_Dialog_"+TableID);
	var table=document.getElementById(TableID);
	setVisible(div,true);
};

function oldopenDisplayDialog(TableID,e)
{
	var div=document.getElementById("Display_Dialog_"+TableID);
	var table=document.getElementById(TableID);
	
	div.style.position="absolute";

	if(bIsMobileDevice) {
		div.style.top="0px";
		div.style.left="0px";
		div.style.width=getViewportWidth()+"px";
	}
	else {
		div.style.top=(table.offsetTop+40)+"px";
		div.style.left=(table.offsetLeft+20)+"px";
	};
	
	//if it's a mobile device...
	if(bIsMobileDevice) {
		//set the width of elements in the dialog
		//SelectDisplay2$tableid$
		
		focusDialog(div.id);
		div.parentNode.removeChild(div);
		document.body.appendChild(div);
		
		if(false) {
			//record the current scrolling position of the page so it can be restored when the dialog is closed
			var iScrollTop=0;
			iScrollTop=window.scrollY;
			document.body.setAttribute("RestoreScrollTop",iScrollTop);

			//move the dialog to the body element
			div.parentNode.removeChild(div);
			document.body.appendChild(div);
			
			//Hide all other divs.  Set an attribute to indicate the items that should be 
			//displayed when the dialog is closed
			var arDiv=document.getElementsByTagName("div");
			for (var i=0;i<arDiv.length;i++) {
				if (boolVal(arDiv[i].getAttribute("isItem"))) {
					if(isVisible(arDiv[i])) {
						arDiv[i].setAttribute("ShowAfterEdit","true");
						setVisible(arDiv[i],false);
					}
					else {
						arDiv[i].setAttribute("ShowAfterEdit","false");
					};
				};
			};
			
			//set an attribute in the dialog used to identify and hide the dialog
			div.setAttribute("HideAfterEdit","true");
		};
	};
	
	setVisible(div,true);
	//if(bIsMobileDevice) location.hash="#edit";
};

/******************************************************************************
Enables or disables all elements in the given element.  
e	- the element containing the elements to be enabled or disabled.  
b 	- true/false to enable or disable the elements.  
types- optional comma-delimited string indicating the types of elements to be affected
******************************************************************************/
function enableElements(e,b,types) { 
	var arType=getSubStringArray("input,select,textarea,button",",",true);
	if(types) arType=getSubStringArray("input,select,textarea,button",",",true);
	
	for (var i=0;i<arType.length;i++) {
		var arElements=e.getElementsByTagName(arType[i]); 
		for (var j=0; j<arElements.length; j++) { 
			arElements[j].disabled=(b==false);
		};
	};
}	

/******************************************************************************
Displays a message on top of the display dialog.  Used to provide a consistent look
******************************************************************************/
function showDisplayDialogMessage(sTableID,msg)
{
	var dMsg=document.getElementById("Display_Dialog_Msg_"+sTableID);
	if(dMsg) {
		if((msg) && (msg.length>0)) {
			dMsg.innerHTML=msg;
			setVisible(dMsg,true);
		}
		else {
			setVisible(dMsg,false);
		};
	};
};

/******************************************************************************
Adds a div on top of an element.  Used to disable controls in the element.
e	-	Element to which overlay will be added
ID	-	An optional ID to be given to the overlay.  This can be used to 
		remove the overlay.
******************************************************************************/
function removeOverlay(el)
{
	var e=document.getElementById(el);
	if(!e) e=el;
	if(!e) return;
	
	e.parentNode.removeChild(e);
};

function applyOverlay(el,ID)
{
	var e=document.getElementById(el);
	if(!e) e=el;
	if(!e) {
		appendToLog("Error in applyOverlay.  e is null",false,true);
		printStackTrace();
		return;
	};
	var img=document.createElement("img");
	img.src=imgOverlay.src;
	img.style.position="absolute";
	img.style.left="0px";
	img.style.top="0px";

	//modified 04-13-2013.  The intent is to add a new element at the start of the div containing the table
	//and set the positionubg,  The positioning of the overlay may be unpredictable if the positioning of the 
	//parent is not specified.
	var div=document.createElement("div");
	div.style.position="relative";
	e.insertBefore(div,e.firstChild)
	var xy=getPosition2012(div,"absolute",div);
	img.style.position="absolute";
	img.style.left=xy[0]+"px";
	img.style.top=xy[1]+"px";

	img.width=e.offsetWidth-2;
	img.height=e.offsetHeight-2;
	//img.style.width="100%";
	//img.style.height="100%";
	//img.style.filter="alpha(opacity=50)";
	//img.style.opacity="0.5";
	img.style.overflow="hidden";
	if(ID) div.id=ID;

	//modified 04-13-2013.  The image is added to the new div instead of the table div
	//e.appendChild(img);
	div.appendChild(img);
	
	if(false) {
		var d=document.createElement("div");
		if(ID) d.id=ID;
		d.style.position="absolute";
		d.style.left="0px";
		d.style.top="0px";
		d.style.background="#eaeaea";
		d.style.width=e.offsetWidth+"px";
		d.style.zIndex="98"; //don't hide the message dialog with uses 99 as the z index.
		d.style.height=e.offsetHeight+"px";
		d.style.opacity="0.5";
		d.style.border="none";
		d.style.margin="0px";
		d.style.padding="0px";
		d.style.overflow="hidden";
		d.appendChild(img);
		e.appendChild(d);
	};
};

/******************************************************************************
	NOTES ABOUT DISPLAYS

	The Display Dialog is generated by the computer that generates the table.
	If a table is requested from a remote machine, that machine will produce
	the dialog.
	
	The WidgetID of each display is used as the ID for the select box used
	to select a display, both in the table and in the display dialog.  The 
	WidgetID is valid ONLY on the source machine.
	
	Requests to refresh the dialog after a widget has been deleted or a new
	one has been created must be made to the source machine using a notification.
	A request is also made to the remote machine when a display is selected
	in the display dialog to get the settings for the display.
	
	When a widget is saved, created or deleted, the source HashID of the 
	driver is passed in the call to Library acceptWidgetByID.  When a source
	is defined, the library script uses a notification to execute the script
	on the remote machine.
******************************************************************************/

function getDisplayDialogArguments(sTableID)
{
	var fOptions=document.forms["Display_Dialog_"+sTableID];

	//get all driver fields in table.  This is done to avoid having to re-open the driver to create
	//a new field list when the dialog is refreshed.  The format of the string passed in the url
	//is Name^ID|Name^ID.  This string is processed by the getDisplayDialog() function
	//The fields are taken from the FieldsSelected table in the display dialog
	var sFields="";
	var table=document.getElementById("FieldsSelected_"+sTableID);
	for (var i=0;i<table.rows.length;i++) {
		if(sFields.length>0) sFields +="|";
		sFields +=table.rows[i].cells[1].innerHTML;
		sFields +="^"+table.rows[i].cells[0].getAttribute("AspectFieldID");
	};

	//Get the metadata included in the driver params if any.  This value is used to specify the metadata
	//value used to locate displays associated with the driver.  By default, displays use the document id, 
	//widget and item to calculate the metadata.  Overriding it allows tables in different widgets to share
	//the same displays
	table=document.getElementById(sTableID);
	var sParams=table.getAttribute("aspectparams");
	var sMetadata=getElementValue(sParams,"metadata","|");
	var sHashID=table.getAttribute("aspecthashid");
	var sPivotNameFields=table.getAttribute("aspectPivotFields");
	var sPossiblePivotValues=table.getAttribute("aspectPossiblePivotValues");
	var sDialogHeader=table.getAttribute("aspectDialogHeader");
	
	var sArgs="&Source="+sHashID;
	sArgs +="&DriverID="+fOptions.DriverID.value;
	sArgs +="&DocumentID="+fOptions.DocumentID.value;
	sArgs +="&Widget="+fOptions.Widget.value;
	sArgs +="&ContainerItemID="+fOptions.ContainerItemID.value;
	sArgs +="&TableID="+sTableID;
	sArgs +="&AllFields="+sFields;
	sArgs +="&Metadata="+sMetadata;
	if(sPivotNameFields) sArgs +="&PivotNameFields="+sPivotNameFields;
	if(sPossiblePivotValues) sArgs +="&PossiblePivotValues="+sPossiblePivotValues;
	if(sDialogHeader) sArgs +="&DialogHeader="+sDialogHeader;
	return(sArgs);
};

/******************************************************************************
See NOTES ABOUT DISPLAYS comment about how displays are refreshed, saved and deleted
Refresh the display dialog. Called when a display is deleted and when a 
display is selected from the drop-down list in the display dialog
******************************************************************************/
function refreshDisplayDialog(sTableID,sWidgetID,bShowDialog,sResponse)
{
	if(sResponse) {
		showDisplayDialogMessage(sTableID,"");
		if(bShowDialog) openDisplayDialog(sTableID);
		initializeTabbedDialogs(); //initialize tabs in the display dialog
		//appendToLog("refreshDisplayDialog complete.  bShowDialog="+bShowDialog,false,true);
		return;
	};

	//disable all elements in the dialog
	var fOptions=document.forms["Display_Dialog_"+sTableID];
	enableElements(fOptions,false);

	//overlay a div to disable clicking on images
	var eFormWrapper=document.getElementById("Display_Dialog_FormWrapper"+sTableID);
	applyOverlay(eFormWrapper);
	
	//show messagge
	showDisplayDialogMessage(sTableID,"Getting display settings...");

	if(false) {
		//get all driver fields in table.  This is done to avoid having to re-open the driver to create
		//a new field list when the dialog is refreshed.  The format of the string passed in the url
		//is Name^ID|Name^ID.  This string is processed by the getDisplayDialog() function
		var sFields="";
		var table=document.getElementById("FieldsSelected_"+sTableID);
		for (var i=0;i<table.rows.length;i++) {
			if(sFields.length>0) sFields +="|";
			sFields +=table.rows[i].cells[1].innerHTML;
			sFields +="^"+table.rows[i].cells[0].getAttribute("AspectFieldID");
		};

		//Get the metadata included in the driver params if any.  This value is used to specify the metadata
		//value used to locate displays associated with the driver.  By default, displays use the document id, 
		//widget and item to calculate the metadata.  Overriding it allows tables in different widgets to share
		//the same displays
		table=document.getElementById(sTableID);
		var sParams=table.getAttribute("aspectparams");
		var sMetadata=getElementValue(sParams,"metadata","|");
		var sHashID=table.getAttribute("aspecthashid")	
//appendToLog("refreshDisplayDialog Params="+sParams+" Metadata="+sMetadata+" HashID="+sHashID,false,true);
		var sUrl=getServer()+"/?Network=Greenlight&ID=getDisplayDialog";
		sUrl +="&Source="+sHashID;
		sUrl +="&DriverID="+fOptions.DriverID.value;
		sUrl +="&DocumentID="+fOptions.DocumentID.value;
		sUrl +="&Widget="+fOptions.Widget.value;
		sUrl +="&ContainerItemID="+fOptions.ContainerItemID.value;
		sUrl +="&TableID="+sTableID;
		sUrl +="&WidgetID="+sWidgetID;
		sUrl +="&AllFields="+sFields;
		sUrl +="&Metadata="+sMetadata;
	};

	var sUrl=getServer()+"/?Network=Greenlight&ID=getDisplayDialog";
	sUrl +="&WidgetID="+sWidgetID+"&"+getDisplayDialogArguments(sTableID);
	var sFunc="refreshDisplayDialog(\""+sTableID+"\",\""+sWidgetID+"\","+bShowDialog+",req.responseText)";
//appendToLog("refreshDisplayDialog url="+sUrl,false,true);
	asynchInclude(eFormWrapper,sUrl,sFunc,sFunc);
};

/******************************************************************************
See NOTES ABOUT DISPLAYS comment about how displays are refreshed, saved and deleted
Delete a display
******************************************************************************/
function getMetadata(sTableID)
{
	var fOptions=document.forms["Display_Dialog_"+sTableID];

	//see if metadata has been defined in the driver params.  This can be used to override the default metadata
	//so displays can be shared by more than one widget
	var table=document.getElementById(sTableID);
	var sParams=table.getAttribute("AspectParams");
	var sMetadata=getElementValue(sParams,"metadata","|");
	if(sMetadata.trim().length>0) return(sMetadata);
	
	//get the document ID, widget and containerItemID used to make up the metadata
	var sDriverID=fOptions.DriverID.value;
	var sDocumentID=fOptions.DocumentID.value;
	var sWidget=fOptions.Widget.value;
	var sContainerItemID=fOptions.ContainerItemID.value;
	var sMobile=fOptions.MobileDevice.value;
	sMetadata=sDriverID+"|"+sDocumentID+"|"+sWidget+"|"+sContainerItemID+"|Mobile_"+sMobile;
	return(sMetadata);
};

function deleteDisplay2012(sTableID,iStep,sMessage)
{
	var fOptions=document.forms["Display_Dialog_"+sTableID];
	var sWidgetID=fOptions.WidgetMetadataID.value;
	var eDialog=document.getElementById("Display_Dialog_"+sTableID);
	var eFormWrapper=document.getElementById("Display_Dialog_FormWrapper"+sTableID);
	var xy=getPosition2012(eDialog,"fixed",document.getElementsByTagName('BODY')[0]);
	
	switch(iStep)
	{
		case 0:	//get confirmation
				showDialog("msg=Delete this display?<br><br>&fnOk=deleteDisplay2012(\""+sTableID+"\",1)&fnCancel=close&position=fixed&left="+(xy[0]+30)+"&top="+(xy[1]+20));
				break;
		case 1:	//delete the display
				
				//remove confirmation dialog
				showDialog();
				
				var sUrl=getServer()+"/?Network=Library&ID=acceptWidgetByID";
				sUrl +="&WidgetID="+sWidgetID+"&delete=true";
				sUrl +="&metadata="+getMetadata(sTableID);
				sUrl +="&source="+document.getElementById(sTableID).getAttribute("hashid");

				//add parameters that will be used to generate and return a new display dialog after the widget is deleted
				sUrl +="&DisplayDialogArgs="+replaceAllSubstrings(getDisplayDialogArguments(sTableID),"&","$displaydialogamp$");
				
				//disable all elements in the dialog
				enableElements(fOptions,false);

				//overlay a div to disable clicking on images
				applyOverlay(eFormWrapper,"Overlay_"+sTableID);
				
				//show message
				showDisplayDialogMessage(sTableID,"Deleting display...");

				sFunc="deleteDisplay2012('"+sTableID+"',2,req.responseText);";
				asynchInclude(null,sUrl,sFunc,sFunc);
				break;
		case 2:	//got response from server

				//hide message
				showDisplayDialogMessage(sTableID,"");
				
				if(sMessage.toUpperCase().startsWith("ERROR")) {
					//enable all elements in the dialog
					enableElements(fOptions,true);

					//remove overlay
					var e=document.getElementById("Overlay_"+sTableID);
					if(e) e.parentNode.removeChild(e);

					showDialog("msg="+sMessage+"<br><br>&fnOk=close&position=fixed&left="+(xy[0]+30)+"&top="+(xy[1]+20));
				}
				else {
					eFormWrapper.innerHTML=sMessage;
					initializeTabbedDialogs(); //initialize tabs in the display dialog
				};
				break;
	};
};

/******************************************************************************
See NOTES ABOUT DISPLAYS comment about how displays are refreshed, saved and deleted
Save a display
******************************************************************************/
function saveDisplay2012(sTableID,iStep,sMessage)
{
	var fOptions=document.forms["Display_Dialog_"+sTableID];
	var sWidgetID=fOptions.WidgetMetadataID.value;
	var eDialog=document.getElementById("Display_Dialog_"+sTableID);
	var eFormWrapper=document.getElementById("Display_Dialog_FormWrapper"+sTableID);
	var xy=getPosition2012(eDialog,"fixed",document.getElementsByTagName('BODY')[0]);
	
	//abort if no fields are selected
	if((iStep==0) && (countSelectedFields(sTableID)==0)) {
		showDialog("msg=No fields have been selected for this display&fnOk=close");
		return;
	};

	//if just starting and the WidgetID is 0, indicating no display has been defined, then go to save option
	if((iStep==0) && (sWidgetID=="0")) {
		saveDisplayAs2012(sTableID,iStep);
		return;
	};

	switch(iStep)
	{
		case 0:	//save the display
				//get the location where the display will be saved (local, company or aspect)
				var sLocation=fOptions.library_location.value;

				//get the arguments from the form
				var sArgs=getDisplayFormValues(sTableID);

				//format the url
				var sUrl=getServer()+"/?Network=Library&ID=acceptWidgetByID";
				sUrl +="&WidgetID="+sWidgetID;
				sUrl +="&metadata="+getMetadata(sTableID);
				sUrl +="&Content="+sArgs;
				sUrl +="&mobile="+fOptions.MobileDevice.value;
				sUrl +="&source="+document.getElementById(sTableID).getAttribute("hashid");

				//add parameters that will be used to generate and return a new display dialog after the widget is deleted
				sUrl +="&DisplayDialogArgs="+replaceAllSubstrings(getDisplayDialogArguments(sTableID),"&","$displaydialogamp$");

				sFunc="saveDisplay2012(\""+sTableID+"\",1,req.responseText);";
				
				//Debugging
				//appendToLog("Url="+sUrl);

				//disable all elements in the dialog
				enableElements(fOptions,false);

				//overlay a div to disable clicking on images
				applyOverlay(eFormWrapper,"Overlay_"+sTableID);
				
				//show message
				showDisplayDialogMessage(sTableID,"Saving display...");

				//showTableMessage(sTableID,"Saving display",true);
				asynchInclude(null,sUrl,sFunc,sFunc);
				break;
		case 1:	//got response from server

				//hide message
				showDisplayDialogMessage(sTableID,"");
				
				//Note: The return value from the asynchInclude call is the html for a new display dialog
				//or an error message
				if(sMessage.toUpperCase().startsWith("ERROR")) {
					//enable all elements in the dialog
					enableElements(fOptions,true);

					//remove overlay
					var e=document.getElementById("Overlay_"+sTableID);
					if(e) e.parentNode.removeChild(e);

					if(sMessage.length==0) sMessage="No response from server.  Try again.";
					showDialog("msg="+sMessage+"<br><br>&fnOk=close&position=fixed&left="+(xy[0]+30)+"&top="+(xy[1]+20));
				}
				else {
					eFormWrapper.innerHTML=sMessage;
					initializeTabbedDialogs(); //initialize tabs in the display dialog
				};
				break;
	};
};

/******************************************************************************
See NOTES ABOUT DISPLAYS comment about how displays are refreshed, saved and deleted
Save a display to a new name
******************************************************************************/
function saveDisplayAs2012(sTableID,iStep,sMessage)
{
	var fSaveAs=document.forms["Save_Display_As_"+sTableID];
	var fOptions=document.forms["Display_Dialog_"+sTableID];
	var sDisplayName=fSaveAs.save_display_as.value;
	var eDialog=document.getElementById("Display_Dialog_"+sTableID);
	var eFormWrapper=document.getElementById("Display_Dialog_FormWrapper"+sTableID);
	var xy=getPosition2012(eDialog,"fixed",document.getElementsByTagName('BODY')[0]);
	
	//stay on step 0 if a name has not been entered		
	if((sDisplayName.length==0) || (sDisplayName.equalsIgnoreCase("New Display"))) iStep=0;

	switch(iStep)
	{
		case 0:	//show Save As dialog
				setVisible("Save_Display_As_"+sTableID,true);
				break;
		case 1:	//save the display
				
				//get the location where the display will be saved (local, company or aspect)
				var sLocation=fSaveAs.save_display_as_location.value;

				//get the arguments from the form
				var sArgs=getDisplayFormValues(sTableID);

				//format the url
				var sTokenizedName=tokenizeSpecialChars(sDisplayName,true);
				var sUrl=getServer()+"/?Network=Library&ID=acceptWidgetByID&new=true";
				sUrl +="&Name="+sTokenizedName+"&Location="+sLocation;
				sUrl +="&metadata="+getMetadata(sTableID);
				sUrl +="&Content="+sArgs;
				sUrl +="&mobile="+fOptions.MobileDevice.value;
				sUrl +="&source="+document.getElementById(sTableID).getAttribute("hashid");

				//add parameters that will be used to generate and return a new display dialog after the widget is deleted
				sUrl +="&DisplayDialogArgs="+replaceAllSubstrings(getDisplayDialogArguments(sTableID),"&","$displaydialogamp$");

				sFunc="saveDisplayAs2012(\""+sTableID+"\",2,req.responseText);";
				
				//Debugging
				//appendToLog("Url="+sUrl,false,true);

				//hide the save as dialog and show a status message
				setVisible("Save_Display_As_"+sTableID,false);

				//disable all elements in the dialog
				enableElements(fOptions,false);

				//overlay a div to disable clicking on images
				applyOverlay(eFormWrapper,"Overlay_"+sTableID);
				
				//show message
				showDisplayDialogMessage(sTableID,"Saving display...");

				asynchInclude(null,sUrl,sFunc,sFunc);
				break;
		case 2:	//got response from server

				//hide message
				showDisplayDialogMessage(sTableID,"");
				
				//Note: The return value from the asynchInclude call is OK|WidgetID|Display Name
				//or an error message
				if(sMessage.toUpperCase().startsWith("ERROR")) {
					//enable all elements in the dialog
					enableElements(fOptions,true);

					//remove overlay
					var e=document.getElementById("Overlay_"+sTableID);
					if(e) e.parentNode.removeChild(e);

					showDialog("msg="+sMessage+"<br><br>&fnOk=close&position=fixed&left="+(xy[0]+30)+"&top="+(xy[1]+20));
				}
				else {
					eFormWrapper.innerHTML=sMessage;
					initializeTabbedDialogs(); //initialize tabs in the display dialog
				};
				break;
	};
};

/******************************************************************************
Returns the cell index (column) of the table cell containing the "Select" checkbox
It may be in 0 or 1 depending on whether editing is enabled
******************************************************************************/
function getTableRecordSelectIndex(ATableID)
{
	var table=document.getElementById(ATableID);
	var c=-1;
	for (var row=0;((c<0) && (row<table.rows.length));row++) {
		if((table.rows[row].cells[0]) && (table.rows[row].cells[0].firstChild.type=="checkbox")) {
			c=0;
		}
		else if((table.rows[row].cells[1]) && (table.rows[row].cells[1].firstChild.type=="checkbox")) {
			c=1;
		};
	};
	return(c);
};

/******************************************************************************
Called when the checkbox used to select all/none records is clicked
******************************************************************************/
function selectTableRecords(ATableID,e,HeaderID)
{
	var table=document.getElementById(ATableID);
	
	//abort if table not found
	if(!table) {
		alert("table not found: "+ATableID);
		return;
	};
	
	//the "select" checkbox might be in the 1st or 2nd column depending on whether an edit icon ia displayed
	var c=getTableRecordSelectIndex(ATableID);
	if(c>=0) {
		for (var row=0;row<table.rows.length;row++) {
			if(table.rows[row].cells[c]) {
				var sRowHeaderID=table.rows[row].getAttribute("headerid");
				if((sRowHeaderID) && (sRowHeaderID.equalsIgnoreCase(HeaderID))) {
					var eCheck=table.rows[row].cells[c].firstChild;
					if((eCheck) && (eCheck.type=="checkbox")) eCheck.checked=e.checked;
				};
			};
		};
	};
};

/******************************************************************************
Array of table ID's with active timers used to update attributes of table cells with pending data submissions
******************************************************************************/
var arTablesWithActiveTimers=new Array();

function updateTablesWithTimers(ATableID,b)
{
	if(b==true) {
		//add the table
		if(arTablesWithActiveTimers.toString().indexOf(ATableID)<0) {
			arTablesWithActiveTimers[arTablesWithActiveTimers.length]=ATableID;
		};
	}
	else {
		//remove the table
		var n=0;
		while(n<arTablesWithActiveTimers .length) {
			if(arTablesWithActiveTimers [n].equalsIgnoreCase(ATableID)) {
				arTablesWithActiveTimers .splice(n,1);
			}
			else {
				n++;
			};
		};
	};
};

function isTableTimerActive(ATableID)
{
	return(arTablesWithActiveTimers.toString().indexOf(ATableID)>=0);
};

/******************************************************************************
Returns a list of all child nodes belonging directly or indirectly to the given 
parent.  arNodes must be initialized before the call.  
******************************************************************************/
function getAllChildNodes(e,arNodes)
{
	for(var i=0;i<e.childNodes.length;i++) {
		var eChild=e.childNodes[i];
		if(eChild.nodeName.indexOf("#")<0) {
			arNodes[arNodes.length]=eChild;
			getAllChildNodes(eChild,arNodes);
		};		
	};
};

/******************************************************************************
Returns a list of all input nodes (checkbox, select, text) belonging directly or indirectly to the given 
parent.
******************************************************************************/
function getAllInputNodes(e,arNodes)
{
	for(var i=0;i<e.childNodes.length;i++) {
		var eChild=e.childNodes[i];
		if(eChild.nodeName.indexOf("#")<0) {
			if((eChild.type=="checkbox") || (eChild.type=="select-one") || (eChild.type=="select-multiple") || (eChild.type=="text") || (eChild.type=="password") || (eChild.type=="textarea")) {
				arNodes[arNodes.length]=eChild;
			}
			else {
				getAllInputNodes(eChild,arNodes);
			};
		};		
	};
};

/******************************************************************************
Updates attributes of cells that have been saved.  APendingSubmissions is an array of field ID's
with outstanding data submissions in the form KeyValue^FieldID|KeyValue^FieldID
******************************************************************************/
function gotPendingSubmissions(ATableID,APendingSubmissions) 
{
	//appendToLog("gotPendingSubmissions Pending submissions="+APendingSubmissions);

	//make another request if a valid response was not received from the server
	if((!APendingSubmissions) || (APendingSubmissions.trim().length==0)) {
//appendToLog("Setting timeout for getPendingSubmissions because no data was received");
		setTimeout("getPendingSubmissions(\""+ATableID+"\")",3000);
		return;
	};

	var table=document.getElementById(ATableID);
	var bCanSelect=(table.getAttribute("aspectCanSelect").equalsIgnoreCase("true"));
	var sFields=table.getAttribute("aspectFields");
	var arFields=getSubStringArray(sFields,",",true);
	var sAllFields=table.getAttribute("aspectallfieldid");
	var arAllFields=getSubStringArray(sAllFields,",",true);
	var arPending=getSubStringArray(APendingSubmissions.toUpperCase(),"|",true);

	var cPending=0;

	//initialize an array of records to be refreshed
	var arToRefresh=new Array();

	//Set attributes of cells in the edit dialog.  These attributes need to be set every time in case
	//the dialog is set to a new record.  For example, a user may move from a dialog with pending
	//submissions to a dialog for another record and then back again.
	var sDialogID=table.getAttribute("EditDialogID");
	
	//Note: There may not be a dialog if deleting is enabled but not editing
	var eDialog=document.getElementById(sDialogID);
	if(eDialog) {
		var sKeyValue=eDialog.getAttribute("KeyValue");
		if(sKeyValue) {
			sKeyValue=sKeyValue.toUpperCase();
			var arNodes=new Array();
			getAllInputNodes(eDialog,arNodes);

			for (var i=0;i<arNodes.length;i++) {
				var sName=arNodes[i].getAttribute("name");
				if(sName) {
					var sFieldID=sName.toUpperCase();
					
					//only update fields that belong to the table.  This is necessary when two tables share a single dialog
					//as in the registration page.  If all fields were updated, one table would turn off fields because they
					//didn't appear to be pending and the other table would turn them back on because they are pending and
					//it would blink like a christmas tree
					if(arAllFields.indexOf(sFieldID)>=0)
					{
						var eParent=arNodes[i].parentNode;
						var sDebugParentName=(eParent.getAttribute) ? eParent.getAttribute("Name") : "Undefined";
						//appendToLog("gotPendingSubmissions input name="+arNodes[i].getAttribute("name")+" Parent="+sDebugParentName+" NodeName="+eParent.nodeName);
				
						if((eParent.nodeName.equalsIgnoreCase("td")) || (eParent.nodeName.equalsIgnoreCase("span")))
						{
							var attr=eParent.getAttribute("AspectSubmissionPending");
							if(attr) {
								if(attr.equalsIgnoreCase("new")) {
									eParent.setAttribute("AspectSubmissionPending","pending");
									cPending++;
								}
								else {
									var bIsPending=(APendingSubmissions.toUpperCase().indexOf(sKeyValue+"^"+sFieldID)>=0);
									if(bIsPending==true) {
										setPendingSubmissionStyle(arNodes[i],false,true);
										//eParent.style.backgroundColor=PendingSubmissionBackgroundColor;
										eParent.setAttribute("AspectSubmissionPending","pending");
										cPending++;
									}
									else {
										setPendingSubmissionStyle(arNodes[i],false,false);
										eParent.setAttribute("AspectSubmissionPending","false");

										//add the record to the array to be refreshed
										if(arToRefresh.indexOf(sKeyValue)<0) arToRefresh[arToRefresh.length]=sKeyValue;
									};
								};
							};
						};
					};
				};
			};
		};
	};	

	//clear the array of records to be refreshed if there are still pending submissions in the dialog.  The record
	//will be refreshed when the last pending submission is recorded
	if((cPending>0) && (arToRefresh.length>0)) arToRefresh.length=0;

	//check for cells in the table with pending submissions and see if the cell still appears in
	//the list of pending submissions from the server.  Set the attributes back to normal if the
	//submission is no longer pending.
	var cSelect=getTableRecordSelectIndex(ATableID);
	var row=0;
	while(row<table.rows.length) {
		var bDeleteRow=false;
		for(var cell=0;cell<table.rows[row].cells.length;cell++) {
			var attr=table.rows[row].cells[cell].getAttribute("AspectSubmissionPending");
			if((attr) && (attr.length>0))
			{
				if((cell==cSelect) && (bCanSelect==true)) {
					//if it's the "Select" cell and row selections are enabled, look for records that are being deleted.  
					if(attr.equalsIgnoreCase("newdelete")) {
						table.rows[row].cells[cell].setAttribute("AspectSubmissionPending","delete");
						cPending++;
					}
					else if(attr.equalsIgnoreCase("delete")) {
						var sKeyValue=table.rows[row].getAttribute("KeyValue").toUpperCase();
						var bIsPending=(APendingSubmissions.toUpperCase().indexOf(sKeyValue)>=0);
						if(bIsPending==false) {
							//remove the row from the table.  Do it after looping through the remaining cells
							//for the current row
							bDeleteRow=true;
						}
						else {
							cPending++;
						};
					};
				}
				else {
					if(attr.equalsIgnoreCase("new")) {
						table.rows[row].cells[cell].setAttribute("AspectSubmissionPending","pending");
						cPending++;
					}
					else if(attr.equalsIgnoreCase("pending")) {
						var sKeyValue=table.rows[row].getAttribute("KeyValue").toUpperCase();
						var sCellIndex=table.rows[row].cells[cell].getAttribute("CellIndex");
						if(sCellIndex) {
							var iCellIndex=parseInt(sCellIndex);
							var sFieldID=arFields[iCellIndex].toUpperCase();
							var bIsPending=(APendingSubmissions.toUpperCase().indexOf(sKeyValue+"^"+sFieldID)>=0);
		
							if(bIsPending==false) {
								setPendingSubmissionStyle(table.rows[row].cells[cell].childNodes[0],true,false);
								table.rows[row].cells[cell].style.backgroundColor="#FFFFFF";
								table.rows[row].cells[cell].setAttribute("AspectSubmissionPending","false");
								
								//make a request to the server and update all fields in the record.  Only do this if there are no other 
								//pending submissions for the record.  Otherwise, the value of another pending cell may be overwritten
								//with the retrieved values.  It also makes sense to make one call at the end when multiple fields are
								//being edited
								var bGetValues=true;
								for(var i=0;i<table.rows[row].cells.length;i++) {
									var attr2=table.rows[row].cells[i].getAttribute("AspectSubmissionPending");
									if((attr2) && (attr2.equalsIgnoreCase("pending"))) bGetValues=false;
								};
								if(bGetValues) {
									//add the record to the array to be refreshed
									if(arToRefresh.indexOf(sKeyValue)<0) arToRefresh[arToRefresh.length]=sKeyValue;
								};
							}
							else {
								cPending++;
							};
						};
					};
				};
			}
		};

		if(bDeleteRow==true) {
			table.deleteRow(row);
		}
		else {
			 row++;
		};
	};

	//refresh any records that no longer have pending submissions
	for(var i=0;i<arToRefresh.length;i++) {
		appendToLog("gotPendingSubmissions calling updateTableRecord for "+arToRefresh[i]+" because submissions are complete");
		updateTableRecord(ATableID,arToRefresh[i]);
	};

	if(cPending>0) {
		appendToLog("Setting timeout for getPendingSubmissions because submissions are still pending");
		setTimeout("getPendingSubmissions(\""+ATableID+"\")",3000);
	}
	else {
		appendToLog("gotPendingSubmissions killing timer because no pending submissions remain");
		updateTablesWithTimers(ATableID,false);
		updateSelectBoxes();
	};
};

/******************************************************************
Refreshes the collections for all select boxes that have the "update" attribute
set to true.  This attribute is set by submitTableData() when data is submitted for a table.
******************************************************************/
function updateSelectBoxes()
{
	var arSelect=document.getElementsByTagName("select");
	for(var i=0;i<arSelect.length;i++) {
		var sUpdate=arSelect[i].getAttribute("update");
		if((sUpdate) && (sUpdate.equalsIgnoreCase("true"))) {
			if(arSelect[i].id.length==0) arSelect[i].id=getSalt(4);
			//appendToLog("updateSelectBoxes updating "+arSelect[i].id);
			updateOptions(arSelect[i].id);
		};
	};
};

function getPendingSubmissions(ATableID)
{
	updateTablesWithTimers(ATableID,true);

	var table=document.getElementById(ATableID);

	//make a request to the server for a list of all outstanding data submissions
	var sServer=getServer();
	var sHashID=table.getAttribute("aspectHashID");
	var sDriverID=table.getAttribute("aspectDriver");
	
	//Note: This needs to use the original driver params, so TCache can locate the object
	//it is not necessary to pass external params
	//var sParams=getTableDriverParams(ATableID);
	var sParams=document.getElementById(ATableID).getAttribute("aspectParamsActive");
	if(!sParams) sParams=getTableDriverParams(ATableID); //for compatibility before aspectParamsActive is posted

	var sUrl=getServer()+"/?Network=GreenLight&ID=getPendingDataSubmissions";
	sUrl +="&SourceHashID="+sHashID+"&DriverID="+sDriverID+"&DriverParams="+sParams;
	sFunc="gotPendingSubmissions(\""+ATableID+"\",req.responseText)";
	asynchInclude(null,sUrl,sFunc,sFunc);
};

/******************************************************************************
Called to delete selected records
******************************************************************************/
function deleteTableRecords(ATableID,ARow)
{
	var table=document.getElementById(ATableID);

	var iSelectedRow=(ARow) ? ARow : -1;
	
	//get the onDelete attribute for the table.  It contains field ID's and values to be written when
	//a record is deleted in the form FieldID^Value|FieldID^Value
	var sOnDelete=table.getAttribute("aspectOnDelete");
	var arOnDelete=getSubStringArray(sOnDelete,"|",true);
	
	//get separate arrays for the field ID's, types and values in the OnDelete attribute
	var arOnDeleteFieldID=new Array();
	var arOnDeleteFieldType=new Array();
	var arOnDeleteFieldValue=new Array();
	for (var i=0;i<arOnDelete.length;i++) {
		var a=getSubStringArray(arOnDelete[i],"^",true);
		arOnDeleteFieldID[i]=a[0];
		arOnDeleteFieldType[i]=a[1];
		arOnDeleteFieldValue[i]=a[2];
	};

	var arKeyValue=new Array();
	var arFieldID=new Array();
	var arFieldType=new Array();
	var arFieldValue=new Array();

	//determine the cell that contains the select checkbox
	var c=getTableRecordSelectIndex(ATableID);

	var cSelected=0;
	for (var row=0;row<table.rows.length;row++) {
		if(table.rows[row].cells[c]) {
			var sKeyValue=table.rows[row].getAttribute("KeyValue");
			if((sKeyValue) && (tableRowIsTemplate(table.rows[row])==false))
			{
				var eCheckbox=table.rows[row].cells[c].firstChild;
				var bDelete=(iSelectedRow>=0) ? (row==iSelectedRow) : eCheckbox.checked;
				if(bDelete)
				{
					cSelected++;

					//set attributes to indicate data is being submitted
					setPendingSubmissionStyle(table.rows[row].cells[c].childNodes[0],true,true);
					//table.rows[row].cells[c].style.backgroundColor=PendingSubmissionBackgroundColor;
					table.rows[row].cells[c].setAttribute("AspectSubmissionPending","newdelete");
					table.rows[row].setAttribute("deleted","true");

					//create a data submission for each field in the onDelete attribute
					for (var i=0;i<arOnDeleteFieldID.length;i++) {
						arKeyValue[arKeyValue.length]=sKeyValue;
						arFieldID[arFieldID.length]=arOnDeleteFieldID[i];
						arFieldType[arFieldType.length]=arOnDeleteFieldType[i];
						arFieldValue[arFieldValue.length]=replaceAllSubstrings(arOnDeleteFieldValue[i],",","//co"+"mma//");
					};
				};
			};
		};
	};

	//abort if no records were selected
	if(cSelected==0) return;

	var sServer=getServer();
	var sHashID=table.getAttribute("aspectHashID");
	var sDriverID=table.getAttribute("aspectDriver");
	var sKeyExpression=table.getAttribute("aspectKeyExpression");
	
	//need to use params active when the table was created
	//var sParams=getTableDriverParams(ATableID);
	var sParams=table.getAttribute("aspectParamsActive");
	if(!sParams) sParams=getTableDriverParams(ATableID); //for compatibility before aspectParamsActive is posted

	var submitKeyValue=arKeyValue.toString();
	var submitFieldID=arFieldID.toString();
	var submitFieldType=arFieldType.toString();
	var submitFieldValue=arFieldValue.toString();

	var sUrl=getServer()+"/?Network=GreenLight&ID=putDriverData";
	sUrl +="&SourceHashID="+sHashID+"&DriverID="+sDriverID+"&KeyExpression="+sKeyExpression;
	sUrl +="&DriverParams="+sParams+"&KeyValue="+submitKeyValue+"&FieldID="+submitFieldID;
	sUrl +="&FieldType="+submitFieldType+"&Value="+submitFieldValue;

	//var sFunc="submitTableData(null,req.responseText)";
	var sFunc="";
	asynchInclude(null,sUrl,sFunc,sFunc);

	//start a timer to update the attributes of cells with pending data submissions if one is not already started
	if(isTableTimerActive(ATableID)==false) getPendingSubmissions(ATableID);
};

/******************************************************************************
Returns the input control of the cell with the given KeyValue and Field ID
******************************************************************************/
function getTableCellControl(table,AKeyValue,AFieldID)
{
//appendToLog("getTableCellControl table="+table+" KeyValue="+AKeyValue+" FieldID="+AFieldID);
	var Cell=getTableCell(table,AKeyValue,AFieldID);
//appendToLog("getTableCellControl Cell="+Cell);
	if(Cell==null) return(null);

	for (var i=0;i<Cell.childNodes.length;i++) {
		var eChild=Cell.childNodes[i];
		if((eChild.type=="select-one") || (eChild.type=="select-multiple") || (eChild.type=="text") || (eChild.type=="password") || (eChild.type=="checkbox") || (eChild.type=="textarea")) return(eChild);
		if(eChild.nodeName.equalsIgnoreCase("textarea")) return(eChild);
		if(eChild.nodeName.equalsIgnoreCase("text")) return(eChild);
	};
//appendToLog("getTableCellControl returning null");
	return(null);
};

/******************************************************************************
Returns the TD of the cell with the given KeyValue and Field ID
******************************************************************************/
function getTableCell(table,AKeyValue,AFieldID)
{
//appendToLog("getTableCell table="+table+" KeyValue="+AKeyValue+" FieldID="+AFieldID);
	var row=getTableRow(table,AKeyValue);
	if(row==null) {
//appendToLog("getTableCell row=null");
		return(null);
	};

	var arFieldID=getSubStringArray(table.getAttribute("aspectFields"),",",true);
//appendToLog("getTableCell arFieldID="+arFieldID);
	for (var i=0;i<row.cells.length;i++) {
		var sCellIndex=row.cells[i].getAttribute("CellIndex");
		if(sCellIndex) {
			var iCellIndex=parseInt(sCellIndex);
			var sFieldID=arFieldID[iCellIndex];
			if(sFieldID) {
				if(sFieldID.equalsIgnoreCase(AFieldID)) {
					return(row.cells[i]);
				};
			};
		};
	};

//appendToLog("getTableCell returning null");
	return(null);
};

/******************************************************************************
Returns the TR containing with given KeyValue
******************************************************************************/
function getTableRow(table,AKeyValue)
{
	for (var i=0;i<table.rows.length;i++) {
		var sKeyValue=table.rows[i].getAttribute("KeyValue");
		if((sKeyValue) && (sKeyValue.equalsIgnoreCase(AKeyValue))) return(table.rows[i]);
	};

	return(null);
};

/******************************************************************************
Returns the value of the given KeyValue and FieldID
******************************************************************************/
function getTableRowFieldValue(table,AKeyValue,AFieldID)
{
	//get the index of the field in the aspectallfieldid attribute
	var arAllFieldID=getSubStringArray(table.getAttribute("aspectallfieldid"),",",true);
	var iFieldIndex=arAllFieldID.indexOf(AFieldID);
	if(iFieldIndex<0) {
		appendToLog("Error in getTableRowFieldValue.  Cannot find field: "+AFieldID,false,true);
		return(null);
	};

	//locate the row containing the key value
	var row=getTableRow(table,AKeyValue);
	if(row==null) {
		appendToLog("Error in getTableRowFieldValue.  Cannot locate row with keyvalue="+AKeyValue,false,true);
		return(null);
	};

	var arValues=getSubStringArray(getAttr(row,"aspectAllValues"),",",true);
	if(iFieldIndex>=arValues.length) {
		appendToLog("Error in getTableRowFieldValue.  Index out of range.",false,true);
		return(null);
	};

	return(arValues[iFieldIndex]);
};

/******************************************************************************
Returns the input control for the field with the given FieldID in the edit dialog
******************************************************************************/
function getDialogControl(eDialog,AKeyValue,AFieldID) {
	//abort if a key value has not been defined because the dialog has not been initialized or 
	//if the dialog is displaying fields for another record
	var sKeyValue=eDialog.getAttribute("KeyValue");
	if(!sKeyValue) return(null);
	if(sKeyValue.equalsIgnoreCase(AKeyValue)==false) return(null);

	var arNodes=new Array();
	getAllInputNodes(eDialog,arNodes);
	for (var i=0;i<arNodes.length;i++) {
		if((arNodes[i].type=="select-one") || (arNodes[i].type=="select-multiple") || (arNodes[i].type=="text") || (arNodes[i].type=="password") || (arNodes[i].type=="checkbox") || (arNodes[i].type=="textarea")) {
			var s=arNodes[i].getAttribute("name");
			if((s) && (s.equalsIgnoreCase(AFieldID))) return(arNodes[i]);
		};
	};
	return(null);
};

/******************************************************************************
Submits data edited in a table.  e is the element used to edit the data (e.g. input, checkbox, select)
******************************************************************************/
function submitTableCell(e)
{
appendToLog("submitTableCell "+e.id,false,true);
	var td=e.parentNode;
	var tr=td.parentNode;
	var tbody=tr.parentNode;
	var table=tbody.parentNode;

	if(table.nodeName.equalsIgnoreCase("table")==false) {
		alert("Error reading driver information");
		return;
	};

	var sTableID=table.getAttribute("id");
	
	//format the cell
	if(e.type!="checkbox") e.value=formatField(sTableID,e);
	
	//set the background color of the cell and the attribute indicating it's saving
	setPendingSubmissionStyle(e,true,true);
	//td.style.backgroundColor=PendingSubmissionBackgroundColor;
	td.setAttribute("AspectSubmissionPending","new");

	//get the FieldID of the cell
	var iCellIndex=parseInt(td.getAttribute("CellIndex"));
	var arFields=getSubStringArray(table.getAttribute("aspectFields"),",",true);
	var sFieldID=arFields[iCellIndex];
	
	//get the key value for the record
	var sKeyValue=tr.getAttribute("KeyValue");
	
	//get the value of the cell
	var sValue=(e.type=="checkbox") ? e.checked : e.value;

	appendToLog("submitTableCell KeyValue="+sKeyValue+" FieldID="+sFieldID+" Value="+sValue);

	//update the corresponding cell in the edit dialog if there is one
	var d=document.getElementById(table.getAttribute("EditDialogID"));
	if(d) {
		var Control=getDialogControl(d,sKeyValue,sFieldID);
		if(Control) {
			(Control.type=="checkbox") ? Control.checked=sValue : Control.value=sValue;
			
			var eParent=Control.parentNode;
			if((eParent.nodeName.equalsIgnoreCase("td")) || (eParent.nodeName.equalsIgnoreCase("span"))){
				setPendingSubmissionStyle(Control,false,true);
				//eParent.style.backgroundColor="PendingSubmissionBackgroundColor;
				eParent.setAttribute("AspectSubmissionPending","new");
			};
		};
	};

	var s="";
	(sValue instanceof String) ? s=replaceAllSubstrings(sValue,",","//co"+"mma//") : s=sValue.toString();
	submitTableData(table.getAttribute("ID"),sKeyValue,sFieldID,s);
};

/******************************************************************************
Submits data to a server.  Multiple fields and values may be submitted by
separating them with commas.  Any commas contained in the data should be replaced
with "comma" surrounded by "//" before calling this function.

Note: This could be modified to send data directly via a notification.  The
return value could then be used to update the table row.  Right now, data is
added to the cache using TWriteBuffer and a response is not available.  Another
notification is sent when pending data is written to get all values in the record
to update the table row.
******************************************************************************/
function submitTableData(ATableID,AKeyValue,AFieldID,AValue)
{
//appendToLog("submitTableData TableID="+ATableID+" KeyValue="+AKeyValue+" FieldID="+AFieldID+" Value="+AValue+" contains tabs="+AValue.indexOf("\t"));

	var table=document.getElementById(ATableID);
	var sServer=getServer();
	var sHashID=table.getAttribute("aspectHashID");
	var sDriverID=table.getAttribute("aspectDriver");
	var sKeyExpression=table.getAttribute("aspectKeyExpression");
	var arFieldID=getSubStringArray(table.getAttribute("aspectAllFieldID"),",",true);
	var arFieldType=getSubStringArray(table.getAttribute("aspectAllFieldType"),",",true);

	//These need to use the driver params in place when the table was created
	//var sParams=getTableDriverParams(ATableID);
	var sParams=document.getElementById(ATableID).getAttribute("aspectParamsActive");
	if(!sParams) sParams=getTableDriverParams(ATableID); //for compatibility before posting aspectParamsActive

	//make a comma-delimited array of field types for fields being submitted.  
	var arSubmitFieldID=getSubStringArray(AFieldID,",");
	var sFieldIndex="";
	for (var i=0;i<arSubmitFieldID.length;i++) {
		var n=getFieldIndex(arSubmitFieldID[i],arFieldID);
		if(sFieldIndex.length>0) sFieldIndex +=",";
		sFieldIndex +=arFieldType[n];
	};

	//call listener functions if defined
	var arKeyValue=getSubStringArray(AKeyValue,",");
	var arValue=getSubStringArray(AValue,",");
	for (var i=0;i<arSubmitFieldID.length;i++) {
		if(eval('typeof dataSubmittedListener')=="function") {
			dataSubmittedListener(sHashID,ATableID,sDriverID,arSubmitFieldID[i],arKeyValue[i],arValue[i]);
		};

		//note: periods in field ID's are removed.  Periods appear in field ID's when a structure is included in another structure.
		if(eval('typeof dataSubmittedListener'+replaceAllSubstrings(arSubmitFieldID[i],".",""))=="function") {
			var sValue=replaceAllSubstrings(arValue[i],"\x22","%22");
			var sEval="dataSubmittedListener"+replaceAllSubstrings(arSubmitFieldID[i],".","")+"(\""+sHashID+"\",\""+ATableID+"\",\""+sDriverID+"\",\""+arKeyValue[i]+"\",\""+sValue+"\")";
			//appendToLog("sEval="+sEval);
			eval(sEval);
		};
	};
	
	//flag  select boxes for update
	var arSelect=document.getElementsByTagName("select");
	for(var i=0;i<arSelect.length;i++) {
		var CollectionSource=arSelect[i].getAttribute("Source");
		if((CollectionSource) && (CollectionSource.equalsIgnoreCase(sHashID))) {
			var CollectionDriverID=arSelect[i].getAttribute("DriverID");
			if((CollectionDriverID) && (CollectionDriverID.equalsIgnoreCase(sDriverID))) {
				//appendToLog("Flagged select for update with Source="+sHashID+" DriverID="+CollectionDriverID);
				arSelect[i].setAttribute("update","true");
			};
		};
	};
	
	var sUrl=getServer()+"/?Network=GreenLight&ID=putDriverData";
	sUrl +="&SourceHashID="+sHashID+"&DriverID="+sDriverID+"&KeyExpression="+sKeyExpression;
	sUrl +="&DriverParams="+sParams+"&KeyValue="+AKeyValue+"&FieldID="+AFieldID;
	sUrl +="&FieldType="+sFieldIndex;
	
	var s=replaceAllSubstrings(AValue,"&","//am"+"p//");
	s=replaceAllSubstrings(s,"\r\n","//cr"+"lf//");
	s=replaceAllSubstrings(s,"\r","//cr"+"lf//");
	s=replaceAllSubstrings(s,"\n","//cr"+"lf//");
	s=replaceAllSubstrings(s,"\t","//ta"+"b//");
	sUrl +="&Value="+s;
	//appendToLog("submitTableData url="+sUrl,false,true);

	//set the error function so if the call fails it will be tried again
	var sFunc="submitTableData(\""+ATableID+"\",\""+AKeyValue+"\",\""+AFieldID+"\",\""+AValue+"\")";
	asynchInclude(null,sUrl,"",sFunc);

	//update the hidden value(s) in the table row.  This is necessary so a dialog is initialized properly if it is opened
	//after values have been edited
	setFieldValueInRow(ATableID,AKeyValue,AFieldID,AValue);
	
	//start a timer to update the attributes of cells with pending data submissions if one is not already started
	var sTableID=table.getAttribute("ID");
	if(isTableTimerActive(sTableID)==false) getPendingSubmissions(sTableID);
};

function submitTableData2(ATableID,AKeyValue,AFieldID,AValue,sResponse)
{
	if(sResponse) {
		appendToLog("submitTableData2 response received");
		return;
	};
	
//appendToLog("submitTableData TableID="+ATableID+" KeyValue="+AKeyValue+" FieldID="+AFieldID+" Value="+AValue,false,true);

	var table=document.getElementById(ATableID);
	var sServer=getServer();
	var sHashID=table.getAttribute("aspectHashID");
	var sDriverID=table.getAttribute("aspectDriver");
	var sKeyExpression=table.getAttribute("aspectKeyExpression");
	var sParams=getTableDriverParams(ATableID);
	var arFieldID=getSubStringArray(table.getAttribute("aspectAllFieldID"),",",true);
	var arFieldType=getSubStringArray(table.getAttribute("aspectAllFieldType"),",",true);
	var sEmbedValues=table.getAttribute("aspectembedvalues");

	//make a comma-delimited array of field types for fields being submitted.  
	var arSubmitFieldID=getSubStringArray(AFieldID,",");
	var sFieldIndex="";
	for (var i=0;i<arSubmitFieldID.length;i++) {
		var n=getFieldIndex(arSubmitFieldID[i],arFieldID);
		if(sFieldIndex.length>0) sFieldIndex +=",";
		sFieldIndex +=arFieldType[n];
	};

	var sUrl=getServer()+"/?Network=greenlight&ID=getWidget";
	sUrl +="&DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em&Widget=Notification Queries";
	sUrl +="&query=putRecordValues";
	sUrl +="&source="+sHashID;
	sUrl +="&Driver_ID="+sDriverID;
	sUrl +="&DriverParams="+sParams;
	sUrl +="&FieldID="+AFieldID
	sUrl +="&FieldType="+sFieldIndex;
	sUrl +="&KeyValue="+AKeyValue;
	sUrl +="&EmbedValues="+sEmbedValues;

	var s=replaceAllSubstrings(AValue,"&","//am"+"p//");
	s=replaceAllSubstrings(s,"\r\n","//cr"+"lf//");
	s=replaceAllSubstrings(s,"\r","//cr"+"lf//");
	s=replaceAllSubstrings(s,"\n","//cr"+"lf//");
	sUrl +="&Value="+s;

	appendToLog("submitTableData2 url="+sUrl,false,true);

	var sFunc="submitTableData2(\""+ATableID+"\",\""+AKeyValue+"\",\""+AFieldID+"\",\""+AValue+"\",req.responseText)";
	asynchInclude(null,sUrl,sFunc,sFunc);

	//update the hidden value(s) in the table row.  This is necessary so a dialog is initialized properly if it is opened
	//after values have been edited
	setFieldValueInRow(ATableID,AKeyValue,AFieldID,AValue);
	
	//start a timer to update the attributes of cells with pending data submissions if one is not already started
	//var sTableID=table.getAttribute("ID");
	//if(isTableTimerActive(sTableID)==false) getPendingSubmissions(sTableID);
};

/******************************************************************************
Updates the value of a field in the attributes for a row.  This is necessary so
a dialog will be initialized with the correct values if data is edited in a 
dialog and then the dialog is opened a 2nd time.  Operates on a single
Field ID and Value.  An array of values is not permitted.
******************************************************************************/
function setFieldValueInRow(ATableID,AKeyValue,AFieldID,AValue)
{
	var table=document.getElementById(ATableID);
	var arFieldID=getSubStringArray(table.getAttribute("aspectAllFieldID"),",",true);
//appendToLog("setFieldValueInRow: TableID="+ATableID+" KeyValue="+AKeyValue+" FieldID="+AFieldID+" Value="+AValue,false,true);
	var arChangedKeyValue=getSubStringArray(AKeyValue,",",false);
	var arChangedFieldID=getSubStringArray(AFieldID,",",false);
	
	if(AValue=="") {
		var arChangedValue=new Array(1);
		arChangedValue[0]="";
	}
	else {
		var arChangedValue=getSubStringArray(AValue,",",false);
	};
	
	//locate the row containing the keyexpression
	for (var i=0;i<arChangedKeyValue.length;i++)
	{
		var cUpdated=0;
		for (var row=0;row<table.rows.length;row++) {
			var sKeyValue=table.rows[row].getAttribute("keyvalue");
			if((sKeyValue) && (sKeyValue.equalsIgnoreCase(arChangedKeyValue[i]))) {
				var sSubtotalLevel=table.rows[row].getAttribute("AspectSubtotalLevel");
//appendToLog("setFieldValueInRow: sSubtotalLevel="+sSubtotalLevel+" parseInt="+parseInt(sSubtotalLevel));
				if((sSubtotalLevel) && (parseInt(sSubtotalLevel)<0)) {
					var arValues=getSubStringArray(getAttr(table.rows[row],"aspectAllValues"),",",true);
					var n=getFieldIndex(arChangedFieldID[i],arFieldID);
					arValues[n]=arChangedValue[i];
					arValues[n]=tokenizeTableValue(arValues[n],true);
					setAttr(table.rows[row],"aspectAllValues",arValues.toString());
					cUpdated++;
				};
			};
		};
		if(cUpdated==0) alert("Could not update value for Key="+AKeyValue+" FieldID="+AFieldID+" Value="+AValue);
	};
};

/******************************************************************************
Displays attributes for the element with the given ID
******************************************************************************/
function debugAttributes(sID)
{
	if(sID.length==0) {
		alert("No ID in debugAttributes");
		return;
	};
	
	var d=document.getElementById("TableInfo"+sID.toLowerCase());
	if(!d) {
		//create a new div for the table info
		d=document.createElement("div");
		d.className="TableInfo";
		d.setAttribute("ID","TableInfo"+sID);
		d.id="TableInfo"+sID;
		
		//add the table info div to the div containing the table
		document.getElementById("div"+sID.toLowerCase()).appendChild(d);
	}
	else {
		//clear the already existing div
		d.innerHTML="";
	};
	
	var eTable=document.getElementById(sID);

	var xy=getPosition(eTable,"absolute",document.getElementById("div"+sID.toLowerCase()));
	d.style.top=xy[1]+"px";
	d.style.left=xy[0]+"px";

	//create a title for the div
	var divTitle=document.createElement("div");
	var h1=document.createElement("h1");
	h1.appendChild(document.createTextNode("Information"));
	divTitle.appendChild(h1);
	
	//create a close icon for the div - it will float right
	var divCloseIcon=document.createElement("div");
	divCloseIcon.className="TableInfoCloseIcon";
	var s="setVisible('TableInfo"+sID+"',false)";
	divCloseIcon.setAttribute("onclick",s);	//this works for firefox
	divCloseIcon.onclick=Function(s);		//this works for IE
	
	//add the title, close icon and an hr to the div
	var divTitleContainer=document.createElement("div");
	divTitleContainer.style.overflow="auto";
	divTitleContainer.appendChild(divCloseIcon);
	divTitleContainer.appendChild(divTitle);
	d.appendChild(divTitleContainer);
	d.appendChild(document.createElement("hr"));

	//create a table for general information that will be visible to users
	var h1=document.createElement("h1");
	h1.appendChild(document.createTextNode("General"));
	d.appendChild(h1);
	var table=document.createElement("table");
	table.className="TableInfoGeneral";
	
	//add the table ID
	row=document.createElement("tr");
	var td=document.createElement("td");
	td.appendChild(document.createTextNode("Table ID"));
	row.appendChild(td);
	td=document.createElement("td");
	td.appendChild(document.createTextNode(sID));
	row.appendChild(td);
	table.appendChild(row);
	
	//add the time updated
	row=document.createElement("tr");
	var td=document.createElement("td");
	td.appendChild(document.createTextNode("Updated"));
	row.appendChild(td);
	td=document.createElement("td");
	var eTimestamp=document.getElementById("table_updated_"+sID.toLowerCase());
	td.innerHTML=(eTimestamp) ? eTimestamp.innerHTML : "&nbsp;";
	row.appendChild(td);
	table.appendChild(row);

	//add the source computer
	row=document.createElement("tr");
	var td=document.createElement("td");
	td.appendChild(document.createTextNode("Computer"));
	row.appendChild(td);
	td=document.createElement("td");
	td.innerHTML=eTable.getAttribute("AspectHashID");
	row.appendChild(td);
	table.appendChild(row);

	//add the table to the table info div
	d.appendChild(table);
	
	//get a list of all attributes for the table beginning with "aspect"
	var e=document.getElementById(sID);
	var a=new Array();
	for (var i=0;i<e.attributes.length;i++) {
		var sName=e.attributes.item(i).nodeName;
		if(sName.startsWith("aspect")) {
			a[a.length]=sName.substring(6)+"="+ e.attributes.item(i).nodeValue+"\n";
		};
	};
	a.sort();

	//get a string containing all fields used in the table dialog - This list can be used to create a list of embedded fields to speed things up
	//Specifying embedded fields will cause only those fields to be included in the hidden fields associated with the record
	//in the table.  Using embedded fields also avoids including unneeded calculated fields
	var arAlreadyAdded=new Array();
	var eDialog=document.getElementById(eTable.getAttribute("EditDialogID"));
	var s="";
	if(eDialog) {
		var arFieldID=getSubStringArray(eTable.getAttribute("aspectallfieldid"),",",false);
		var arNodes=new Array();
		getAllChildNodes(eDialog,arNodes);
		for(var i=0;i<arNodes.length;i++) {
			if(arNodes[i].nodeName.indexOf("\x23")<0) {
				var sName=arNodes[i].getAttribute("name");
				if(sName) {
					var n=getFieldIndex(sName,arFieldID);
					if(n>=0) {
						if(arAlreadyAdded.indexOf(sName)<0) {
							if(s.length>0) s +=", ";
							s+=sName;
							arAlreadyAdded[arAlreadyAdded.length]=sName;
						};
					};
				};
			};
		};
		
		if(s.length==0) s="No fields found in dialog.";
	}
	else {
		s="No dialog defined";
	};
	
	//create another table for debugging  information
	var h1=document.createElement("h1");
	h1.appendChild(document.createTextNode("Debugging"));
	d.appendChild(h1);
	var table=document.createElement("table");
	table.className="TableInfoDebug";
	
	row=document.createElement("tr");
	var td=document.createElement("td");
	td.appendChild(document.createTextNode("Dialog Fields"));
	row.appendChild(td);
	var td=document.createElement("td");
	td.appendChild(document.createTextNode(s))
	row.appendChild(td);
	table.appendChild(row);
	
	//screen width
	row=document.createElement("tr");
	var td=document.createElement("td");
	td.appendChild(document.createTextNode("Screen Width"));
	row.appendChild(td);
	var td=document.createElement("td");
	td.appendChild(document.createTextNode(getViewportWidth()))
	row.appendChild(td);
	table.appendChild(row);
	
	//screen height
	row=document.createElement("tr");
	var td=document.createElement("td");
	td.appendChild(document.createTextNode("Screen Height"));
	row.appendChild(td);
	var td=document.createElement("td");
	td.appendChild(document.createTextNode(getViewportHeight()))
	row.appendChild(td);
	table.appendChild(row);

	//add node type (make sure it's a table)
	row=document.createElement("tr");
	var td=document.createElement("td");
	td.appendChild(document.createTextNode("Node Type"));
	row.appendChild(td);
	var td=document.createElement("td");
	td.appendChild(document.createTextNode(table.nodeType))
	row.appendChild(td);
	table.appendChild(row);
	
	//add table ID
	row=document.createElement("tr");
	var td=document.createElement("td");
	td.appendChild(document.createTextNode("Table ID"));
	row.appendChild(td);
	var td=document.createElement("td");
	td.appendChild(document.createTextNode(sID))
	row.appendChild(td);
	table.appendChild(row);

	for(var i=0;i<a.length;i++) {
		var n=a[i].indexOf("=");
		var sName=a[i].substring(0,n);
		var sValue=a[i].substring(n+1);
		row=document.createElement("tr");
		td=document.createElement("td");
		td.appendChild(document.createTextNode(sName));
		row.appendChild(td);
		td=document.createElement("td");
		//td.appendChild(document.createTextNode(replaceAllSubstrings(sValue,",","&#48; ")));
		var s=replaceAllSubstrings(sValue,",","~@~");
		s=replaceAllSubstrings(s,"~@~",", ");
		s=replaceAllSubstrings(s,"|","~@~");
		s=replaceAllSubstrings(s,"~@~","| ");
		td.appendChild(document.createTextNode(s));
		row.appendChild(td);
		table.appendChild(row);
	};
	
	//wrap the debugging table in a div container
	var tableContainer=document.createElement("div");
	tableContainer.className="TableInfoDebugContainer";
	tableContainer.appendChild(table);
	d.appendChild(tableContainer);
	
	setVisible(d,true);
};

/******************************************************************************
Shows or hides a table message
******************************************************************************/
function showTableMessage(sTableID,sMessage,bShow)
{
	if(sTableID.length==0) {
		alert("No TableID in showTableMessage");
		return;
	};

	var eDiv=document.getElementById("div"+sTableID);
	var eTable=document.getElementById(sTableID);

	//abort if messages are disabled for the table
	var s=eTable.getAttribute("aspectmessages");
	if((s) && (s.equalsIgnoreCase("false"))) return;
	
	//don't display a message if the table is not visible.  
	if(eDiv.offsetWidth*eDiv.offsetHeight==0) return

	var divMessage=document.getElementById(sTableID+"Message");
	
	if(bShow==false) {
		if(divMessage) setVisible(divMessage,false);
		return;
	};

	//create the message div if it doesn't already exist
	if(!divMessage) {
		divMessage=document.createElement("div");
		divMessage.id=sTableID+"Message";
		divMessage.className="tablemessage";
		eDiv.appendChild(divMessage);
	}
	else {
		divMessage.innerHTML="";
	};

	var t=document.createTextNode(sMessage);
	divMessage.appendChild(t);

	setVisible(divMessage,true);

	var xy=getPosition2012(eTable,"absolute",eDiv);

	//position the message in the center of the table
	//but not more than 200 px to the right of the left side of the table
	var Middle=eTable.offsetWidth/2;
	var Left=Middle - (divMessage.offsetWidth/2);
	Left=Math.min(Left,200);
	divMessage.style.left=Left+"px";

	//position the message 40px down from the top of the table
	divMessage.style.top=(xy[1]+80)+"px";
};

/******************************************************************************
Called when a display is selected from the table controls.  Causes the table to refresh immediately
using the new display
******************************************************************************/
function displaySelected1(eSelect,sTableID) 
{
	var sDisplayValue=eSelect.value;
	//alert("displaySelected1: TableID="+sTableID+" Display="+sDisplayValue);
	refreshTable(sTableID,"refresh",eSelect.value,false);
};

/******************************************************************************
Called when a display is selected from the display dialog.  Causes the dialog to be refreshed with
the controls from the selected display
******************************************************************************/
function displaySelected2(eSelect,sTableID) 
{
	var sDisplayValue=eSelect.value;
	//alert("displaySelected: TableID="+sTableID+" Display="+sDisplayValue);
	refreshDisplayDialog(sTableID,sDisplayValue,true);
};

/******************************************************************************
Called when a display is selected from the display dialog.  Causes the dialog to be refreshed with
the controls from the selected display
******************************************************************************/
function restoreDisplay(sTableID) 
{
	var sDisplayValue=document.getElementById("SelectDisplay2"+sTableID).value;
	refreshDisplayDialog(sTableID,sDisplayValue,true);
};

/******************************************************************************
Used by mobile devices when the cancel button is pressed in the display dialog
******************************************************************************/
function displayDialogCancel(sTableID)
{
	setVisible("Display_Dialog_"+sTableID,false);
	if(bIsMobileDevice) {
		defocusDialog();
		if(false) {
			var arDiv=document.getElementsByTagName("div");
			for (var i=0;i<arDiv.length;i++) {
				if(arDiv[i].getAttribute("hideafteredit")=="true") {
					setVisible(arDiv[i],false);
				}
				else if(arDiv[i].getAttribute("ShowAfterEdit")=="true") {
					setVisible(arDiv[i],true);
				};
			};
			
			window.scrollTo(0,document.body.getAttribute('RestoreScrollTop'));
		};
	};
};

/******************************************************************************
Called when the display dialog is closed by pressing okay.  Causes the table to be refreshed using
the display settings in the dialog.
******************************************************************************/
function displayDialogOk(sTableID)
{
	setVisible("Display_Dialog_"+sTableID,false);

	if(bIsMobileDevice) {
		defocusDialog();
		if(false) {
			var arDiv=document.getElementsByTagName("div");
			for (var i=0;i<arDiv.length;i++) {
				if(arDiv[i].getAttribute("hideafteredit")=="true") {
					setVisible(arDiv[i],false);
				}
				else if(arDiv[i].getAttribute("ShowAfterEdit")=="true") {
					setVisible(arDiv[i],true);
				};
			};
			
			window.scrollTo(0,document.body.getAttribute('RestoreScrollTop'));
		};
	};
	
	var fOptions=document.forms["Display_Dialog_"+sTableID];
	var sDisplayID=fOptions.DisplayName.value;
	//alert("displayDialogOk DisplayID="+sDisplayID);
	refreshTable(sTableID,"refresh",sDisplayID,true);

	if(bIsMobileDevice) {
		//remove the display dialog from the body.  A new one will be returned when the table is refreshed.
		var div=document.getElementById("Display_Dialog_"+sTableID);
		div.parentNode.removeChild(div);
	};
};

/*******************************************************************************
Called to refresh records in a table at some interval.  Records are merged into the table
rather than refreshing the whole table.  Can also be used to refresh a table that does
not have an interval set.  For example, if a new record is added to a driver, this 
function can be called to add the record to a table.
*******************************************************************************/
function refreshTableOnInterval(TableID,IsRefreshed)
{
	var Debug=false;
	
//appendToLog("refreshTableOnInterval TableID="+TableID+" IsRefreshed="+IsRefreshed);
	var eTable=document.getElementById(TableID);
	if(!eTable) return;
	
	var iInterval=parseInt(eTable.getAttribute("AspectActiveRefreshInterval"));
	var bRefreshWhenHidden=false;
	if(eTable.getAttribute("AspectActiveRefreshWhenHidden")) {
		bRefreshWhenHidden=eTable.getAttribute("AspectActiveRefreshWhenHidden").equalsIgnoreCase("true");
	};
	
	if(IsRefreshed) {
		var eDestTable=document.getElementById(TableID)
		var eTable=document.getElementById(TableID+"intervalrefresh");
		if(!eTable) {
			if(Debug) appendToLog("Could not locate table: "+TableID+"intervalrefresh to refresh content");
			setTimeout("refreshTableOnInterval(\""+TableID+"\")",iInterval);
			return;
		};
		//appendToLog("got refreshed content Len="+eTable.innerHTML.length);
		//for(var i=0;i<eTable.rows[2].cells.length;i++) {
		//	appendToLog("Cell "+i+"="+eTable.rows[2].cells[i].innerHTML);
		//};
		
		var bMerge=true;
		
		//don't merge if the table is  currently being refreshed
		if(eDestTable.getAttribute("Loading")=="true") bMerge=false;
		
		//don't merge if the crc value for the table has not changed
		var SrcTableCRC="";
		var eSrcTableCRC=document.getElementById(TableID+"intervalrefreshCRC");
		if(eSrcTableCRC) {
			SrcTableCRC=eSrcTableCRC.innerHTML;
			var DestTableCRC=eDestTable.getAttribute("TableCRC");
			if(DestTableCRC) {
				if(SrcTableCRC==DestTableCRC) {
					if(Debug) appendToLog("Not updating table because CRC values match");

					//update the span containing the time the table was generated
					setTableUpdateTime(eDestTable);

					eDestTable.setAttribute("TimeLastRefreshedOnInterval",new Date().getTime());
					setTimeout("refreshTableOnInterval(\""+TableID+"\")",iInterval);
					return;
				}
				else {
					if(Debug) appendToLog("CRC values are different for "+TableID);
				};
			}
			else {
				if(Debug) appendToLog("Cannot locate crc for destination table");
			};
		}
		else {
			if(Debug) appendToLog("Cannot locate table crc in "+TableID+"intervalrefreshCRC");
		};
		
		//don't merge if the crc for the  display options is different from those in the original table
		var sCRCNow=eTable.getAttribute("aspectDisplayOptionsCRC");
		var sCRCOriginal=eDestTable.getAttribute("aspectDisplayOptionsCRC");
		if(sCRCNow!=sCRCOriginal) {
			//appendToLog("Not refreshing table because crc for display options is different");
			//appendToLog("CRCNow="+sCRCNow+" CRCOriginal="+sCRCOriginal);
			bMerge=false;
		};
		
		if(bMerge) {
			//appendToLog("merging tables");
			mergeTable2012(TableID,TableID+"intervalrefresh");
			
			//update the span containing the time the table was generated
			//appendToLog("Updating time");
			setTableUpdateTime(eDestTable);
		};
//appendToLog("setTimeout to refresh table: "+TableID);
		eDestTable.setAttribute("TableCRC",SrcTableCRC);
		eDestTable.setAttribute("TimeLastRefreshedOnInterval",new Date().getTime());
		setTimeout("refreshTableOnInterval(\""+TableID+"\")",iInterval);
		return;
	};
	
	if((bRefreshWhenHidden) || (isVisible(eTable))) 
	{
		//make sure enough time has elapsed.  The javascript timer is unreliable
		var iElapsed=(eTable.getAttribute("TimeLastRefreshedOnInterval")) ? new Date().getTime()-parseInt(eTable.getAttribute("TimeLastRefreshedOnInterval")) : iInterval;
		//appendToLog("iElapsed="+iElapsed+" iInterval="+iInterval);
		if(iElapsed<iInterval) {
			if(Debug) appendToLog("Aborting refreshTableOnInterval because time elapsed="+new Date().getTime()-t<iInterval);
			setTimeout("refreshTableOnInterval(\""+TableID+"\")",1000);
			return;
		};

		//appendToLog("Refreshing table: "+TableID);
		///if the table has already been refreshed, get the url that was calculated to do the refreshing
		var sSavedUrl=eTable.getAttribute("RefreshOnIntervalUrl");
		/*
		This is a good idea, but has problems.  For one thing, external driver params and filters are not reflected in the table
		This was disabled on 7/24/15 because the Waste Count List table was not refreshing properly with it enabled.
		*/
		/**************
		if(sSavedUrl) {
			var iStartRecord=parseInt(eTable.getAttribute("aspectstartrecord"));
			sSavedUrl +="&StartRecord="+iStartRecord;
			var sFunc="refreshTableOnInterval(\""+TableID+"\",true)";
//appendToLog("Updating table using saved url: "+sSavedUrl);
			asynchInclude(document.getElementById("TableRefreshDiv"+TableID),sSavedUrl,sFunc,sFunc);
			return;
		};
		***************/

		//add the start record.  This is not saved in the url
		sUrl +="&StartRecord="+iStartRecord;
		
		var e=document.getElementById("SelectDisplay1"+TableID);
		ADisplayID=(e) ? e.value : "";

		var eDiv=document.getElementById("div"+TableID);
		var iMaxRecords=parseInt(eTable.getAttribute("aspectmaxrecords"));
		var iStartRecord=parseInt(eTable.getAttribute("aspectstartrecord"));

		//construct a driver include tag to be processed by the server
		var sHashID=eTable.getAttribute("aspectHashID");
		var sDocumentID="";
		var sWidget="";

		//The DriverID is recorded in the table as well as a DriverStructID.  The DriverStructID is the driver that was actually used in creating the table.
		//It is normally the same as the Driver ID.  However, it can be different if the driver is opened using a script driver.  The include tag used to create the table will 
		//contain the original driver ID but TCacheDriver routine needs to know the structure used by the final driver so it can transfer and read/write data.
		var sDriverID="";
		var sDriverStructID="";

		//add the attributes for the table to an array.  The array will be sorted to avoid creating duplicate TCacheObj entries for the same display
		var arParams=new Array();
		
		//add an attribute indicating that this is a call to refresh a table.  TAspectDriver.exportToHtml() uses this to avoid creating an edit dialog
		arParams[arParams.length]="REFRESHONINTERVAL: \"true\";";
		var sState="";
		
		var bSystemDriver=false;
		var bKeepDriver=false;
		var sParamsActive="";
		for (var i=0;i<eTable.attributes.length;i++) {
			var sName=eTable.attributes.item(i).nodeName;
			if(sName.startsWith("aspect")) {
				sName=sName.substring(6);
				if((sName.equalsIgnoreCase("RefreshInterval")) || (sName.equalsIgnoreCase("RefreshWhenHidden")) ||
					(sName.equalsIgnoreCase("RefreshIntervalRemote")) || (sName.equalsIgnoreCase("RefreshWhenHiddenRemote"))) {
					//ignore
				}
				else if(sName.equalsIgnoreCase("FieldPattern")) {
					//ignore 
				}
				else if(sName.equalsIgnoreCase("ID")) {
					//don't pass the table ID to avoid creating unncessary TCacheObj
					// - Do need to pass the ID in case a specified ID is defined.  This may be necessary to avoid a conflict with another element's ID
					// since the driver ID is used when an ID is not specified and the driver ID could be the same as the ID of another html element
					arParams[arParams.length]=sName+": \""+TableID+"intervalrefresh"+"\";";
				}
				else if(sName.equalsIgnoreCase("DisplayID")) {
					if(ADisplayID.length==0) arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
				}
				else if(sName.equalsIgnoreCase("Driver")) {
					sDriverID=eTable.attributes.item(i).nodeValue;
				}
				else if(sName.equalsIgnoreCase("DriverStructID")) {
					sDriverStructID=eTable.attributes.item(i).nodeValue;
				}
				else if(sName.equalsIgnoreCase("SystemDriver")) {
					bSystemDriver=boolVal(eTable.attributes.item(i).nodeValue);
					arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
				}
				else if(sName.equalsIgnoreCase("KeepDriver")) {
					bKeepDriver=boolVal(eTable.attributes.item(i).nodeValue);
					arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
				}
				else if (sName.equalsIgnoreCase("StartRecord")) {
					//arParams[arParams.length]=sName+": \""+iStartRecord+"\";";
				}
				else if(sName.equalsIgnoreCase("DocumentID")) {
					sDocumentID=eTable.attributes.item(i).nodeValue;
				}
				else if(sName.equalsIgnoreCase("Widget")) {
					sWidget=eTable.attributes.item(i).nodeValue;
				}
				else if(sName.equalsIgnoreCase("ContainerItemID")) {
					sContainerItemID=eTable.attributes.item(i).nodeValue;
					//add the container ID to the include tag to maintain compatibility with the original
					//Widget Container 
					arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
				}
				else if(sName.equalsIgnoreCase("State")) {
					sState=eTable.attributes.item(i).nodeValue;
					arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
				}
				else if(sName.equalsIgnoreCase("ParamsActive")) {
					sParamsActive=eTable.attributes.item(i).nodeValue;
					arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
				}
				else if(sName.equalsIgnoreCase("ExternalParams")) {
					//include the original externalparams value
					arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
					
					//add an XExternalParamXXX argument for each external parameter
					if(eTable.attributes.item(i).nodeValue!=null) {
						if(eTable.attributes.item(i).nodeValue.length>0) {
							var arExternalParam=getSubStringArray(eTable.attributes.item(i).nodeValue,",",true);
							if(arExternalParam!=null) {
								for (var j=0;j<arExternalParam.length;j++) {
									var eExternalParam=document.getElementById(arExternalParam[j]);
									if(eExternalParam) {
										var sExternalParam=eExternalParam.getAttribute("param");
										var sExternalParamValue="";
										(eExternalParam.type=="checkbox") ? sExternalParamValue=(eExternalParam.checked) : sExternalParamValue=eExternalParam.value;
										arParams[arParams.length]="XExternalParam"+arExternalParam[j]+": \""+sExternalParam+"^"+sExternalParamValue+"\";";
										//appendToLog("Adding external param: "+arParams[arParams.length-1],false,true);
									}
									else {
										appendToLog("Cannot locate external driver param with ID="+arExternalParam[j]+" in refreshTable()",false,true);
									};
								};
							};
						};
					};
				}
				else {
					arParams[arParams.length]=sName+": \""+replaceAllSubstrings(eTable.attributes.item(i).nodeValue,"#","//ha"+"sh//")+"\";";
				};
			};
		};

		//Use the actual driver ID if one was supplied in DriverStructID.  This is to handle drivers opened using a script in which case the driver ID returned by the script
		//may be different than the original driver ID.  However, use the same ID if it's a system driver because the driver ID in the include tag and the actual driver ID
		//will always be different.
		
		//The KeepDriver argument can also be used to cause the original driver to be used instead of the one in DriverStructID.
		//An example of this is in the POS Viewer which uses Aspect_BackOffice_POSViewer as the driver.  Any number of other drivers might actually
		//be used to create the table depending on the pos and data type.  The KeepDriver argument is used to make sure that Aspect_BackOffice_POSViewer
		//is used as the driver when the table is refreshed.  This became an issue with the Micros E7 interface when temporary system drivers were
		//returned by the call to openDriver in the pos interface.  These system drivers are no longer available when the table is refreshed and
		//a call to Aspect_BackOffice_POSViewer is required.
		((sDriverStructID.length>0) && (bSystemDriver==false) && (bKeepDriver==false) && (sDriverStructID.equalsIgnoreCase("ConsDriverVert")==false) && (sDriverStructID.equalsIgnoreCase("ConsDriverHorz")==false)) ? arParams[arParams.length]="Driver: \""+sDriverStructID+"\";" : arParams[arParams.length]="Driver: \""+sDriverID+"\";";

		//add current display settings
		var bPreserveSettings=true;
		if(bPreserveSettings) {
			var sFilterOptions=getDisplayFormValues(TableID);
			if(sFilterOptions.length>0) {
				var arFilterOptions=getSubStringArray(sFilterOptions,"|",false);
				for(var i=0;i<arFilterOptions.length;i++) {
					var n=arFilterOptions[i].indexOf("=");
					var sName=arFilterOptions[i].substring(0,n);
					if(sName.toUpperCase().startsWith("FIELD_")) sName=sName.substring(6);
					var sValue=arFilterOptions[i].substring(n+1);
					arParams[arParams.length]="XDisplay"+sName+": \""+replaceAllSubstrings(sValue,"#","//ha"+"sh//")+"\";";
				};
			};
		}
		else {
			//get external filters - These need to be included when a table is refreshed by pressing the refresh button 
			var sExternalFilters=getExternalFilters(TableID);
			if(sExternalFilters.length>0) {
				var arExternalFilters=getSubStringArray(sExternalFilters,"|",false);
				for(var i=0;i<arExternalFilters.length;i++) {
					var n=arExternalFilters[i].indexOf("=");
					var sName=arExternalFilters[i].substring(0,n);
					var sValue=arExternalFilters[i].substring(n+1);
					arParams[arParams.length]="XDisplay"+sName+": \""+replaceAllSubstrings(sValue,"#","//ha"+"sh//")+"\";";
				};
			};
		};
		
		//add state tag
		//07-24-2015 - This was modified to set driver params before the state expression is evaluated.    This was necessary when dependent drivers
		//were introduced because the state tag of a dependent driver will often rely on values passed in the driver params like dates, store ID's and such.
		//The state expression now looks like:
		//	setConstant(Param1,Value1)+setConstant(Param2,Value2)+setConstant(Paramn,Valuen)+State Expression
		
		var s="";
		if(sState.length>0) {
			s+="<"+"state"+">";
			var sExpression="";
//appendToLog("sParamsActive="+sParamsActive);
			if(sParamsActive.length>0) {
				var a=getSubStringArray(sParamsActive,"|",false);
				for(var i=0;i<a.length;i++) {
					var n=a[i].indexOf("=");
					if(n>=0) {
						var sName=a[i].substring(0,n);
						var sValue=a[i].substring(n+1);
						if("KEYEXPRESSION|CACHETTL|METADATA".indexOf(sName.toUpperCase())<0) {
							if(sExpression.length>0) sExpression +="+";
							sExpression +="setConstant(\"#"+sName+"\",\""+sValue+"\")"
						};
					};
				};
			};
			if(sExpression.length>0) sExpression +="+";
			sExpression +=sState;
//appendToLog("Expression="+sExpression);
			s +="<"+"include type:expression; expression:"+sExpression+">\r\n";
			s+="<"+"/state"+">";
		};

		arParams.sort();
		s+="<"+"include ";
		for(var i=0;i<arParams.length;i++) {
			s +=" "+arParams[i]+"\r\n";
		};
		s+=">";

		//appendToLog("Submitting include tag: "+s,true,true);
		//for (var i=0;i<arParams.length;i++) appendToLog("Param["+i+"]="+arParams[i]);
		
		var sUrl=getServer()+"/?Network=GreenLight&ID=processContainerItem&Content="+s
		sUrl=sUrl + "&DocumentID="+sDocumentID+"&Widget="+sWidget+"&ContainerItemID="+sContainerItemID;
		sUrl +="&Source="+sHashID;
		sUrl +="&RefreshTableOnInterval=true"
		
		//add a flag used to indicate this is a request to refresh a table on an interval.  This gives a chance to ignore the request
		//if Aspect is too busy.  

		//add params passed to the page when the driver was created.  These are recorded in a div when the table is created
		var ePageArgs=document.getElementById("div"+TableID+"pageargs");
		if(ePageArgs) {
			var sOmit="|NETWORK|ID|DOCUMENTID|WIDGET|CONTAINERITEMID|SOURCE";
			var arPageArgs=getSubStringArray(ePageArgs.innerHTML,"~",false);
			for(var i=0;i<arPageArgs.length;i++) {
				var n=arPageArgs[i].indexOf("=");
				if(n>=0) {
					var sName=arPageArgs[i].substring(0,n);
					if(sOmit.indexOf("|"+sName.toUpperCase())<0) {
						sUrl +="&"+arPageArgs[i];
						//appendToLog("Added pagearg: "+arPageArgs[i]+" n="+n+" sName="+sName);
					}
					else {
						//appendToLog("Omitted pagearg: "+arPageArgs[i]);
					};
				};
			};
		};
		
		//create a div used to hold the refreshed table.  This is a hidden div.  The table will be updated by merging records from the
		//updated table in the hidden div into the original table
		var sHiddenDivID="TableRefreshDiv"+TableID;
		var eRefreshDiv=document.getElementById(sHiddenDivID);
		if(!eRefreshDiv) {
			eRefreshDiv=document.createElement("div");
			eRefreshDiv.setAttribute("id",sHiddenDivID);
			eRefreshDiv.id=sHiddenDivID;
			eRefreshDiv.style.display="none";
			document.body.appendChild(eRefreshDiv);
		};
		
//var sDebug=replaceAllSubstrings(sUrl,"&","<br>"); 
//sDebug=replaceAllSubstrings(sDebug,"\r\n","%"); 
//sDebug=replaceAllSubstrings(sDebug,"<","["); 
//sDebug=replaceAllSubstrings(sDebug,">","]"); 
//showDialog('msg='+sDebug+"&fnOk=close&width=800&height=800");

		//record the url in the table attributes so it doesn't have to be created again the enxt time
		eTable.setAttribute("RefreshOnIntervalUrl",sUrl);

		//add the start record.  This is not saved in the url
		sUrl +="&StartRecord="+iStartRecord;
//appendToLog("Refresh url="+sUrl);
		var sFunc="refreshTableOnInterval(\""+TableID+"\",true)";
		asynchInclude(eRefreshDiv,sUrl,sFunc,sFunc);
	}
	else {
		//appendToLog("Not refreshing table: "+TableID+" because not visible");
		setTimeout("refreshTableOnInterval(\""+TableID+"\")",iInterval);
	};
};

/******************************************************************************
Refreshes the table with the given ID.  This routine is called from a number of sources:
- By paging buttons in the table controls (first, last, next and previous)
- By the refresh button next to the paging buttons
- When a new display is selected above the table
- When okay is pressed on the display dialog

The direction is prev, next, first, last when called by a paging button.  It is 'refresh' all other times.

The DisplayID is blank except when called due to a change in either the selection above the table
or when the okay button is pressed on the display dialog.

If bPreserveSettings is true, the options currently selected for the display
will remain in effect, overriding the saved display.  
******************************************************************************/
function refreshTable(sTableID,sDirection,ADisplayID,bPreserveSettings,b)
{
	var eTable=document.getElementById(sTableID);

	if(b) {
		enableExternalFilters(sTableID,true);
		enableExternalParams(sTableID,true);
		initializeTabbedDialogs(); //initialize tabs in the display dialog

		//update the span containing the time the table was generated
		setTableUpdateTime(eTable);
		
		return;
	};

	//remove existing chart if there is one.  This is necessary because the chart is moved from the original div and
	//appended to the body when it is displayed.  If it is not removed, there will be two charts with the same ID 
	//after the table is refreshed
	var eChart=document.getElementById("chart"+sTableID);
	if(eChart) eChart.parentNode.removeChild(eChart);

	//if sDirection and ADisplayID are not defined, assume it's from an external filter.  This is used below to get the filter options
	//from the current display rather than loading the original display options, as if bPreserveSettings had been set to true
	var bUpdateFromExternalFilter=(!sDirection) && (!ADisplayID);
	
	//Get default values for direction and display ID if not specified.  This allows an external filter to refresh the
	//table by calling refreshTable(TableID)
	if(!sDirection) sDirection="refresh";
	if(!ADisplayID) {
		var e=document.getElementById("SelectDisplay1"+sTableID);
		ADisplayID=(e) ? e.value : "";
	};
	
	//alert("refreshTable TableID="+sTableID+" Direction="+sDirection+" DisplayID="+ADisplayID);

	//appendToLog("refreshTable "+sTableID);
	if(sTableID.length==0) {
		alert("No TableID in refreshTable");
		return;
	};

	var eDiv=document.getElementById("div"+sTableID);

	//abort if surrounding div is not found
	if(!eDiv) {
		alert("Cannot locate table div with ID=div"+sTableID);
		return;
	};

	//abort if table is not found
	if(!eTable) {
		alert("Cannot locate table with ID="+sTableID);
		return;
	};
	
	//abort if table is currently being refreshed
	if(eTable.getAttribute("Loading")=="true") {
		alert("Already loading.  Table ID: "+sTableID);
		return;
	};

	//apply overlay
	applyOverlay(eDiv);
	//applyOverlay(eTable);
	enableExternalFilters(sTableID,false);
	enableExternalParams(sTableID,false);
	
	//disable inputs in table cells
	eTable.setAttribute("Loading","true");
	for(var row=1;row<eTable.rows.length;row++) {
		var eRow=eTable.rows[row];
		for(var col=0;col<eRow.cells.length;col++) {
			var eCell=eRow.cells[col];
			//eCell.style.background="#eeeeee";
			for(var child=0;child<eCell.childNodes.length;child++) {
				var e=eCell.childNodes[child];
				if(e.nodeName.equalsIgnoreCase("input")) {
					e.disabled=true;
				};	
			};
		};
	};

	//set starting record
	var iStartRecord=0;
	if(sDirection) {
		var iMaxRecords=parseInt(eTable.getAttribute("aspectmaxrecords"));
		var iStartRecord=parseInt(eTable.getAttribute("aspectstartrecord"));
		if(sDirection.equalsIgnoreCase("first")) {
			iStartRecord=0;
		}
		else if(sDirection.equalsIgnoreCase("prev")) {
			iStartRecord=iStartRecord -=iMaxRecords;
			if(iStartRecord<0) iStartRecord=0;
		}
		else if(sDirection.equalsIgnoreCase("next")) {
			iStartRecord +=iMaxRecords;
		}
		else if(sDirection.equalsIgnoreCase("last")) {
			iStartRecord="Last";
		}
		else if(sDirection.equalsIgnoreCase("refresh")) {
			//start record remains the same
		};
	};

	//construct a driver include tag to be processed by the server
	var sHashID=eTable.getAttribute("aspectHashID");
	var sDocumentID="";
	var sWidget="";

	//The DriverID is recorded in the table as well as a DriverStructID.  The DriverStructID is the driver that was actually used in creating the table.
	//It is normally the same as the Driver ID.  However, it can be different if the driver is opened using a script driver.  The include tag used to create the table will 
	//contain the original driver ID but TCacheDriver routine needs to know the structure used by the final driver so it can transfer and read/write data.
	var sDriverID="";
	var sDriverStructID="";

	//add the attributes for the table to an array.  The array will be sorted to avoid creating duplicate TCacheObj entries for the same display
	var arParams=new Array();
	
	//add a display ID if one was passed to this function.  This means a display was selected from above
	//the table or Ok was pressed on the display dialog
	if(ADisplayID.length>0) arParams[arParams.length]="DisplayID:\""+ADisplayID+"\";";

	var sState="";
	
	var bSystemDriver=false;
	var bKeepDriver=false;
	var sParamsActive="";
	for (var i=0;i<eTable.attributes.length;i++) {
		var sName=eTable.attributes.item(i).nodeName;
		if(sName.startsWith("aspect")) {
			sName=sName.substring(6);
			if(sName.equalsIgnoreCase("FieldPattern")) {
				//ignore 
			}
			else if(sName.equalsIgnoreCase("ID")) {
				//don't pass the table ID to avoid creating unncessary TCacheObj
				// - Do need to pass the ID in case a specified ID is defined.  This may be necessary to avoid a conflict with another element's ID
				// since the driver ID is used when an ID is not specified and the driver ID could be the same as the ID of another html element
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if(sName.equalsIgnoreCase("DisplayID")) {
				if(ADisplayID.length==0) arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if(sName.equalsIgnoreCase("Driver")) {
				sDriverID=eTable.attributes.item(i).nodeValue;
			}
			else if(sName.equalsIgnoreCase("DriverStructID")) {
				sDriverStructID=eTable.attributes.item(i).nodeValue;
			}
			else if(sName.equalsIgnoreCase("SystemDriver")) {
				bSystemDriver=boolVal(eTable.attributes.item(i).nodeValue);
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if(sName.equalsIgnoreCase("KeepDriver")) {
				bKeepDriver=boolVal(eTable.attributes.item(i).nodeValue);
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if (sName.equalsIgnoreCase("StartRecord")) {
				arParams[arParams.length]=sName+": \""+iStartRecord+"\";";
			}
			else if(sName.equalsIgnoreCase("DocumentID")) {
				sDocumentID=eTable.attributes.item(i).nodeValue;
			}
			else if(sName.equalsIgnoreCase("Widget")) {
				sWidget=eTable.attributes.item(i).nodeValue;
			}
			else if(sName.equalsIgnoreCase("ContainerItemID")) {
				sContainerItemID=eTable.attributes.item(i).nodeValue;
				//add the container ID to the include tag to maintain compatibility with the original
				//Widget Container 
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if(sName.equalsIgnoreCase("State")) {
				sState=eTable.attributes.item(i).nodeValue;
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if(sName.equalsIgnoreCase("ParamsActive")) {
				sParamsActive=eTable.attributes.item(i).nodeValue;
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if(sName.equalsIgnoreCase("ExternalParams")) {
				//include the original externalparams value
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
				
				//add an XExternalParamXXX argument for each external parameter
				if(eTable.attributes.item(i).nodeValue!=null) {
					if(eTable.attributes.item(i).nodeValue.length>0) {
						var arExternalParam=getSubStringArray(eTable.attributes.item(i).nodeValue,",",true);
						if(arExternalParam!=null) {
							for (var j=0;j<arExternalParam.length;j++) {
								var eExternalParam=document.getElementById(arExternalParam[j]);
								if(eExternalParam) {
									var sExternalParam=eExternalParam.getAttribute("param");
									var sExternalParamValue="";
									(eExternalParam.type=="checkbox") ? sExternalParamValue=(eExternalParam.checked) : sExternalParamValue=eExternalParam.value;
									arParams[arParams.length]="XExternalParam"+arExternalParam[j]+": \""+sExternalParam+"^"+sExternalParamValue+"\";";
									//appendToLog("Adding external param: "+arParams[arParams.length-1],false,true);
								}
								else {
									appendToLog("Cannot locate external driver param with ID="+arExternalParam[j]+" in refreshTable()",false,true);
								};
							};
						};
					};
				};
			}
			else {
				arParams[arParams.length]=sName+": \""+replaceAllSubstrings(eTable.attributes.item(i).nodeValue,"#","//ha"+"sh//")+"\";";
			};
		};
	};

	//Use the actual driver ID if one was supplied in DriverStructID.  This is to handle drivers opened using a script in which case the driver ID returned by the script
	//may be different than the original driver ID.  However, use the same ID if it's a system driver because the driver ID in the include tag and the actual driver ID
	//will always be different.
	
	//The KeepDriver argument can also be used to cause the original driver to be used instead of the one in DriverStructID.
	//An example of this is in the POS Viewer which uses Aspect_BackOffice_POSViewer as the driver.  Any number of other drivers might actually
	//be used to create the table depending on the pos and data type.  The KeepDriver argument is used to make sure that Aspect_BackOffice_POSViewer
	//is used as the driver when the table is refreshed.  This became an issue with the Micros E7 interface when temporary system drivers were
	//returned by the call to openDriver in the pos interface.  These system drivers are no longer available when the table is refreshed and
	//a call to Aspect_BackOffice_POSViewer is required.
	((sDriverStructID.length>0) && (bSystemDriver==false) && (bKeepDriver==false) && (sDriverStructID.equalsIgnoreCase("ConsDriverVert")==false) && (sDriverStructID.equalsIgnoreCase("ConsDriverHorz")==false)) ? arParams[arParams.length]="Driver: \""+sDriverStructID+"\";" : arParams[arParams.length]="Driver: \""+sDriverID+"\";";

	//add current display settings
	if((bPreserveSettings) || (bUpdateFromExternalFilter)) {
		var sFilterOptions=getDisplayFormValues(sTableID);
		if(sFilterOptions.length>0) {
			var arFilterOptions=getSubStringArray(sFilterOptions,"|",false);
			for(var i=0;i<arFilterOptions.length;i++) {
				var n=arFilterOptions[i].indexOf("=");
				var sName=arFilterOptions[i].substring(0,n);
				if(sName.toUpperCase().startsWith("FIELD_")) sName=sName.substring(6);
				var sValue=arFilterOptions[i].substring(n+1);
				arParams[arParams.length]="XDisplay"+sName+": \""+replaceAllSubstrings(sValue,"#","//ha"+"sh//")+"\";";
			};
		};
	}
	else {
		//get external filters - These need to be included when a table is refreshed by pressing the refresh button 
		var sExternalFilters=getExternalFilters(sTableID);
		if(sExternalFilters.length>0) {
			var arExternalFilters=getSubStringArray(sExternalFilters,"|",false);
			for(var i=0;i<arExternalFilters.length;i++) {
				var n=arExternalFilters[i].indexOf("=");
				var sName=arExternalFilters[i].substring(0,n);
				var sValue=arExternalFilters[i].substring(n+1);
				arParams[arParams.length]="XDisplay"+sName+": \""+replaceAllSubstrings(sValue,"#","//ha"+"sh//")+"\";";
			};
		};
	};
	
	//add state tag
//appendToLog("State="+sState);	
	//06-26-2015 - This was modified to set driver params before the state expression is evaluated.    This was necessary when dependent drivers
	//were introduced because the state tag of a dependent driver will often rely on values passed in the driver params like dates, store ID's and such.
	//The state expression now looks like:
	//	setConstant(Param1,Value1)+setConstant(Param2,Value2)+setConstant(Paramn,Valuen)+State Expression
	
	var s="";
	if(sState.length>0) {
		s+="<"+"state"+">";
		var sExpression="";
appendToLog("sParamsActive="+sParamsActive);
		if(sParamsActive.length>0) {
			var a=getSubStringArray(sParamsActive,"|",false);
			for(var i=0;i<a.length;i++) {
				var n=a[i].indexOf("=");
				if(n>=0) {
					var sName=a[i].substring(0,n);
					var sValue=a[i].substring(n+1);
					if("KEYEXPRESSION|CACHETTL|METADATA".indexOf(sName.toUpperCase())<0) {
						if(sExpression.length>0) sExpression +="+";
						sExpression +="setConstant(\"#"+sName+"\",\""+sValue+"\")"
					};
				};
			};
		};
		if(sExpression.length>0) sExpression +="+";
		sExpression +=sState;
appendToLog("Expression="+sExpression);
		s +="<"+"include type:expression; expression:"+sExpression+">\r\n";
		s+="<"+"/state"+">";
	};

	arParams.sort();
	s+="<"+"include ";
	for(var i=0;i<arParams.length;i++) {
		s +=" "+arParams[i]+"\r\n";
	};
	s+=">";

	//appendToLog("Submitting include tag: "+s,true,true);
	//for (var i=0;i<arParams.length;i++) appendToLog("Param["+i+"]="+arParams[i]);
	
	showTableMessage(sTableID,"Loading...",true);

	var sUrl=getServer()+"/?Network=GreenLight&ID=processContainerItem&Content="+s;
	sUrl=sUrl + "&DocumentID="+sDocumentID+"&Widget="+sWidget+"&ContainerItemID="+sContainerItemID;
	sUrl +="&Source="+sHashID;
	
	//add params passed to the page when the driver was created.  These are recorded in a div when the table is created
	var ePageArgs=document.getElementById("div"+sTableID+"pageargs");
	if(ePageArgs) {
		var sOmit=new Array("NETWORK","ID","DOCUMENTID","WIDGET","CONTAINERITEMID","SOURCE");
		//appendToLog("innerhtml="+ePageArgs.innerHTML);
		var arPageArgs=getSubStringArray(ePageArgs.innerHTML,"~",false);
		for(var i=0;i<arPageArgs.length;i++) {
			var n=arPageArgs[i].indexOf("=");
			var s=arPageArgs[i].substring(0,n);
			//appendToLog("s="+s);
			if(sOmit.indexOf(s)<0) {
				sUrl +="&"+arPageArgs[i];
				//appendToLog("Added pagearg: "+arPageArgs[i]);
			};
		};
	};
	
//appendToLog("refreshDisplay sUrl="+sUrl,false,true);
	var sFunc="refreshTable(\""+sTableID+"\",\"\",\""+ADisplayID+"\","+bPreserveSettings+",true)";
	asynchInclude(eDiv,sUrl,sFunc,sFunc);
};

function exportTable(sTableID,ADisplayID,bPreserveSettings,sOutput)
{
	if(sOutput) {
		document.getElementById(sTableID).setAttribute("Exporting","false");
		showTableMessage(sTableID,"",false);
		if(true) {
			if (navigator.appName !='Microsoft Internet Explorer'){
				window.open('data:text/csv;charset=utf-8,' + escape(sOutput));
			}  else{
				var popup=window.open('','csv','');
				popup.document.write(sOutput);
			}
		};
		return;
	};

	var sDirection="first";
	
	if(!ADisplayID) {
		var e=document.getElementById("SelectDisplay1"+sTableID);
		ADisplayID=(e) ? e.value : "";
	};
	
	appendToLog("exportTable "+sTableID);
	if(sTableID.length==0) {
		alert("No TableID in exportTable");
		return;
	};

	var eDiv=document.getElementById("div"+sTableID);
	var eTable=document.getElementById(sTableID);

	//abort if surrounding div is not found
	if(!eDiv) {
		alert("Cannot locate table div with ID=div"+sTableID);
		return;
	};

	//abort if table is not found
	if(!eTable) {
		alert("Cannot locate table with ID="+sTableID);
		return;
	};
	
	//abort if table is currently being exported
	if(eTable.getAttribute("Exporting")=="true") {
		alert("Already exporting.  Table ID: "+sTableID);
		return;
	};

	eTable.setAttribute("Exporting","true");

	//set starting record
	var iStartRecord=0;

	//construct a driver include tag to be processed by the server
	var sHashID=eTable.getAttribute("aspectHashID");
	var sDocumentID="";
	var sWidget="";

	//The DriverID is recorded in the table as well as a DriverStructID.  The DriverStructID is the driver that was actually used in creating the table.
	//It is normally the same as the Driver ID.  However, it can be different if the driver is opened using a script driver.  The include tag used to create the table will 
	//contain the original driver ID but TCacheDriver routine needs to know the structure used by the final driver so it can transfer and read/write data.
	var sDriverID="";
	var sDriverStructID="";

	//add the attributes for the table to an array.  The array will be sorted to avoid creating duplicate TCacheObj entries for the same display
	var arParams=new Array();
	
	//add a display ID if one was passed to this function.  This means a display was selected from above
	//the table or Ok was pressed on the display dialog
	if(ADisplayID.length>0) arParams[arParams.length]="DisplayID:\""+ADisplayID+"\";";

	var bSystemDriver=false;
	for (var i=0;i<eTable.attributes.length;i++) {
		var sName=eTable.attributes.item(i).nodeName;
		if(sName.startsWith("aspect")) {
			sName=sName.substring(6);
			if(sName.equalsIgnoreCase("FieldPattern")) {
				//ignore 
			}
			else if(sName.equalsIgnoreCase("ID")) {
				//don't pass the table ID to avoid creating unncessary TCacheObj
				// - Do need to pass the ID in case a specified ID is defined.  This may be necessary to avoid a conflict with another element's ID
				// since the driver ID is used when an ID is not specified and the driver ID could be the same as the ID of another html element
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if(sName.equalsIgnoreCase("DisplayID")) {
				if(ADisplayID.length==0) arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if(sName.equalsIgnoreCase("Driver")) {
				sDriverID=eTable.attributes.item(i).nodeValue;
			}
			else if(sName.equalsIgnoreCase("DriverStructID")) {
				sDriverStructID=eTable.attributes.item(i).nodeValue;
			}
			else if(sName.equalsIgnoreCase("SystemDriver")) {
				bSystemDriver=boolVal(eTable.attributes.item(i).nodeValue);
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if (sName.equalsIgnoreCase("StartRecord")) {
				arParams[arParams.length]=sName+": \""+iStartRecord+"\";";
			}
			else if(sName.equalsIgnoreCase("DocumentID")) {
				sDocumentID=eTable.attributes.item(i).nodeValue;
			}
			else if(sName.equalsIgnoreCase("Widget")) {
				sWidget=eTable.attributes.item(i).nodeValue;
			}
			else if(sName.equalsIgnoreCase("ContainerItemID")) {
				sContainerItemID=eTable.attributes.item(i).nodeValue;
				//add the container ID to the include tag to maintain compatibility with the original
				//Widget Container 
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
			}
			else if(sName.equalsIgnoreCase("ExternalParams")) {
				//include the original externalparams value
				arParams[arParams.length]=sName+": \""+eTable.attributes.item(i).nodeValue+"\";";
				
				//add an XExternalParamXXX argument for each external parameter
				if(eTable.attributes.item(i).nodeValue!=null) {
					var arExternalParam=getSubStringArray(eTable.attributes.item(i).nodeValue,",",true);
					if(arExternalParam!=null) {
						for (var j=0;j<arExternalParam.length;j++) {
							var eExternalParam=document.getElementById(arExternalParam[j]);
							if(eExternalParam) {
								var sExternalParam=eExternalParam.getAttribute("param");
								var sExternalParamValue="";
								(eExternalParam.type=="checkbox") ? sExternalParamValue=(eExternalParam.checked) : sExternalParamValue=eExternalParam.value;
								arParams[arParams.length]="XExternalParam"+arExternalParam[j]+": \""+sExternalParam+"^"+sExternalParamValue+"\";";
								//appendToLog("Adding external param: "+arParams[arParams.length-1]);
							}
							else {
								appendToLog("Cannot locate external driver param with ID="+arExternalParam[j]+" in refreshTable()",false,true);
							};
						};
					};
				};
			}
			else {
				arParams[arParams.length]=sName+": \""+replaceAllSubstrings(eTable.attributes.item(i).nodeValue,"#","//ha"+"sh//")+"\";";
			};
		};
	};

	//Use the actual driver ID if one was supplied in DriverStructID.  This is to handle drivers opened using a script in which case the driver ID returned by the script
	//may be different than the original driver ID.  However, use the same ID if it's a system driver because the driver ID in the include tag and the actual driver ID
	//will always be different.
	((sDriverStructID.length>0) && (bSystemDriver==false) && (sDriverStructID.equalsIgnoreCase("ConsDriverVert")==false) && (sDriverStructID.equalsIgnoreCase("ConsDriverHorz")==false)) ? arParams[arParams.length]="Driver: \""+sDriverStructID+"\";" : arParams[arParams.length]="Driver: \""+sDriverID+"\";";

	//add current display settings
	if(bPreserveSettings) {
		var sFilterOptions=getDisplayFormValues(sTableID);
		var arFilterOptions=getSubStringArray(sFilterOptions,"|",false);
		for(var i=0;i<arFilterOptions.length;i++) {
			var n=arFilterOptions[i].indexOf("=");
			var sName=arFilterOptions[i].substring(0,n);
			if(sName.toUpperCase().startsWith("FIELD_")) sName=sName.substring(6);
			var sValue=arFilterOptions[i].substring(n+1);
			arParams[arParams.length]="XDisplay"+sName+": \""+replaceAllSubstrings(sValue,"#","//ha"+"sh//")+"\";";
		};
	}
	else {
		//get external filters - These need to be included when a table is refreshed by pressing the refresh button 
		var sExternalFilters=getExternalFilters(sTableID);
		if(sExternalFilters.length>0) {
			var arExternalFilters=getSubStringArray(sExternalFilters,"|",false);
			for(var i=0;i<arExternalFilters.length;i++) {
				var n=arExternalFilters[i].indexOf("=");
				var sName=arExternalFilters[i].substring(0,n);
				var sValue=arExternalFilters[i].substring(n+1);
				arParams[arParams.length]="XDisplay"+sName+": \""+replaceAllSubstrings(sValue,"#","//ha"+"sh//")+"\";";
			};
		};
	};

	//add the EXPORTTABLE argument.  This causes the export file to be generated when the include tag is processed
	arParams[arParams.length]="EXPORTTABLE: \"true\";";
	
	//add the type of export (only csv is supported currently)
	arParams[arParams.length]="EXPORTFORMAT: \"csv\";";
				
	arParams.sort();
	var s="<"+"include ";
	for(var i=0;i<arParams.length;i++) s +=" "+arParams[i];
	s+=">";

	//appendToLog("Submitting include tag:",true,true);
	//for (var i=0;i<arParams.length;i++) appendToLog("Param["+i+"]="+arParams[i]);
	
	showTableMessage(sTableID,"Exporting...",true);

	var sUrl=getServer()+"/?Network=GreenLight&ID=processContainerItemAsCsv&Content="+s
	sUrl=sUrl + "&DocumentID="+sDocumentID+"&Widget="+sWidget+"&ContainerItemID="+sContainerItemID;
	sUrl +="&Source="+sHashID;
	appendToLog("sUrl="+sUrl,false,true);
	
	var sFunc="exportTable(\""+sTableID+"\",\""+ADisplayID+"\","+bPreserveSettings+",req.responseText)";
	
	if(false) {
		var doc=window.open("","","toolbar=yes,location=no,directories=yes,menubar=yes,scrollbars=yes,width=500, height=100, left=100, top=25"); 
		doc.document.open(); 
		doc.document.write("Exporting..."); 
		doc.document.location=sUrl;
		doc.document.close(); 
		doc.focus(); 
	};

	asynchInclude(null,sUrl,sFunc,sFunc);
};

/***********************************************************************************
Inserts a new record in a table.  Duplicates the hidden template row and requests a 
new set of values from the server for the template.  Fields initialized in the new 
record are submitted to the server with the associated key value to create the record.  
All fields are submitted simultaneously.  This is necessary to make sure that all 
fields that might be included in the keyexpression are written at one time to avoid
creating more than one record.  More than one record would be created if each value 
was sent separately and the keyexpression referenced more than one field.
***********************************************************************************/
function insertTableRecord(ATableID) 
{
	var table=document.getElementById(ATableID);

	//get the index of the template and add the new row
	var index=-1;
	for (var i=0;i<table.rows.length;i++) {
		var s=table.rows[i].getAttribute("ID");
		if((s) && (s.equalsIgnoreCase("InsertTemplate"+ATableID)))
		{
			var RowTemplate=table.rows[i];

			var s=RowTemplate.getAttribute("IsInitialized");
			if((s) && (s.equalsIgnoreCase("true"))) {
				RowTemplate.setAttribute("IsInitialized","false");
	
				//create a new row and make it visible
				var RowNew=RowTemplate.cloneNode(true);
				RowNew.setAttribute("ID","");
				RowNew.style.display="block";
	
				//insert the row after the first header
				var iInsertAt=getFirstTableHeader(table);
				iInsertAt=(iInsertAt<0) ? i : iInsertAt+1;
				table.insertRow(iInsertAt);
				table.rows[iInsertAt].innerHTML=RowNew.innerHTML;
				
				//copy the attributes from the template
				setAttr(table.rows[iInsertAt],"aspectAllValues",getAttr(RowNew,"aspectAllValues"));
				table.rows[iInsertAt].setAttribute("keyvalue",RowNew.getAttribute("keyvalue"));
				table.rows[iInsertAt].setAttribute("aspectsubtotallevel",RowNew.getAttribute("aspectsubtotallevel"));

				//submit all values in the record
				var sKeyValue=RowNew.getAttribute("keyvalue");
				var sAllFieldID=table.getAttribute("aspectAllFieldID");
				var sAllValue=getAttr(RowNew,"aspectAllValues");
				submitTableData(ATableID,sKeyValue,sAllFieldID,sAllValue);
				
				//set the background color and pending status of all cells being submitted
				var arAllFieldID=getSubStringArray(sAllFieldID,",",true);
				var arAllValue=getSubStringArray(sAllValue,",",true);
				var arTableFieldID=getSubStringArray(table.getAttribute("aspectfields"),",");
				for (var cell=0;cell<table.rows[iInsertAt].cells.length;cell++) {
					var s=table.rows[iInsertAt].cells[cell].getAttribute("cellindex");
					if(s) {
						var iCellIndex=parseInt(s);
						var sFieldID=arTableFieldID[iCellIndex];
						if(arAllFieldID.indexOf(sFieldID)>=0) {
							table.rows[iInsertAt].cells[cell].setAttribute("AspectSubmissionPending","new");
							var Done=false;
							for (var Child=0;(Done==false) && (Child<table.rows[iInsertAt].cells[cell].childNodes.length);Child++) {
								var e=table.rows[iInsertAt].cells[cell].childNodes[Child];
								if((e.nodeName.equalsIgnoreCase("select")) || (e.type=='checkbox') || (e.nodeName.equalsIgnoreCase("input")) || (e.nodeName.equalsIgnoreCase("text")) || (e.nodeName.equalsIgnoreCase("password"))) {
									setPendingSubmissionStyle(e,true,true);
									Done=true;
								}
							};
						};
					};
				};

				//call function to initialize template with new values
				initializeNewRecordTemplate(ATableID);
				return(iInsertAt);
			}
			else {
				alert("An error occurred initializing the new record.  Try again.");
				return(-1);
			};

			//call function to initialize template with new values
			initializeNewRecordTemplate(ATableID);
			return(-1);
		};
	};
	
	alert("Unable to initialize new record.");
	return(-1);
};

/***********************************************************************************
Called by insertTableRecord() to initialize the template with a new set of values 
after it has been used to initialize a new record.
***********************************************************************************/
function initializeNewRecordTemplate(ATableID,sValues)
{
	var table=document.getElementById(ATableID);

	var RowIndex=-1;
	var RowTemplate=null;
	for (var i=0;((RowIndex<0) && (i<table.rows.length));i++) {
		var s=table.rows[i].getAttribute("ID");
		if((s) && (s.equalsIgnoreCase("InsertTemplate"+ATableID))) {
			RowTemplate=table.rows[i];
			RowIndex=i;
		};
	};

	if(RowIndex<0) {
		alert("Cannot locate template for new record");
		return;
	};

	//got values.  Update the template
	if(sValues) {
		appendToLog("initializeNewRecordTemplate got values: "+sValues);
		//don't flag the record as initialized if no values were returned.  This would leave the new record
		//using the same key expression as the previous one.  A counter could be implemented here to 
		//try 2 or 3 times if an error occurs
		if(sValues.length==0) {
			alert("Error initializing defaults for new record");
			return;
		};

		var a=getSubStringArray(sValues,"|",false);

		//update attributes
		RowTemplate.setAttribute("keyvalue",a[0]);
		RowTemplate.setAttribute("aspectAllValues",a[1]);
		//setAttr(RowTemplate,"aspectAllValues",a[1]);

		//update cells
		var arAllFieldID=getSubStringArray(table.getAttribute("aspectallfieldid"),",");
		var arAllValue=getSubStringArray(a[1],",");
		var arTableFieldID=getSubStringArray(table.getAttribute("aspectfields"),",");

		var sDebug="";
		for (var cell=0;cell<table.rows[RowIndex].cells.length;cell++) {
			var s=table.rows[RowIndex].cells[cell].getAttribute("cellindex");
			if(s) {
				var iCellIndex=parseInt(s);
				var sFieldID=arTableFieldID[iCellIndex];
				var Done=false;
				sDebug +=" Cell="+iCellIndex+" FieldID="+sFieldID;
				
				for (var i=0;((Done==false) && (i<arAllFieldID.length));i++) 
				{
					//note: need to allow for full ID in arAllFieldID when looking for a match
					if((arAllFieldID[i].equalsIgnoreCase(sFieldID)) || (arAllFieldID[i].toUpperCase().indexOf("."+sFieldID.toUpperCase())>=0)) {
						sDebug+="childNodes="+table.rows[RowIndex].cells[cell].childNodes.length;
						if(table.rows[RowIndex].cells[cell].childNodes.length==0) {
							table.rows[RowIndex].cells[cell].innerHTML=arAllValue[i];
							sDeubg+=" set Innerhtml";
						}
						else {
							for (var Child=0;Child<table.rows[RowIndex].cells[cell].childNodes.length;Child++) 
							{
								var e=table.rows[RowIndex].cells[cell].childNodes[Child];
								sDebug +=" e["+Child+"].type="+e.type+" e["+Child+"].nodeName="+e.nodeName;
								if(e.nodeName.equalsIgnoreCase("select")) {
									e.value=arAllValue[i];
									sDebug +=" set select";
								}
								else if(e.type=='checkbox') {
									e.checked=(arAllValue[i].equalsIgnoreCase("true"));
									sDebug +=" set checkbox";
								}
								else if(e.nodeName.equalsIgnoreCase("input")) {
									e.value=arAllValue[i];
									sDebug +=" set input";
								}
								else if(e.nodeName.equalsIgnoreCase("text")) {	
									e.innerHTML=arAllValue[i];
									sDebug +=" set text";
								}
								else if(e.nodeName.equalsIgnoreCase("password")) {	
									e.innerHTML=arAllValue[i];
									sDebug +=" set password";
								}
								else {
									sDebug +=" did not set";
								};
							};
						};
						Done=true;
					};
				};
				sDebug +="\r\n";
			};
		};

		//appendToLog(sDebug,false,true);
		table.rows[RowIndex].setAttribute("IsInitialized","true");

		return;
	};

	//make a request to get values for the new record
	var sHashID=table.getAttribute("aspecthashid");
	var sDriverID=table.getAttribute("aspectdriver");

	//These need to use the driver params in place when the table was created
	//var sDriverParams=getTableDriverParams(ATableID);
	var sDriverParams=table.getAttribute("aspectParamsActive");

	var sEmbedValues=table.getAttribute("aspectembedvalues");

	//make a request for a new set of default values
	var sUrl=getServer()+"/?Network=greenlight&ID=getWidget";
	sUrl +="&DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em&Widget=Notification Queries";
	sUrl +="&query=getNewRecordDefaults";
	sUrl +="&source="+sHashID;
	sUrl +="&Driver_ID="+sDriverID;
	sUrl +="&Driver_Params="+sDriverParams;
	sUrl +="&EmbedValues="+sEmbedValues;
	sUrl +="&KeyDescription="+table.getAttribute("aspectkeydescription");
	appendToLog("initializeNewRecordTemplate requesting new record defaults");
	var sFunc="initializeNewRecordTemplate(\""+ATableID+"\",req.responseText)";
	asynchInclude(null,sUrl,sFunc,sFunc);
};

/*************************************************************************************
Parses a time, allowing for HH:mm and HH:mm:ss strings
*************************************************************************************/
function parseTime(s){
	//get millisecond portion.  This is not parsed by javascript and needs to be added back here
	//MM-dd-yyyy HH:mm:ss:SSS-0700
	var sParse=s;
	var Milliseconds=0;
	if(s.length>=23) {
		Milliseconds=parseInt(s.substring(20,23));
		if(sParse.length>24) {
			sParse=replaceAllSubstrings(sParse.substring(0,19),"-","/")+sParse.substring(23,28);
		}
		else {
			sParse=replaceAllSubstrings(sParse.substring(0,19),"-","/");
		};
	}
	else {
		sParse=replaceAllSubstrings(sParse,"-","/");
	};
	
	if((sParse.length==5) && (sParse.charAt(2)==":")) {
		sParse="12/31/1969 "+sParse+":00";
	}
	else if((sParse.length==8) && (sParse.charAt(2)==":")) {
		sParse="12/31/1969 "+sParse;
	};
	
	//alert("parsing "+sParse);
	var dt=new Date(Date.parse(sParse));
	return(new Date(dt.getTime()+Milliseconds));
};

function oldparseTime(s){
	if((s.length==5) && (s.charAt(2)==":")) {
		s="12/31/1969 "+s+":00";
	}
	else if((s.length==8) && (s.charAt(2)==":")) {
		s="12/31/1969 "+s;
	};
	return(new Date(Date.parse(s)));
};

function isNumberField(FieldType) {
	if((FieldType==2) || (FieldType==4) || (FieldType==5) || (FieldType==6) || (FieldType==7) || (FieldType==8) || (FieldType==9) || (FieldType==12)) return(true);
	return(false);
};

function isTimeField(FieldType) {
	if((FieldType==10) || (FieldType==13) || (FieldType==18) || (FieldType==21)) return(true);
	return(false);
};

/**************************************************************************************
Applies a pattern to the value of a field.  
TableID	- Table containing information about the field.  
e		- Control to be formatted.  It can be a form element or a span tag.  The name of the control must
		  be a Field ID.  The field type and pattern are determined using metadata included in the table
sValue 	- An optional value to be formatted.  If a value is not specified, the current value of the control will
		  be used.

AarFieldID,AarFieldType,AarPattern are optional arguments with the only purpose of avoiding calling the 
getSubStringArray every time if many fields are to be formatted at one time by making successive calls to 
this function.
**************************************************************************************/
function formatField(TableID,e,sValue,AarFieldID,AarFieldType,AarPattern)
{
	var table=document.getElementById(TableID);
	var arFieldID=(AarFieldID) ? AarFieldID : getSubStringArray(table.getAttribute("aspectallfieldid"),",",false);
	var arFieldType=(AarFieldType) ? AarFieldType : getSubStringArray(table.getAttribute("aspectallfieldtype"),",",false);
	var arPattern=(AarPattern) ? AarPattern : getSubStringArray(table.getAttribute("aspectAllFieldPattern"),",",false);

	if(arPattern==null) {
		//appendToLog("No patterns defined for table",false,true);
		return(sValue);
	};
	
	var sFieldID=e.getAttribute("name");
	var sResult="";
	
	//NOTE: An empty string passed in sValue will be considered as not defined and the current value of the element will be used
	//as the starting point.  This is a problem when called from setDialogValues() unless the field is set to the new value
	//before calling this function
	if(sValue) {
		sResult=sValue;
	}
	else {
		sResult=((e.nodeName.equalsIgnoreCase("text")) || (e.nodeName.equalsIgnoreCase("password"))) ? e.innerHTML : e.value;
		if((!sResult) || (sResult.equalsIgnoreCase("undefined"))) sResult="";
	};
	if(sFieldID) {
		var n=getFieldIndex(sFieldID,arFieldID);
		if(n>=0) {
			var iFieldType=arFieldType[n];
			var sPattern=arPattern[n];
			
			//if no pattern is defined, see if one is specified in the element
			if(e.getAttribute("pattern")) sPattern=e.getAttribute("pattern");
//appendToLog("formatField ID="+sFieldID+" pattern="+sPattern+" FieldType="+iFieldType,false,true);
			
			if(isNumberField(iFieldType)) {
				if(sPattern.length==0) {
					if((iFieldType==8) || (iFieldType==9) || (iFieldType==12)) {
						sPattern="999|999|999.00";
					}
					else {
						sPattern="999|999|999";
					};
				};
				if(sResult.length==0) sResult=0;
//appendToLog("formatNumber sResult="+sResult+" Pattern="+sPattern);
				sResult=formatNumber(sResult,sPattern);
//appendToLog("Formatted result="+sResult);
			}
			else if(isTimeField(iFieldType)) {
				if(sPattern.length==0) {
					if((iFieldType==13) || (iFieldType==21)) {
						sPattern="MM-dd-yyyy HH:mm:ss";
					}
					else if(iFieldType==10) {
						sPattern="MM-dd-yyyy";
					}
					else if(iFieldType==18) {
						sPattern="HH:mm:ss";
					};
				};

				//prepare the string for parsing.  Dashes are not allowed and the 
				//trailing milliseconds :000 must be removed
				//var s=replaceAllSubstrings(sResult,"-","/");
				//if(s.length>19) s=s.substring(0,19);
				var dt=parseTime(sResult);
//appendToLog("foematField dt="+dt+" Pattern="+sPattern,false,true);
//alert("dt="+dt);
//alert("formatDate="+formatDate(dt,sPattern));
				sResult=formatDate(dt,sPattern);
//appendToLog("formatField sResult="+sResult,false,true);
			};
		};
	};
	
	return(sResult);
};

/******************************************************************************************
Returns the select box in the dialog header containing the collection of key descriptions
******************************************************************************************/
function getTableDialogHeaderSelectKeyControl(eDialog) { 
	var arSelect=eDialog.getElementsByTagName("select");
	var Done=false;
	for (var i=0;(Done==false) && (i<arSelect.length);i++) {
		var s=arSelect[i].getAttribute("name");
		if((s) && (s.equalsIgnoreCase("selectKeyValue"))) return(arSelect[i]);
	};
};

function initializeTableDialogHeader(TableID,DialogID,KeyValue)
{
	//get the dialog
	var eDialog=document.getElementById(DialogID);
	if(!eDialog) return;

	//determine if the dialog header should be hidden
	table=document.getElementById(TableID);
	var s=table.getAttribute("aspectdialogheader");
	var bShowHeader=((!s) || (s.equalsIgnoreCase("true"))) ? true : false;

	//see if the header template exists
	var eHeader=document.getElementById("EditDialogHeaderTemplate"+TableID);
	if(!eHeader) {
		var e=document.getElementById("EditDialogHeader"+TableID);
		if(e) {
			var arSelect=eDialog.getElementsByTagName("select");
			if(arSelect) {
				var Done=false;
				for (var i=0;(Done==false) && (i<arSelect.length);i++) {
					var s=arSelect[i].getAttribute("name");
					if((s) && (s.equalsIgnoreCase("selectKeyValue"))) {
						arSelect[i].value=KeyValue;
						Done=true;
					};
				};
			};
			
			setVisible("EditDialogHeader"+TableID,bShowHeader);
		};
		return;
	};

	//remove the copy if one exists
	var ePreviousHeader=document.getElementById("EditDialogHeader"+TableID);
	if(ePreviousHeader) {
		ePreviousHeader.parentNode.removeChild(ePreviousHeader);
	};

	//copy the template to the dialog
	eHeader.id="EditDialogHeader"+TableID;
	eHeader.setAttribute("id","EditDialogHeader"+TableID);
	eHeader.style.display="block";
	eHeader.parentNode.removeChild(eHeader);
	eDialog.insertBefore(eHeader,eDialog.childNodes[0]);

	var arSelect=eDialog.getElementsByTagName("select");
	if(arSelect) {
		var Done=false;
		for (var i=0;(Done==false) && (i<arSelect.length);i++) {
			var s=arSelect[i].getAttribute("name");
			if((s) && (s.equalsIgnoreCase("selectKeyValue"))) {
				arSelect[i].value=KeyValue;
				Done=true;
			};
		};
	};

	setVisible("EditDialogHeader"+TableID,bShowHeader);
};

/***********************************************************************************************
Updates the select box in the dialog header so it reflects the records in the table.  
Called when records are inserted or deleted.  The KeyValue of the dialog is used to 
set the current selection so it must be set before calling this function/
***********************************************************************************************/
function updateTableDialogHeader(TableID)
{
	var table=document.getElementById(TableID);
	var eDialog=document.getElementById(table.getAttribute("EditDialogID"));
	var eHeader=document.getElementById("EditDialogHeader"+TableID);
	
	//make collection of all keyvalues in the table
	var arKeyValues=new Array();
	var arKeyDescription=new Array();
	for (var row=0;row<table.rows.length;row++) {
		var s=table.rows[row].getAttribute("keyvalue");
		if(s) {
			if((tableRowIsTemplate(table.rows[row])==false) && (tableRowIsDeleted(table.rows[row])==false)) {
				arKeyValues[arKeyValues.length]=s;
				arKeyDescription[arKeyDescription.length]=table.rows[row].getAttribute("keydescription");
			};
		};
	};

	//get the select box in the header.  Look for the first select box since there may be more than one
	//if an edit dialog contains another table inside of it
	var eSelect=null;
	var arSelect=eHeader.getElementsByTagName("select");
	var Done=false;
	for (var i=0;(Done=false) && (i<arSelect.length);i++) {
		var s=arSelect[i].getAttribute("name");
		if((s) && (s.equalsIgnoreCase("selectKeyValue"))) {
			eSelect=arSelect[i];
			Done=true;
		};
	};

	//remove any options that no longer exist in the table and make an array of existing options
	var arOptionValue=new Array();
	var arOptionText=new Array();
	var iOption=0;
	while(iOption<eSelect.options.length) {
		if(arKeyValues.indexOf(eSelect.options[iOption].value)<0) {
			eSelect.remove(iOption);
		}
		else {
			arOptionValue[arOptionValue.length]=eSelect.options[iOption].value;
			arOptionText[arOptionText.length]=eSelect.options[iOption].text;
			iOption++;
		};
	};

	//insert any elements that exist in the table but not in the select box
	for(var i=0;i<arKeyValues.length;i++) {
		if(arOptionValue.indexOf(arKeyValues[i])<0) 
		{
			//don't add the option if another option with the same key description exists.
			//The list is initially created by the driver include which does not allow duplicates
			//Adding them here would be confusing
			if(arOptionText.indexOf(arKeyDescription[i])<0) {
				var eNewOption=document.createElement('option');
				eNewOption.text=arKeyDescription[i];
				eNewOption.value=arKeyValues[i];
				if(eSelect.options.length==0) {
					try {
						eSelectadd(eNewOption, null); // standards compliant; doesn't work in IE
					}
					catch(e1) {
						eSelect.add(eNewOption); // IE only
					};
				}
				else {
					var eFirstOption=eSelect.options[0];  //could use eSelect.selectedIndex
					try {
						eSelect.add(eNewOption, eFirstOption); // standards compliant; doesn't work in IE
					}
					catch(ex) {
						eSelect.add(eNewOption, 0); // IE only
					};
				};
			};
		};
	};

	//set the selected option
	eSelect.value=eDialog.getAttribute("keyvalue");
};

function dialogRecordSelected(e)
{
	var eDialog=getDialogNode(e);
	if(eDialog==null) {
		alert("Cannot locate dialog");
		return;
	};

	//get the table
	var sTableID=eDialog.getAttribute("TableID");
	var table=document.getElementById(sTableID);
	
	//get the value selected
	var sKeyValue=e.value;

	//get the row containing the selected key value
	var iToDisplay=getTableRowContainingKey(table,sKeyValue);
	if(iToDisplay>=0) {
		var arFieldID=getSubStringArray(table.getAttribute("aspectAllFieldID"),",",true);
		var arValues=getSubStringArray(getAttr(table.rows[iToDisplay],"aspectAllValues"),",",true);
		for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i],false);
		eDialog.setAttribute("keyvalue",table.rows[iToDisplay].getAttribute("keyvalue"));
		setDialogValues(sTableID,eDialog,arFieldID,arValues);

		//call initialization function for dialog if one is defined
		var sDialogID=table.getAttribute("editdialogid");
		var s="initializeDialog"+sDialogID;
		if(eval('typeof '+s)=="function") eval(s+"()");
		
		//look for initialization function in the aspectinit attribute of the div
		//This is used so a single function can be called even when the dialog ID is random
		//The ID of the dialog div is passed as an argument.  Additional arguments can be
		//made available to the function by including them in the dialog div's attributes or
		//as hidden inputs inside the dialog.
		var s=eDialog.getAttribute("aspectinit");
		if(s) {
			if(eval('typeof '+s)=="function") eval(s+"('"+sDialogID+"')");
		};
	};
};

/***********************************************************************
Climbs the parent tree for the given element to locate the dialog containing the element.
***********************************************************************/
function getDialogNode(e)
{
	var eDialog=null;
	var node=e;
	while((eDialog==null) && (e.parentNode)) {
		if(node.getAttribute) {
			if(node.getAttribute("TableID")) return(node);
		};
		node=node.parentNode;
	};
	return(null);
};

/***********************************************************************
Returns the index of the row matching the given key value
***********************************************************************/
function getTableRowContainingKey(table,KeyValue)
{
	for (var i=0;i<table.rows.length;i++) {
		var s=table.rows[i].getAttribute("keyvalue");
		if((s) && (s.equalsIgnoreCase(KeyValue))) return(i);
	};
	return(-1);
};

/***********************************************************************
Returns the first row in the table containing a record detail or subtotal.   Does not include
the template used for new records or section headers
***********************************************************************/
function getFirstTableRow(table,bIncludeSubtotal,StartIndex)
{
	var n=0;
	if(StartIndex) n=StartIndex;
	for (var i=n;i<table.rows.length;i++) {
		if((tableRowIsTemplate(table.rows[i])==false) && (tableRowIsDeleted(table.rows[i])==false)) {
			var s=table.rows[i].getAttribute("AspectSubtotalLevel");
			if(s) {
				if((parseInt(s)<0) || (bIncludeSubtotal)) return(i);
			};
		};
	};
	return(-1);
};

/***********************************************************************
Returns the last row in the table containing a record detail or subtotal.   Does not include
the template used for new records or section headers
***********************************************************************/
function getLastTableRow(table,bIncludeSubtotal)
{
	for (var i=table.rows.length-1;i>=0;i--) {
		if((tableRowIsTemplate(table.rows[i])==false) && (tableRowIsDeleted(table.rows[i])==false)) {
			var s=table.rows[i].getAttribute("AspectSubtotalLevel");
			if(s) {
				if((parseInt(s)<0) || (bIncludeSubtotal)) return(i);
			};
		};
	};
	return(-1);
};

/***********************************************************************
Returns the next row in the table containing a record detail or subtotal beginning with
StartIndex+1.   Does not include the template used for new records or section headers
***********************************************************************/
function getNextTableRow(table,StartIndex,bIncludeSubtotal)
{
	for (var i=StartIndex+1;i<table.rows.length;i++) {
		if((tableRowIsTemplate(table.rows[i])==false) && (tableRowIsDeleted(table.rows[i])==false)) {
			var s=table.rows[i].getAttribute("AspectSubtotalLevel");
			if(s) {
				if((parseInt(s)<0) || (bIncludeSubtotal)) return(i);
			};
		};
	};
	return(-1);
};

/***********************************************************************
Returns the previous row in the table containing a record detail or subtotal beginning with
StartIndex-1.   Does not include the template used for new records or section headers
***********************************************************************/
function getPrevTableRow(table,StartIndex,bIncludeSubtotal)
{
	for (var i=StartIndex-1;i>=0;i--) {
		if((tableRowIsTemplate(table.rows[i])==false) && (tableRowIsDeleted(table.rows[i])==false)) {
			var s=table.rows[i].getAttribute("AspectSubtotalLevel");
			if(s) {
				if((parseInt(s)<0) || (bIncludeSubtotal)) return(i);
			};
		};
	};
	return(-1);
};

function updateDialogRecord(e,Direction)
{
	//get the dialog the element belongs to
	var eDialog=getDialogNode(e);
	if(eDialog==null) {
		appendToLog("Error getting dialog in updateDialogRecord",false,true);
		return;
	};

	//get the table
	var sTableID=eDialog.getAttribute("TableID");
	var table=document.getElementById(sTableID);

	//get the select box
	var eSelect=null;
	var arSelect=eDialog.getElementsByTagName("select");
	var Done=false;
	for (var i=0;(Done==false) && (i<arSelect.length);i++) {
		var s=arSelect[i].getAttribute("name");
		if((s) && (s.equalsIgnoreCase("selectKeyValue"))) {
			eSelect=arSelect[i];
			Done=true;
		};
	};

	//determine the row to be displayed
	var sNewKeyValue="";
	if(Direction.equalsIgnoreCase("first")) {
		if(eSelect.options.length>0) sNewKeyValue=eSelect.options[0].value;
	}
	else if (Direction.equalsIgnoreCase("last")) {
		if(eSelect.options.length>0) sNewKeyValue=eSelect.options[eSelect.length-1].value;
	}
	else {
		for(var i=0;(sNewKeyValue.length==0) && (i<eSelect.options.length);i++) {
			if(eSelect.options[i].value.equalsIgnoreCase(eSelect.value)) {
				if (Direction.equalsIgnoreCase("next")) {
					if(i<eSelect.options.length-1) sNewKeyValue=eSelect.options[i+1].value;
				}
				else if (Direction.equalsIgnoreCase("prev")) {
					if(i>0) sNewKeyValue=eSelect.options[i-1].value;
				};
			};
		};
	};
	
	if(sNewKeyValue.length>=0) {
		var iNewRow=getTableRowContainingKey(table,sNewKeyValue);
		if(iNewRow>=0) 
		{
			//update the keyvalue in the dialog attributes
			eDialog.setAttribute("keyvalue",sNewKeyValue);

			//update the select box
			eSelect.value=sNewKeyValue;
			
			//set the values in the dialog
			var arFieldID=getSubStringArray(table.getAttribute("aspectAllFieldID"),",",true);
			var arValues=getSubStringArray(getAttr(table.rows[iNewRow],"aspectAllValues"),",",true);
			for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i],false);
			setDialogValues(sTableID,eDialog,arFieldID,arValues);

			//call initialization functino for dialog if one is defined
			var sDialogID=table.getAttribute("editdialogid");
			var s="initializeDialog"+sDialogID;
			if(eval('typeof '+s)=="function") eval(s+"()");
			
			//look for initialization function in the aspectinit attribute of the div
			//This is used so a single function can be called even when the dialog ID is random
			//The ID of the dialog div is passed as an argument.  Additional arguments can be
			//made available to the function by including them in the dialog div's attributes or
			//as hidden inputs inside the dialog.
			var s=eDialog.getAttribute("aspectinit");
			if(s) {
				if(eval('typeof '+s)=="function") eval(s+"('"+sDialogID+"')");
			};
		};
	};
};

function closeTableEditDialog(e)
{
	var eDialog=getDialogNode(e);
	if(eDialog) setVisible(eDialog,false);
};

/********************************************************************
Returns the index of the first row in the table containing headers
********************************************************************/
function getFirstTableHeader(table)
{
	//skip the first record which is table controls
	for (var i=1;i<table.rows.length;i++) {
		if(table.rows[i].cells.length>0) {
			if(table.rows[i].cells[0].nodeName.equalsIgnoreCase("th")) return(i);
		};
	};
	return(-1);
};

/********************************************************************
Displays a message in the dialog used to edit table records when the table contains
no records
********************************************************************/
function disableTableDialog(ATableID) 
{
	//get the ID of the dialog
	var table=document.getElementById(ATableID);
	var eDialog=document.getElementById(table.getAttribute("EditDialogID"));
	
	//abort if dialog does not exist.  This will happen if canEdit is false in the driver include.
	if(!eDialog) return;
	
	var eHeader=document.getElementById("EditDialogHeader"+ATableID);
	if(!eHeader) eHeader=document.getElementById("EditDialogHeaderTemplate"+ATableID);
	
	//create a div and overlay it to hide the dialog contents
	var div=document.createElement("div");
	var sDivID="EditDialogDisable"+ATableID;
	div.setAttribute("id",sDivID);
	div.id=sDivID;

	//size and position the div
	div.style.position="fixed";
	div.style.height=eDialog.offsetHeight;
	if(eHeader) div.style.height -=eHeader.offsetHeight;
	div.style.width=eDialog.offsetWidth;
	var xy=getPosition2012(eDialog,"fixed");
	div.style.top=(xy[1]+eHeader.offsetHeight)+"px";
	div.style.left=xy[0]+"px";
	div.style.zIndex="99";
	div.style.backgroundColor="white";
	div.innerHTML="Table is not initialized";

	eDialog.insertBefore(div,eDialog.childNodes[0]);
	setVisible(div,true);
};

/********************************************************************
Initializes new tables.  Called by the widget container whenever content is loaded.
Initializes the edit dialog header and sets the dialog to the first record in the table
********************************************************************/
function initializeTables2012()
{
	if(!bContainerLoaded) return;

	addScripts();
	addStyles();
	
	//appendToLog("initializeTables2012 bContainerLoaded="+bContainerLoaded,false,true);
	//create an array of ID's for all tables to be updated.  Can't just iterate through an
	//array of tables and updating as they're found because table[n] changes to point
	//to a new table when the dialog header is moved.  E.g. table[18] may become table[17]
	//right in the middle of this function
	var arTable=document.getElementsByTagName("table");
	var arTableID=new Array();
	for (var i=0;i<arTable.length;i++) {
		if(arTable[i].getAttribute("aspectAllFieldID")) {
			var s=arTable[i].getAttribute("TableInitialized");
			if((!s) || (s.equalsIgnoreCase("true")==false)) {
//appendToLog("Initializing table "+arTable[i].getAttribute("id")+" s="+s,false,true);
				arTableID[arTableID.length]=arTable[i].getAttribute("id");

				//update the span containing the time the table was generated
				//this only updates tables that haven't already been initialized
				if(arTable[i].id) setTableUpdateTime(arTable[i]);
			};
		}
		else {
			//update the span containing the time the table was generated
			//this is needed to update the time in tables that don't have an aspectAllFieldID
			//when is not defined when the table is not editable
			if(arTable[i].id) {
				if(!arTable[i].getAttribute("TimeInitialized")) {
					setTableUpdateTime(arTable[i]);
				};
			};
		};
	};

	if(arTableID.length==0) return;
	
	for(var i=0;i<arTableID.length;i++) 
	{
		var table=document.getElementById(arTableID[i]);
		var sDialogID=table.getAttribute("editdialogid");
		var iFirstRow=getFirstTableRow(table,false);
		var sKeyValue="";
		if(iFirstRow>=0) sKeyValue=table.rows[iFirstRow].getAttribute("keyvalue");
		initializeTableDialogHeader(arTableID[i],sDialogID,sKeyValue);

		//set the table ID and KeyValue in the dialog
		if((sDialogID) && (sDialogID.length>0)) {
			var eDialog=document.getElementById(sDialogID);
			if(eDialog) {
				eDialog.setAttribute("TableID",arTableID[i]);
				eDialog.setAttribute("KeyValue",sKeyValue);
			}
			else {
				//appendToLog("Invalid edit dialog ID in initializeTables2012().  TableID: "+arTableID[i]);
			};
		};

		if(iFirstRow>=0) 
		{
			var arFieldID=getSubStringArray(table.getAttribute("aspectAllFieldID"),",",true);
			var arFieldType=getSubStringArray(table.getAttribute("aspectAllFieldType"),",",true);
			var arValues=getSubStringArray(getAttr(table.rows[iFirstRow],"aspectAllValues"),",",true);
			if(arValues!=null) {
				for(var j=0;j<arValues.length;j++) arValues[j]=tokenizeTableValue(arValues[j],false);
		
				//set value of all elements in the dialog
				if(eDialog) {
					setDialogValues(arTableID[i],eDialog,arFieldID,arValues);

					//call initialization functino for dialog if one is defined
					var s="initializeDialog"+sDialogID;
					if(eval('typeof '+s)=="function") eval(s+"()");

					//look for initialization function in the aspectinit attribute of the div
					//This is used so a single function can be called even when the dialog ID is random
					//The ID of the dialog div is passed as an argument.  Additional arguments can be
					//made available to the function by including them in the dialog div's attributes or
					//as hidden inputs inside the dialog.
					var s=eDialog.getAttribute("aspectinit");
					if(s) {
						if(eval('typeof '+s)=="function") eval(s+"('"+sDialogID+"')");
					};
				};
			};
		}
		else {
			disableTableDialog(arTableID[i]);
		};
	
		//set the attribute indicating the table has been initialized
		table.setAttribute("TableInitialized","true");
	};
	
	//add javascript for tables.  When a table is generated, associated javascript (if any) is included with
	//the table in a <script> element.  The ID of the script element is _JS[tableID].  This script element is
	//moved to the <head> element and the underscore is removed from the ID.  If the table is loaded again,
	//the sceipt element is just deleted if it already exists in the head element
	for(var i=0;i<arTableID.length;i++) 
	{
		var e=document.getElementById("_js"+arTableID[i]);
		if(e) {
			//a script element is included with the table.  Remove it and add it to the <head> element if it doesn't already exist
			e.parentNode.removeChild(e);

			//remove the current javascript element from the head when in development mode so changes to the code are reflected during development
			if("{ExecMode}".equalsIgnoreCase("Development")) {
				var eCurrent=document.getElementById("js"+arTableID[i]);
				if(eCurrent) eCurrent.parentNode.removeChild(eCurrent);
			};

			if(!document.getElementById("js"+arTableID[i])) {
				//add it to the <head> element
				var eScript=document.createElement("script");
				eScript.id="js"+arTableID[i];

				//For IE, set the src of the script.  Another http request will be made to get the script
				if (getBrowserName().toUpperCase().indexOf("EXPLORER")>=0) {
					var s=e.getAttribute("_url");
					eScript.setAttribute("src",replaceAllSubstrings(s,"__Request"+"Server__",getServer()));
				}
				else {
					//otherwise, just include the script directly in the tag
					eScript.innerHTML=replaceAllSubstrings(e.innerHTML,"&amp;","&");
				};
				document.getElementsByTagName("head")[0].appendChild(eScript);
			};
		};
	};
};

/********************************************************************
Adds scripts included in widgets to the document's head element.
Called by initializeTables2012() whenever content is loaded
********************************************************************/
function addScripts() {
	var arScript=document.body.getElementsByTagName("script");
	if(arScript) {
		for(var i=0;i<arScript.length;i++) {
			var ScriptID="$$JS"+arScript[i].id;
			
			//remove the current javascript element from the head when in development mode so changes to the code are reflected during development
			if("{ExecMode}".equalsIgnoreCase("Development")) {
				var eCurrent=document.getElementById(ScriptID);
				if(eCurrent) {
					eCurrent.parentNode.removeChild(eCurrent);
				};
			};

			if(!document.getElementById(ScriptID)) {
				//add it to the <head> element
				var eScript=document.createElement("script");
				eScript.id=ScriptID;

				//For IE, set the src of the script.  Another http request will be made to get the script
				if (getBrowserName().toUpperCase().indexOf("EXPLORER")>=0) {
					var s=arScript.getAttribute("_url");
					eScript.setAttribute("src",replaceAllSubstrings(s,"__Request"+"Server__",getServer()));
				}
				else {
					//otherwise, just include the script directly in the tag
					eScript.innerHTML=replaceAllSubstrings(arScript[i].innerHTML,"&amp;","&");
				};
				document.getElementsByTagName("head")[0].appendChild(eScript);
			};
		};
	};
};

/********************************************************************
Adds styles included in widgets to the document's head element.
Called by initializeTables2012() whenever content is loaded
********************************************************************/
function addStyles() {
	var arStyle=document.body.getElementsByTagName("style");
	if(arStyle) {
		for(var i=0;i<arStyle.length;i++) {
			var StyleID="$$JS"+arStyle[i].id;
			
			//remove the current javascript element from the head when in development mode so changes to the code are reflected during development
			if("{ExecMode}".equalsIgnoreCase("Development")) {
				var eCurrent=document.getElementById(StyleID);
				if(eCurrent) {
					eCurrent.parentNode.removeChild(eCurrent);
				};
			};

			if(!document.getElementById(StyleID)) {
				//add it to the <head> element
				var eStyle=document.createElement("style");
				eStyle.id=StyleID;

				//For IE, set the src of the style.  Another http request will be made to get the style
				if (getBrowserName().toUpperCase().indexOf("EXPLORER")>=0) {
					var s=arStyle.getAttribute("_url");
					eStyle.setAttribute("src",replaceAllSubstrings(s,"__Request"+"Server__",getServer()));
				}
				else {
					//otherwise, just include the style directly in the tag
					eStyle.innerHTML=replaceAllSubstrings(arStyle[i].innerHTML,"&amp;","&");
				};
				document.getElementsByTagName("head")[0].appendChild(eStyle);
			};
		};
	};
};

/********************************************************************
Sets the date/time in the table header
********************************************************************/
function setTableUpdateTime(Table)
{
	if(!Table) return;
	if(Table.id.length>0) {
		var e=document.getElementById("table_updated_"+Table.id);
		if(e) {
			e.innerHTML=formatDate(new Date(),"MM-dd-yyyy HH:mm:ss");
		};
	};
	Table.setAttribute("TimeInitialized","true");
};

/********************************************************************
Sets the style of a control to indicate that data submission is pending or complete
********************************************************************/
function setPendingSubmissionStyle(e,bIsTableCell,bPending)
{
	var sDebugName=(e.getAttribute) ? e.getAttribute("name") : "undefined";
	//appendToLog("setPendingSubmissionStyle e="+e+" IsTableCell="+bIsTableCell+" Pending="+bPending+" Name="+sDebugName,false,true);
	var eToSet=e;
	if(eToSet.type=="checkbox") eToSet=eToSet.parentNode;
	if(bPending) {
		if(eToSet.style) {
			var c=getComputedStyle(eToSet).backgroundColor;
			if(!eToSet.getAttribute("NonPendingBackgoundColor")) {
				eToSet.setAttribute("NonPendingBackgoundColor",c);
				//appendToLog("Saving background color: "+c,false,true);
			};
			eToSet.style.backgroundColor=PendingSubmissionBackgroundColor;
		}
		else {
			appendToLog("Cannot set style for type="+e.type+" nodeName="+e.nodeName,false,true);
		};
	}
	else {
		if(eToSet.style) {
			//eToSet.style.backgroundColor="white";
			var c=eToSet.getAttribute("NonPendingBackgoundColor");
//appendToLog("Setting background color to "+c,false,true);
			if(c) {
				eToSet.style.backgroundColor=c;
			}
			else {
				eToSet.style.backgroundColor="white";
			};
		}
		else {
			appendToLog("Cannot set style for type="+e.type+" nodeName="+e.nodeName,false,true);
		};
	};
};

/********************************************************************
Returns the index of the given FieldID in the given array of Field ID's.
Takes into account that the FieldID may not be the full ID
********************************************************************/
function getFieldIndex(FieldID,arFieldID)
{
	if(!arFieldID) {
		appendToLog("arFieldID is null in getFieldIndex");
		return(-1);
	};
	
	var n=arFieldID.indexOf(FieldID);
	
	/**************************************************************
	The following section is just to test for problems with FullID vs ID
	When debugged, only the above line is required
	**************************************************************/
	var sID=FieldID;
	var Match=-1;
	while(sID.indexOf(".")>=0) sID=sID.substring(sID.indexOf(".")+1);
	for(var i=0;((Match<9) && (i<arFieldID.length));i++) {
		var s=arFieldID[i];
		while(s.indexOf(".")>=0) s=s.substring(s.indexOf(".")+1);
		if(sID.equalsIgnoreCase(s)) Match=i;
	};

	if(n!=Match) {
		if(Match>=0) {
			appendToLog("getFieldIndex error n="+n+" Match="+Match+" For FieldID="+FieldID+" Match="+arFieldID[Match]+" Fields="+arFieldID);
		}
		else {
			appendToLog("getFieldIndex error n="+n+" Match="+Match+" For FieldID="+FieldID+" Fields="+arFieldID);
		};
	};
	return(Match);
};

/********************************************************************
Updates all cells in a table row to reflect the values in the aspectallvalues attribute.
Called after data has been edited and when new data is requested from the driver.
if AExcludeInputs is true, input fields will be excluded from the update.  This is
done to avoid overwriting changes to fields that may not have been submitted yet.  This
can be a problem if several fields are edited successively.
********************************************************************/
function updateCellsInRecord(table,AKeyValue,AExcludeInputs)
{
	var bExcludeInputs=((AExcludeInputs) && (AExcludeInputs==true));
	
	appendToLog("updateCellsInRecord AKeyValue="+AKeyValue);
	
	//check for aspectallfieldid attribute.  This attribute will not be defined if editing is not enabled for the table.
	if(!table.getAttribute("aspectallfieldid")) {
		appendToLog("Error in updateCellsInRecord(): aspectallfieldid not defined.  Make sure that editing is enabled for the table",false,true);
		return;
	};
	
	var arAllFieldID=getSubStringArray(table.getAttribute("aspectallfieldid"),",",false);
	var arAllFieldType=getSubStringArray(table.getAttribute("aspectallfieldtype"),",",false);
	var arAllPattern=getSubStringArray(table.getAttribute("aspectAllFieldPattern"),",",false);

	var arTableFields=getSubStringArray(table.getAttribute("aspectfields"),",",true);
	var arFieldID=getSubStringArray(table.getAttribute("aspectallfieldid"),",",true);
	var row=getTableRowContainingKey(table,AKeyValue);
	var arValues=getSubStringArray(getAttr(table.rows[row],"aspectAllValues"),",",true);
	for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i],false);

	//The aspecthtmlvalues attribute is set after a record has been edited using values returned from getRecordValues.
	//The aspectallvalues attribute contains data read using getField().  The aspecthtmlvalues attribute contains data
	//read using getFieldForHtml.  It should be used to set the value of table cells if it's available.
	var arHtmlValues=null;
	if(table.rows[row].getAttribute("aspecthtmlvalues")) {
		arHtmlValues=getSubStringArray(table.rows[row].getAttribute("aspecthtmlvalues"),",",true);
		for(var i=0;i<arHtmlValues.length;i++) arHtmlValues[i]=tokenizeTableValue(arHtmlValues[i],false);
	};
	
	for (var cell=0;cell<table.rows[row].cells.length;cell++) 
	{
		//or some reason, IE returns a value of 0 or 1 for the columns containing the select checkbox and edit icon.
		//get the name to deal with this.  The name should be null for every cell except those two.
		var s=table.rows[row].cells[cell].getAttribute("cellIndex");
		var sName=table.rows[row].cells[cell].getAttribute("name");
		if((!sName) && (s)) {
			var iCellIndex=parseInt(s);
			var sFieldID=arTableFields[iCellIndex];
			var n=getFieldIndex(sFieldID,arFieldID);
			if((n>=0) && (n<arValues.length))
			{
				//get the control contained in the cell and determine if it is active
				var bIsActiveElement=false;
				if(document.activeElement) {
					var arInput=table.rows[row].cells[cell].getElementsByTagName("input");
					if(!arInput) arInput=table.rows[row].cells[cell].getElementsByTagName("select");
					if(arInput) {
						bIsActiveElement=(document.activeElement==arInput[0]);
					};
				};

				if(!bIsActiveElement) {
					var sValue=(arHtmlValues==null) ? arValues[n] : arHtmlValues[n];
					table.rows[row].cells[cell].innerHTML=sValue;
//appendToLog("updateCellsInRecord updating cell="+iCellIndex+" FieldID="+sFieldID+" n="+n+" value="+arValues[n]+" htmlValue="+arHtmlValues[n],false,true);
				}
				else {
					//alert("skipping active element");
//appendToLog("updateCellsInRecord skipping active element cell="+iCellIndex+" FieldID="+sFieldID+" n="+n+" value="+arValues[n]+" htmlValue="+arHtmlValues[n],false,true);
				};

				if(sValue)
				{
/************************************************
					var Control=null;
					for (var i=0;(Control==null) && (i<table.rows[row].cells[cell].childNodes.length);i++) {
						var eChild=table.rows[row].cells[cell].childNodes[i];
						if((eChild.type=="select-one") || (eChild.type=="select-multiple") || (eChild.type=="text") || (eChild.type=="password") || (eChild.type=="checkbox") || (eChild.type=="textarea")) {
							Control=eChild;	
						}
						else	if(eChild.nodeName.equalsIgnoreCase("textarea")) {
							Control=eChild;	
						}
						else if(eChild.nodeName.equalsIgnoreCase("text")) {
							Control=eChild;	
						};
					};
					
					if(Control!=null) {
						if(Control.type=="checkbox") {
							if(!bExcludeInputs) Control.checked=(sValue.equalsIgnoreCase("true"));
						}
						else {
							if((Control.nodeName.equalsIgnoreCase("text")) || (Control.nodeName.equalsIgnoreCase("password"))) {
								if(sValue!=null) {
									Control.innerHTML=sValue; //need to set the value of the control first to properly handle empty strings (see note in formatField)
									var s=formatField(table.getAttribute("id"),Control,sValue,arAllFieldID,arAllFieldType,arAllPattern);
									Control.innerHTML=s;
								}
								else {
									appendToLog("updateCellsInRecord sValue=null for "+sFieldID,false,true);
								};
							}
							else {
								if(!bExcludeInputs) Control.value=sValue;
							};
						};
					};
**************************************************/					
				};
			}
			else {
				if(n<0) {
					//appendToLog("updateCellsInRecord skipped FieldID="+sFieldID+" n="+n+" Make sure it is included in the embedded fields.  arFieldID="+arFieldID,false,true);
				}
				else {
					//appendToLog("updateCellsInRecord skipped FieldID="+sFieldID+" n="+n+" values len="+arValues.length,false,true);
				};
			};
		}
		else {
			//appendToLog("updateCellsInRecord skipped cellIndex="+s+" sName="+sName,false,true);
		};
	};
};

/********************************************************************
Updates a record in a table by making a request to the driver for new values.  The
function is called again with sValues defined when a response is received.
KeyValue is a comma-delimited list of key values for which records will be updated
********************************************************************/
function updateTableRecord(ATableID,KeyValue,sValues,n)
{
	var table=document.getElementById(ATableID);
	if(!table) return; //can happen if a page is refreshed immediately after a request has been made for record values
	var sKeyDescription=table.getAttribute("aspectkeydescription");

	//Got values.  Update the record.
	if(sValues)
	{
		var arRecord=getSubStringArray(sValues,"\n",true);
appendToLog("updateTableRecord got values for "+arRecord.length+" records");
//appendToLog("Values="+sValues);

		//get the select box containing key descriptions in the edit dialog
		var eSelect=null;
		var sDialogID=table.getAttribute("aspecteditdialogid");
		if(sDialogID) {
			var eDialog=document.getElementById(sDialogID);
			if(eDialog) eSelect=getTableDialogHeaderSelectKeyControl(eDialog);
		};

		for(var i=0;i<arRecord.length;i++) {
			var a=getSubStringArray(arRecord[i],"|",true);
			if(a) {
				var sKeyValue=a[0];
				var sAllValues=a[1];
				var sKeyDescription=a[2];
				appendToLog("updateTableRecord updating values for Key="+sKeyValue);
				
				///NOTE: 03-17-2013 Html values are now included as a 4th element in the value returned by a call to getRecordValues()
				//There was a conflict between the data recorded in the aspectallvalues attribute and the values needed to update a 
				//row in the table after data had been edited.  Table cells initially contain html values (using getFieldForHtml.  When
				//a record is edited and new values are gotten from the server, data from getField() needs to be recorded in the aspectallvalues
				//attribute so dialogs can be initialized properly after data is edited.  But data from getFieldForHtml also needs to be
				//included so table cells can be displayed properly since they may use html to format the field.
				//The solution is to return values from both getField() and getFieldForHtml().  Data returned by getFieldForHtml is recorded
				//in a new attribute named aspecthtmlvalues.  This attribute is used to update cells in tables.  It is not available until
				//a record has been edited.
				var sHtmlValues="";

				//restore any pipes contained in the values.  Pipes are tokenized by TAspectDriver.getRecordValues because
				//that function returns a string delimited by pipes
				sAllValues=replaceAllSubstrings(sAllValues,"%%pi"+"pe%%","|");
				sAllValues=replaceAllSubstrings(sAllValues,"%%line"+"feed%%","\n");

				if(a.length>3) {
					sHtmlValues=a[3];
					sHtmlValues=replaceAllSubstrings(sHtmlValues,"%%pi"+"pe%%","|");
					sHtmlValues=replaceAllSubstrings(sHtmlValues,"%%line"+"feed%%","\n");
				};

				//locate row containing keyvalue
				var row=getTableRowContainingKey(table,sKeyValue);
				if(row>=0)
				{
					//update the attribute containing all values
					setAttr(table.rows[row],"aspectAllValues",sAllValues);
					//appendToLog("updateTableRecord setting Key="+sKeyValue+" AllValues="+sAllValues);
					
					//update the attribute containing html values
					if(sHtmlValues.length>0) table.rows[row].setAttribute("aspecthtmlvalues",sHtmlValues);
					
					//update the cells in the table row
					updateCellsInRecord(table,sKeyValue);

					//update values in the dialog if the dialog is visible and the record is currently selected
					var sDialogID=table.getAttribute("EditDialogID");
					var eDialog=document.getElementById(sDialogID);
					if(eDialog) {
						var sDialogKeyValue=eDialog.getAttribute("keyvalue");
						if((sDialogKeyValue) && (sDialogKeyValue==sKeyValue)) {
							var arFieldID=getSubStringArray(table.getAttribute("aspectAllFieldID"),",",true);
							var arValues=getSubStringArray(getAttr(table.rows[row],"aspectAllValues"),",",true);
							for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i],false);
							setDialogValues(ATableID,eDialog,arFieldID,arValues,true);
						};
					};
				}
				else {
					appendToLog("Could not find row for key value "+sKeyValue);
				};
				
				//update the key description in the dialog header's drop-down list
				var bDialogHeader=table.getAttribute("aspectdialogheader");
				if((bDialogHeader) && (bDialogHeader.equalsIgnoreCase("true")) && (eSelect)) {
					if(sKeyDescription.length>0)
					{
						var bFound=false;
						for (var j=0;(bFound==false) && (j<eSelect.options.length);j++) {
							if(eSelect.options[j].value.equalsIgnoreCase(sKeyValue)) {
								eSelect.options[j].text=sKeyDescription;
								bFound=true;
							};
						};
						
						//add the description if the key value was not found in the list
						if(bFound==false) {
							var n=0;
							while((n<eSelect.options.length) && (eSelect.options[n].text.toUpperCase()<sKeyDescription.toUpperCase())) n++;
							
							var eNewOption=document.createElement('option');
							eNewOption.text=sKeyDescription;
							eNewOption.value=sKeyValue;
							if(n==eSelect.length) {
								eSelect.options[eSelect.options.length]=eNewOption;
							}
							else {
								try {
									eSelect.add(eNewOption,eSelect.options[n]); // standards compliant; doesn't work in IE
									eSelect.selectedIndex=n;
								}
								catch(ex) {
									eSelect.selectedIndex=n;
									eSelect.add(eNewOption,eSelect.selectedIndex); // IE only
								}					
							};
						};
					};
				};
			}
			else {
				appendToLog("Error: Could not get values for keyvalue="+KeyValue+" in table:"+ATableID,false,true);
			};
		};

		return;
	};

	var Attempts=1;
	if(n) {
		Attempts=n+1;
		if(Attempts>3) {
			appendToLog("Error: Aborting updateTableRecord because error getting values",false,true);
			return;
		};
	};
	
	appendToLog("updateTableRecord requesting values for Key="+KeyValue);

	//get values
	var sHashID=table.getAttribute("aspecthashid");
	var sDriverID=table.getAttribute("aspectdriver");

	//These need to use the driver params in place when the table was created
	//var sDriverParams=getTableDriverParams(ATableID);
	var sDriverParams=table.getAttribute("aspectParamsActive");
	if(!sDriverParams) sDriverParams=getTableDriverParams(ATableID); //for compatibility before posting aspectParamsActive

	var sEmbedValues=table.getAttribute("aspectembedvalues");

	//make a request for values
	var sUrl=getServer()+"/?Network=greenlight&ID=getWidget";
	sUrl +="&DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em&Widget=Notification Queries";
	sUrl +="&query=getRecordValues";
	sUrl +="&source="+sHashID;
	sUrl +="&Driver_ID="+sDriverID;
	sUrl +="&Driver_Params="+sDriverParams;
	sUrl +="&EmbedValues="+sEmbedValues;
	sUrl +="&KeyValues="+KeyValue;
	sUrl +="&KeyDescription="+sKeyDescription;

	var sFunc="updateTableRecord(\""+ATableID+"\",\""+KeyValue+"\",req.responseText,"+Attempts+")";
	asynchInclude(null,sUrl,sFunc,sFunc);
};

function tableRowIsDeleted(TR)
{
	var s=TR.getAttribute("deleted");
	if(!s) return(false);
	if(s.equalsIgnoreCase("true")) return(true);
	return(false);
};

function tableRowIsTemplate(TR)
{
	var s=TR.getAttribute("ID");
	if(!s) return(false);
	if(s.toUpperCase().startsWith("InsertTemplate")) return(true);
	return(false);
};

/***********************************************************************
Called when a record is added from within the edit dialog.  e is the control clicked to make
the call.
***********************************************************************/
function addDialogRecord(e)
{
	appendToLog("addDialogRecord",true);

	//get the div containing the dialog
	var eDialog=getDialogNode(e);
	if(!eDialog) {
		appendToLog("Unable to locate dialog containing element in addDialogRecord");
		return;
	};

	//get the table
	var sTableID=eDialog.getAttribute("TableID");
	var table=document.getElementById(sTableID);
	
	var iNewRow=insertTableRecord(sTableID);
	if(iNewRow>=0) {
		//hide the disable div 
		if(document.getElementById("EditDialogDisable"+sTableID)) setVisible("EditDialogDisable"+sTableID,false);

		//set the keyvalue of the dialog
		var sKeyValue=table.rows[iNewRow].getAttribute("keyvalue");
		eDialog.setAttribute("keyvalue",sKeyValue);

		//set the values in the dialog
		var arFieldID=getSubStringArray(table.getAttribute("aspectAllFieldID"),",",true);
		var arValues=getSubStringArray(getAttr(table.rows[iNewRow],"aspectAllValues"),",",true);
		for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i],false);
		setDialogValues(sTableID,eDialog,arFieldID,arValues);
	}
	else {
		appendToLog("Unable to create new table record");
	};
};

/***********************************************************************
Called when a record is deleted from within the edit dialog.  e is the control clicked to make
the call.
***********************************************************************/
function deleteDialogRecord(e)
{
	appendToLog("deleteDialogRecord",true);

	//get the div containing the dialog
	var eDialog=getDialogNode(e);
	if(!eDialog) {
		appendToLog("Unable to locate dialog containing element in addDialogRecord");
		return;
	};

	//get the table
	var sTableID=eDialog.getAttribute("TableID");
	var table=document.getElementById(sTableID);

	//get the keyvalue of the record being edited	
	var sKeyValue=eDialog.getAttribute("keyvalue");

	//locate the row containing the keyvalue of the record being edited
	var rCurrent=getTableRowContainingKey(table,sKeyValue)
	if(rCurrent<0) {
		appendToLog("Could not locate row containing key value "+sKeyValue);
		return;
	};

	//focus on the next record in the table
	updateDialogRecord(e,"next");

	//delete the record
	deleteTableRecords(sTableID,rCurrent);

	//remove the option from the dialog header's select box
	updateTableDialogHeader(sTableID);

	//disable dialog if no records are left
	appendToLog("first record="+getFirstTableRow(table,false));
	if(getFirstTableRow(table,false)<0) disableTableDialog(sTableID);
};

/********************************************************************************
Functions for the left menu bar
********************************************************************************/
function getLeftBarSelectedCompany()
{
	var e=document.getElementById("left_bar_select_company");
	if(e) return(e.value);
	return("");
};

function getLeftBarSelectedComputer()
{
	var e=document.getElementById("left_bar_select_computer");
	if(e) return(e.value);
	return("");
};

function getLeftBarSelectedPackage()
{
	var sPackageID=document.getElementById("select_menu").value;
	if(sPackageID.indexOf("^")>0) {
		var a=getSubStringArray(sPackageID,"^",true);
		return(a[0]);
	};
	return(sPackageID);
};

function getLeftBarSelectedMenu()
{
	var sPackageID=document.getElementById("select_menu").value;
	var sMenu="home";
	if(sPackageID.indexOf("^")>0) {
		var a=getSubStringArray(sPackageID,"^",true);
		return(a[1]);
	};
	return(sMenu);
};

function getLeftBarArgs()
{
	var s="Package="+getLeftBarSelectedPackage();
	s +="&Menu="+getLeftBarSelectedMenu();
	s +="&LeftBarCompany="+getLeftBarSelectedCompany();
	s +="&LeftBarComputer="+getLeftBarSelectedComputer();
	return(s);
};

function leftBarCompanySelected(eSelect)
{
	applyOverlay("left_bar");
	
	//clear the selected computer so if doesn't cause the associated company to be 
	//selected when the content loads.
	document.getElementById("left_bar_select_computer").value="0";
	
	//appendToLog("leftBarCompanySelected args="+getLeftBarArgs(),false,true);
	loadContent("left_bar",getLeftBarArgs());
};

function leftBarComputerSelected(eSelect)
{
	//applyOverlay("left_bar");
	//appendToLog("leftBarComputerSelected args="+getLeftBarArgs(),false,true);
	//loadContent("left_bar",getLeftBarArgs());
	refreshLeftBarMenu();
};

function updateCompanyList()
{
	applyOverlay("left_bar");
	loadContent("left_bar",getLeftBarArgs()+"&updateCompanyList=true");
};

function refreshLeftBarMenu()
{
	var e=document.getElementById("left_bar_menu_div");
	var sUrl=e.getAttribute("urlbase");
	var arParam=getSubStringArray(sUrl,"&",false);
	sUrl="";
	for(var i=0;i<arParam.length;i++) {
		if((!arParam[i].startsWith("Package")) && (!arParam[i].startsWith("Menu")) && (!arParam[i].startsWith("LeftBarCompany")) && (!arParam[i].startsWith("LeftBarComputer"))) {
			if(sUrl.length>0) sUrl +="&";
			sUrl +=arParam[i];
		};
	};
	sUrl +="&"+getLeftBarArgs();
	e.setAttribute("url",sUrl);
	setInterval(e,0,true,"");
	refreshWidgets();
//appendToLog("refreshLeftBarMenu args="+getLeftBarArgs());
	//show the menu select box
	var s=getLeftBarSelectedComputer();
	if((s) && (s.length>0) && (s!="0")) {
		setVisible("menu_header",true);
		setVisible("select_menu",true);
	}
	else {
		setVisible("menu_header",false);
		setVisible("select_menu",false);
	};
};

function menuSelected()
{
	//applyOverlay("left_bar");
	//loadContent("left_bar",getLeftBarArgs(),"refreshWidgets()","refreshWidgets()");
	
	//get new url for div
	var sValue=document.getElementById("select_menu").value;
	var a=getSubStringArray(sValue,"^",false);
	var sPackage=a[0];
	var sMenu=a[1];
	
	var e=document.getElementById("left_bar_menu_div");
	var sUrl=e.getAttribute("urlbase");
	//sUrl +="&package="+sPackage+"&menu="+sMenu;
	var arParam=getSubStringArray(sUrl,"&",false);
	sUrl="";
	for(var i=0;i<arParam.length;i++) {
		if((!arParam[i].startsWith("Package")) && (!arParam[i].startsWith("Menu")) && (!arParam[i].startsWith("LeftBarCompany")) && (!arParam[i].startsWith("LeftBarComputer"))) {
			if(sUrl.length>0) sUrl +="&";
			sUrl +=arParam[i];
		};
	};
	sUrl +="&"+getLeftBarArgs();

	e.setAttribute("url",sUrl);
	setInterval(e,0,true,"");
	refreshWidgets();
};

function menuOptionSelected(sMenu,sDescription,sActionType,sTarget,sArgs)
{
	if(sArgs.startsWith("/?")) sArgs=getServer()+sArgs;
	
	if(sActionType.equalsIgnoreCase("URL")) {
		window.open(sArgs,"_self");
	}
	else if(sActionType.equalsIgnoreCase("UpdateContent")) {
		sArgs+="&Package="+getLeftBarSelectedPackage();
		sArgs+="&LeftBarCompany="+getLeftBarSelectedCompany();
		sArgs+="&LeftBarComputer="+getLeftBarSelectedComputer();
		appendToLog("LoadContent "+sTarget+" "+sArgs,false,true);
		loadContent(sTarget,sArgs,"","");
	};
};

/*********************************************************************************
Used to set the left and top bars to display content from the back-office package instead
of the support package.  Used to view pages from the customer's perspective.
*********************************************************************************/
function setDeployedView(s) 
{
	if(s) {
		loadContent("top_bar",getLeftBarArgs());
		loadContent("left_bar",getLeftBarArgs());
		return;
	};
	
	var eCheck=document.getElementById("SetDeployedView");
	if(!eCheck) {
		alert("Element not found: SetDeployedView");
		return;
	};
	
	var sUrl=getServer()+"/?Network=GreenLight&ID=setToken&Name=Aspect_Support_Show_Deployed_View&Value="+eCheck.checked;
	var sFuncOk="setDeployedView(s)";
	var sFuncErr="setDeployedView(s)";
	asynchInclude(null,sUrl,sFuncOk,sFuncErr);
};

function setWrap(e,b)
{
	if (e.wrap) {
		(b) ? e.wrap="hard" : e.wrap="off";
	} else { // wrap attribute not supported - try Mozilla workaround
		(b) ? e.setAttribute("wrap","hard") : e.setAttribute("wrap","off");
		var e2=e.cloneNode(true);
		e2.value=e.value;
		e.parentNode.replaceChild(e2,e);
	};
};

/********************************************************************************************************
Used to debug mergeTable2012 (need to un-hardwire table ID's)
********************************************************************************************************/
function outputTables(DestID,SrcID,s)
{
	appendToLog("============================================");
	appendToLog(s);
	appendToLog("Source table ID: "+SrcID);
	appendToLog("Dest table ID: "+DestID);
	appendToLog("============================================");
	var tableSrc=document.getElementById(SrcID);
	var tableDest=document.getElementById(DestID);
	for (var i=0;i<20;i++) {
		if(i<tableDest.rows.length) 	{
			var sSrcKey=getRowKey(tableSrc.rows[i]);
			var sDestKey=getRowKey(tableDest.rows[i]);
			var sMatch=(sSrcKey==sDestKey) ? "" : "Mismatch";
			appendToLog("row: "+i+" SrcKey="+sSrcKey+" DestKey="+sDestKey+" "+sMatch);
		};
	};
	appendToLog("============================================");
};

/********************************************************************************************************
Called by mergeTable2012 to get the key for a row which depends on whether it's a record or 
a section header
********************************************************************************************************/
function getRowKey(row)
{
	//look for table header
	if(row.getAttribute("istableheader")) {
		return(row.getAttribute("headerid"));
	};
	
	//look for section header
	if(row.getAttribute("issectionheader")) {
		return(row.getAttribute("headerkey"));
	};

	s=row.getAttribute("KeyValue");
	if(s) return(s);
	return("");
};

/********************************************************************************************************
Merges records from a source table into a destination table.  (see notifications in the control panel as an example).
A hidden table can be used as a buffer that is updated at some interval.  If a state element is used,
it does not take much time.  The destination table can then be updated from the buffer when new
records become available
********************************************************************************************************/
function mergeTable2012(DestID,SrcID)
{
	//appendToLog("mergeTable2012( dest="+DestID+" src="+SrcID);
	var tableSrc=document.getElementById(SrcID);
	var tableDest=document.getElementById(DestID);

	if(!tableSrc) {
		appendToLog("Invalid source table in mergeTable2012: "+SrcID);
		return;
	};

	if(!tableDest) {
		appendToLog("Invalid destination table in mergeTable2012: "+DestID);
		return;
	};

	//make a collection of all records in the source and dest
	//NOTE: Can't use getKeyValues() because section headers are not included
	var arSrcKey=new Array();
	for(var i=0;i<tableSrc.rows.length;i++) {
		arSrcKey[arSrcKey.length]=getRowKey(tableSrc.rows[i]);
	};
	
	var arDestKey=getKeyValues(DestID,false);
	for(var i=0;i<tableDest.rows.length;i++) {
		arDestKey[arDestKey.length]=getRowKey(tableDest.rows[i]);
	};

	//appendToLog("Merging tables.  DestRows="+tableDest.rows.length+" SrcRows="+tableSrc.rows.length);
	//delete any records from dest that are not in src
	//outputTables(DestID,SrcID,"Before delete");
	var n=1;
	while(n<tableDest.rows.length) 	{
		//don't merge the template used to insert new records
		if(!tableDest.rows[n].getAttribute("istemplate")) {
			var sDestKey=getRowKey(tableDest.rows[n]);
			if(sDestKey.length>0) {
				if(arSrcKey.indexOf(sDestKey)<0) {
					tableDest.deleteRow(n);
					//appendToLog("Deleted row: "+n+" DestKey="+sDestKey);
				}
				else {
					n++;
				};
			}
			else {
				n++;
			};
		}
		else {
			n++;
		};
	};
	//outputTables(DestID,SrcID,"After delete");

	var cInsert=0;
	for (var i=1;i<tableSrc.rows.length;i++) 
	{
		if(!tableSrc.rows[i].getAttribute("istemplate")) {
			var bInsertRow=true;
			var sSrcKey=getRowKey(tableSrc.rows[i]);
			var sDestKey="";
			if(i<tableDest.rows.length) sDestKey=getRowKey(tableDest.rows[i]);
			//appendToLog("Adding row: "+i+" SrcKey="+sSrcKey+" DestKey="+sDestKey);	
			if((sSrcKey) && (sDestKey)) 
			{
				if(sSrcKey.equalsIgnoreCase(sDestKey)) {
					//appendToLog("Found matching record");
					//found a matching record
					var sSrcCRC=tableSrc.rows[i].getAttribute("crc");
					var sDestCRC=tableDest.rows[i].getAttribute("crc");
					if(sSrcCRC!=sDestCRC) {
						for(var j=0;j<tableSrc.rows[i].cells.length;j++) {
							if(tableDest.rows[i].cells[j]) {
								tableDest.rows[i].cells[j].innerHTML=tableSrc.rows[i].cells[j].innerHTML;
							};
						};
						//appendToLog("Updated record: Key="+sSrcKey+" row="+i+" SrcCRC="+sSrcCRC+" DestCRC="+sDestCRC);
					}
					else {
						//appendToLog("record not modified: Key="+sSrcKey+" row="+i);
					};
				}
				else {
					//see if the record exists anywhere in the destination table
					var iDestRow=getTableRowContainingKey(tableDest,sSrcKey);
					//appendToLog("Looking for matching key.  iDestRow="+iDestRow);
					if(iDestRow>=0) {
						//the record was found elsewhere in the table
						var sSrcCRC=tableSrc.rows[i].getAttribute("crc");
						var sDestCRC=tableDest.rows[iDestRow].getAttribute("crc");
						if(sSrcCRC!=sDestCRC) {
							for(var j=0;j<tableSrc.rows[i].cells.length;j++) {
								if(tableDest.rows[iDestRow].cells[j]) {
									tableDest.rows[iDestRow].cells[j].innerHTML=tableSrc.rows[i].cells[j].innerHTML;
								};
							};
						};
					}
					else {
						//add a new record
						//appendToLog("Insert row: "+i+" SrcKey="+sSrcKey+" DestKey="+sDestKey);
						var clone=tableSrc.rows[i].cloneNode(true);
						var tbody=null;
						for(var j=0;j<tableDest.childNodes.length;j++) {
							if(tableDest.childNodes[j].nodeName.toUpperCase()=="TBODY") tbody=tableDest.childNodes[j];
						};
						if(i<tableDest.rows.length-1) {
							tbody.insertBefore(clone,tableDest.rows[i]);
						}
						else {
							tbody.appendChild(clone);
						};

						//outputTables(DestID,SrcID,"After insert");
						cInsert++;
						
						arDestKey=getKeyValues(DestID,false);
					};
				};
			}
			else {
				//add a new record
				//appendToLog("Insert row: "+i+" SrcKey="+sSrcKey+" DestKey="+sDestKey);
				var clone=tableSrc.rows[i].cloneNode(true);
				var tbody=null;
				for(var j=0;j<tableDest.childNodes.length;j++) {
					if(tableDest.childNodes[j].nodeName.toUpperCase()=="TBODY") tbody=tableDest.childNodes[j];
				};
				tbody.appendChild(clone);

				//outputTables(DestID,SrcID,"After insert");
				cInsert++;
				arDestKey=getKeyValues(DestID,false);
			};
		};
	};
	//appendToLog("mergeTable2012 complete");
};

/**********************************************************************
Returns an array of keyvalues from the given table.  if bSelectedOnly is true, only returns
values for which the select checkbox is clicked.  Returns null if the table does not exist.
**********************************************************************/
function getKeyValues(tableid,bSelectedOnly)
{
	var eTable=document.getElementById(tableid);
	if(!eTable) {
		appendToLog("getKeyValues cannot locate table with ID="+tableid,false,true);
		return(null);
	};

	//determine the cell that contains the select checkbox
	var iSelectCell=-1;
	if(bSelectedOnly) {
		iSelectCell=getTableRecordSelectIndex(tableid);
	};

	var arKeyValue=new Array();

	for (var row=0;row<eTable.rows.length;row++) {
		var bInclude=true;
		//don't include section headers and table headers
		if(eTable.rows[row].getAttribute("keyvalue")) {
			if(bSelectedOnly) {
				if((iSelectCell>=0) && (eTable.rows[row].cells[iSelectCell])) {
					bInclude=eTable.rows[row].cells[iSelectCell].firstChild.checked;
				}
				else {
					bInclude=false;
				};
			};
		}
		else {
			bInclude=false;
		};
		
		if(bInclude) arKeyValue[arKeyValue.length]=eTable.rows[row].getAttribute("KeyValue");
	};

	/*****************************
	9/1/2014 - Don't know why this 2nd pass is here.  Could have been for debugging.
	*****************************/
	if(arKeyValue.length==0) {
		//appendToLog("getKeyValues: No records selected in table "+tableid+". Rows="+eTable.rows.length+" iSelectCell="+iSelectCell,false,true);
		for (var row=0;row<eTable.rows.length;row++) {
			var bInclude=true;
			if(eTable.rows[row].getAttribute("keyvalue")) {
				if(bSelectedOnly) {
					if((iSelectCell>=0) && (eTable.rows[row].cells[iSelectCell])) {
						bInclude=eTable.rows[row].cells[iSelectCell].firstChild.checked;
						//appendToLog("row["+row+"] child="+eTable.rows[row].cells[iSelectCell].firstChild+" checked="+eTable.rows[row].cells[iSelectCell].firstChild.checked+" included="+bInclude,false,true);
					}
					else {
						bInclude=false;
						//appendToLog("row["+row+"] not included.  iSelectCell="+iSelectCell+" cell="+eTable.rows[row].cells[iSelectCell]+"\r\n",false,true);
					};
				};
			}
			else {
				bInclude=false;
				//appendToLog("row["+row+"] keyvalue not defined",false,true);
			};
			
			if(bInclude) arKeyValue[arKeyValue.length]=eTable.rows[row].getAttribute("KeyValue");
		};
	};
	
	return(arKeyValue);
};

/*********************************************************************************
Shows/hides table rows for a given section.  Called when a section header is clicked.
*********************************************************************************/
function toggleTableRows(TableID,HeaderID)
{
	//get the table
	var table=document.getElementById(TableID);
	if(!table) {
		alert("cannot find table: "+TableID);
		return;
	};

	//
	for(var i=0;i<table.rows.length;i++) {
		var sHeaderID=table.rows[i].getAttribute("headerid");
		if((sHeaderID) && (sHeaderID==HeaderID)) {
			if(!table.rows[i].getAttribute("headerkey")) {
				toggleVisible(table.rows[i]);
			};
		};
	};
};

/*********************************************************************************
Call to output a stack trace to the debug window.  This is probably more complicated
than necessary.  The match function causes all lines to be excluded.  The Firefox
method is very simple - e.stack is just a line-feed delimited array
*********************************************************************************/
function printStackTrace() {
	var callstack=[];
	var isCallstackPopulated=false;
	try {
		i.dont.exist+=0; //doesn't exist- that's the point
	} catch(e) {
		if (e.stack) { //Firefox
			var lines=e.stack.split('\n');
			for (var i=0, len=lines.length; i<len; i++) {
				//if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
					callstack.push(lines[i]);
				//}
			}
			//Remove call to printStackTrace()
			callstack.shift();
			isCallstackPopulated=true;
		}
		else if (window.opera && e.message) { //Opera
			var lines=e.message.split('\n');
			for (var i=0, len=lines.length; i<len; i++) {
				if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
					var entry=lines[i];
					//Append next line also since it has the file info
					if (lines[i+1]) {
						entry +=" at " + lines[i+1];
						i++;
					}
					callstack.push(entry);
				}
			}
			//Remove call to printStackTrace()
			callstack.shift();
			isCallstackPopulated=true;
		}
	}
	if (!isCallstackPopulated) { //IE and Safari
		var currentFunction=arguments.callee.caller;
		while (currentFunction) {
			var fn=currentFunction.toString();
			var fname=fn.substring(fn.indexOf("function") + 8, fn.indexOf('')) || 'anonymous';
			callstack.push(fname);
			currentFunction=currentFunction.caller;
		}
	}

	appendToLog("stack trace:",false,true);
	var s="";
	for(var i=0;i<callstack.length;i++) s +=callstack[i]+"^\r\n";
	appendToLog(s,false,true);
};

/*************************************************************************
Called when a sort selection is made in the displays dialog
*************************************************************************/
function selectSort(e,TableID)
{
	validateSubtotalSelections(e,TableID);
};

/*************************************************************************
Called when a subtotal checkbox is clicked in the displays dialog
*************************************************************************/
function selectSubtotal(e,TableID)
{
	validateSubtotalSelections(e,TableID);
};

/*************************************************************************
Ensures that the sort and subtotal selectsions in the displays dialog are valid
*************************************************************************/
function validateSubtotalSelections(e,TableID)
{
	var eSort=new Array();
	eSort[0]=document.getElementById("SortBy1_"+TableID);
	eSort[1]=document.getElementById("SortBy2_"+TableID);
	eSort[2]=document.getElementById("SortBy3_"+TableID);
	eSort[3]=document.getElementById("SortBy4_"+TableID);
	
	var eSubtotal=new Array();
	eSubtotal[0]=document.getElementById("Subtotal1_"+TableID);
	eSubtotal[1]=document.getElementById("Subtotal2_"+TableID);
	eSubtotal[2]=document.getElementById("Subtotal3_"+TableID);
	eSubtotal[3]=document.getElementById("Subtotal4_"+TableID);

	var eSubtotalsOnly=document.getElementById("SubtotalsOnly_"+TableID);
	var eGrandtotalsOnly=document.getElementById("GrandtotalsOnly_"+TableID);

	var cSubtotal=0;
	for(var i=0;i<4;i++) {
		if(eSort[i].value=="0") {
			eSubtotal[i].checked=false;
			eSubtotal[i].enabled=false;
		}
		else {
			eSubtotal[i].enabled=true;
		};
		if(eSubtotal[i].checked) cSubtotal++;
	};
		
	if(cSubtotal==0) {
		eSubtotalsOnly.checked=false;
		eSubtotalsOnly.enabled=false;
		eGrandtotalsOnly.checked=false;
		eGrandtotalsOnly.enabled=false;
	}
	else {
		eSubtotalsOnly.enabled=false;
		eGrandtotalsOnly.enabled=false;
	};
};

/***********************************************************************************
Called by clicking the run icon in the scheduled tasks table
***********************************************************************************/
function runAspectTask(e,CustomerID,DriverID,TaskName,top,left,Result)
{

	if(Result) {
		showDialog("msg="+Result+"<br><br>&fnok=close&left="+left+"&top="+top);
		return;
	};

	var xy=getPosition2012(e,"absolute",document.getElementsByTagName('BODY')[0]);
	var top=xy[1];
	var left=xy[0];

	var sUrl=getServer()+"/?Network=Greenlight&ID=getWidget";
	sUrl +="&Source="+CustomerID;
	sUrl +="&DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em&Widget=Notification Queries";
	sUrl +="&query=execScheduledTask&TaskDriverID="+DriverID+"&TaskName="+TaskName;
	showDialog("icon=true&msg=Executing "+TaskName+" on "+CustomerID+"&left="+left+"&top="+top);
	var sFunc="runAspectTask(null,\""+CustomerID+"\",\""+DriverID+"\",\""+TaskName+"\","+top+","+left+",s)";
  asynchInclude(null,sUrl,sFunc,sFunc);
};

/***********************************************************************************
Called by various widgets to refresh a widget or execute a command.  For example,
called from the inventory maintenance debugging page when a button is pressed to
execute a command on the remote computer.
Params:
	WidgetArgs - The widget to be retrieved e.g. source=xxx&documentID=xxx...
	OutputID - Optional ID of the element to receive output from the widget
	ShowIcon - If true, a wait icon will be displayed in the OutputID 
***********************************************************************************/
function getEmbeddedWidget(WidgetArgs,OutputID,ShowIcon) {
	var sUrl=getServer()+"/?network=greenlight&id=getWidget&"+WidgetArgs;
	var e=null;
	if(OutputID) {
		e=document.getElementById(OutputID);
		if(ShowIcon) showStatusIcon(e);
	};
	asynchInclude(e,sUrl,"","");
};

/***********************************************************************
Evaluates an Aspect expression and records the result in the element
given by e.  Can be used to update content without having to create
a separate Aspect script to get the content.
***********************************************************************/
function aspectEval(e,Expression,ShowIcon)
{
	if(ShowIcon) showStatusIcon(e);
	var sUrl=getServer()+"/?Network=GreenLight&ID=getWidget";
	sUrl +="&DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em&Widget=Notification Queries"
	sUrl +="&query=evaluateExpression&Expression="+replaceAllSubstrings(Expression," ","\\x20");
	var sFunc="aspect('',s)";
	asynchInclude(e,sUrl);
};

/***********************************************************************************
Opens the given file in the default viewer for the file type.
Called by the "view" field in the greenlight generic filespec driver
***********************************************************************************/
function launchFileViewer(e,CustomerID,Filename,top,Result)
{
	var left=400;

	if(Result) {
		showDialog();
		if(Result.toUpperCase().startsWith("ERROR")) {
			showDialog("msg="+Result+"<br><br>&fnok=close&left="+left+"&top="+top);
		};
		return;
	};

	var xy=getPosition2012(e,"absolute",document.getElementsByTagName('BODY')[0]);
	var top=xy[1];

	var sUrl=getServer()+"/?Network=Greenlight&ID=getWidget";
	sUrl +="&Source={AspectHashID}";
	sUrl +="&DocumentID=CExis5b6ybLmITZ2wF7XmGwk&Widget=Notification Queries";
	sUrl +="&query=launchViewerForRemoteFile&CustomerID="+CustomerID+"&RemoteFilename="+Filename;
	showDialog("icon=true&msg=Opening "+Filename+" from "+CustomerID+"&left="+left+"&top="+top);
	var sFunc="launchFileViewer(null,\""+CustomerID+"\",\""+Filename+"\","+top+",s)";
  asynchInclude(null,sUrl,sFunc,sFunc);
};

/**************************************************************
Called when text is entered to search for a customer ID
in the Aspect Support left bar
**************************************************************/
var arLeftBarAllCompany=null;
var arLeftBarAllCustomer=null;
var arLeftBarCompanyLookup=null;

function HashIDSearchUpdated(ClearSearch) 
{
	if(ClearSearch) {
		document.getElementById("search_customer_id").value="";
		loadContent("left_bar","");
		return;
	};

	if(arLeftBarAllCompany==null) {
		var arLeftBarAllCustomer=document.getElementById("Collection_AllCustomer").innerHTML;

		//These are not currently used
		//var arLeftBarAllCompany=document.getElementById("Collection_AllCompany").innerHTML;
		//var arLeftBarCompanyLookup=document.getElementById("Collection_CompanyLookup").innerHTML;
	};

	var arSelections="0=-- Select1 --";
	var strTyped=document.getElementById("search_customer_id").value.toUpperCase().trim();
	var arCustomer=getSubStringArray(arLeftBarAllCustomer,"|");

	var sSelected=null;
	var cMatch=0;
	for (var i=0;i<arCustomer.length;i++) {
		arValues=getSubStringArray(arCustomer[i],"=");
		//if(arValues[0].toUpperCase().indexOf(strTyped)>=0) {
		if(arCustomer[i].toUpperCase().indexOf(strTyped)>=0) {
			arSelections=addElement(arSelections,arCustomer[i],"|");
			if(sSelected==null) sSelected=arValues[0];
			cMatch++;
		};
	};

	//clear the connection info
	var eConnectionInfo=document.getElementById("LeftBarConnectionInfo");
	if(eConnectionInfo) eConnectionInfo.innerHTML="";

	var eSelect=document.getElementById("left_bar_select_computer");
	setOptions(eSelect,arSelections);
	eSelect.value="0";

	//if only a single match was found, select it and refresh the left bar to update
	//the menu items
	if(cMatch==1) {
		eSelect.value=sSelected;
		leftBarComputerSelected(eSelect);
	};
};

var arHashKey=new Array();
var arHashValue=new Array();

/*******************************************************************************
Adds a value to the hashtable.  The key must be a string.  The value may
be any type.
*******************************************************************************/
function hashPut(akey,avalue) {
	var n=arHashKey.indexOf(akey);
	if(n<0) n=arHashKey.length;
	arHashKey[n]=akey;
	arHashValue[n]=avalue;
	return(akey);
};

/*******************************************************************************
Retrieves a value from the hashtable
*******************************************************************************/
function hashGet(akey) {
	var n=arHashKey.indexOf(akey);
	if(n<0) return(null);
	return(arHashValue[n]);
};

/*******************************************************************************
These two routines provide a replacement for setAttribute and getAttribute 
which don't seem reliable in IE.

Compatibility is provided for setAttribute and getAttribute.  For example,
calling getAttr will return the same value as getAttribute unless a value
has been recorded by setAttr.  This allows the two original routines to 
be replaced with the new ones without breaking existing code.

A unique identifier is created for the element by assigning it an ID if it
does not already have one.  

Unfortunately, IE does not support prototyping of elements either.  So
the functions are done again without prototyping.
*******************************************************************************/
/*
Element.prototype._setAttr=function(akey,avalue) {
	if(!this.id) this.id=getSalt(6);
	hashPut(this.id+":"+akey,avalue);
};

Element.prototype._getAttr=function(akey) {
	if(!this.id) return(this.getAttribute(akey));
	var o=hashGet(this.id+":"+akey);
	if(o) return(o);
	return(this.getAttribute(akey));
};
*/
function setAttr(e,akey,avalue) {
	if(!e.id) e.id=getSalt(6);
	hashPut(e.id+":"+akey,avalue);
};

function getAttr(e,akey) {
	if(!e.id) return(e.getAttribute(akey));
	var o=hashGet(e.id+":"+akey);
	if(o) return(o);
	return(e.getAttribute(akey));
};

function getTextDocumentForEditing(DialogID)
{
	var d=document.getElementById(DialogID);
	var sHashID=d.getAttribute("aspecthashid");

	//get the filename from the span element containing it
	var sFlename="";
	var arSpan=d.getElementsByTagName("span");
	for (var i=0;i<arSpan.length;i++) {
		if(arSpan[i].getAttribute("name").equalsIgnoreCase("filename")) 
		{
			sFilename=arSpan[i].innerHTML;
			var eContent=document.getElementById("statecontent"+DialogID);

			var bIsDirectory=false;
			var e=document.getElementById("RemoteIsDirectory"+DialogID);
			if(e) {
				if(e.value.equalsIgnoreCase("true")) {
					bIsDirectory=true;
				}
				else {
					e=document.getElementById("RemoteIsDirectory"+DialogID);
					if(e) {
						if(e.value.equalsIgnoreCase("true")) bIsDirectory=true;
					};
				};
			};

			if(!bIsDirectory) 
			{
				//show status icon.  Add some padding to the bottom of it so the dialog doesn't 
				//noticeably shrink and expand in height in an annoying way.
				var img=new Image();
				img.src=imageStatusActive.src;
				img.style.paddingBottom="1000px";
				eContent.innerHTML="";
				eContent.appendChild(img);
				eContent.appendChild(document.createTextNode(" Loading..."));
	
				//make a request to load the document into the content div
				var sUrl=getServer()+"/?Network=GreenLight&ID=getWidget&Source="+sHashID+"&DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em&Widget=Notification Queries";
				sUrl +="&query=fileGetContent&filename="+sFilename;
				//appendToLog("sUrl="+sUrl,false,true);
				asynchInclude(eContent,sUrl);
			}
			else {
				eContent.innerHTML="";
			};
		};
	};
};

</widget><widget name="Displays Dialog 2012" group="Display Options" category="" description="" type="Simple" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Displays Dialog 2012" modified="05-10-2020 02:14:31" modifiedby="Thnikpad3" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=03-29-2019 03:40:03:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
<div ID="EditDialogHeaderTemplate$tableid$" class="dialog_header">
	<!--dialog header-->
	<!-- The above comment is used to remove the following section when a dialog header is not required to avoid requesting images -->
	
	<ul class="TableHeaderDialogUL">
		<li class="TableHeaderDialogLISelect">
			<select name="selectKeyValue" style="width:auto;max-width:1024px" onChange="dialogRecordSelected(this)">$SelectRecord$</select>
		</li>
		<li class="TableHeaderDialogLISpacer"><span style="font-size:0px">&nbsp;</span></li>
		<li>
			<span class="DialogHeaderIconAdd" onClick="addDialogRecord(this)"/></span>
			<span class="DialogHeaderIconDelete" onClick="deleteDialogRecord(this)"/></span>
			<span class="DialogHeaderIconFirst" onClick="updateDialogRecord(this,'first')"/></span>
			<span class="DialogHeaderIconPrev" onClick="updateDialogRecord(this,'prev')"></span>
			<span class="DialogHeaderIconNext" onClick="updateDialogRecord(this,'next')"></span>
			<span class="DialogHeaderIconLast" onClick="updateDialogRecord(this,'last')"></span>
			<span class="DialogHeaderIconClose" onClick="closeTableEditDialog(this)" style="display:$CanCloseDialog$" /></span>
		</li>
		<li><span style="font-size:0px">&nbsp;</span></li>
	</ul>
	<!--
	<table style="width:100%">
		<tr>
			<td>
			</td>
			<td style="margin:0px;padding:0px; white-space:nowrap; vertical-align:top" valign="top">
				<select name="selectKeyValue" style="width:auto;max-width:1024px" onChange="dialogRecordSelected(this)">$SelectRecord$</select>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=addRecord20x20.gif" onClick="addDialogRecord(this)"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=deleteRecord20x20.gif" onClick="deleteDialogRecord(this)"/>
			</td>
			<td style="margin:0px;padding:0px; white-space:nowrap" align='right'>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=page_first20x20.png" onClick="updateDialogRecord(this,'first')"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=page_prev20x20.png" onClick="updateDialogRecord(this,'prev')"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=page_next20x20.png" onClick="updateDialogRecord(this,'next')"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=page_last20x20.png" onClick="updateDialogRecord(this,'last')"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=close20x20.png" style="display:$CanCloseDialog$" onClick="closeTableEditDialog(this)"/>
			</td>
		</tr>
	</table>
	-->
	<!--end dialog header-->
</div>

<constant name:"__display_tab_height__"; value:"275px">
<constant name:"__display_tab_width__"; value:"400px">

<div ID="DisplayDialogWrapper$tableid$" class="DisplayDialogContainer">
	<!-------------------------------------------------------------------------------------------------------- 
	Main dialog used to edit display
	-------------------------------------------------------------------------------------------------------->
	<div ID="Display_Dialog_$tableid$" class="DisplayDialog" _style="display:none;position:absolute; left:20px; top:20px; padding:5px; background-color:white; width:500px; border:solid 2px #3366ff;" print='false'>

		<!-------------------------------------------------------------------------------------------------------- 
		Message.  Note: The ID of this div is used by Library_AcceptWidgetByID to determine if a display 
		dialog was initialized by the script.  Don't change it.
		-------------------------------------------------------------------------------------------------------->
		<div ID="Display_Dialog_Msg_$tableid$" class="DisplayDialogMessage" _style="z-index:99; position:absolute; left:30px; top:40px; display:none; padding:15px; background-color:white; width:325px; height:auto; border:solid 2px #3366ff;}" print='false'>
		</div>
	
		<!-------------------------------------------------------------------------------------------------------- 
		Save display as...  This div is initially hidden and displayed when the user selects Save As 
		-------------------------------------------------------------------------------------------------------->
		<div ID="Save_Display_As_$tableid$" class="SaveDiaplayAs" _style="z-index:4; position:absolute; left:30px; top:40px; display:none; padding:5px; background-color:white; width:325px; height:150px; border:solid 2px #3366ff;}" print='false'>
			<form name="Save_Display_As_$tableid$">
				<table>
					<tr>
						<td>Name</td>
						<td><input type='text' name='save_display_as' value="" style="width:250px"></td>
					</tr>
					<tr>
						<td>Location</td>
						<td>
							<select name="save_display_as_location" style="width:250px">
								<conditional expression:"len(getToken('Aspect_Support_Report_Widgets_User'))>0">
									<option value="aspect">Aspect</option>
								</conditional>
								<option value="company">Company</option>
								<option value="local" selected="selected">This Computer</options>
							</select>
						</td>
					</tr>
				</table>
				<br>
				<input type="button" name="SaveDisplayAs" value="Save" onClick="saveDisplayAs2012('$tableid$',1)"> 
				<input type="button" name="cacelSaveAs" value="Cancel" onClick="setVisible('Save_Display_As_$tableid$',false)"> 
			</form>
		</div>

		<div ID="Display_Dialog_FormWrapper$tableid$" class="DisplayDialogFormContainer">
			<!-- img style="float:right;cursor:pointer;" src="{ImageHostUrl}greyX12x12.png" onClick="setVisible('Display_Dialog_$tableid$',false)"-->
			<div class="DisplayDialogCloseIcon" onClick="setVisible('Display_Dialog_$tableid$',false)"></div>
			<form name="Display_Dialog_$tableid$">
				<ul class="ULDisplayDialogNameAndIcons">
					<li class="ULDisplayDialogNameAndIconsName">
						<select name="DisplayName" ID="SelectDisplay2$tableid$" class="DisplayDialogDisplayName" _style="width:300px" onChange="displaySelected2(this,'$tableid$',true)">$SelectDisplay$</select>
					</li>
					<li class="ULDisplayDialogNameAndIconsIcons">
						<div class="DisplayDialogIconOk" onClick="displayDialogOk('$tableid$')" {@htmlTooltip("Show with current settings (without saving)")}></div>
						<div class="DisplayDialogIconDelete" onClick="deleteDisplay2012('$tableid$',0)" {@htmlTooltip("Delete display")}></div>
						<div class="DisplayDialogIconRestore" onClick="restoreDisplay('$tableid$',0)" {@htmlTooltip("Restore to last saved settings")}></div>
						<div class="DisplayDialogIconSaveAs" onClick="saveDisplayAs2012('$tableid$',0)" {@htmlTooltip("Save as new display")}></div>
						<div class="DisplayDialogIconSave" onClick="saveDisplay2012('$tableid$',0)" {@htmlTooltip("Save display")}></div>
					</li>
				</ul>
					
				<!--
				<table style="width:100%" class="form">
					<tr>
						<td valign='center' style="vertical-align:middle">
							<select name="DisplayName" ID="SelectDisplay2$tableid$" style="width:300px" onChange="displaySelected2(this,'$tableid$',true)">$SelectDisplay$</select>
						</td>
						<td>
							<span style="cursor:pointer;" onClick="saveDisplay2012('$tableid$',0)" {@htmlTooltip("Save display")}><img src="{ImageHostUrl}editRecord12x12.png"></span>
							<span style="cursor:pointer;padding-left:10px" onClick="saveDisplayAs2012('$tableid$',0)" {@htmlTooltip("Save as new display")}><img src="{ImageHostUrl}addRecord12x12.gif"></span>
							<span style="cursor:pointer;padding-left:10px" onClick="restoreDisplay('$tableid$',0)" {@htmlTooltip("Restore to last saved settings")}><img src="{ImageHostUrl}refresh12x12.png"></span>
							<span style="cursor:pointer;padding-left:10px" onClick="deleteDisplay2012('$tableid$',0)" {@htmlTooltip("Delete display")}><img src="{ImageHostUrl}deleteRecord12x12.gif"></span>
							<span onClick="displayDialogOk('$tableid$')" style="cursor:pointer;padding-left:10px" {@htmlTooltip("Show with current settings (without saving)")}><img src="{ImageHostUrl}greenCheck12x12.png"></span>
						</td>
						<td align="right">
							<span style="cursor:pointer;" onClick="setVisible('Display_Dialog_$tableid$',false)">
								<img src="{ImageHostUrl}greyX12x12.png">
							</span>
						</td>
					</tr>
				</table>
				-->
				<hr ID="DisplayDialogHR$tableid$" style="width:100%">

				<div class="DisplayDialogTabSelectContainer">
					<select ID="SelectDisplayDialogTab$tableid$" onChange="this.blur();showTab(this)">
						<option value='display_sort_$tableid$'>Sort</option>
						<option value='display_fields_$tableid$'>Fields</option>
						<option value='display_filter_$tableid$'>Filter</option>
						<option value='display_pivot_$tableid$'>Pivot</option>
						<option value='display_chart_$tableid$'>Chart</option>
					</select>
				</div>

				<div class="DisplayDialogTabTableContainer">
					<table ID="SelectDisplayDialogTabTable$tableid$" class='tabdialog'>
						<tr>
							<td><span ID="DisplayDialogTabSortTab$tableid$" class='hyperlink' onClick="showTab(this,'display_sort_$tableid$')">Sort</span></td>
							<td><span class='hyperlink' onClick="showTab(this,'display_fields_$tableid$')">Fields</span></td>
							<td><span class='hyperlink' onClick="showTab(this,'display_filter_$tableid$')">Filter</span></td>
							<td><span class='hyperlink' onClick="showTab(this,'display_pivot_$tableid$')">Pivot</span></td>
							<td><span class='hyperlink' onClick="showTab(this,'display_chart_$tableid$')">Chart</span></td>
						</tr>
					</table>
				</div>
				
				<div ID="display_sort_$tableid$" class="DisplayDialogSort" _style="width:__display_tab_width__;height:__display_tab_height__">
					<!-- Save, save as and delete buttons -->
					<table style="width:100%">
						<!-- Sort & Subtotal -->
						<tr>
							<!--td valign='center' style="vertical-align:middle">Sort</td-->
							<td colspan='3' valign='center' style="vertical-align:middle">
								<select ID="SortBy1_$tableid$" name="sort1" onChange="selectSort(this,'$tableid$')">$SelectSort1$</select>
								<div ID="SortOrder1_$tableid$" class="$sortorderclass1$" AspectSortOrder="$sortordervalue1$" onClick="selectTableSort(this)"></div>
								<!--img ID="SortOrder1_$tableid$" style="position:relative;top:5px;left:-5px;" AspectSortOrder="Ascending" src="http://www.aspect-software.net/Aspect7/images/$sortorderimg1$" onClick="selectTableSort(this)"-->
								<input ID="Subtotal1_$tableid$" name="subtotal1" type='checkbox' onChange="selectSubtotal(this,'$tableid$')" $Subtotal1$>Subtotal
							</td>
						</tr>
						<tr>
							<!--td valign='center' style="vertical-align:middle">Sort</td-->
							<td colspan='3' valign='center' style="vertical-align:middle">						
								<select ID="SortBy2_$tableid$" name="sort2" onChange="selectSort(this,'$tableid$')">$SelectSort2$</select>
								<div ID="SortOrder2_$tableid$" class="$sortorderclass2$" AspectSortOrder="$sortordervalue2$" onClick="selectTableSort(this)"></div>
								<!--img ID="SortOrder2_$tableid$" style="position:relative;top:5px;left:-5px;" AspectSortOrder="Ascending" src="http://www.aspect-software.net/Aspect7/images/$sortorderimg2$" onClick="selectTableSort(this)"-->
								<input ID="Subtotal2_$tableid$" name="subtotal2" type='checkbox' onChange="selectSubtotal(this,'$tableid$')" $Subtotal2$>Subtotal
							</td>
						</tr>
						<tr>
							<!--td valign='center' style="vertical-align:middle">Sort</td-->
							<td colspan='3' valign='center' style="vertical-align:middle">						
								<select ID="SortBy3_$tableid$" name="sort3" onChange="selectSort(this,'$tableid$')">$SelectSort3$</select>
								<div ID="SortOrder3_$tableid$" class="$sortorderclass3$" AspectSortOrder="$sortordervalue3$" onClick="selectTableSort(this)"></div>
								<!--img ID="SortOrder3_$tableid$" style="position:relative;top:5px;left:-5px;" AspectSortOrder="Ascending" src="http://www.aspect-software.net/Aspect7/images/$sortorderimg3$" onClick="selectTableSort(this)"-->
								<input ID="Subtotal3_$tableid$" name="subtotal3" type='checkbox' onChange="selectSubtotal(this,'$tableid$')" $Subtotal3$>Subtotal
							</td>
						</tr>
						<tr>
							<!--td valign='center' style="vertical-align:middle">Sort</td-->
							<td colspan='3' valign='center' style="vertical-align:middle">						
								<select ID="SortBy4_$tableid$" name="sort4" onChange="selectSort(this,'$tableid$')">$SelectSort4$</select>
								<div ID="SortOrder4_$tableid$" class="$sortorderclass4$" AspectSortOrder="$sortordervalue4$" onClick="selectTableSort(this)"></div>
								<!--img ID="SortOrder4_$tableid$" style="position:relative;top:5px;left:-5px;" AspectSortOrder="Ascending" src="http://www.aspect-software.net/Aspect7/images/$sortorderimg4$" onClick="selectTableSort(this)"-->
								<input ID="Subtotal4_$tableid$" name="subtotal4" type='checkbox' onChange="selectSubtotal(this,'$tableid$')" $Subtotal4$>Subtotal
							</td>
						</tr>
					</table>
					
					<br>
					<input type='checkbox' name="SubtotalsOnly" ID="SubtotalsOnly_$tableid$" onChange="validateSubtotalSelections(this,'$tableid$')" $subtotalsonly$> Subtotals Only
					<input type='checkbox' name="GrandTotals" ID="GrandtotalsOnly_$tableid$" onChange="validateSubtotalSelections(this,'$tableid$')" $grandtotals$> Show Grand Totals
				</div>
				
				<!-- Select Fields -->
				<div ID="display_fields_$tableid$" class="DisplayDialogFields" style="width:100%">
					<table style="width:100%">
						<tr>
							<td>
								<div ID="DisplayDialogFieldsTableContainer$tableid$" class="DisplayDialogFieldsTableContainer">
									<table ID="FieldsSelected_$tableid$" class="DisplayDialogFieldsTable">
										$SelectedFields$
									</table>
								</div>
							</td>
							<td>
								<ul class="DisplayDialogMoveField">
									<li class="DisplayDialogMoveFieldUp" onClick="moveTableRow('FieldsSelected_$tableid$',-1)"></li>
									<li class="DisplayDialogMoveFieldDown" onClick="moveTableRow('FieldsSelected_$tableid$',1)"></li>
								</ul>
							</td>
						</tr>
					</table>
				</div>
				
				<!-- Filter -->
				<div ID="display_filter_$tableid$" class="DisplayDialogFilter" _style="width:__display_tab_width__;height:__display_tab_height__;padding:5px 0px 0px 0px">
					<textarea name="Filter">$filter$</textarea>
				</div>
				
				<!-- Pivot -->
				<div ID="display_pivot_$tableid$" class="DisplayDialogPivot" _style="width:__display_tab_width__;height:__display_tab_height__">
					<table>
						<tr>
							<td>Total</td>
							<td><select class="DisplayDialogPivotField" ID="pivotvalue1_$tableid$" name="pivotvalue1">$pivotvalue1$</select></td>
							<td>By</td>
							<td><select class="DisplayDialogPivotField" ID="pivotname1_$tableid$" name="pivotname1">$pivotname1$</select></td>
						</tr>
						<tr>
							<td>Total</td>
							<td><select class="DisplayDialogPivotField" ID="pivotvalue2_$tableid$" name="pivotvalue2">$pivotvalue2$</select></td>
							<td>By</td>
							<td><select class="DisplayDialogPivotField" ID="pivotname2_$tableid$" name="pivotname2">$pivotname2$</select></td>
						</tr>
						<tr>
							<td>Total</td>
							<td><select class="DisplayDialogPivotField" ID="pivotvalue3_$tableid$" name="pivotvalue3">$pivotvalue3$</select></td>
							<td>By</td>
							<td><select class="DisplayDialogPivotField" ID="pivotname3_$tableid$" name="pivotname3">$pivotname3$</select></td>
						</tr>
					</table>
				</div>

				<!-- chart -->
				<div ID="display_chart_$tableid$" class="DisplayDialogChart" _style="width:__display_tab_width__;height:__display_tab_height__">
					<table>
						<tr>
							<td valign='center' style="vertical-align:middle">Chart</td>
							<td><select name="ChartType" style="width:200px">$SelectChartType$</select></td>
							<td colspan='2'>&nbsp;</td>
						</tr>
						<conditional expression:(not(startsWith("__HorzDriverName__","__")))>
							<tr>
								<td valign='center' style="vertical-align:middle">Series</td>							
								<td><!!!include type:expression; expression:"htmlSelect(GreenLight_Chart_Series_Selection,'ChartSeries','__ChartSeries__','style='+quote('width:200px'),'','')"></td>
								<td colspan='2'>&nbsp;</td>
							</tr>
						</conditional>
					</table>
				</div>
				
				<!-- Indicates whether the page is being displayed on a mobile device -->
				<input type="hidden" name="MobileDevice" value="false">
				
				<!-- Location of the widget library the currently selected widget belongs to - aspect, company or local.  -->
				<input type="hidden" name="library_location" value="$library_location$">
				
				<!-- Used to determine the metadata string used to identify the widget in the widget library.  The metadata is a concatenation of
					all three values with an underscore between the documentID and the widget name e.g. DocumentID_WidgetContainerItemID -->
				<input type="hidden" name="DriverID" value="$DriverID$">			
				<input type="hidden" name="DocumentID" value="$DocumentID$">
				<input type="hidden" name="Widget" value="$Widget$">
				<input type="hidden" name="ContainerItemID" value="$ContainerItemID$">
				
				<!-- ID of the display in the widget metadata driver.  It is used when the display is saved -->
				<input type="hidden" name="WidgetMetadataID" value="$WidgetMetadataID$">

				<!--	User name/password used to save widgets to the Aspect server -->
				<input type="hidden" name="Aspect_Support_Report_Widgets_User" value="{Aspect_Support_Report_Widgets_User}">
				<input type="hidden" name="Aspect_Support_Report_Widgets_Pass" value="{Aspect_Support_Report_Widgets_Pass}">
			</form>
		</div>
	</div>
</div>

</widget><widget name="stylesheet mobile 2012" group="2012" category="" description="" type="Simple" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Stylesheet Mobile 2012" modified="10-25-2014 23:37:05" modifiedby="Thnikpad" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=10-10-2014 17:03:20:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
<constant name:"__cssForegroundColor__"; value:"black">
<constant name:"__cssBackgroundColor__"; value:"white">

body 					{background-color:__cssBackgroundColor__;}
div						{font-family:tahoma; font-size:12pt; margin-top:5px; margin-bottom:5px; color:__cssForegroundColor__}
h1 						{font-family:tahoma; font-size:18pt; color:__cssForegroundColor__; margin-top:10px; margin-bottom:5px;}
h2						{font-family:tahoma; font-size:16pt; color:__cssForegroundColor__; padding-bottom:3px; margin-bottom:0px; margin-top:10px;}
h3						{font-family:tahoma; font-size:16pt; font-style:italic; padding-bottom:0px; margin-bottom:0px;}
p						{font-family:tahoma; font-size:12pt; margin-top:5px; margin-bottom:5px; color:__cssForegroundColor__}
a:link					{font-family:tahoma; font-size:12pt; margin-top:5px; margin-bottom:5px; color:__cssForegroundColor__}
a:visited				{font-family:tahoma; font-size:12pt; margin-top:5px; margin-bottom:5px; color:__cssForegroundColor__}
a:active					{font-family:tahoma; font-size:12pt; margin-top:5px; margin-bottom:5px; color:__cssForegroundColor__}
span					{font-family:tahoma; font-size:12pt; margin-top:5px; margin-bottom:5px; color:__cssForegroundColor__}
li						{font-family:tahoma; font-size:12pt;}
select					{font-family:tahoma; font-size:16pt;}
input					{font-family:tahoma; font-size:14pt;}

table 					{font-family: tahoma, helvetica, arial, sans-serif; font-size:12pt; color:__cssForegroundColor__; border-width:0px;}
th 						{vertical-align:top; border-width:0px; padding-top:5px; padding-left:0px; padding-right:5px; padding-bottom:5px;}
td 						{vertical-align:top; border-width:0px; padding-top:5px; padding-left:0px; padding-right:5px; padding-bottom:0px;}

textarea				{-moz-tab-size:2; -o-tab-size:2; -webkit-tab-size:2; tab-size:2;}

@media only screen and (orientation: portrait) {
  body {background-color:__cssBackgroundColor__;}
}

/* Class for showDialog() */
div.showdialog			{position:absolute;top:100px;left:20px;background-color:__cssBackgroundColor__;color:__cssForegroundColor__;border:3px solid white;padding:10px;height:auto;z-index:99}

/* Class for table message */
div.tablemessage			{position:absolute;top:0px;left:0px;background-color:__cssBackgroundColor__;color:__cssForegroundColor__;padding:10px 50px 10px 50px;z-index:99;border:3px solid white}

/* Used to display table attributes */
div.DebugTableAttributes	{z-index:99;position:fixed;top:0px;left:0px;width:500px;height:auto;padding:5px;color:__cssForegroundColor__;background-color:__cssBackgroundColor__;border:none}
img.DebugTableAttributes 	{float:right}

a.menu_option:link		{height:100%;font-size:14pt;color:__cssForegroundColor__;text-decoration: none; background-color:__cssBackgroundColor__}
a.menu_option:visited		{height:100%;font-size:14pt;color:__cssForegroundColor__;text-decoration: none; background-color:__cssBackgroundColor__}
a.menu_option:active		{height:100%;font-size:14pt;color:__cssForegroundColor__;text-decoration: none; background-color:__cssBackgroundColor__}
a.menu_option:hover		{height:100%;font-size:14pt;color:__cssForegroundColor__;text-decoration: none; background-color:__cssBackgroundColor__}
div.menu_option			{width:100%;height:100%;font-size:14pt;color:__cssForegroundColor__;text-decoration: none;padding:10px}
table.menu_option			{width:100%}
table.menu_option td		{border-top:solid 1px #707070;padding:10px 0px 10px 0px;margin:0px}

table.table_controls		{background-color:__cssBackgroundColor__;width:100%;margin:0px;padding:0px}

/* table - no border */
table.noborder			{} 
th.noborder				{text-align:left; vertical-align:top; border-width:0px; border-style:none; padding:2px 2px 2px 2px;}
td.noborder				{vertical-align:top; border-width:0px; border-style:none; padding:2px 2px 2px 2px;}
table.noborder th			{text-align:left; vertical-align:top; border-width:0px; border-style:none; padding:10px 5px 10px 5px;}
table.noborder td			{vertical-align:top; border-width:0px; border-style:none; padding:10px 5px 10px 5px;}

/* table - basic1 */
table.basic1				{border-collapse:collapse;} 
th.basic1				{text-align:left; background-color:__cssBackgroundColor__; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:15px; padding-left:5px; padding-right:5px; padding-bottom:15px;}
td.basic1				{vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:15px; padding-left:5px; padding-right:5px; padding-bottom:15px;}
table.basic1				{} 
table.basic1 th			{text-align:left; background-color:__cssBackgroundColor__; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:15px; padding-left:5px; padding-right:5px; padding-bottom:15px;}
table.basic1 td			{vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:10px; padding-left:5px; padding-right:5px; padding-bottom:10px;}
td.basic1_subtotal		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:10px; padding-left:5px; padding-right:5px; padding-bottom:10px;}
td.basic1_subtotal0		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:10px; padding-left:5px; padding-right:5px; padding-bottom:10px;}
td.basic1_subtotal1		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:10px; padding-left:5px; padding-right:5px; padding-bottom:10px;}
td.basic1_subtotal2		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:10px; padding-left:5px; padding-right:5px; padding-bottom:10px;}
td.basic1_subtotal3		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:10px; padding-left:5px; padding-right:5px; padding-bottom:10px;}
td.basic1_subtotal4		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:10px; padding-left:5px; padding-right:5px; padding-bottom:10px;}
td.basic1_subtotal5		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:10px; padding-left:5px; padding-right:5px; padding-bottom:10px;}
td.basic1_subtotal6		{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:#b8b8b8; padding-top:10px; padding-left:5px; padding-right:5px; padding-bottom:10px;}

/* used to format and position charts associated with tables */
div.table_chart {display:none;width:100%;margin:0px;border:2px solid black;background-color:__cssForegroundColor__;position:absolute;top:20px;left:20px;z-index:2}
img.table_chart_close {float:right;padding:5px 5px 5px 5px; position:relative;top:0px;left:0px;z-index:3}
img.table_chart {width:100%}

/* used to format dialogs used to edit table records */
div.dialog_header {display:none; margin:0px; padding:0px 5px 5px 5px; border-bottom:solid 1px black; background-color:__cssForegroundColor__}
div.default_table_dialog {position:absolute;top:0px;left:0px;display:none;z-index:2;padding:0px; background-color:__cssBackgroundColor__;border:2px solid black}
div.default_table_dialog_only {display:block;z-index:2;padding:0px; background-color:__cssForegroundColor__;border:2px solid black}

/* used to create hyperlinks without the href tag */
p.hyperlink				{text-decoration:underline;margin:15px 0px 5px 0px}
p.hyperlink:hover			{text-decoration:underline;cursor:pointer;margin:15px 0px 5px 0px}
span.hyperlink			{text-decoration:underline;margin:15px 0px 5px 0px}
span.hyperlink:hover		{text-decoration:underline;cursor:pointer;margin:15px 0px 5px 0px}

/*	These are the new styles that allow for multiple tabbed dialogs at one time   Tabs should use span tags instead of a because the a tag jumps around in IE
	The rounded corners are produced by displaying the left side of the image in the TD tag and the right side of the image in the span tag.
*/
table.tabdialog 			{height: 20px; list-style: none; margin: 0; padding: 0; border-collapse:collapse; border-width:1px;}
table.tabdialog td 		{background:#e9e9e9 url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png");  margin: 0px 10px 0px 0px; padding: 0px 0px 0px 10px;}
table.tabdialog span		{cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background:url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png") 100% 0}
table.tabdialog a 		{display: block; margin:0px 0px 0px 0px;padding:0px 10px 0px 0px; background:url("__RequestServer__/?Network=Greenlight&ID=getImage&filename=tabgrey.png") 100% 0; color: #e9e9e9; text-decoration: none; outline: none;}

/* calendar icon */
img.tcalIcon {cursor: pointer;	margin-left: 1px; vertical-align: middle;}

/* calendar container element */
div#tcal {position: absolute; visibility: hidden;	 z-index: 10002;	width: 158px; padding: 2px 0 0 0;}

/* all tables in calendar */
div#tcal table {width: 100%; border: solid 1px silver; border-collapse: collapse; background-color:__cssForegroundColor__;}

/* navigation table */
div#tcal table.ctrl {border-bottom: 0;}

/* navigation buttons */
div#tcal table.ctrl td {width: 15px; height: 20px;}

/* month year header */
div#tcal table.ctrl th {background-color:__cssForegroundColor__; color:__cssBackgroundColor__; border: 0;}

/* week days header */
div#tcal th {border: solid 1px silver; border-collapse: collapse; text-align: center; padding: 3px 0; font-family: tahoma, verdana, arial; font-size: 10px; background-color: gray; color:__cssForegroundColor__;}

/* date cells */
div#tcal td {border: 0; border-collapse: collapse; text-align: center; padding: 2px 0; font-family: tahoma, verdana, arial; font-size: 11px; width: 22px; cursor: pointer;}

/* date highlight in case of conflicting settings order here determines the priority from least to most important */
div#tcal td.othermonth {color: silver;}
div#tcal td.weekend {background-color: #ACD6F5;}
div#tcal td.today {border: solid 1px red;}
div#tcal td.selected {	background-color: #FFB3BE;}

/* iframe element used to suppress windowed controls in IE5/6 */
iframe#tcalIF {position: absolute; visibility: hidden; z-index: 10000; border: 0;}

/* transparent shadow */
div#tcalShade {position: absolute; visibility: hidden; z-index: 10001;}
div#tcalShade table {border: 0; border-collapse: collapse; width: 100%;}
div#tcalShade table td {border: 0; border-collapse: collapse; padding: 0;}
</widget><widget name="Displays Dialog Mobile 2012" group="Display Options" category="" description="" type="Simple" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Displays Dialog Mobile 2012" modified="04-09-2014 15:36:44" modifiedby="Keith-Dell2" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=04-02-2014 18:40:21:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
<!-- dialog header start.  This comment is used by TFormulaEvaluator getDisplayDialog to remove the dialog header since it's not needed -->
<div ID="EditDialogHeaderTemplate$tableid$" class="dialog_header">
	<table style="width:100%">
		<tr>
			<td style="margin:0px;padding:0px; white-space:nowrap; vertical-align:top" valign="top">
				<select name="selectKeyValue" style="width:200px" onChange="dialogRecordSelected(this)">$SelectRecord$</select>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=addRecord20x20.gif" onClick="addDialogRecord(this)"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=deleteRecord20x20.gif" onClick="deleteDialogRecord(this)"/>
			</td>
			<td style="margin:0px;padding:0px; white-space:nowrap" align='right'>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=page_first20x20.png" onClick="updateDialogRecord(this,'first')"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=page_prev20x20.png" onClick="updateDialogRecord(this,'prev')"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=page_next20x20.png" onClick="updateDialogRecord(this,'next')"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=page_last20x20.png" onClick="updateDialogRecord(this,'last')"/>
				<img src="__RequestServer__/?Network=Greenlight&ID=getImage&filename=close20x20.png" style="display:$CanCloseDialog$" onClick="closeTableEditDialog(this)"/>
			</td>
		</tr>
	</table>
</div>
<!-- dialog header end -->

<constant name:"__display_tab_height__"; value:"350px">
<constant name:"__display_tab_width__"; value:"320px">

<div ID="DisplayDialogWrapper$tableid$">

	<!-------------------------------------------------------------------------------------------------------- 
	Main dialog used to edit display
	-------------------------------------------------------------------------------------------------------->
	<div ID="Display_Dialog_$tableid$" style="display:none;position:absolute; left:20px; top:20px; padding:5px; background-color:black; width:300px; border:none;" print='false'>

		<!-------------------------------------------------------------------------------------------------------- 
		Message
		-------------------------------------------------------------------------------------------------------->
		<div ID="Display_Dialog_Msg_$tableid$" style="z-index:99; position:absolute; left:30px; top:40px; display:none; padding:15px; background-color:black; width:325px; height:auto; border:solid 2px white;}" print='false'>
		</div>

		<!-------------------------------------------------------------------------------------------------------- 
		Save display as...  This div is initially hidden and displayed when the user selects Save As 
		-------------------------------------------------------------------------------------------------------->
		<div ID="Save_Display_As_$tableid$" style="z-index:4; position:absolute; left:30px; top:40px; display:none; padding:5px; background-color:black; width:325px; height:150px; border:solid 2px white}" print='false'>
			<form name="Save_Display_As_$tableid$">
				<table>
					<tr>
						<td>Name</td>
						<td><input type='text' name='save_display_as' value="" style="width:250px"></td>
					</tr>
					<tr>
						<td>Location</td>
						<td>
							<select name="save_display_as_location" style="width:250px">
								<conditional expression:"len(getToken('Aspect_Support_Report_Widgets_User'))>0">
									<option value="aspect">Aspect</option>
								</conditional>
								<option value="company">Company</option>
								<option value="local" selected="selected">This Computer</options>
							</select>
						</td>
					</tr>
				</table>
				<br>
				<input type="button" name="SaveDisplayAs" value="Save" onClick="saveDisplayAs2012('$tableid$',1)"> 
				<input type="button" name="cacelSaveAs" value="Cancel" onClick="setVisible('Save_Display_As_$tableid$',false)"> 
			</form>
		</div>

		<form name="Display_Dialog_$tableid$">
			<!-- Save, save as and delete buttons -->
			<select name="DisplayName" ID="SelectDisplay2$tableid$" style="width:100%" onChange="displaySelected2(this,'$tableid$',true)">$SelectDisplay$</select>
			<table class='form'>
				<tr>
					<td><img src="{ImageHostUrl}display_save12x12.png" onClick="saveDisplay2012('$tableid$',0)"> Save</td>
					<td><img src="{ImageHostUrl}display_new.png" onClick="saveDisplayAs2012('$tableid$',0)"> New </td>
					<td><img src="{ImageHostUrl}display_delete12x12.png" onClick="deleteDisplay2012('$tableid$',0)"> Delete</td>
				</tr>
			</table>
			<hr>

			<table class='tabdialog' style="background-color:black">
				<tr>
					<td><span onClick="showTab(this,'display_sort_$tableid$')">Sort</span></td>
					<td><span onClick="showTab(this,'display_fields_$tableid$')">Fields</span></td>
					<td><span onClick="showTab(this,'display_filter_$tableid$')">Filter</span></td>
					<td><span onClick="showTab(this,'display_pivot_$tableid$')">Pivot</span></td>
					<td><span onClick="showTab(this,'display_chart_$tableid$')">Chart</span></td>
				</tr>
			</table>			

			<!-- Sort & Subtotal -->
			<div ID="display_sort_$tableid$" style="width:__display_tab_width__;height:__display_tab_height__">
				<table class='form'>
					<tr>
						<td><select name="sort1" style="width:200px">$SelectSort1$</select></td>
						<td><img ID="SortOrder1_$tableid$" AspectSortOrder="Ascending" src="{ImageHostUrl}$sortorderimg1$" onClick="selectTableSort(this)"></td>
						<td nowrap style="white-space:nowrap;"><input name="subtotal1" type='checkbox' $Subtotal1$>Subtotal</td>													
					</tr>
					<tr>
						<td><select name="sort2" style="width:200px">$SelectSort2$</select></td>
						<td><img ID="SortOrder2_$tableid$" AspectSortOrder="Ascending" src="{ImageHostUrl}$sortorderimg2$" onClick="selectTableSort(this)"></td>
						<td nowrap style="white-space:nowrap;"><input name="subtotal2" type='checkbox' $Subtotal2$>Subtotal</td>
					</tr>
					<tr>
						<td><select name="sort3" style="width:200px">$SelectSort3$</select></td>
						<td><img ID="SortOrder3_$tableid$" AspectSortOrder="Ascending" src="{ImageHostUrl}$sortorderimg3$" onClick="selectTableSort(this)"></td>
						<td nowrap style="white-space:nowrap;"><input name="subtotal3" type='checkbox' $Subtotal3$>Subtotal</td>
					</tr>
				</table>
				
				<hr style="color:#dddddd">
				<input type='checkbox' name="SubtotalsOnly" $subtotalsonly$> Subtotals Only
				<input type='checkbox' name="GrandTotals" $grandtotals$> Grand Totals
			</div>
			
			<!-- Select Fields -->
			<div ID="display_fields_$tableid$" style="width:__display_tab_width__;height:__display_tab_height__">
				<table width="100%">
					<tr>
						<td>
							<div style="width:100%;height:300px;overflow:auto;border:solid 1px black">
								<table ID="FieldsSelected_$tableid$" style="border-collapse:collapse">
									$SelectedFields$
								</table>
							</div>
						</td>
						<td>
							<!-- Up/down  Buttons -->
							<img src="{ImageHostUrl}arrowUp32x32white.png" onClick="moveTableRow('FieldsSelected_$tableid$',-1)"><br>
							<img src="{ImageHostUrl}arrowDown32x32white.png" onClick="moveTableRow('FieldsSelected_$tableid$',1)">
						</td>
					</tr>
				</table>
			</div>
			
			<!-- Filter -->
			<div ID="display_filter_$tableid$" style="width:__display_tab_width__;height:__display_tab_height__;padding:5px 0px 0px 0px">
				Filter<br>
				<textarea name="Filter" style="width:95%;height:40px">$filter$</textarea>
			</div>
			
			<!-- Pivot -->
			<div ID="display_pivot_$tableid$" style="width:__display_tab_width__;height:__display_tab_height__">
				<table>
					<tr>
						<td>Total</td>
						<td><select style="width:200px" ID="pivotvalue1_$tableid$" name="pivotvalue1">$pivotvalue1$</select></td>
						<td>By</td>
						<td><select style="width:200px" ID="pivotname1_$tableid$" name="pivotname1">$pivotname1$</select></td>
					</tr>
					<tr>
						<td>Total</td>
						<td><select style="width:200px" ID="pivotvalue2_$tableid$" name="pivotvalue2">$pivotvalue2$</select></td>
						<td>By</td>
						<td><select style="width:200px" ID="pivotname2_$tableid$" name="pivotname2">$pivotname2$</select></td>
					</tr>
					<tr>
						<td>Total</td>
						<td><select style="width:200px" ID="pivotvalue3_$tableid$" name="pivotvalue3">$pivotvalue3$</select></td>
						<td>By</td>
						<td><select style="width:200px" ID="pivotname3_$tableid$" name="pivotname3">$pivotname3$</select></td>
					</tr>
				</table>
			</div>

			<!-- chart -->
			<div ID="display_chart_$tableid$" style="width:__display_tab_width__;height:__display_tab_height__">
				<table>
					<tr>
						<td valign='center' style="vertical-align:middle">Chart</td>
						<td><select name="ChartType" style="width:200px">$SelectChartType$</select></td>
						<td colspan='2'>&nbsp;</td>
					</tr>
					<conditional expression:(not(startsWith("__HorzDriverName__","__")))>
						<tr>
							<td valign='center' style="vertical-align:middle">Series</td>							
							<td><!!!include type:expression; expression:"htmlSelect(GreenLight_Chart_Series_Selection,'ChartSeries','__ChartSeries__','style='+quote('width:200px'),'','')"></td>
							<td colspan='2'>&nbsp;</td>
						</tr>
					</conditional>
				</table>
			</div>
			
			<!-- Okay / Cancel Buttons -->
			<div style="margin-top:5px; padding:0px;">
				<input type='button' value=' Ok ' onClick="displayDialogOk('$tableid$')">
				<input type='button' value='Cancel' onClick="displayDialogCancel('$tableid$')">
			</div>

			<!-- Indicates whether the page is being displayed on a mobile device -->
			<input type="hidden" name="MobileDevice" value="false">
			
			<!-- Location of the widget library the currently selected widget belongs to - aspect, company or local.  -->
			<input type="hidden" name="library_location" value="$library_location$">
			
			<!-- Used to determine the metadata string used to identify the widget in the widget library.  The metadata is a concatenation of
				all three values with an underscore between the documentID and the widget name e.g. DocumentID_WidgetContainerItemID -->
			<input type="hidden" name="DriverID" value="$DriverID$">			
			<input type="hidden" name="DocumentID" value="$DocumentID$">
			<input type="hidden" name="Widget" value="$Widget$">
			<input type="hidden" name="ContainerItemID" value="$ContainerItemID$">
			
			<!-- ID of the display in the widget metadata driver.  It is used when the display is saved -->
			<input type="hidden" name="WidgetMetadataID" value="$WidgetMetadataID$">

			<!--	User name/password used to save widgets to the Aspect server -->
			<input type="hidden" name="Aspect_Support_Report_Widgets_User" value="{Aspect_Support_Report_Widgets_User}">
			<input type="hidden" name="Aspect_Support_Report_Widgets_Pass" value="{Aspect_Support_Report_Widgets_Pass}">
		</form>
	</div>
</div>

</widget><widget name="Templates" group="2012" category="" description="Templates used to create driver include tags and possible other bits of code in response to shortcut keys in the browser when editing a widget.  Do not delete." type="Container" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Templates" modified="01-20-2017 23:02:04" modifiedby="Thnikpad2" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=02-07-2016 10:42:42:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
Preferences|toolboxx=744|toolboxy=221|aspectfuncx=100|aspectfuncy=100|aspectfuncw=750|aspectfunch=450|aspectfuncLock=false|aspectfuncVisible=false|PublishFtpFilename=Templates.html|PublishToFtpSite=false|PublishFTPAccount=0|PublishFtpDirectory=/|PublishFtpPublicDirectory=/|PublishCopyFile=false|PublishCopyFilename=|PublishWysiwig=false|PublishIncludeAspectScript=false|PublishIncludeAspectStyleshet=false|PublishAsText=false|^
ID=17843|X=8|Y=12|W=180|H=19|AutoHeight=true|AutoWidth=true|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=html|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=|AttachLeft=|AlignLeft=|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<select onChange=\\quot\\showTab(this)\\quot\\>//crlf////tab//<option value='driver_include'>Driver Include</option>//crlf////tab//<option value='driver_include_editable'>Driver Include (Editable)</option>//crlf////tab//<option value='driver_include_dialog'>Driver Include Dialog</option>//crlf//</select>//crlf//^
ID=driver_include|X=8|Y=30|W=822|H=619|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=17843|AttachLeft=|AlignLeft=17843|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<!include type:driver;//crlf////tab//ver: \\quot\\1.0\\quot\\;//crlf////tab//title: \\quot\\\\quot\\;//crlf////tab//ID: \\quot\\\\quot\\;//crlf////tab//HashID: \\quot\\\\quot\\;//crlf////tab//driver: \\quot\\$DriverID$\\quot\\;//crlf////tab//name: \\quot\\\\quot\\;//crlf////tab//systemdriver: \\quot\\false\\quot\\;//crlf////tab//dispose: \\quot\\false\\quot\\;//crlf////tab//state: \\quot\\\\quot\\;//crlf////tab//params: \\quot\\keyexpression=ID~~pipe~~CacheTtl=0~~pipe~~Metadata=$DriverID$\\quot\\;//crlf////tab//keyDescription: \\quot\\\\quot\\;//crlf////tab//display: \\quot\\\\quot\\;//crlf////tab//fields: \\quot\\\\quot\\;//crlf////tab//IncludeFields: \\quot\\\\quot\\;//crlf////tab//ExcludeFields: \\quot\\\\quot\\;//crlf////tab//sort: \\quot\\ID\\quot\\;//crlf////tab//filter: \\quot\\true\\quot\\;//crlf////tab//BaseFilter: \\quot\\\\quot\\;//crlf////tab//class: \\quot\\basic1\\quot\\;//crlf////tab//maxrecords: \\quot\\250\\quot\\;//crlf////tab//startrecord: \\quot\\0\\quot\\;//crlf////tab//style: \\quot\\width:auto\\quot\\;//crlf////tab//_style: \\quot\\float:left;width:100\\percent\\\\quot\\;//crlf////tab//height:\\quot\\auto\\quot\\;//crlf////tab//maxheight:\\quot\\300px\\quot\\;//crlf////tab//canSelect: \\quot\\false\\quot\\;//crlf////tab//readOnly: \\quot\\false\\quot\\;//crlf////tab//canEdit: \\quot\\false\\quot\\;//crlf////tab//canAdd: \\quot\\false\\quot\\;//crlf////tab//canDelete: \\quot\\false\\quot\\;//crlf////tab//inspectMenu: \\quot\\\\quot\\;//crlf////tab//EmbedValues: \\quot\\\\quot\\;//crlf////tab//EditDialogID: \\quot\\$DriverID$Dialog\\quot\\;//crlf////tab//DialogHeader: \\quot\\false\\quot\\;//crlf////tab//canCloseDialog: \\quot\\true\\quot\\;//crlf////tab//ExternalParams: \\quot\\\\quot\\;//crlf////tab//ExternalFilters: \\quot\\\\quot\\;//crlf////tab//TableControls: \\quot\\true\\quot\\;//crlf////tab//TableHeader: \\quot\\true\\quot\\;//crlf////tab//TableBorder: \\quot\\true\\quot\\;//crlf////tab//RecordCount: \\quot\\true\\quot\\;//crlf////tab//Timestamp: \\quot\\true\\quot\\;//crlf////tab//SelectDisplay: \\quot\\true\\quot\\;//crlf////tab//EditDisplay: \\quot\\true\\quot\\;//crlf////tab//Menu: \\quot\\\\quot\\;//crlf////tab//faq: \\quot\\\\quot\\;//crlf////tab//procedure: \\quot\\\\quot\\;//crlf////tab//video: \\quot\\\\quot\\;//crlf////tab//Messages: \\quot\\true\\quot\\;//crlf////tab//ChartType: \\quot\\\\quot\\;//crlf////tab//ChartWidth: \\quot\\640\\quot\\;//crlf////tab//ChartHeight: \\quot\\480\\quot\\;//crlf////tab//ChartLabels: \\quot\\Down_45\\quot\\;//crlf////tab//ChartTitle: \\quot\\\\quot\\;//crlf////tab//ChartStyle: \\quot\\display:none\\quot\\;//crlf////tab//RefreshInterval: \\quot\\0\\quot\\;//crlf////tab//RefreshWhenHidden: \\quot\\true\\quot\\;//crlf////tab//RefreshIntervalRemote: \\quot\\0\\quot\\;//crlf////tab//RefreshWhenHiddenRemote: \\quot\\true\\quot\\;//crlf////tab//_Javascript: \\quot\\DocumentID~~pipe~~Widget~~pipe~~ContainerItemID~~pipe~~Params\\quot\\;//crlf////tab//debug: \\quot\\false\\quot\\;//crlf//>^
ID=driver_include_dialog|X=8|Y=30|W=822|H=621|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=17843|AttachLeft=|AlignLeft=17843|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<!-- Dialog used to edit a record -->//crlf//<div ID=\\quot\\$DriverID$Dialog\\quot\\ class=\\quot\\default_table_dialog\\quot\\ style=\\quot\\height:auto; width:100\\percent\\; max-width:500px; display:none;\\quot\\>//crlf////tab//<div style=\\quot\\padding:5px;width:100\\percent\\\\quot\\>//crlf////tab////tab//<!-- set this image to visible to include a close icon when the dialog header is disabled -->//crlf////tab////tab//<div class=\\quot\\EditDialogCloseIcon\\quot\\ onclick=\\quot\\closeTableEditDialog(this)\\quot\\></div>//crlf////crlf////tab////tab//<!--//tab//Note:  If a a Javascript function named initializeDialogxxx where xxx is the dialog ID is defined\\comma\\ //crlf////tab////tab////tab//it will be called//tab//after the dialog values have been set and before the dialog is made visible.//crlf////tab////tab////tab////crlf////tab////tab////tab//An initialization function may also be specified by including it in an attribute named 'aspectinit'//crlf////tab////tab////tab//in the dialog div above.  Only include the function name with no parentheses or arguments.  //crlf////tab////tab////tab//Arguments can be made//tab//available to the function by including them as attributes or by embedding //crlf////tab////tab////tab//them in this div.  Use this method when the dialog ID is randomized to allow for multiple instances//crlf////tab////tab////tab//in one document.//crlf////crlf////tab////tab////tab//If an Aspect script is defined with the ID xxx_DataSubmitted where xxx is the driver ID\\comma\\ it will//crlf////tab////tab////tab//be called whenever data is submitted due to an edit in either the table or the dialog.//crlf////tab////tab////tab//Arguments passed to the script are in the form://crlf////crlf////tab////tab////tab////tab//driver=xxx//amp//r=n//amp//fields=//amp//values=//crlf////crlf////tab////tab////tab//where driver is the name of a system driver\\comma\\ r is the absolute record number\\comma\\//crlf////tab////tab////tab//fields is a pipe-delimited list of field ID's and values is a pipe-delimited list of//crlf////tab////tab////tab//values.  Ampersands and pipes in the values are tokenized by surrounding//crlf////tab////tab////tab//them with two forward slashes.//crlf////tab////tab//-->//crlf// //crlf////tab////tab//<!include type:expression; expression:htmlConstant(\\quot\\TextFieldWidth\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\300px\\quot\\)>//crlf////tab////tab//<!include type:expression; expression:htmlConstant(\\quot\\NumberFieldWidth\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\150px\\quot\\)>//crlf////crlf////tab////tab//<!-- The TableEditDialogTabsContainerExclusive and TableEditDialogSelectContainerExclusive//crlf////tab////tab////tab//classes are used to make either the tabs or the select box visible\\comma\\ depending on the//crlf////tab////tab////tab//size of the browser.  If only one or two tabs are to be included\\comma\\ the //crlf////tab////tab////tab//TableEditDialogTabsContainer class can be used for the tabs and the select box can//crlf////tab////tab////tab//be ommitted.//crlf////tab////tab//-->//crlf////tab////tab//<div class=\\quot\\TableEditDialogTabsContainerExclusive\\quot\\>//crlf////tab////tab////tab//<table class='tabdialog'>//crlf////tab////tab////tab////tab//<tr>//crlf//$Tabs$//crlf////tab////tab////tab////tab//</tr>//crlf////tab////tab////tab//</table>//tab////crlf////tab////tab//</div>//crlf////crlf////tab////tab//<div class=\\quot\\TableEditDialogSelectContainerExclusive\\quot\\>//crlf////tab////tab////tab//<select onChange=\\quot\\showTab(this);this.blur();\\quot\\ class=\\quot\\TableEditDialogSelect\\quot\\>//crlf////tab////tab////tab////tab//<option value='__salt__main'>Main</option>//crlf////tab////tab////tab//</select>//crlf////tab////tab//</div>//crlf////crlf//$tabscontent$//crlf////tab//</div>//crlf//</div>//crlf//^
ID=driver_include_editable|X=8|Y=30|W=822|H=621|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=17843|AttachLeft=|AlignLeft=17843|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<!include type:driver;//crlf////tab//ver: \\quot\\1.0\\quot\\;//crlf////tab//title: \\quot\\\\quot\\;//crlf////tab//HashID: \\quot\\\\quot\\;//crlf////tab//driver: \\quot\\$DriverID$\\quot\\;//crlf////tab//name: \\quot\\\\quot\\;//crlf////tab//systemdriver: \\quot\\false\\quot\\;//crlf////tab//dispose: \\quot\\false\\quot\\;//crlf////tab//state: \\quot\\\\quot\\;//crlf////tab//params: \\quot\\keyexpression=ID~~pipe~~CacheTtl=0~~pipe~~Metadata=$DriverID$\\quot\\;//crlf////tab//keyDescription: \\quot\\\\quot\\;//crlf////tab//display: \\quot\\\\quot\\;//crlf////tab//fields: \\quot\\\\quot\\;//crlf////tab//IncludeFields: \\quot\\\\quot\\;//crlf////tab//ExcludeFields: \\quot\\\\quot\\;//crlf////tab//sort: \\quot\\ID\\quot\\;//crlf////tab//filter: \\quot\\true\\quot\\;//crlf////tab//class: \\quot\\basic1\\quot\\;//crlf////tab//maxrecords: \\quot\\300\\quot\\;//crlf////tab//startrecord: \\quot\\0\\quot\\;//crlf////tab//style: \\quot\\width:auto\\quot\\;//crlf////tab//canSelect: \\quot\\true\\quot\\;//crlf////tab//readOnly: \\quot\\false\\quot\\;//crlf////tab//canEdit: \\quot\\true\\quot\\;//crlf////tab//canAdd: \\quot\\true\\quot\\;//crlf////tab//canDelete: \\quot\\true\\quot\\;//crlf////tab//InsertPosition: \\quot\\top\\quot\\;//crlf////tab//RefreshOnDataSubmit: \\quot\\true\\quot\\;//crlf////tab//inspectMenu: \\quot\\\\quot\\;//crlf////tab//EmbedValues: \\quot\\\\quot\\;//crlf////tab//EditDialogID: \\quot\\$DriverID$Dialog\\quot\\;//crlf////tab//_EditDialogID: \\quot\\DocumentID~~pipe~~Widget~~pipe~~Item~~pipe~~$DriverID$~~pipe~~__salt__\\quot\\;//crlf////tab//DialogHeader: \\quot\\false\\quot\\;//crlf////tab//canCloseDialog: \\quot\\true\\quot\\;//crlf////tab//ExternalParams: \\quot\\\\quot\\;//crlf////tab//ExternalFilters: \\quot\\\\quot\\;//crlf////tab//TableControls: \\quot\\true\\quot\\;//crlf////tab//TableHeader: \\quot\\true\\quot\\;//crlf////tab//TableBorder: \\quot\\true\\quot\\;//crlf////tab//RecordCount: \\quot\\true\\quot\\;//crlf////tab//Timestamp: \\quot\\true\\quot\\;//crlf////tab//SelectDisplay: \\quot\\true\\quot\\;//crlf////tab//EditDisplay: \\quot\\true\\quot\\;//crlf////tab//Menu: \\quot\\\\quot\\;//crlf////tab//faq: \\quot\\\\quot\\;//crlf////tab//procedure: \\quot\\\\quot\\;//crlf////tab//video: \\quot\\\\quot\\;//crlf////tab//Messages: \\quot\\true\\quot\\;//crlf////tab//ChartType: \\quot\\\\quot\\;//crlf////tab//ChartWidth: \\quot\\640\\quot\\;//crlf////tab//ChartHeight: \\quot\\480\\quot\\;//crlf////tab//ChartLabels: \\quot\\Down_45\\quot\\;//crlf////tab//ChartTitle: \\quot\\\\quot\\;//crlf////tab//ChartStyle: \\quot\\display:none\\quot\\;//crlf////tab//RefreshInterval: \\quot\\0\\quot\\;//crlf////tab//RefreshWhenHidden: \\quot\\true\\quot\\;//crlf////tab//RefreshIntervalRemote: \\quot\\0\\quot\\;//crlf////tab//RefreshWhenHiddenRemote: \\quot\\true\\quot\\;//crlf////tab//_Javascript: \\quot\\DocumentID~~pipe~~Widget~~pipe~~ContainerItemID~~pipe~~Params\\quot\\;//crlf////tab//debug: \\quot\\false\\quot\\;//crlf//>
</widget><widget name="Stylesheet 2015" group="UI 2015" category="" description="" type="Container" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Stylesheet 2015" modified="04-27-2024 23:43:51" modifiedby="Thnikpad3" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=04-21-2024 02:18:25:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
Preferences|toolboxx=50|toolboxy=37|aspectfuncx=100|aspectfuncy=100|aspectfuncw=750|aspectfunch=auto|aspectfuncLock=true|aspectfuncVisible=false|PublishFtpFilename=Stylesheet 2015.html|PublishToFtpSite=false|PublishFTPAccount=0|PublishFtpDirectory=/|PublishFtpPublicDirectory=/|PublishCopyFile=false|PublishCopyFilename=|PublishWysiwig=false|PublishIncludeAspectScript=false|PublishIncludeAspectStyleshet=false|PublishAsText=false|^
ID=top_bar|X=0|Y=0|W=901|H=21|AutoHeight=true|AutoWidth=true|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=html|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=|AttachLeft=|AlignLeft=|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|^
ID=left_bar|X=0|Y=15|W=181|H=662|AutoHeight=true|AutoWidth=true|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=html|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=top_bar|AttachLeft=|AlignLeft=top_bar|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|^
ID=619854|X=183|Y=15|W=150|H=20|AutoHeight=true|AutoWidth=true|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=html|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=top_bar|AttachLeft=left_bar|AlignLeft=|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<select style=\\quot\\width:200px\\quot\\ onChange=\\quot\\showTab(this)\\quot\\>//crlf////tab//<option value='804309'>All Styles</option>//crlf////tab//<option value='801478'>Styles For Email</option>//crlf////tab//<option value='563888'>Aspect Charts</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='687311'>Aspect Support</option>//crlf////tab//<option value='886080'>Flyer</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='438873'>Defaults</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='263096'>UI Menu</option>//crlf////tab//<option value='785637'>UI Popups</option>//crlf////tab//<option value='632391'>UI View Management</option>//crlf////tab//<option value='482135'>UI Inspect</option>//crlf////tab//<option value='625046'>Icons</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='630514'>Chapters</option>//crlf////tab//<option value='174218'>Tabbed Dialog and Menu</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='943138'>Tables (border\\comma\\ no border...)</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='75699'>Table headers</option>//crlf////tab//<option value='568962'>Table Edit Dialog\\comma\\ Message\\comma\\ Chart</option>//crlf////tab//<option value='217598'>Displays Dialog</option>//crlf////tab//<option value='537776'>Dialog Headers</option>//crlf////tab//<option value='309792'>Table Info</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='443135'>Calendar</option>//crlf////tab//<option value='977595'>Other</option>//crlf//</select>//crlf//^
ID=804309|X=183|Y=33|W=865|H=625|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Stylesheet 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Stylesheet 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf////tab//{@gfs(getToken(\\quot\\homedir\\quot\\)+\\quot\\widgetlib_77NaWu0FhKDKXL7C70JpnKmy\\quot\\)}//crlf////tab//1.01//crlf//</state>//crlf////crlf//<include type:expression; expression:htmlConstant(\\quot\\EmFactor1\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\1.6em\\quot\\)>//crlf//<include type:expression; expression:htmlConstant(\\quot\\EmFactor2\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\1.4em\\quot\\)>//crlf//<include type:expression; expression:htmlConstant(\\quot\\EmFactor3\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\1.2em\\quot\\)>//crlf//<include type:expression; expression:htmlConstant(\\quot\\EmFactor4\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\1em\\quot\\)>//crlf////crlf//<include type:expression; expression:htmlConstant(\\quot\\BackgroundColor\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\if(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))\\comma\\\\quot\\black\\quot\\\\comma\\\\quot\\white\\quot\\))>//crlf//<include type:expression; expression:htmlConstant(\\quot\\ForegroundColor\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\if(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))\\comma\\\\quot\\white\\quot\\\\comma\\\\quot\\black\\quot\\))>//crlf////crlf///* Include Defaults *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\438873\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Aspect Support *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\687311\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Tables (border\\comma\\ no border...) *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\943138\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Aspect Charts *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\563888\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include UI Menu *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\263096\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include UI Popups *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\785637\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include UI View Management *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\632391\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include UI Inspect *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\482135\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Icons *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\625046\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Table headers *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\75699\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Table Edit Dialog\\comma\\ Message\\comma\\ Chart *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\568962\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Displays Dialog *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\217598\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Dialog Headers *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\537776\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Calendar *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\443135\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Table Info *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\309792\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Chapters *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\630514\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Tabbed Dialog and Menu *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\174218\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Include Other *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\977595\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////crlf////crlf////crlf//^
ID=438873|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<include type:expression; expression:htmlConstant(\\quot\\AspectLightGrey\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\//pound//faf5f5\\quot\\)>//crlf////crlf///*********************************************************************//crlf//Original Styles//crlf//*********************************************************************///crlf///*//crlf////tab//h1 //tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 10pt; color:black; margin-top:10px; margin-bottom:5px;}//crlf////tab//h2//tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 10pt; color:black; padding-bottom:3px; margin-bottom:0px; margin-top:10px;}//crlf////tab//h3//tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 10pt; font-style:italic; padding-bottom:0px; margin-bottom:0px;}//crlf////tab//p//tab////tab////tab////tab////tab////tab//{font-family: tahoma\\comma\\ helvetica\\comma\\ arial\\comma\\ sans-serif; font-size:8pt; margin-top:5px; margin-bottom:5px;color:black}//crlf////tab//ul//tab////tab////tab////tab////tab////tab//{margin: 0; padding-top:0px; padding-left: 20; }//crlf////tab//ul li//tab////tab////tab////tab////tab//{margin: 0; padding-top: 5; list-style-type: circle;}//crlf////tab//ol//tab////tab////tab////tab////tab////tab//{margin: 0; padding-top:0px; padding-left: 20; }//crlf////tab//ol li//tab////tab////tab////tab////tab//{margin: 0; padding-top: 5;}//crlf////crlf////tab//table //tab////tab////tab////tab//{font-family: tahoma\\comma\\ helvetica\\comma\\ arial\\comma\\ sans-serif; font-size:8pt; color: black; border-width:0px; border-collapse:collapse;}//crlf////tab//th //tab////tab////tab////tab////tab////tab//{vertical-align:top; border-width:0px; padding-top:5px; padding-left:0px; padding-right:5px; padding-bottom:5px;}//crlf////tab//td //tab////tab////tab////tab////tab////tab//{vertical-align:top; border-width:0px; padding-top:5px; padding-left:0px; padding-right:5px; padding-bottom:0px;}//crlf//*///crlf////crlf///* Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//h1 //tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 1em; color:white; margin-top:10px; margin-bottom:5px;}//crlf////tab//h2//tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 1em; color:white; padding-bottom:3px; margin-bottom:0px; margin-top:10px;}//crlf////tab//h3//tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 1em; color:white; font-style:italic; padding-bottom:0px; margin-bottom:0px;}//crlf////tab//p//tab////tab////tab////tab////tab////tab////tab//{font-family: tahoma\\comma\\ helvetica\\comma\\ arial\\comma\\ sans-serif; font-size:1em; color:white; margin-top:5px; margin-bottom:5px}//crlf////tab//table //tab////tab////tab////tab//{font-family: tahoma\\comma\\ helvetica\\comma\\ arial\\comma\\ sans-serif; font-size:1em; color: white; border-width:0px; border-collapse:collapse;}//crlf//</conditional>//crlf////crlf///* Not reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//h1 //tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 1em; color:black; margin-top:10px; margin-bottom:5px;}//crlf////tab//h2//tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 1em; color:black; padding-bottom:3px; margin-bottom:0px; margin-top:10px;}//crlf////tab//h3//tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 1em; font-style:italic; padding-bottom:0px; margin-bottom:0px;}//crlf////tab//p//tab////tab////tab////tab////tab////tab////tab//{font-family: tahoma\\comma\\ helvetica\\comma\\ arial\\comma\\ sans-serif; font-size:1em; margin-top:5px; margin-bottom:5px;color:black}//crlf////tab//table //tab////tab////tab////tab//{font-family: tahoma\\comma\\ helvetica\\comma\\ arial\\comma\\ sans-serif; font-size:1em; color: black; border-width:0px; border-collapse:collapse;}//crlf//</conditional>//crlf////crlf//ul//tab////tab////tab////tab////tab////tab//{margin: 0; padding-top:0px; padding-left: 20; }//crlf//ul li//tab////tab////tab////tab////tab//{margin: 0; padding-top: 5; list-style-type: circle;}//crlf//ol//tab////tab////tab////tab////tab////tab//{margin: 0; padding-top:0px; padding-left: 20; }//crlf//ol li//tab////tab////tab////tab////tab//{margin: 0; padding-top: 5;}//crlf////crlf//th //tab////tab////tab////tab////tab////tab//{vertical-align:top; border-width:0px; padding:5px 5px 5px 0px;}//crlf//td //tab////tab////tab////tab////tab////tab//{vertical-align:top; border-width:0px; padding:5px 5px 0px 0px;}//crlf////crlf//textarea//tab////tab////tab//{-moz-tab-size:2; -o-tab-size:2; -webkit-tab-size:2; tab-size:2;}//crlf////crlf///* convenience class to disable wrapping *///crlf//span.nowrap {white-space:nowrap}//crlf////crlf///* buttons used in system dialog *///crlf//input.systemdialogbutton {margin:0px 10px 0px 0px}//crlf////crlf///* set background color of disabled inputs *///crlf//:disabled {color:black;background-color:__AspectLightGrey__;}//crlf////crlf///* Class for showDialog() *///crlf//div.showdialog {position:absolute;top:100px;left:200px;background-color:white;color:black;border:1px solid black;padding:10px;height:auto;z-index:99}//crlf////pound//SystemDialog {border-radius:4px;}//crlf////crlf///* Class for divs surrounding tabs in dialog *///crlf//div.dialogtab//tab////tab////tab////tab//{border:solid 1px black;padding:10px}//crlf////crlf///*//tab//from http://stackoverflow.com/questions/4698054/css-does-the-width-include-the-padding//crlf////tab//used to standardize padding in IE *///crlf//* {box-sizing:border-box; -moz-box-sizing:border-box; -webkit-box-sizing:border-box}//crlf////crlf///* style for 'more' used to display additional text when clicked//crlf////tab//The more() function is used to create this element *///crlf//span.more {cursor:pointer;text-decoration:underline;margin-left:5px}//crlf////crlf//img.hyperlink:hover//tab////tab//{cursor:pointer;}//crlf////crlf///* iframe element used to suppress windowed controls in IE5/6 *///crlf//iframe//pound//tcalIF {position: absolute; visibility: hidden; z-index: 10000; border: 0;}//crlf////crlf///* Meter //crlf////crlf//NOTE: Meter styles are hardwired in THtmlMeter now because css classes don't work //crlf//in gmail.//crlf////crlf//*///crlf//div.meter_outer {border-radius:3px;border:solid 1px //pound//c9c9c9;float:left}//crlf//div.meter_outerleft {float:left;}//crlf//div.meter_outerright {float:right;}//crlf//div.meter_innerleft {float:right;background-color://pound//dc8989;border-right:solid 1px black}//crlf//div.meter_innerright {position:relative;left:1;background-color://pound//2cf911;}//crlf////crlf///* meter - opaque *///crlf//div.meter_opaque {float:left}//crlf////crlf///*********************************************************************//crlf//Description list (Could use more styles.  A dl is a good way toreplace//crlf//a series of header / paragraph combinations.//crlf//*********************************************************************///crlf//dl {}//crlf//dt {font-weight:bold}//crlf//dd {margin:10px 0px 10px 10px}//crlf////crlf///*********************************************************************//crlf//Refresh\\comma\\ close and other icons//crlf//*********************************************************************///crlf//div.RefreshIconFloatRight {display:inline;float:right;padding:18px 0px 18px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf////crlf///*********************************************************************//crlf//Back-Office Styles//crlf//*********************************************************************///crlf///* table used to format inventory sizes *///crlf//table.format_size {border-collapse:collapse; margin:0px; padding:0px; border:none}//crlf//td.format_size_prefix {text-align:right; margin:0px; padding:0px; border:none} //crlf//td.format_size_quantity {text-align:right; margin:0px; padding:0px; border:none} //crlf//td.format_size_description {text-align:left; margin:0px; padding:0px 0px 0px 5px; border:none} //crlf////crlf///************************************************************************//crlf//Styles used for video container created using getVideoPlayer() function//crlf//*************************************************************************///crlf//ul.video_hyperlink {list-style-type:none;margin:0px;padding:0px 10px 0px 0px;}//crlf//li.video_hyperlink {list-style-type:none;cursor:pointer;display:block;text-decoration:underline}//crlf//span.video_hyperlink_title {padding:0px 0px 0px 5px}//crlf//select.video_hyperlink {}//crlf////crlf///************************************************************************//crlf//Styles used for faqs and procedures displayed in site map guides//crlf//*************************************************************************///crlf//div.sitemap_doc_container {border:solid 1px //pound//a0a0a0;border-radius:8px;padding:0px 0px 0px 0px;margin:5px 0px 5px 0px;}//crlf//div.sitemap_doc_content {padding:5px 5px 5px 5px;}//crlf//ul.support_task_hyperlink {list-style-type:none;padding:0px 10px 0px 0px}//crlf//li.support_task_hyperlink {list-style-type:none;cursor:pointer;text-decoration:underline;}//crlf//span.support_task_hyperlink {padding:0px 0px 0px 5px}//crlf////crlf///************************************************************************//crlf//Styles for site map template//crlf//*************************************************************************///crlf///* style for views that have been deployed and are available to the user *///crlf//span.site_map_view_name_deployed {font-weight:bold;cursor:pointer;text-decoration:underline;padding:0px 0px 0px 0px}//crlf////crlf///* style for views that are ready for deployment but that have not been deployed yet *///crlf//span.site_map_view_name_ready {font-style:normal;font-weight:bold;color:black;cursor:pointer;text-decoration:underline;padding:0px 0px 0px 0px}//crlf////crlf///* style for views that are not ready for deployment *///crlf//span.site_map_view_name {font-style:normal;font-weight:bold;color:black;cursor:pointer;text-decoration:underline;padding:0px 0px 0px 0px}//crlf////crlf//span.site_map_view_description {display:block;padding:5px 0px 0px 0px}//crlf////crlf///* embedded view containers *///crlf///* NOTE: Do not add a margin here.  Otherwise\\comma\\ views with 50\\percent\\ width will not float next to each other *///crlf//div.embedded_view_section {margin:0px 0px 0px 0px}//crlf////crlf///************************************************************************//crlf//styles used by the select file dialog.  This dialog is created by the //crlf//selectFile() function.//crlf//*************************************************************************///crlf//div.select_file_dialog {width:100\\percent\\;position:absolute;top:100px;left:100px;z-index:99}//crlf////crlf///* Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//div.select_file_dialog_title_container {height:35px;background-color:black;padding:5px 0px 5px 5px;margin:0px;border:solid 1px white;font-size:10pt;font-weight:bold;}//crlf//</conditional>//crlf////crlf///* Not reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//div.select_file_dialog_title_container {height:35px;background-color://pound//e9e9e9;padding:5px 0px 5px 5px;margin:0px;border:solid 1px black;font-size:10pt;font-weight:bold;}//crlf//</conditional>//crlf////crlf//@media only screen and (min-width:1281px) {//crlf////tab//div.select_file_dialog_title_container {height:20px;padding:0px 0px 0px 5px};//crlf//};//crlf////crlf///************************************************************************//crlf//Default styles for all devices//crlf//*************************************************************************///crlf//select {font-size:__EmFactor1__;padding:0px 0px 0px 0px}//crlf//option {font-size:1.0em}//crlf//input {font-size:__EmFactor1__}//crlf////crlf///*//tab//This table is used for dialog fields and for external filters.  These can be //crlf////tab////tab//put into a table that will display inline (across the page) when the screen is //crlf////tab////tab//wide but vertically when it is not.  Using a table keeps the width of the cells //crlf////tab////tab//containing the labels consistent when displayed vertically. *///crlf//table.inline tr {display:table-row;margin-right:0px;}//crlf//@media only screen and (min-width:700px) {//crlf////tab///* when the minimum width is 700px\\comma\\ display the table rows inline *///crlf////tab//table.inline tr {display:inline;margin-right:10px;}//crlf//}//crlf////crlf//input[type=checkbox] {//crlf//  /* Double-sized Checkboxes *///crlf//  -ms-transform: scale(1.5\\comma\\1.5); /* IE *///crlf//  -moz-transform: scale(1.5\\comma\\1.5); /* FF *///crlf//  -webkit-transform: scale(1.5\\comma\\1.5); /* Safari and Chrome *///crlf//  -o-transform: scale(1.5\\comma\\1.5); /* Opera *///crlf//  margin: 10px 10px 10px 10px;//crlf//}//crlf////crlf///*//tab//Default widths for date/time and number fields //crlf////tab////tab//These are used in table records and may also be used in dialogs//crlf//*///crlf//input.DefaultNumberInput {min-width:60px;max-width:100px;text-align:right}//crlf//input.DefaultDateInput {min-width:100px}//crlf//input.DefaultTimeInput {min-width:100px}//crlf//input.DefaultDateTimeInput {min-width:140px}//crlf////crlf///* 04-02-2016: Added these styles to standardize widths for text\\comma\\ date and //crlf////tab//number inputs.  The width of the input is increased on smaller screens to //crlf////tab//accommodate the larger font used.  A media query below sets the width back//crlf////tab//to a smaller value on larger screens. *///crlf//input.short {width:100\\percent\\;max-width:120px}//crlf//input.medium {width:100\\percent\\;max-width:150px}//crlf//input.long {width:100\\percent\\;max-width:250px}//crlf//input.date {width:150px}//crlf//input.time {width:150px}//crlf//input.datetime {width:auto}//crlf//input.number {width:85px;text-align:right}//crlf//input.int {width:80px;text-align:right}//crlf//select.short {width:100\\percent\\;max-width:120px}//crlf//select.medium {width:100\\percent\\;max-width:150px}//crlf//select.long {width:100\\percent\\;max-width:250px}//crlf//span.number {display:block;width:85px;text-align:right}//crlf//span.int {display:block;width:80px;text-align:right}//crlf//span.date {display:block;width:125px}//crlf//span.time {display:block;width:125px}//crlf//span.datetime {display:block;width:auto}//crlf////tab////crlf///************** [2] Screen width >=320px **************///crlf//@media only screen and (min-width:320px) {//crlf//}//crlf////crlf///************** [3] Screen width >=519px **************///crlf//@media only screen and (min-width:519px) {//crlf////tab///*//tab//Note: Dates are displayed like a select box on a mobile device and they do//crlf////tab////tab////tab//not take as much room.  In a desktop browser at about 1/2 the width of the screen\\comma\\ //crlf////tab////tab////tab//they need more room.  Bottom line- the field can be smaller for a mobile device and //crlf////tab////tab////tab//needs to be larger for a desktop browser. *///crlf////tab//input.date {width:165px}//crlf////tab//input.time {width:165px}//crlf//}//crlf////crlf///************** [4] Screen width >=759px **************///crlf//@media only screen and (min-width:759px) {//crlf//}//crlf////crlf///************** [5] Screen width >=1024px **************///crlf//@media only screen and (min-width:1024px) {//crlf////tab//body {font-size:__EmFactor3__}//crlf////tab//select {font-size:__EmFactor3__;padding:0px 0px 0px 0px}//crlf////tab//option {font-size:__EmFactor3__}//crlf////tab//input {font-size:__EmFactor3__}//crlf////tab//p {font-size:__EmFactor3__}//crlf////crlf//  /* go back to standard-sized Checkboxes *///crlf////tab//input[type=checkbox] {//crlf////tab//  -ms-transform: scale(1\\comma\\1); /* IE *///crlf////tab//  -moz-transform: scale(1\\comma\\1); /* FF *///crlf////tab//  -webkit-transform: scale(1\\comma\\1); /* Safari and Chrome *///crlf////tab//  -o-transform: scale(1\\comma\\1); /* Opera *///crlf////tab//  margin: 5px 5px 5px 5px;//crlf////tab//}//crlf////crlf////tab//input.DefaultNumberInput {min-width:50px;max-width:70px;text-align:right}//crlf////tab//input.DefaultDateInput {min-width:80px}//crlf////tab//input.DefaultTimeInput {min-width:80px}//crlf////tab//input.DefaultDateTimeInput {min-width:120px}//crlf//}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1024px) {//crlf////tab///* adjust size of select boxes *///crlf////tab//select {font-size:__EmFactor4__;padding:0px 0px 0px 0px}//crlf////tab//option {font-size:__EmFactor4__}//crlf////tab//input {font-size:__EmFactor4__}//crlf////tab//body {font-size:__EmFactor4__}//crlf////tab//p {font-size:__EmFactor4__}//crlf////crlf////tab///* 04-02-2016: Added these styles to standardize widths for text\\comma\\ date and //crlf////tab//number inputs.  The width of the input is increased on smaller screens to //crlf////tab//accommodate the larger font used. *///crlf////tab//input.short {width:100\\percent\\;max-width:80px}//crlf////tab//input.medium {width:100\\percent\\;max-width:150px}//crlf////tab//input.long {width:100\\percent\\;max-width:250px}//crlf////tab//input.date {width:120px}//crlf////tab//input.time {width:80px}//crlf////tab//input.datetime {width:auto}//crlf////tab//input.number {width:80px;text-align:right}//crlf////tab//input.int {width:80px;text-align:right}//crlf////tab//select.short {width:100\\percent\\;max-width:80px}//crlf////tab//select.medium {width:100\\percent\\;max-width:150px}//crlf////tab//select.long {width:100\\percent\\;max-width:250px}//crlf////tab//span.number {width:80px;text-align:right}//crlf////tab//span.int {width:80px;text-align:right}//crlf////tab//span.date {width:80px}//crlf////tab//span.time {width:80px}//crlf////tab//span.datetime {width:auto}//crlf////crlf////tab///*********************************************************************//crlf////tab//Refresh\\comma\\ close and other icons//crlf////tab//*********************************************************************///crlf////tab//div.RefreshIconFloatRight {display:inline;float:right;padding:12px 0px 12px 24px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf//}//crlf////crlf////crlf//^
ID=943138|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/* tables *///crlf////crlf///*  Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab////tab//table.basic1//tab////tab////tab////tab//{color:white; background-color:black;} //crlf////tab////tab//th.basic1//tab////tab////tab////tab////tab//{color:white; background-color:black; vertical-align:top; border-width:1px; border-style:solid; border-color:8686a0; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px; text-align:left; }//crlf////tab////tab//table.basic1 th//tab////tab//{color:white; background-color:black; vertical-align:top; border-width:1px; border-style:solid; border-color:8686a0; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px; text-align:left; }//crlf////tab////tab//td.basic1//tab////tab////tab////tab////tab//{color:white; background-color:black; vertical-align:top; border-width:1px; border-style:solid; border-color:8686a0; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}//crlf////tab////tab//table.basic1 td//tab////tab//{color:white; background-color:black; vertical-align:top; border-width:1px; border-style:solid; border-color:8686a0; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}//crlf////tab////tab//table.basic1//tab////tab////tab////tab//{} //crlf////tab////tab//table.basic1 tr.section//tab//{border:solid 1px //pound//b8b8b8}//crlf////tab////tab//td.basic1_subtotal//tab////tab//{cfont-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab////tab//td.basic1_subtotal0//tab////tab//{cfont-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab////tab//td.basic1_subtotal1//tab////tab//{cfont-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab////tab//td.basic1_subtotal2//tab////tab//{cfont-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab////tab//td.basic1_subtotal3//tab////tab//{cfont-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab////tab//td.basic1_subtotal4//tab////tab//{cfont-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab////tab//td.basic1_subtotal5//tab////tab//{cfont-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab////tab//td.basic1_subtotal6//tab////tab//{cfont-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////crlf////tab////tab//table.noborder//tab////tab////tab//{color:white; background-color:black;}//crlf////tab////tab//th.noborder//tab////tab////tab////tab////tab//{color:white; background-color:black;text-align:left; vertical-align:top; border-width:0px; border-style:none; border-color:white; padding:2px 2px 2px 2px;}//crlf////tab////tab//table.noborder th//tab////tab//{color:white; background-color:black;text-align:left; vertical-align:top; border-width:0px; border-style:none; border-color:white; padding:2px 2px 2px 2px;}//crlf////tab////tab//td.noborder//tab////tab////tab////tab////tab//{color:white; background-color:black;vertical-align:top; border-width:0px; border-style:none; border-color://pound//b8b8b8; padding:2px 2px 2px 2px;}//crlf////tab////tab//table.noborder td//tab////tab//{color:white; background-color:black;vertical-align:top; border-width:0px; border-style:none; border-color://pound//b8b8b8; padding:2px 2px 2px 2px;}//crlf//</conditional>//crlf////crlf///*  Not Reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//table.basic1//tab////tab////tab////tab//{} //crlf////tab//th.basic1//tab////tab////tab////tab//{text-align:left; background-color:white; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}//crlf////tab//td.basic1//tab////tab////tab////tab//{vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}//crlf////tab//table.basic1//tab////tab////tab////tab//{} //crlf////tab///*//crlf////tab////tab//11-02-2015: Modified th to remove border to provide a workaround for scrolling tables in which//crlf////tab////tab//the header widths don't exactly match the column widths in a table.  They can be off a few//crlf////tab////tab//pixels\\comma\\ possibly due to the scrollbar.//crlf////tab////tab//table.basic1 th//tab////tab////tab//{text-align:left; background-color:white; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px;}//crlf////tab//*///crlf////tab//table.basic1 th//tab////tab////tab//{text-align:left; background-color:white; vertical-align:bottom; border:none; padding:2px 3px 2px 3px;}//crlf////tab//table.basic1 td//tab////tab////tab//{vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//table.basic1 tr.section//tab//{border:solid 1px //pound//b8b8b8}//crlf////tab//td.basic1_subtotal//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.basic1_subtotal0//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.basic1_subtotal1//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.basic1_subtotal2//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.basic1_subtotal3//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.basic1_subtotal4//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.basic1_subtotal5//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.basic1_subtotal6//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////crlf////tab//td.enterprise_amount_subtotal//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.enterprise_amount_subtotal0//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.enterprise_amount_subtotal1//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.enterprise_amount_subtotal2//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.enterprise_amount_subtotal3//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.enterprise_amount_subtotal4//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.enterprise_amount_subtotal5//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////tab//td.enterprise_amount_subtotal6//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color://pound//b8b8b8; padding:2px 3px 2px 3px;}//crlf////crlf////tab///* bordered table *///crlf////tab//table.bordered//tab////tab////tab//{border-style:solid; border-width:1; padding:10px; border-color:cccccc;}//crlf////tab//table.bordered th//tab////tab////tab//{vertical-align: bottom; border-style:solid; border-width:1; margin:0px; padding-left:5px; padding-top:0px; padding-right:10px; padding-bottom:0px; border-color:cccccc;}//crlf////tab//table.bordered td//tab////tab////tab//{border-style:solid; border-width:1; margin:0px; padding-left:5px; padding-top:0px; padding-right:10px; padding-bottom:0px; border-color:cccccc;}//crlf////crlf////tab///* table - no border *///crlf////tab//table.noborder//tab////tab////tab//{} //crlf////tab//th.noborder//tab////tab////tab////tab//{text-align:left; vertical-align:top; border-width:0px; border-style:none; border-color://pound//b8b8b8; padding:2px 2px 2px 2px;}//crlf////tab//td.noborder//tab////tab////tab////tab//{vertical-align:top; border-width:0px; border-style:none; border-color://pound//b8b8b8; padding:2px 2px 2px 2px;}//crlf////tab//table.noborder th//tab////tab////tab//{text-align:left; vertical-align:top; border-width:0px; border-style:none; border-color://pound//b8b8b8; padding:2px 2px 2px 2px;}//crlf////tab//table.noborder td//tab////tab////tab//{vertical-align:top; border-width:0px; border-style:none; border-color://pound//b8b8b8; padding:2px 2px 2px 2px;}//crlf//</conditional>//crlf////crlf///* td classes *///crlf//td.negative {background-color:red}//crlf//td.redbkgnd {background-color://pound//ffcccc}//crlf//td.greenbkgnd {background-color://pound//d9ffe1}//crlf////crlf///* table - black for tooltip *///crlf//table.black//tab////tab////tab//{} //crlf//table.black th//tab//{color:black}//crlf//table.black td//tab//{color:black}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1281px) {//crlf//}//crlf//^
ID=263096|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/************************************************************************//crlf//Styels for UI menu bar//crlf//*************************************************************************///crlf///* Container surrounding the menu bar *///crlf////pound//MenuBarComtainer {margin:0px;padding:0px;width:100\\percent\\}//crlf////crlf///*//tab//UL containing selected user\\comma\\ computer and view//crlf////tab////tab//In the LI element\\comma\\ using float:left instead of display:inline causes the width//crlf////tab////tab//to be implemented.  Margin sets spacing outside the li element and padding adjusts//crlf////tab////tab//the position of the text within the li element //crlf//*///crlf//ul.MenuBar {width:100\\percent\\;padding:0px;margin:0px}//crlf//ul.MenuBar li {font-weight:normal;font-size:__EmFactor1__}//crlf////crlf///*//tab//LI elements used for the selected user\\comma\\ computer and view.  One class is used//crlf////tab////tab//when the element is not selected and another when it is.  The border and background//crlf////tab////tab//color change when the element is selected.  Borders in both cases are done so that//crlf////tab////tab//a double border does not occur where two elements share a border//crlf//*///crlf////crlf///* a less pronounced gradient is used for mobile devices (a) since there is not as much space//crlf////tab//over which to apply the gradient *///crlf//<constant name:__tabgradienta__; value:\\quot\\linear-gradient(to bottom left\\comma\\//pound//2ba751\\comma\\//pound//166d35)\\quot\\>//crlf//<constant name:__tabgradientb__; value:\\quot\\linear-gradient(to bottom left\\comma\\//pound//3ec568\\comma\\//pound//166d35)\\quot\\>//crlf////crlf//li.MenuBarLeft {float:left;display:block;border-top:solid 1px black;border-bottom:solid 1px black;border-left:solid black 1px;border-right:none;background:__tabgradienta__;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li.MenuBarMiddle {float:left;display:block;border-top:solid 1px black;border-bottom:solid 1px black;border-left:solid black 1px;border-right:none;background:__tabgradienta__;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li.MenuBarRight {float:left;display:block;border-top:solid 1px black;border-bottom:solid 1px black;border-left:solid black 1px;border-right:solid 1px black;background:__tabgradienta__;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li.MenuBarLeftSelected {float:left;display:block;border-top:solid 1px black;border-bottom:none;border-left:solid black 1px;border-right:none;background:__tabgradienta__;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li.MenuBarMiddleSelected {float:left;display:block;border-top:solid 1px black;border-bottom:none;border-left:solid black 1px;border-right:none;background:__tabgradienta__;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li.MenuBarRightSelected {float:left;display:block;border-top:solid 1px black;border-bottom:none;border-left:solid black 1px;border-right:solid 1px black;background:__tabgradienta__;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf////crlf///* original gray *///crlf//li._MenuBarLeft {float:left;display:block;border-top:solid 1px black;border-bottom:solid 1px black;border-left:solid black 1px;border-right:none;background-color://pound//F0F0F0;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li._MenuBarMiddle {float:left;display:block;border-top:solid 1px black;border-bottom:solid 1px black;border-left:solid black 1px;border-right:none;background-color://pound//F0F0F0;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li._MenuBarRight {float:left;display:block;border-top:solid 1px black;border-bottom:solid 1px black;border-left:solid black 1px;border-right:solid 1px black;background-color://pound//F0F0F0;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li._MenuBarLeftSelected {float:left;display:block;border-top:solid 1px black;border-bottom:none;border-left:solid black 1px;border-right:none;background-color://pound//FFFFFF;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li._MenuBarMiddleSelected {float:left;display:block;border-top:solid 1px black;border-bottom:none;border-left:solid black 1px;border-right:none;background-color://pound//FFFFFF;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf//li._MenuBarRightSelected {float:left;display:block;border-top:solid 1px black;border-bottom:none;border-left:solid black 1px;border-right:solid 1px black;background-color://pound//FFFFFF;margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;text-align:left;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;cursor:pointer}//crlf////crlf///* list items included in the top bar.  Widths are set here *///crlf////pound//UISelectedUser {width:30\\percent\\;height:36px}//crlf////pound//UISelectedComputer {width:30\\percent\\;height:36px}//crlf////pound//UISelectedView {width:30\\percent\\;height:36px}//crlf////pound//UISettings {width:10\\percent\\;height:36px}//crlf////crlf///* icons displayed in the top bar *///crlf////pound//UISelectedUserIcon {float:left;margin:0px 0px 0px 40\\percent\\;padding:36px 0px 0px 36px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_perm_identity_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////pound//UISelectedComputerIcon {float:left;margin:0px 0px 0px 40\\percent\\;padding:36px 0px 0px 36px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_laptop_windows_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////pound//UISelectedViewIcon {float:left;margin:0px 0px 0px 40\\percent\\;padding:36px 0px 0px 36px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_web_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////pound//UISettingsIcon {float:left;margin:0px 0px 0px 0px;padding:36px 0px 0px 36px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_menu_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////pound//UIContactUs {display:none;margin:0px;padding:0px}//crlf////crlf///* text displayed in the top bar *///crlf////pound//UISelectedUserText {color:white;font-weight:bold;display:none;padding:0px 0px 0px 5px;line-height:36px;vertical-align:bottom;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}//crlf////pound//UISelectedComputerText {color:white;font-weight:bold;display:none;padding:0px 0px 0px 5px;line-height:36px;vertical-align:bottom;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}//crlf////pound//UISelectedViewText {color:white;font-weight:bold;display:none;padding:0px 0px 0px 5px;line-height:36px;vertical-align:bottom;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}//crlf////pound//UISettingsText {color:white;font-weight:bold;display:none;padding:0px 0px 0px 5px;line-height:36px;vertical-align:bottom}//crlf////crlf///************** [3] Screen width >=519px **************///crlf//@media only screen and (min-width:519px) {//crlf////tab///* change the gradient in the top bar *///crlf////tab//li.MenuBarLeft {background:__tabgradientb__;}//crlf////tab//li.MenuBarMiddle {background:__tabgradientb__;}//crlf////tab//li.MenuBarRight {background:__tabgradientb__;}//crlf////tab//li.MenuBarLeftSelected {background:__tabgradientb__;}//crlf////tab//li.MenuBarMiddleSelected {background:__tabgradientb__;}//crlf////tab//li.MenuBarRightSelected {background:__tabgradientb__;}//crlf////crlf////tab///* icons displayed in the top bar *///crlf////tab////pound//UISelectedUserIcon {margin:0px 0px 0px 5px;}//crlf////tab////pound//UISelectedComputerIcon {margin:0px 0px 0px 5px;}//crlf////tab////pound//UISelectedViewIcon {margin:0px 0px 0px 5px;}//crlf////tab////pound//UISettingsIcon {margin:0px 0px 0px 5px;}//crlf////crlf////tab///* show text in top menu bar (user\\comma\\ computer\\comma\\ view) *///crlf////tab////pound//UISelectedUserText {display:inline}//crlf////tab////pound//UISelectedComputerText {display:inline}//crlf////tab////pound//UISelectedViewText {display:inline}//crlf////tab////pound//UISettingsText {display:inline}//crlf//}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1024px) {//crlf////tab///* add a small margin to the left of the top menu *///crlf////tab////pound//MenuBarComtainer {padding-left:0.0\\percent\\;width:100\\percent\\}//crlf////crlf////tab///* adjust size of list items in menu bar *///crlf////tab//ul.MenuBar li {font-size:__EmFactor4__}//crlf////crlf////tab///* adjust widths of menu bar items *///crlf////tab////pound//UISelectedUser {width:30\\percent\\;max-width:200px;height:24px}//crlf////tab////pound//UISelectedComputer {width:30\\percent\\;max-width:200px;height:24px}//crlf////tab////pound//UISelectedView {width:30\\percent\\;max-width:200px;height:24px}//crlf////tab////pound//UISettings {width:45px;height:24px}//crlf////crlf////tab///* adjust icon sizes and dimensions *///crlf////tab////pound//UISelectedUserIcon {padding:24px 0px 0px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_perm_identity_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////pound//UISelectedComputerIcon {padding:24px 0px 0px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_laptop_windows_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////pound//UISelectedViewIcon {padding:24px 0px 0px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_web_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////pound//UISettingsIcon {padding:24px 0px 0px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_menu_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////pound//UIContactUs {display:block}//crlf////tab////crlf////tab///* adjust dimensions of text in the menu bar *///crlf////tab////pound//UISelectedUserText {padding:0px 0px 0px 5px;line-height:24px;}//crlf////tab////pound//UISelectedComputerText {padding:0px 0px 0px 5px;line-height:24px;}//crlf////tab////pound//UISelectedViewText {padding:0px 0px 0px 5px;line-height:24px;}//crlf////tab////pound//UISettingsText {padding:0px 0px 0px 5px;line-height:24px;}//crlf////crlf//}//crlf////crlf//^
ID=785637|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/************************************************************************//crlf//Styles for UI Popups (user\\comma\\ computer\\comma\\ view)//crlf//*************************************************************************///crlf//div.UIPopup {position:absolute;top:50px;left:20px;width:250px;height:350px;padding:10px;border-top:none;border-left:solid 1px black;border-right:solid 1px black;border-bottom:solid 1px black;background-color://pound//FFFFFF;z-index:99}//crlf////crlf///* Containers (div) surrounding popup content for user\\comma\\ computer and view *///crlf////pound//UIUserPopup {background-color:__BackgroundColor__;border-color:__ForegroundColor__}//crlf////pound//UIComputerPopup {background-color:__BackgroundColor__;border-color:__ForegroundColor__}//crlf////pound//UIViewPopup {background-color:__BackgroundColor__;border-color:__ForegroundColor__}//crlf////pound//UISettingsPopup {background-color:__BackgroundColor__;border-color:__ForegroundColor__}//crlf////crlf///* Title text in popup windows *///crlf//h1.PopupTitle {padding:0px;margin:0px}//crlf////crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_open_in_new_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_open_in_new_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_open_in_new_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_open_in_new_white_18dp_2x.png\\quot\\)>//crlf//</conditional>//crlf////crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_open_in_new_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_open_in_new_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_open_in_new_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_open_in_new_black_18dp_2x.png\\quot\\)>//crlf//</conditional>//crlf////crlf///* Button clicked to open a view from the view popup //crlf////tab// The OpenViewButtonAlt class is used when the button is displayed in a guide instead of the view//crlf////tab// menu.  The padding is adjusted so the button is aligned horizontally with the parameters.//crlf////tab// The class is modified by showViewParamsContainer() when the params are displayed in the guide and//crlf////tab// it is restored by restoreUIViewParamsContainer() when the params are moved back to the view menu//crlf//*///crlf//div.OpenViewButton {display:inline; margin:0px 0px 0px 0px;padding:18px 18px 18px 18px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_open_in_new_18dp_2x__\\quot\\) no-repeat center;}//crlf//div.OpenViewButtonAlt {display:inline; margin:0px 0px 0px 0px;padding:9px 18px 27px 18px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_open_in_new_18dp_2x__\\quot\\) no-repeat center;}//crlf////crlf///* div for popup content *///crlf//div.UIPopup1 {border-top:none;height:300px};//crlf////crlf///* UL containing list items for user name / password *///crlf///* The ul.ULUserProfile stye is added because setting the style by ID was not working *///crlf////pound//ULUserProfile {border:none;float:none;display:block;margin:0px;padding:0px}//crlf//ul.ULUserProfile {border:none;float:none;display:block;margin:0px;padding:0px}//crlf////pound//ULUserProfile li {border:none;display:block;list-style-type:none;}//crlf////crlf///* UL containing search box in company and computer in popup content *///crlf////pound//ULComputerSearch {border:none;float:none;display:block;margin:0px;padding:0px}//crlf////pound//ULComputerSearch li {border:none;display:block;}//crlf////crlf///* UL containing history in company and computer in popup content *///crlf////pound//ULComputerHistory {border:none;float:none;display:block;margin:0px;padding:0px}//crlf////pound//ULComputerHistory li {border:none;display:block;}//crlf////crlf///* UL containing list items for company and computer in popup content *///crlf////pound//ULCompanyComputer {border:none;float:none;display:block;margin:0px;padding:0px}//crlf////pound//ULCompanyComputer li {border:none;display:block;}//crlf////crlf///* UL containing package\\comma\\ category and view in popup content *///crlf////pound//ULPackageCategoryView {width:100\\percent\\;border:none;float:none;display:block;margin:0px;padding:0px}//crlf////pound//ULPackageCategoryView li {width:100\\percent\\;border:none;display:block}//crlf////crlf///*//tab//Input elements used to get user\\comma\\ company\\comma\\ computer\\comma\\ package\\comma\\ category and view //crlf////tab////tab//Setting the width to 60\\percent\\ causes them to align with the User and Computer menu options//crlf////tab////tab//in the top menubar//crlf//*///crlf////pound//UIselect_user_profile {width:60\\percent\\;max-width:300px}//crlf////pound//UIselect_user_password {width:60\\percent\\;max-width:300px}//crlf////pound//UISelectUserCompany {width:60\\percent\\;max-width:300px}//crlf////pound//UISelectUserComputer {width:60\\percent\\;max-width:300px}//crlf////pound//UISelectUserComputerHistory {width:60\\percent\\;max-width:300px}//crlf////pound//UISelectPackage {width:60\\percent\\;max-width:300px}//crlf////pound//UISelectViewCategory {width:60\\percent\\;max-width:300px}//crlf////pound//UISelectView {width:60\\percent\\;max-width:300px}//crlf////crlf///* UL used for view parameters *///crlf////pound//ULViewParams {padding:0px;margin:0px;}//crlf////crlf///* add some space above the view parameters for smaller screens *///crlf////pound//view_params_outer_container {margin:10px 0px 0px 0px}//crlf////crlf///*//tab//LI used for view parameters.  Padding and margin need to be 0 so the element//crlf////tab////tab//does not take up room when the parameter is hidden.  Add margins to the input element.//crlf//*///crlf//div.ViewParamsContainer {float:left;margin:5px 5px 5px 0px;padding:0px;}//crlf////crlf///* span surrounding \\quot\\Open\\quot\\ buton *///crlf////pound//open_view_container {clear:both}//crlf////crlf///* div used to display parameters in a location other than the view popup *///crlf////pound//AltUIParamsContainer {width:100\\percent\\;max-width:600px;height:auto;min-height:15px;padding:0px;margin:0px;border:none;background-color:transparent;}//crlf////crlf///* div surrounding all view output\\comma\\ including the select box and table used to select views *///crlf////pound//ViewOutputContainer {padding-left:0.0\\percent\\;width:100.0\\percent\\}//crlf////crlf///* select box for open views *///crlf////pound//OutputSelectContainer {display:inline;width:100\\percent\\;overflow:auto;}//crlf////crlf///* Note: The max-width of this element is temporarily hard-wired to match the max width//crlf////tab//of the tabs above it.  The tabs and this element need to be contained in a wrapper that//crlf////tab//sets the max-width so this element and the tabs can be sized to 100\\percent\\ of the wrapper *///crlf////pound//OutputSelect {display:none;width:100\\percent\\;max-width:647px;padding:2px 0px 2px 0px}//crlf////crlf///****************************************************************//crlf// styles for select box mirror in the views popup //crlf//*****************************************************************///crlf////pound//UIOutputSelectMirror {width:60\\percent\\;max-width:300px} //crlf////pound//UIOutputSelectMirrorClose {padding:18px 0px 18px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf////pound//UIOutputSelectMirrorRefresh {padding:18px 0px 18px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf////crlf///* Element used to display Close All option to close all open views *///crlf////pound//UICloseAllViews {float:right;display:none}//crlf////crlf///*//tab//Element used to close the current display.  Displayed when the view selection//crlf////tab////tab//is made using the select box.//crlf//*///crlf////pound//UICloseSelectedView {float:right;border:none;padding:0px 0px 0px 20px;width:10\\percent\\;height:20px;margin:5px 0px 0px 0px;display:none;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1024px) {//crlf////tab///****************************************************************//crlf////tab// styles for select box mirror in the views popup //crlf////tab//*****************************************************************///crlf////tab////pound//UIOutputSelectMirrorClose {padding:12px 0px 12px 24px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf////tab////pound//UIOutputSelectMirrorRefresh {padding:12px 0px 12px 24px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf////crlf////tab///* remove space above the view parameters for larger screens *///crlf////tab////pound//view_params_outer_container {margin:0px 0px 0px 0px}//crlf////crlf////tab///* Button clicked to open a view from the view popup *///crlf////tab//div.OpenViewButton {display:inline; margin:0px 0px 0px 0px;padding:12px 0px 12px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_open_in_new_24dp_1x__\\quot\\) no-repeat center;}//crlf////tab//div.OpenViewButtonAlt {display:inline; margin:0px 0px 0px 0px;padding:5px 0px 19px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_open_in_new_24dp_1x__\\quot\\) no-repeat center;}//crlf//}//crlf//^
ID=75699|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/************************************************************************//crlf// styles for controls in table header //crlf//*************************************************************************///crlf///*//tab//The outer div containing all table data including the table\\comma\\ displays dialog//crlf////tab////tab//edit dialog\\comma\\ page args and table menu.  This element uses position:relative//crlf////tab////tab//so the showTableMenu() function can correctly position the table menu when//crlf////tab////tab//it is opened.  It is necessary to consider that a table menu may be opened//crlf////tab////tab//from within a dialog and not just from the primary table//crlf//*///crlf//div.OuterTableDiv {position:relative;top:0px;left:0px}//crlf////crlf///*//tab//The table is laid out as://crlf////tab////crlf////tab////tab//<tr><th>Table controls</th></tr>//crlf////tab////tab//<tr><th>Table header columns</th></tr>//crlf////tab////tab//<tr><td>Refular table data</td></tr>//crlf////tab////tab////tab////crlf////tab////tab//The table controls are included in a TH so they can be made to match the//crlf////tab////tab//width of the table.//crlf////crlf////tab////tab//The styles in TableHeaderTD are ultimately determined by the class of the//crlf////tab////tab//table being displayed.  The border\\comma\\ padding and margin are set explicitly//crlf////tab////tab//by TAspectDriver when the table is created.//crlf//*///crlf//td.TableHeaderTD {padding:0px}//crlf////crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_list_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_list_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_mode_edit_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_mode_edit_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_more_horiz_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_more_horiz_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_equalizer_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_equalizer_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_refresh_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_refresh_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_skip_previous_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_skip_previous_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_navigate_before_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_navigate_before_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_navigate_next_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_navigate_next_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_skip_next_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_skip_next_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_add_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_add_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_remove_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_remove_white_24dp_1x.png\\quot\\)>//crlf////crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_list_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_list_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_mode_edit_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_mode_edit_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_more_horiz_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_more_horiz_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_equalizer_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_equalizer_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_refresh_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_refresh_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_skip_previous_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_skip_previous_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_navigate_before_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_navigate_before_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_navigate_next_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_navigate_next_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_skip_next_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_skip_next_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_add_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_add_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_remove_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_remove_white_18dp_2x.png\\quot\\)>//crlf//</conditional>//crlf////crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_list_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_list_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_mode_edit_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_mode_edit_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_more_horiz_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_more_horiz_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_equalizer_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_equalizer_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_refresh_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_refresh_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_skip_previous_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_skip_previous_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_navigate_before_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_navigate_before_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_navigate_next_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_navigate_next_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_skip_next_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_skip_next_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_add_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_add_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_remove_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_remove_black_24dp_1x.png\\quot\\)>//crlf////crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_list_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_list_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_mode_edit_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_mode_edit_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_more_horiz_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_more_horiz_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_equalizer_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_equalizer_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_refresh_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_refresh_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_skip_previous_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_skip_previous_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_navigate_before_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_navigate_before_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_navigate_next_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_navigate_next_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_skip_next_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_skip_next_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_add_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_add_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_remove_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_remove_black_18dp_2x.png\\quot\\)>//crlf//</conditional>//crlf////crlf///*//tab//ul containing all header elements.  //crlf//*///crlf//ul.TableHeaderUL {width:100\\percent\\;padding:0px 0px 0px 0px;margin:0px;height:auto;overflow-y:hidden;}//crlf////crlf//table.table_controls//tab////tab//{width:100\\percent\\;margin:0px;padding:0px}//crlf////crlf///* li containing each element in the header *///crlf///*//tab//line-height is added to TableHeaderSelectDisplay to increase vertical size so the icons//crlf////tab////tab//are displayed fully\\comma\\ including the underline on hover //crlf//*///crlf//li.TableHeaderSelectDisplay {display:block;border:none;white-space:nowrap;width:90\\percent\\;max-width:400px;line-height:36px}//crlf//li.TableHeaderAddDelete {display:block;border:none;padding:0px 0px 0px 0px}//crlf//li.TableHeaderLISub1 {display:none;border:none;padding:0px 0px 0px 0px}//crlf//li.TableControls {display:block;padding:0px 0px 0px 0px;height:36px;border:none}//crlf////crlf///* ul used to place the menu\\comma\\ record count and timestamp inside TableHeaderLISub1 *///crlf//ul.TableHeaderULSub1 {display:inline;padding:0px 0px 10px 0px;margin:0px;height:auto}//crlf////crlf///* li used in TableHeaderULSub1 *///crlf//li.TableRecordCount {display:inline;border:none;padding:0px 0px 0px 0px;white-space:normal}//crlf//li.TableHeaderMenu {display:inline;border:none;padding:0px 0px 0px 10px}//crlf//li.TableTimestampContainer {display:inline;border:none;padding:0px 0px 0px 10px;white-space:normal}//crlf////crlf///* span surrounding table timestamp *///crlf//span.TableTimestamp {white-space:nowrap}//crlf////crlf///* span surrounding table record count *///crlf//span.TableRecordCountSpan {white-space:nowrap}//crlf////crlf///* ul containing add/delete icons *///crlf//ul.ULTableIconAddDelete {display:inline}//crlf////crlf///*//tab//styles for popup table menu containing print\\comma\\ export... *///crlf//div.TableMenu {display:none;z-index:2;position:absolute;top:0px;left:0px;border:solid 1px __ForegroundColor__;background-color:__BackgroundColor__;width:auto;height:auto;padding:5px 10px 10px 10px;color:__ForegroundColor__}//crlf//div.TableMenu ul {border:none;padding:0px;margin:0px}//crlf//div.TableMenu li {display:block;font-size:__EmFactor1__;list-style-type:none;cursor:pointer;border:none;width:auto;min-width:175px}//crlf//div.TableMenu li:hover {text-decoration:underline}//crlf////crlf///* ul containing table icons.  This is embedded in the li.TableControls *///crlf//ul.TableControlsUL {width:auto;height:auto;border:none;padding:0px 0px 20px 0px;}//crlf//ul.TableControlsUL li {padding-top:15px 0px 0px 0px;height:auto}//crlf////crlf///* icon used to edit display.  Hidden for small screen.  *///crlf//div.DisplayDialogIconEditDisplay {display:none}//crlf////crlf///* td containing checkbox used to select record *///crlf//th.selectRecordTH {width:36px;max-width:36px}//crlf//td.selectRecordTD {width:36px;max-width:36px}//crlf////crlf///* icon used to edit record *///crlf//th.OpenEditDialogTH {width:36px;max-width:36px}//crlf//td.OpenEditDialogTD {width:36px;max-width:36px}//crlf//div.OpenEditDialogTDDiv {margin:0px;padding:0px;width:30px;height:36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_mode_edit_18dp_2x__\\quot\\) no-repeat center;}//crlf//div.OpenEditDialogTHDiv {margin:0px;padding:0px;width:30px;height:36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_mode_edit_18dp_2x__\\quot\\) no-repeat center;}//crlf////crlf///* icon used to inspect record *///crlf//th.inspectRecordTH {width:36px;max-width:36px}//crlf//td.inspectRecordTD {width:36px;max-width:36px}//crlf//div.inspectRecordTDDiv {margin:0px;padding:0px;width:30px;height:36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_list_18dp_2x__\\quot\\) no-repeat center;}//crlf//div.inspectRecordTHDiv {margin:0px;padding:0px;width:30px;height:36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_list_18dp_2x__\\quot\\) no-repeat center;}//crlf////crlf///*********************************************************************//crlf//styles for table icons - graph\\comma\\ print\\comma\\ next\\comma\\ prev... //crlf//padding is added to the top and bottom to make the icons appear completely\\comma\\ otherwise the height is not sufficient//crlf//*********************************************************************///crlf//li.TableIconMenu {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_more_horiz_18dp_2x__\\quot\\) no-repeat center;}//crlf//li.TableIconInfo {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=info32x32.png\\quot\\) no-repeat center;}//crlf//li.TableIconExport {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=download32x32.png\\quot\\) no-repeat center;} //crlf//li.TableIconPrint {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=print32x32.png\\quot\\) no-repeat center;} //crlf//li.TableIconGraph {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_equalizer_18dp_2x__\\quot\\) no-repeat center;} //crlf//li.TableIconFirst {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_skip_previous_18dp_2x__\\quot\\) no-repeat center;} //crlf//li.TableIconPrev {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_navigate_before_18dp_2x__\\quot\\) no-repeat center;} //crlf//li.TableIconNext {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_navigate_next_18dp_2x__\\quot\\) no-repeat center;} //crlf//li.TableIconLast {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_skip_next_18dp_2x__\\quot\\) no-repeat center;} //crlf//li.TableIconAdd {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_add_18dp_2x__\\quot\\) no-repeat center;} //crlf//li.TableIconDelete {display:inline;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_remove_18dp_2x__\\quot\\) no-repeat center;} //crlf////crlf///* don't show the refresh icon for tables on small screens. *///crlf//li.TableIconRefresh {display:none;padding:0px 0px 20px 42px;height:32px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_refresh_18dp_2x__\\quot\\) no-repeat center;} //crlf////crlf//li.TableIconMenu:hover {border-bottom:solid 1px black}//crlf//li.TableIconInfo:hover {border-bottom:solid 1px black}//crlf//li.TableIconExport:hover {border-bottom:solid 1px black}//crlf//li.TableIconPrint:hover {border-bottom:solid 1px black}//crlf//li.TableIconGraph:hover {border-bottom:solid 1px black}//crlf//li.TableIconRefresh:hover {border-bottom:solid 1px black}//crlf//li.TableIconFirst:hover {border-bottom:solid 1px black}//crlf//li.TableIconPrev:hover {border-bottom:solid 1px black}//crlf//li.TableIconNext:hover {border-bottom:solid 1px black}//crlf//li.TableIconLast:hover {border-bottom:solid 1px black}//crlf//li.TableIconAdd:hover {border-bottom:solid 1px black}//crlf//li.TableIconDelete:hover {border-bottom:solid 1px black}//crlf////crlf///************** [4] Screen width >=759px **************///crlf//@media only screen and (min-width:759px) {//crlf////tab///************************************************************************//crlf////tab// styles for controls in table header //crlf////tab//*************************************************************************///crlf////tab///*//tab//li containing each element in the table header //crlf////tab////tab////tab//Display them inline//crlf////tab//*///crlf////tab//li.TableHeaderSelectDisplay {display:inline;border:none;white-space:nowrap;width:90\\percent\\;max-width:400px;line-height:36px}//crlf////tab//li.TableControls {float:none;display:inline;padding:0px 0px 0px 20px;height:auto;border:none}//crlf////tab//ul.TableControlsUL {display:inline;float:right;padding:0px 0px 20px 0px}//crlf////crlf////tab///* show the icon used to edit a display next to the display select box *///crlf////tab///* NOTE: This icon now continues to be hidden.  It creates clutter *///crlf////tab//div.DisplayDialogIconEditDisplay {display:none;padding:10px 32px 10px 0px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_search_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////crlf////tab///* add the refresh icon to the table icons *///crlf////tab///* this icon is not left hidden.  It creates clutter *///crlf////tab//li.TableIconRefresh {display:inline}//crlf//}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1024px) {//crlf////tab///************************************************************************//crlf////tab// styles for controls in table header //crlf////tab//*************************************************************************///crlf////tab///*//tab//li containing each element in the table header //crlf////tab////tab////tab//Display them inline//crlf////tab//*///crlf////tab//li.TableHeaderSelectDisplay {display:inline;border:none;white-space:nowrap;width:90\\percent\\;max-width:400px;line-height:24px}//crlf////tab//li.TableHeaderAddDelete {display:inline;border:none;padding:0px 0px 0px 20px}//crlf////tab//li.TableHeaderLISub1 {display:inline;border:none;padding:0px 0px 0px 20px}//crlf////tab//li.TableControls {float:none;display:inline;padding:0px 0px 0px 20px;height:auto;border:none}//crlf////crlf////tab//ul.TableControlsUL {padding:0px 0px 10px 0px}//crlf////tab////crlf////tab///* icon used to edit display *///crlf////tab//div.DisplayDialogIconEditDisplay {padding:0px 0px 0px 30px;height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_search_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////crlf////tab///* td containing checkbox used to select record *///crlf////tab//th.selectRecordTH {width:24px;max-width:24px}//crlf////tab//td.selectRecordTD {width:24px;max-width:24px}//crlf////crlf////tab///* icon used to edit record *///crlf////tab//th.OpenEditDialogTH {width:24px;max-width:24px}//crlf////tab//td.OpenEditDialogTD {width:24px;max-width:24px}//crlf////tab//div.OpenEditDialogTDDiv {margin:0px;padding:0px;width:18px;height:24px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_mode_edit_24dp_1x__\\quot\\) no-repeat center;}//crlf////tab//div.OpenEditDialogTHDiv {margin:0px;padding:0px;width:18px;height:24px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_mode_edit_24dp_1x__\\quot\\) no-repeat center;}//crlf////crlf////tab///* icon used to inspect record *///crlf////tab//th.inspectRecordTH {width:24px;max-width:24px}//crlf////tab//td.inspectRecordTD {width:24px;max-width:24px}//crlf////tab//div.inspectRecordTDDiv {margin:0px;padding:0px;width:18px;height:24px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_list_24dp_1x__\\quot\\) no-repeat center;}//crlf////tab//div.inspectRecordTHDiv {margin:0px;padding:0px;width:18px;height:24px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_list_24dp_1x__.png\\quot\\) no-repeat center;}//crlf////crlf////tab///*//tab//reduce font size in table menu *///crlf////tab//div.TableMenu li {font-size:__EmFactor4__;}//crlf////crlf////tab///* icons for table icons - graph\\comma\\ print\\comma\\ next\\comma\\ prev... *///crlf////tab//li.TableIconMenu {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_more_horiz_24dp_1x__\\quot\\) no-repeat center;}//tab////crlf////tab//li.TableIconInfo {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=info20x20.png\\quot\\) no-repeat center;}//tab////crlf////tab//li.TableIconExport {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=download20x20.png\\quot\\) no-repeat center;} //crlf////tab//li.TableIconPrint {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=print20x20.png\\quot\\) no-repeat center;} //crlf////tab//li.TableIconGraph {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_equalizer_24dp_1x__\\quot\\) no-repeat center;} //crlf////tab///* the refresh icon is now hidden.  It creates clutter *///crlf////tab//li.TableIconRefresh {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_refresh_24dp_1x__\\quot\\) no-repeat center;} //crlf////tab//li.TableIconFirst {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_skip_previous_24dp_1x__\\quot\\) no-repeat center;} //crlf////tab//li.TableIconPrev {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_navigate_before_24dp_1x__\\quot\\) no-repeat center;} //crlf////tab//li.TableIconNext {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_navigate_next_24dp_1x__\\quot\\) no-repeat center;} //crlf////tab//li.TableIconLast {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_skip_next_24dp_1x__\\quot\\) no-repeat center;} //crlf////tab//li.TableIconAdd {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_add_24dp_1x__\\quot\\) no-repeat center;} //crlf////tab//li.TableIconDelete {display:inline;padding:0px 0px 10px 30px;height:25px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_remove_24dp_1x__\\quot\\) no-repeat center;} //crlf////crlf//}//crlf//^
ID=217598|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/************************************************************************//crlf//styles for display dialog//crlf//*************************************************************************///crlf//<include type:expression; expression:htmlConstant(\\quot\\display_tab_height\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\275px\\quot\\)>//crlf//<include type:expression; expression:htmlConstant(\\quot\\display_tab_width\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\400px\\quot\\)>//crlf////crlf///* the dimensions of this div are used to set the dimensions of all controls in the dialog *///crlf//div.DisplayDialogFormContainer {border-radius:4px;position:absolute;top:0px;left:0px;width:100\\percent\\;max-width:500px;height:375px;z-index:2;padding:5px;border:solid 1px __ForegroundColor__;background-color:__BackgroundColor__}//crlf////crlf//div.DisplayDialogContainer {}//crlf//div.DisplayDialog {display:none;z-index:2;width:100\\percent\\;max-width:500px;position:absolute;left:0px;top:0px;padding:0px;background-color:__BackgroundColor__;border:none}//crlf//div.DisplayDialogMessage {z-index:99; position:absolute; left:30px; top:40px; display:none; padding:15px; background-color:__BackgroundColor__; width:325px; height:auto; border:solid 1px __ForegroundColor__;}//crlf//div.SaveDiaplayAs {z-index:4; position:absolute; left:30px; top:40px; display:none; padding:5px; background-color:__BackgroundColor__; width:325px; height:150px; border:solid 1px __ForegroundColor__;}//crlf////crlf///* display name and icone used to save\\comma\\ delete displays *///crlf//ul.ULDisplayDialogNameAndIcons {width:90\\percent\\;margin:0px;padding:0px;overflow-y:auto}//crlf//ul.ULDisplayDialogNameAndIcons select {width:100\\percent\\}//crlf//li.ULDisplayDialogNameAndIconsName {float:left;display:block;list-style-type:none}//crlf//li.ULDisplayDialogNameAndIconsIcons {width:100\\percent\\;float:left;display:block;list-style-type:none}//crlf////crlf///* icons for display dialog *///crlf///* Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//div.DisplayDialogIconSave {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_folder_open_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogIconSaveAs {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_add_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogIconRestore {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogIconDelete {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_remove_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogIconOk {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_done_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogCloseIcon {display:block;float:right;cursor:pointer;width:32px;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogSortAscendingIcon {display:inline;cursor:pointer;padding:18px 36px 18px 0px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogSortDescendingIcon {display:inline;cursor:pointer;padding:18px 36px 18px 0px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf//</conditional>//crlf////crlf///* Not reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//div.DisplayDialogIconSave {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_folder_open_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogIconSaveAs {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_add_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogIconRestore {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogIconDelete {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_remove_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogIconOk {display:block;float:right;cursor:pointer;width:20\\percent\\;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_done_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogCloseIcon {display:block;float:right;cursor:pointer;width:32px;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogSortAscendingIcon {display:inline;cursor:pointer;padding:18px 36px 18px 0px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//div.DisplayDialogSortDescendingIcon {display:inline;cursor:pointer;padding:18px 36px 18px 0px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf//</conditional>//crlf////crlf////crlf///* switch between tabs and a select box to select divs in the display dialog *///crlf//div.DisplayDialogTabSelectContainer {display:block;width:100\\percent\\}//crlf//div.DisplayDialogTabSelectContainer select {width:100\\percent\\}//crlf//div.DisplayDialogTabTableContainer {display:none}//crlf////crlf//div.DisplayDialogSort {width:100\\percent\\}//crlf//div.DisplayDialogSort select {width:60\\percent\\}//crlf////crlf//div.DisplayDialogFieldsTableContainer {width:100\\percent\\;height:250px;overflow:auto;border:solid 1px black}//crlf//div.DisplayDialogFields {width:75\\percent\\;height:auto;min-height:1px}//crlf//div.DisplayDialogFields table {width:80\\percent\\;height:auto}//crlf//table.DisplayDialogFields {border-collapse:collapse}//crlf//table.DisplayDialogFieldsTable {}//crlf//td.DisplayDialogFieldsTableCheckbox {margin:0px;padding:0px}//crlf//td.DisplayDialogFieldsTableDescription {margin:0px;padding:0px 0px 0px 5px;width:95\\percent\\;vertical-align:middle}//crlf////crlf////crlf///* icons used to move selected fields up/down *///crlf//ul.DisplayDialogMoveField {margin:0px;padding:0px}//crlf///* Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//li.DisplayDialogMoveFieldUp {list-style-type:none;padding:36px 0px 0px 36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//li.DisplayDialogMoveFieldDown {list-style-type:none;padding:36px 0px 0px 36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_white_18dp_2x.png\\quot\\) no-repeat center;}//crlf//</conditional>//crlf////crlf///* Not reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//li.DisplayDialogMoveFieldUp {list-style-type:none;padding:36px 0px 0px 36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////tab//li.DisplayDialogMoveFieldDown {list-style-type:none;padding:36px 0px 0px 36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf//</conditional>//crlf////crlf//div.DisplayDialogFilter {width:100\\percent\\;height:100\\percent\\;padding:0px 0px 0px 0px}//crlf//div.DisplayDialogFilter textarea {width:100\\percent\\;height:80\\percent\\}//crlf////crlf//div.DisplayDialogPivot {width:100\\percent\\}//crlf//div.DisplayDialogPivot table {width:100\\percent\\}//crlf//select.DisplayDialogPivotField {width:100\\percent\\}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1024px) {//crlf////tab///* the dimensions of this div are used to set the dimensions of all controls in the dialog *///crlf////tab//div.DisplayDialogFormContainer {width:500px;height:375px}//crlf////tab//div.DisplayDialog {left:40px;top:40px;padding:5px;width:500px}//crlf////crlf////tab///* display name and icone used to save\\comma\\ delete displays *///crlf////tab//ul.ULDisplayDialogNameAndIcons {width:100\\percent\\;margin:0px;padding:0px;overflow-y:auto}//crlf////tab//ul.ULDisplayDialogNameAndIcons select {width:100\\percent\\}//crlf////tab//ul.ULDisplayDialogNameAndIcons li {width:auto;float:left;display:block;list-style-type:none}//crlf////tab//li.ULDisplayDialogNameAndIconsName {width:70\\percent\\;}//crlf////tab//li.ULDisplayDialogNameAndIconsIcons {width:25\\percent\\;}//crlf////crlf////tab///* switch between tabs and a select box to select divs in the display dialog *///crlf////tab//div.DisplayDialogTabSelectContainer {display:none}//crlf////tab//div.DisplayDialogTabTableContainer {display:block}//crlf////crlf////tab///* icons for display dialog *///crlf////tab///* Reverse colors *///crlf////tab//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab////tab//div.DisplayDialogIconSave {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_folder_open_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogIconSaveAs {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_add_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogIconRestore {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogIconDelete {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_remove_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogIconOk {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_done_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogCloseIcon {display:block;float:right;cursor:pointer;width:32px;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//li.DisplayDialogMoveFieldUp {padding:24px 0px 0px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//li.DisplayDialogMoveFieldDown {padding:24px 0px 0px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogSortAscendingIcon {display:inline;padding:18px 36px 18px 0px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogSortDescendingIcon {display:inline;padding:18px 36px 18px 0px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_white_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab//</conditional>//crlf////crlf////tab///* Not reverse colors *///crlf////tab//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab////tab//div.DisplayDialogIconSave {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_folder_open_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogIconSaveAs {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_add_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogIconRestore {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogIconDelete {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_remove_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogIconOk {display:block;float:right;cursor:pointer;width:25px;height:15px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_done_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogCloseIcon {display:block;float:right;cursor:pointer;width:32px;height:32px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//li.DisplayDialogMoveFieldUp {padding:24px 0px 0px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//li.DisplayDialogMoveFieldDown {padding:24px 0px 0px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogSortAscendingIcon {display:inline;padding:18px 36px 18px 0px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////tab//div.DisplayDialogSortDescendingIcon {display:inline;padding:18px 36px 18px 0px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab//</conditional>//crlf////crlf////tab///* increase the height of the div containing the list of available fields *///crlf////tab//div.DisplayDialogFieldsTableContainer {height:300px;}//crlf////crlf////crlf//}//crlf//^
ID=537776|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/************************************************************************//crlf//styles for dialog header.  This is the header that allows records to be //crlf//selected in a dialog using the previous and next buttons or the drop-down list//crlf//*************************************************************************///crlf//ul.TableHeaderDialogUL {margin:0px;padding:0px}//crlf//ul.TableHeaderDialogUL li {list-style-type:none;display:inline;}//crlf//li.TableHeaderDialogLISelect {white-space:nowrap;display:inline}//crlf//li.TableHeaderDialogLISpacer {line-height:30px}//crlf//span.DialogHeaderIconAdd {padding:5px 0px 5px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_add_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf//span.DialogHeaderIconDelete {padding:5px 0px 5px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_remove_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf//span.DialogHeaderIconFirst {padding:5px 0px 5px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_skip_previous_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf//span.DialogHeaderIconPrev {padding:5px 0px 5px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_navigate_before_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf//span.DialogHeaderIconNext {padding:5px 0px 5px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_navigate_next_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf//span.DialogHeaderIconLast {padding:5px 0px 5px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_skip_next_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf//span.DialogHeaderIconClose {padding:5px 0px 5px 36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1024px) {//crlf////tab///************************************************************************//crlf////tab//styles for dialog header//crlf////tab//*************************************************************************///crlf////tab//span.DialogHeaderIconAdd {padding:5px 0px 5px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_add_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf////tab//span.DialogHeaderIconDelete {padding:5px 0px 5px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_remove_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf////tab//span.DialogHeaderIconFirst {padding:5px 0px 5px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_skip_previous_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf////tab//span.DialogHeaderIconPrev {padding:5px 0px 5px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_navigate_before_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf////tab//span.DialogHeaderIconNext {padding:5px 0px 5px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_navigate_next_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf////tab//span.DialogHeaderIconLast {padding:5px 0px 5px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_skip_next_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf////tab//span.DialogHeaderIconClose {padding:5px 0px 5px 24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf//};//crlf//^
ID=443135|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/*********************************************************************//crlf//styles for calendar//crlf//*********************************************************************///crlf///* calendar icon *///crlf//img.tcalIcon {cursor: pointer;//tab//margin-left: 1px; vertical-align: middle;}//crlf////crlf///* calendar container element *///crlf//div//pound//tcal {position: absolute; visibility: hidden;//tab// z-index: 10002;//tab//width: 158px; padding: 2px 0 0 0;}//crlf////crlf///* all tables in calendar *///crlf//div//pound//tcal table {width: 100\\percent\\; border: 1px solid silver; border-collapse: collapse; background-color: white;}//crlf////crlf///* navigation table *///crlf//div//pound//tcal table.ctrl {border-bottom: 0;}//crlf////crlf///* navigation buttons *///crlf//div//pound//tcal table.ctrl td {width: 15px; height: 20px;}//crlf////crlf///* month year header *///crlf//div//pound//tcal table.ctrl th {background-color: white; color: black; border: 0;}//crlf////crlf///* week days header *///crlf//div//pound//tcal th {border: 1px solid silver; border-collapse: collapse; text-align: center; padding: 3px 0; font-family: tahoma\\comma\\ verdana\\comma\\ arial; font-size: 10px; background-color: gray; color: white;}//crlf////crlf///* date cells *///crlf//div//pound//tcal td {border: 0; border-collapse: collapse; text-align: center; padding: 2px 0; font-family: tahoma\\comma\\ verdana\\comma\\ arial; font-size: 11px; width: 22px; cursor: pointer;}//crlf////crlf///* date highlight in case of conflicting settings order here determines the priority from least to most important *///crlf//div//pound//tcal td.othermonth {color: silver;}//crlf//div//pound//tcal td.weekend {background-color: //pound//ACD6F5;}//crlf//div//pound//tcal td.today {border: 1px solid red;}//crlf//div//pound//tcal td.selected {//tab//background-color: //pound//FFB3BE;}//crlf////crlf///* transparent shadow *///crlf//div//pound//tcalShade {position: absolute; visibility: hidden; z-index: 10001;}//crlf//div//pound//tcalShade table {border: 0; border-collapse: collapse; width: 100\\percent\\;}//crlf//div//pound//tcalShade table td {border: 0; border-collapse: collapse; padding: 0;}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1281px) {//crlf//}//crlf//^
ID=309792|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/************************************************************************//crlf//Styles for table info dialog//crlf//*************************************************************************///crlf//div.TableInfo {z-index:99;position:absolute;top:0px;left:0px;width:100\\percent\\;max-width:600px;height:auto;padding:10px;background-color:__BackgroundColor__;border:solid 1px __ForegroundColor__}//crlf////crlf///* Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//div.TableInfoCloseIcon {float:right;padding:0px 0px 0px 36px;height:36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_white_18dp_2x.png\\quot\\) no-repeat center;} //crlf//</conditional>//crlf////crlf///* Not reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//div.TableInfoCloseIcon {float:right;padding:0px 0px 0px 36px;height:36px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_18dp_2x.png\\quot\\) no-repeat center;} //crlf//</conditional>//crlf////crlf//table.TableInfoGeneral {}//crlf//div.TableInfoDebugContainer {border:solid 1px __ForegroundColor__;height:100\\percent\\;max-height:300px;overflow:auto}//crlf//table.TableInfoDebug {}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1281px) {//crlf////tab///************************************************************************//crlf////tab//Styles for table info dialog//crlf////tab//*************************************************************************///crlf///* Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//div.TableInfoCloseIcon {padding:0px 0px 0px 24px;height:24px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_white_24dp_1x.png\\quot\\) no-repeat center;} //crlf//</conditional>//crlf////crlf///* Not reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//div.TableInfoCloseIcon {padding:0px 0px 0px 24px;height:24px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_24dp_1x.png\\quot\\) no-repeat center;} //crlf//</conditional>//crlf//}//crlf//^
ID=632391|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=Aspect_Script|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/****************************************************************//crlf//styles for displaying views//crlf//*****************************************************************///crlf///* container surrounding the view\\comma\\ including the title bar *///crlf///* Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//div.ViewContainer {width:100\\percent\\;background-color:black;border:none;width:100\\percent\\}//crlf////crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_clear_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_clear_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_refresh_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_refresh_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_print_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_print_white_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_mail_outline_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_mail_outline_white_24dp_1x.png\\quot\\)>//crlf////crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_clear_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_clear_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_refresh_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_refresh_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_print_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_print_white_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_mail_outline_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_mail_outline_white_18dp_2x.png\\quot\\)>//crlf//</conditional>//crlf////crlf///* Not reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//div.ViewContainer {width:100\\percent\\;background-color:white;border:none;width:100\\percent\\}//crlf////crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_clear_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_clear_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_refresh_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_refresh_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_print_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_print_black_24dp_1x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_mail_outline_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_mail_outline_black_24dp_1x.png\\quot\\)>//crlf////crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_clear_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_clear_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_refresh_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_refresh_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_print_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_print_black_18dp_2x.png\\quot\\)>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_mail_outline_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_mail_outline_black_18dp_2x.png\\quot\\)>//crlf//</conditional>//crlf////crlf////crlf//div.output_loading {width:100\\percent\\;text-align:center;margin:15px 0px 0px 0px}//crlf//div.table_refreshing {width:100\\percent\\;text-align:center;position:relative;top:75px;z-index:99}//crlf////crlf//<conditional expression:false>//crlf//==================================================================//crlf//==================================================================//crlf//</conditional>//crlf///*//tab//container surrounding the view content\\comma\\ not including the title bar //crlf////tab////tab//Overflow-y is set to visible and height to auto so that edit dialogs\\comma\\ display dialogs//crlf////tab////tab//and table info dialogs are not chopped off when there are only a few records in the table.//crlf//*///tab////crlf//div._ViewContent {border-top:solid 1px __ForegroundColor__;overflow-y:visible;height:auto;width:100\\percent\\}//crlf//div.ViewContent {border:none;overflow-y:visible;height:auto;width:100\\percent\\}//crlf////crlf///* Container surrounding view contaols *///crlf//div.view_controls {border-top:1px solid black;height:36px;width:100\\percent\\;padding:0px;margin:0px;z-index:4;background-color:__BackgroundColor__}//crlf//span.view_controls {border-top:1px solid black;display:block;z-index:4;background-color:__BackgroundColor__}//crlf//span.view_control_close_icon {cursor:pointer;margin:0px;padding:18;line-height:36px;background:Transparent url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_clear_18dp_2x__\\quot\\) no-repeat left;}//crlf//span.view_control_refresh_icon {cursor:pointer;margin:10px;padding:18;line-height:36px;background:Transparent url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_refresh_18dp_2x__\\quot\\) no-repeat left;}//crlf//span.view_control_print_icon {cursor:pointer;margin:0px;padding:18;line-height:36px;background:Transparent url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_print_18dp_2x__\\quot\\) no-repeat left;}//crlf//span.view_control_email_icon {cursor:pointer;margin:0px;padding:18;line-height:36px;background:Transparent url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_mail_outline_18dp_2x__\\quot\\) no-repeat left;}//crlf////crlf///* table containing tabs for open views *///crlf////pound//OutputTabs {display:none}//crlf////crlf///* styles for the view tab and image used to close the tab *///crlf//td.view_tab {whitespace:no-wrap;border:none;}//crlf//div.ViewTabCloseIcon {display:inline;padding-left:36px;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf//AAAimg.view_tab {position:relative;top:0px;left:5px;padding:0px 5px 0px 0px}//crlf////crlf///* Image displayed at top of view to refresh the view *///crlf//div.view_refresh {width:30px;height:20px;border:none;float:right;padding:0px;margin:0px;position:relative;top:0px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////crlf///* Image displayed at top of view to close the view *///crlf//div.view_close {width:30px;height:20px;float:right;padding:0px;margin:0px;position:relative;top:0px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf////crlf///*//tab//These divs contain the source name\\comma\\ elapsed time and icons used to refresh and close the view//crlf////tab////tab//Because all elements in the title are float left or right\\comma\\ overflow-y is set to auto to prevent//crlf////tab////tab//the div from collapsing since it contains no content //crlf////crlf////tab////tab//The bottom border is set to none for title1 because a top border is set for ViewContent.  This//crlf////tab////tab//keeps the border in place when the select box is used to select views and the title is hidden.//crlf//*///crlf//div.view_title1 {width:100\\percent\\;overflow-y:auto;overflow-x:hidden;background-color://pound//e9e9e9;font-size:__EmFactor1__;padding:0px;margin:0px;border:border:solid 1px black;border-bottom:none}//crlf//div.view_title2 {width:100\\percent\\;margin:5px}//crlf////crlf///* Name of source computer displayed in view title *///crlf//div.view_source_name {font-weight:normal;width:75\\percent\\;float:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}//crlf////crlf///* Elapsed time for view to load - hidden for small screens *///crlf//div.view_elapsed_time {font-weight:normal;display:none}//crlf////crlf//@media only screen and (min-width:1024px) {//crlf////tab///* adjust size of view title *///crlf////tab//div.view_title1 {font-size:__EmFactor4__;}//crlf////crlf////tab//div.ViewContent {border-top:solid 1px __ForegroundColor__;}//crlf////crlf////tab///* Container surrounding view contaols *///crlf////tab//div._view_controls {height:24px;}//crlf////tab//div.view_controls {float:right;height:24px;position:relative;top:-24px;background-color:__BackgroundColor__;z-index:4}//crlf////crlf////tab///* 12-19-2017: Modified this to position the view controls on the top right using fixed positioning//crlf////tab////tab//instead of relative positioning.  Using relative affects floating elements in an embedded view //crlf////tab////tab//container.  For example\\comma\\ in the support dashboard\\comma\\ when three sections are set to float and each //crlf////tab////tab//have a width of 33\\percent\\\\comma\\ the rightmost one stays to the right but drops down beneath the other two.//crlf////tab//*///crlf////crlf////tab//span.view_controls {border:none;display:inline;float:right;position:fixed;top:20px;right:0px;background-color:__BackgroundColor__;z-index:4}//crlf///*//crlf////tab//span.view_controls {border:none;display:inline;float:right;position:relative;top:-24px;background-color:white;z-index:4}//crlf//*///crlf////crlf////tab//span.view_control_close_icon {margin:0px;padding:12px;width:24px;line-height:24px;background:Transparent url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_clear_24dp_1x__\\quot\\) no-repeat left;;z-index:4}//crlf////tab//span.view_control_refresh_icon {margin:10px;padding:12px;line-height:24px;background:Transparent url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_refresh_24dp_1x__\\quot\\) no-repeat left;}//crlf////tab//span.view_control_print_icon {margin:0px;padding:12px;line-height:24px;background:Transparent url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_print_24dp_1x__\\quot\\) no-repeat left;}//crlf////tab//span.view_control_email_icon {margin:0px;padding:12px;line-height:24px;background:Transparent url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_mail_outline_24dp_1x__\\quot\\) no-repeat left;}//crlf////crlf////tab///* styles for the view tab and image used to close the tab *///crlf////tab//div.ViewTabCloseIcon {padding-left:24px;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////crlf////tab///* Name of source computer displayed in view title *///crlf////tab//div.view_source_name {width:auto;font-weight:bold;display:block;float:left}//crlf////crlf////tab///* Show elapsed time for view to load.  It's hidden for small screens *///crlf////tab//div.view_elapsed_time {font-weight:bold;display:block;float:left}//crlf////crlf////tab///* adjust size of image displayed at top of view to refresh the view *///crlf////tab//div.view_refresh {width:25px;height:20px;border:none;float:right;position:relative;top:-5px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////crlf////tab///* adjust size of image displayed at top of view to close the view *///crlf////tab//div.view_close {width:25px;height:20px;float:right;position:relative;top:-5px;cursor:pointer;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////crlf////tab////pound//OutputSelectContainer {display:none;}//crlf////tab////pound//OutputTabs {display:block}//crlf//}//crlf////crlf///************** [5] Screen width >=1920px **************///crlf//@media only screen and (min-width:1600px) {//crlf////tab//span.view_control_refresh_icon {margin:0px;padding:12px;line-height:24px;background:Transparent url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_refresh_24dp_1x__\\quot\\) no-repeat left;}//crlf//}//crlf////crlf//^
ID=174218|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/* styles for drop-down menus *///crlf//ul.dmenu//tab////tab////tab//{margin:0; padding:0; z-index:30;}//crlf//li.dmenu//tab////tab////tab//{margin:0; padding:0; list-style:none; float:left; width:60px;}//crlf//a.dmenu//tab////tab////tab//{display:block; margin:0 1px 0 0; padding:3px; width:30px; background:transparent; color:black; text-align:center; text-decoration:none; font:normal normal normal 8pt tahoma;}//crlf//a.dmenu:hover//tab////tab//{margin:0; padding:3px; width:30px; background-color:transparent; border-style:none; border-width:1px; text-decoration:underline; font:normal normal normal 8pt tahoma;}//crlf//span.dmenu//tab////tab////tab//{cursor:pointer; display:block; margin:0 1px 0 0; padding:3px; width:30px; background:transparent; color:black; text-align:center; text-decoration:none; font:normal normal normal 8pt tahoma;}//crlf//span.dmenu:hover//tab////tab//{cursor:pointer; margin:0; padding:3px; width:30px; background-color:transparent; border-style:none; border-width:1px; text-decoration:underline; font:normal normal normal 8pt tahoma;}//crlf//div.dmenu//tab////tab//{position:absolute; margin:0; padding:0; display:none; background-color:white; border:1px solid //pound//5970B2;}//crlf//a.dmenuitem//tab////tab//{position:relative; display:block; margin:0; padding:3px; width:auto; white-space:nowrap; text-align:left; text-decoration:none; background-color:white; color:black; font:normal normal normal 8pt tahoma;}//crlf//a.dmenuitem:hover//tab//{margin:0; padding:3px; background://pound//dddddd; font:normal normal normal 8pt tahoma;}//crlf//span.dmenuitem//tab////tab//{cursor:pointer; position:relative; display:block; margin:0; padding:3px; width:auto; white-space:nowrap; text-align:left; text-decoration:none; background-color:white; color:black; font:normal normal normal 8pt tahoma;}//crlf//span.dmenuitem:hover//tab//{cursor:pointer; margin:0; padding:3px; background://pound//dddddd; font:normal normal normal 8pt tahoma;}//crlf//span.dmenuitemdisabled//tab//{cursor:pointer; position:relative; display:block; margin:0; padding:3px; width:auto; white-space:nowrap; text-align:left; text-decoration:none; background-color:white; color://pound//999999; font:normal normal normal 8pt tahoma;}//crlf////crlf//a.menu_option:link//tab////tab//{font-size:8pt;color:__ForegroundColor__;text-decoration:underline;}//crlf//a.menu_option:visited//tab////tab//{font-size:8pt;color:__ForegroundColor__;text-decoration:underline;}//crlf//a.menu_option:active//tab////tab//{font-size:8pt;color:__ForegroundColor__;text-decoration:underline;}//crlf//a.menu_option:hover//tab////tab//{font-size:8pt;color:__ForegroundColor__;text-decoration:underline;}//crlf//div.menu_option//tab////tab////tab//{width:100\\percent\\;height:100\\percent\\;font-size:8pt;color:__ForegroundColor__;text-decoration: underline; cursor:pointer}//crlf//table.menu_option//tab////tab////tab//{backvround-color:__BackgroundColor__;Color:__ForegroundColor__}//crlf//table.menu_option td//tab////tab//{border-top:none 1px black;padding:5px;backvround-color:__BackgroundColor__;Color:__ForegroundColor__}//crlf////crlf///* Tabbed dialog styles *///crlf///* These were the original styles and require the tabed dialog table to use the ID \\quot\\toc\\quot\\ *///crlf//table//pound//toc //tab////tab////tab////tab//{height: 20px; list-style: none; margin: 0; padding: 0; border-collapse:collapse; border-width:1px;}//crlf//table//pound//toc td //tab////tab////tab////tab//{background://pound//e9e9e9 url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename={packageurl_greenlight}doc/images/tabgrey.png\\quot\\);  margin: 0 1px 0 0; padding-left: 10px; padding-top:0px; padding-bottom:0px; padding-right:0px;}//crlf//table//pound//toc a //tab////tab////tab////tab//{background: url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename={packageurl_greenlight}doc/images/tabgrey.png\\quot\\) 100\\percent\\ 0; color: //pound//e9e9e9; display: block; height: 2em; line-height: 2em; padding-right: 10px; text-decoration: none; outline: none;}//crlf//table//pound//toc a:link//tab////tab////tab//{}//crlf//table//pound//toc a:visited//tab////tab//{}//crlf//table//pound//toc a:hover//tab////tab////tab//{text-decoration:underline;}//crlf//table//pound//toc a:active//tab////tab//{}//crlf//table//pound//toc span //tab////tab////tab//{background: url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename={packageurl_greenlight}doc/images/tabgrey.png\\quot\\) 100\\percent\\ 0; color: //pound//e9e9e9; display: block; height: 2em; line-height: 2em; padding-right: 10px; outline: none;}//crlf//table//pound//toc td.current //tab////tab//{background-color: //pound//48f; background-position: 0 -60px; padding-top:0px; padding-right:0px; padding-bottom:0px;}//crlf//table//pound//toc td.current a//tab////tab//{background-position: 100\\percent\\ -60px;//tab//color://pound//ffffff; font-weight: bold;}//crlf//table//pound//toc td.current span//tab//{background-position: 100\\percent\\ -60px;//tab//color://pound//fff; font-weight: bold;}//crlf////crlf///*//tab//These are the new styles that allow for multiple tabbed dialogs at one time   Tabs should use span tags instead of a because the a tag jumps around in IE//crlf////tab//The rounded corners are produced by displaying the left side of the image in the TD tag and the right side of the image in the span tag.//crlf//*///crlf//<constant name:__tabgradient__; value:\\quot\\linear-gradient(to bottom left\\comma\\//pound//4cd877\\comma\\//pound//166d35)\\quot\\>//crlf//<constant name:__tabgradientSelected__; value:\\quot\\linear-gradient(to bottom left\\comma\\//pound//4cd877\\comma\\//pound//166d35)\\quot\\>//crlf////crlf//table.tabdialog //tab////tab////tab//{list-style: none; margin: 0; padding: 0; border-collapse:collapse; border-width:1px;}//crlf//table.tabdialog td //tab////tab//{text-align:center;background-color:transparent; margin: 0px 10px 0px 0px; padding: 0px 0px 0px 0px;}//crlf//table.tabdialog span//tab////tab//{cursor:pointer; display:block;white-space: nowrap;margin:2px 0px 0px 0px;padding:5px 20px 3px 20px;}//crlf//table.tabdialog span:hover//tab//{text-decoration:underline;}//crlf//table.tabdialog a //tab////tab//{display: block; margin:0px 0px 0px 0px;padding:0px 10px 0px 0px; color: //pound//e9e9e9; text-decoration: none; outline: none;}//crlf//table.tabdialog a:hover//tab//{text-decoration:underline;}//crlf//table._tabdialog span//tab////tab//{cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:8px 10px 0px 10px;background:url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename=tabgrey.png\\quot\\) 100\\percent\\ 0}//crlf//table._tabdialog a //tab////tab//{display: block; margin:0px 0px 0px 0px;padding:0px 10px 0px 0px; background:url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename=tabgrey.png\\quot\\) 100\\percent\\ 0; color: //pound//e9e9e9; text-decoration: none; outline: none;}//crlf////crlf///* These are styles load the image off of earthlink rather than the local host *///crlf//table.tabdialog1 //tab////tab////tab//{height: 20px; list-style: none; margin: 0; padding: 0; border-collapse:separate; border-width:1px;}//crlf//table.tabdialog1 td //tab////tab//{background://pound//e9e9e9 url(\\quot\\http://www.aspect-software.net/tabgrey.png\\quot\\);  margin: 0 1px 0 0; padding-left: 10px; padding-top:0px; padding-bottom:0px; padding-right:0px;}//crlf//span.tabdialog1 //tab// //tab////tab//{background: url(\\quot\\http://www.aspect-software.net/tabgrey.png\\quot\\) 100\\percent\\ 0; color: //pound//e9e9e9; display: block; height: 2em; line-height: 2em; padding-right: 10px; text-decoration: none; outline: none;}//crlf//span.tabdialog1:hover//tab////tab//{text-decoration:underline;}//crlf//table.tabdialog1 a //tab////tab//{background: url(\\quot\\http://www.aspect-software.net/tabgrey.png\\quot\\) 100\\percent\\ 0; color: //pound//e9e9e9; display: block; height: 2em; line-height: 2em; padding-right: 10px; text-decoration: none; outline: none;}//crlf//table.tabdialog1 a:hover//tab//{text-decoration:underline;}//crlf////crlf///* styles for tabs in tab dialogs.  JS sets the class to one of these *///crlf//span.tabdialogtabunselected//tab//{font-size:__EmFactor1__;background:white;text-decoration:underline;color:black;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;;border-top-left-radius:8px;border-top-right-radius:8px;;border-top:solid 1px black;border-left:solid 1px black;border-right:solid 1px black;}//crlf//span.tabdialogtabselected {font-size:__EmFactor1__;background:__tabgradientSelected__;text-decoration:none;color:white;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;;border-top-left-radius:8px;border-top-right-radius:8px;border-top:solid 1px white;}//crlf//span.__tabdialogtabunselected {font-size:__EmFactor1__;background:__tabgradient__;text-decoration:none;color:white;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;;border-top-left-radius:8px;border-top-right-radius:8px;}//crlf////crlf//span._tabdialogtabselected//tab//{font-size:__EmFactor1__;text-decoration:underline;color:black;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color://pound//e9e9e9;background:url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename=tabgrey.png\\quot\\) 100\\percent\\ 0}//crlf//span._tabdialogtabunselected {font-size:__EmFactor1__;text-decoration:none;color:black;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color://pound//e9e9e9;background:url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename=tabgrey.png\\quot\\) 100\\percent\\ 0}//crlf////crlf///* used to display the content of a tab in a tabbed dialog //crlf////tab//[THIS IS NO LONGER USED.  REPLACED WITH DialogTabContent BELOW]//crlf//*///crlf//div.content //tab////tab////tab////tab//{border-style:solid; border-top-width:3px; border-left-width:0px; border-right-width:0px; border-bottom-width:0px; border-color://pound//48f; padding:0px; margin:0px;}//tab////tab////crlf////crlf///* used to display the content of a tab in a tabbed dialog.//crlf////tab//Sets a margin between the tabs and the content in the div below the tabs//crlf//*///crlf//div.DialogTabContent {width:100\\percent\\;height:auto;margin:10px 0px 10px 0px;background-color:__BackgroundColor__}//crlf////crlf///************** [5] Screen width >=1025pxpx **************///crlf//@media only screen and (min-width:1024pxpx) {//crlf////tab///* styles for tabs in tab dialogs.  JS sets the class to one of these *///crlf////tab//span.tabdialogtabselected//tab//{font-size:__EmFactor4__;text-decoration:none;font-weight:bold;}//crlf////tab//span.tabdialogtabunselected {font-size:__EmFactor4__;}//crlf////tab//span._tabdialogtabselected//tab//{font-size:__EmFactor4__;text-decoration:none;color:black;font-weight:bold;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color://pound//e9e9e9;background:url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename=tabgrey.png\\quot\\) 100\\percent\\ 0}//crlf////tab//span._tabdialogtabunselected {font-size:__EmFactor4__;text-decoration:none;color:black;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color://pound//e9e9e9;background:url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename=tabgrey.png\\quot\\) 100\\percent\\ 0}//crlf//}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1024px) {//crlf////tab///* styles for tabs in tab dialogs.  JS sets the class to one of these *///crlf////tab//span.tabdialogtabselected//tab//{font-size:__EmFactor4__;text-decoration:none;font-weight:bold;}//crlf////tab//span.tabdialogtabunselected {font-size:__EmFactor4__;}//crlf////tab//span._tabdialogtabselected//tab//{font-size:__EmFactor4__;text-decoration:none;color:black;font-weight:bold;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color://pound//e9e9e9;background:url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename=tabgrey.png\\quot\\) 100\\percent\\ 0}//crlf////tab//span._tabdialogtabunselected {font-size:__EmFactor4__;text-decoration:none;color:black;font-weight:normal;cursor:pointer; display:block;white-space: nowrap;margin:0px 0px 0px 0px;padding:5px 10px 0px 10px;background-color://pound//e9e9e9;background:url(\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename=tabgrey.png\\quot\\) 100\\percent\\ 0}//crlf//}//crlf//^
ID=977595|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=span.cautiontext//tab////tab//{color:yellow}//crlf//span.cautiontextbold//tab//{color:yellow;font-weight:bold}//crlf//span.errortext//tab////tab//{color:red}//crlf//span.errortextbold//tab//{color:red;font-weight:bold}//crlf//span.oktext//tab////tab////tab//{color:green}//crlf//span.oktextbold//tab////tab//{color:green;font-weight:bold}//crlf////crlf//div.cautiontext//tab////tab//{color:yellow}//crlf//div.cautiontextbold//tab//{color:yellow;font-weight:bold}//crlf//div.errortext//tab////tab////tab//{color:red}//crlf//div.errortextbold//tab////tab//{color:red;font-weight:bold}//crlf//div.oktext//tab////tab////tab//{color:green}//crlf//div.oktextbold//tab////tab//{color:green;font-weight:bold}//crlf////crlf///* used to display a pointer over clickable images *///crlf//img.click {cursor:pointer}//crlf////crlf///* Used for forms.  Centers vertical alignment so text and inputs line up *///crlf//table.form//tab////tab////tab////tab//{background-color:__BackgroundColor__;color:__ForegroundColor__}//crlf//table.form td//tab////tab////tab////tab//{vertical-align:middle;}//crlf//table.form td.formbordered//tab//{vertical-align:top; border:solid 1px //pound//b8b8b8; padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom:5px; background-color://pound//f0f0f0;}//crlf////crlf///* used to create hyperlinks without the href tag *///crlf//h1.hyperlink//tab////tab////tab////tab//{text-decoration:underline}//crlf//h1.hyperlink:hover//tab////tab//{text-decoration:underline;cursor:pointer;}//crlf//h2.hyperlink//tab////tab////tab////tab//{text-decoration:underline}//crlf//h2.hyperlink:hover//tab////tab//{text-decoration:underline;cursor:pointer;}//crlf//h3.hyperlink//tab////tab////tab////tab//{text-decoration:underline}//crlf//h3.hyperlink:hover//tab////tab//{text-decoration:underline;cursor:pointer;}//crlf//p.hyperlink//tab////tab////tab////tab//{text-decoration:underline}//crlf//p.hyperlink:hover//tab////tab////tab//{text-decoration:underline;cursor:pointer;}//crlf//span.hyperlink//tab////tab////tab//{text-decoration:underline}//crlf//span.hyperlink:hover//tab////tab//{text-decoration:underline;cursor:pointer;}//crlf////crlf///* used to pop-up tooltips activated by hovering the mouse *///crlf//div.tooltip {position:absolute; width:auto; height:auto; border-width:1px; border-style:solid; background://pound//fffff5; color:black; z-index:9100; padding:0px;}//crlf////crlf///* Used as static tooltips in widgets (e.g. in Dimensional Views Container) *///crlf//div.tooltip1 {padding:8px; border-width:1px; border-style:solid; background://pound//fffff5;color:black}//crlf////crlf//^
ID=568962|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/* Class for table message *///crlf//div.tablemessage {min-width:250px;position:absolute;top:0px;left:0px;background-color:white;color:black;padding:10px 10px 10px 10px;z-index:99;border:1px solid black;border-radius:4px;}//crlf////crlf///* used to format and position charts associated with tables *///crlf//div.table_chart {width:auto;margin:0px;border:solid 2px black;background-color:white;position:absolute;top:0px;left:0px;z-index:2}//crlf//div.table_chart_close {float:right;padding-left:36px;height:36px;background:url(\\quot\\__RequestServer__?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf//img.table_chart {width:100\\percent\\}//crlf////crlf///* used for google chart data and output *///crlf//div.googlechartdata {border:solid 1px black;display:none}//crlf//div.googlechartoutput {border:none;background-color:white;display:inline}//crlf////crlf///* note: A border is not supplied here.  It can be added by creating a div to contain the chart //crlf////tab//using [tableID]Chart as the ID of the div.  If a div is not defined\\comma\\ the javascript function //crlf////tab//uses to display the chart will add a border.  This is done to create a border around charts //crlf////tab//that pop-up on top of the table.//crlf//*///crlf//div.googlechartoutputwrapper {float:left;border:none;background-color:white;z-index:99;display:none}//crlf//div.googlechartoutputborderedwrapper {float:left;border:solid 1px black;background-color:white;z-index:99;display:none}//crlf////crlf///* used to format dialogs used to edit table records *///crlf//div.dialog_header {display:none; margin:0px; padding:0px 5px 5px 5px; border-bottom:solid 1px black; background-color:white}//crlf//div.default_table_dialog {border-radius:4px;position:absolute;top:0px;left:0px;width:100\\percent\\;height:auto;display:none;z-index:2;padding:0px; background-color:__BackgroundColor__;border:solid 1px __ForegroundColor__}//crlf//div.default_table_dialog_only {border-radius:4px;display:block;z-index:2;padding:0px; background-color:__BackgroundColor__;border:solid 2px __ForegroundColor__}//crlf////crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_clear_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_clear_white_24dp_1x.png\\quot\\)>//crlf////crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_clear_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_clear_white_18dp_2x.png\\quot\\)>//crlf//</conditional>//crlf////crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_clear_24dp_1x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_clear_black_24dp_1x.png\\quot\\)>//crlf////crlf////tab//<!include type:expression; expression:htmlConstant(\\quot\\ic_clear_18dp_2x\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\ic_clear_black_18dp_2x.png\\quot\\)>//crlf//</conditional>//crlf////crlf///*//tab//close icon displayed on top right of edit dialogs //crlf////tab////tab//The padding is adjusted to eliminate the 5px of padding in the dialog div so the close icon//crlf////tab////tab//is closer to the top right//crlf//*///crlf//div.EditDialogCloseIcon {float:right;position:relative;top:-5px;left:5px;width:36px;height:36px;background:url('__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_clear_18dp_2x__') no-repeat left;}//crlf////crlf///*//tab//Div containing the tabs at the top of an edit dialog //crlf////tab////tab//Padding is added to make room for the close icon and a border is added at the bottom of the tabs.//crlf//*///crlf//div.TableEditDialogTabsContainer {width:100\\percent\\;border-bottom:solid 1px //pound//c9c9c9;padding:10px 0px 0px 0px}//crlf//div.TableEditDialogTabsContainerExclusive {display:none;width:100\\percent\\;border-bottom:solid 1px //pound//c9c9c9;padding:10px 0px 0px 0px}//crlf////crlf///*//tab//Div containing the select box at the top of an edit dialog//crlf//*///crlf//div.TableEditDialogSelectContainer {padding:0px 0px 10px 0px;border-bottom:solid 1px black}//crlf//div.TableEditDialogSelectContainerExclusive {display:block;padding:0px 0px 10px 0px;border-bottom:solid 1px black}//crlf////crlf///*//tab//Select box at the top of an edit dialog *///crlf//select.TableEditDialogSelect {width:250px}//crlf////crlf///************** [4] Screen width >=1024px **************///crlf//@media only screen and (min-width:1024px) {//crlf////tab//div.TableEditDialogTabsContainerExclusive {display:block}//crlf////tab//div.TableEditDialogSelectContainerExclusive {display:none}//crlf////crlf////tab///* table chart close icon *///crlf////tab//div.table_chart_close {padding-left:24px;height:24px;background:url(\\quot\\__RequestServer__?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab////crlf////tab//div.EditDialogCloseIcon {width:24px;height:24px;background:url('__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=__ic_clear_24dp_1x__') no-repeat left;}//crlf//}//crlf////crlf///************** [5] Screen width >=1281px **************///crlf//@media only screen and (min-width:1281px) {//crlf//}//crlf//^
ID=687311|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<include type:expression; expression:htmlConstant(\\quot\\IsAspectSupport\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\isPackageLoaded(\\quot\\Aspect_Support\\quot\\))>//crlf////crlf//<conditional expression:false>//crlf////tab//These styles are in effect when the Aspect support package is running on the computer//crlf////tab//processing the request//crlf//</conditional>//crlf//<conditional expression:(__IsAspectSupport__)>//crlf////tab//span.AspectSupport {}//crlf////tab//div.AspectSupport {}//crlf////tab//tr.AspectSupport {}//crlf////tab//td.AspectSupport {}//crlf////tab//ul.AspectSupport {}//crlf////tab//li.AspectSupport {}//crlf//</conditional>//crlf////crlf//<conditional expression:false>//crlf////tab//These styles are in effect when the Aspect support package is NOT running on the computer//crlf////tab//processing the request//crlf//</conditional>//crlf//<conditional expression:(not(__IsAspectSupport__))>//crlf////tab//span.AspectSupport {display:none}//crlf////tab//div.AspectSupport {display:none}//crlf////tab//tr.AspectSupport {display:none}//crlf////tab//td.AspectSupport {display:none}//crlf////tab//ul.AspectSupport {display:none}//crlf////tab//li.AspectSupport {display:none}//crlf//</conditional>//crlf//^
ID=630514|X=183|Y=33|W=1241|H=744|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/* div for a section header.  Added min-height to make the section a standard height even if no text //crlf//  is included in it.  This is used as a bottom border on landing pages *///crlf//div.sectionheader {clear:both;cursor:pointer;width:100\\percent\\;margin:5px 0px;padding:4px 1px;border:1px solid black;background-color://pound//ebebeb;background:linear-gradient(to bottom left\\comma\\//pound//7bf6a1\\comma\\//pound//166d35);border-radius:8px;height:auto;min-height:23px}//crlf////crlf///* Changing the border can cause sections to realign in an embedded view container//crlf////tab//div.sectionheader:hover {margin:5px 0px;padding:3px 0px;border:2px solid black}//crlf//*///crlf////crlf//span.sectionname {margin:0px 0px 0px 5px;font-size:1.0em;font-weight:bold;color:white}//crlf////crlf///* original grey section header *///crlf//div._sectionheader {clear:both;cursor:pointer;width:100\\percent\\;margin:5px 0px;padding:4px 1px;border:1px solid black;background-color://pound//ebebeb;background:linear-gradient(//pound//f6f6f6\\comma\\//pound//ebebeb);border-radius:8px;height:auto;min-height:23px}//crlf//div.sectionheaderhidden {margin:0px;padding:0px}//crlf//span._sectionname {margin:0px 0px 0px 5px;font-size:1.0em;font-weight:bold}//crlf////crlf//span.sectionheadericonok {padding:12px 12px;margin:0px;background:url(\\quot\\http://127.0.0.1:4446/?network=greenlight//amp//id=getimage//amp//filename=ic_solid_green_circle_24dp_1x.png\\quot\\) no-repeat left;}//crlf//span.sectionheadericonerror {padding:12px 12px;margin:0px;background:url(\\quot\\http://127.0.0.1:4446/?network=greenlight//amp//id=getimage//amp//filename=ic_error_outline_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf//span.sectionheadericonwarn {padding:12px 12px;margin:0px;background:url(\\quot\\http://127.0.0.1:4446/?network=greenlight//amp//id=getimage//amp//filename=ic_help_outline_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////crlf//span.sectiondescription {font-style:italic;float:right}//crlf////crlf//div.sectionsub {margin:5px 8px;padding:5px 0px;border:none;display:none} //crlf//div.sectionsubhidden {margin:0px;padding:0px}//crlf////crlf//div.sectionheader2 {clear:both;cursor:pointer;width:100\\percent\\;margin:5px 0px;padding:4px 1px;border:1px solid black;background-color://pound//ebebeb;background:linear-gradient(to bottom\\comma\\//pound//a6d1b3\\comma\\//pound//20964a);border-radius:8px;height:auto;min-height:23px}//crlf//div.sectionheader2:hover {margin:5px 0px;padding:3px 0px;border:2px solid //pound//20964a}//crlf//span.sectionname2 {color:white;margin:0px 0px 0px 5px;font-size:1.0em;font-weight:bold}//crlf//^
ID=625046|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=div.map_pointer {margin:0px;padding:36px 0px 0px 36px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_place_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.map_pointer {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_place_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////crlf///* Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//span.clear {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.play_arrow {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_play_arrow_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.done {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_done_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.keyboard_arrow_left {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_left_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.keyboard_arrow_down {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.keyboard_arrow_right {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_right_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.keyboard_arrow_up {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_white_18dp_2x.png\\quot\\) no-repeat left;}//crlf//</conditional>//crlf////crlf///* Not reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//span.clear {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.play_arrow {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_play_arrow_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.done {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_done_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.keyboard_arrow_left {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_left_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.keyboard_arrow_down {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.keyboard_arrow_right {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_right_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////tab//span.keyboard_arrow_up {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//</conditional>//crlf////crlf//span.my_location {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_my_location_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.zoom_in {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_zoom_in_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.zoom_out {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_zoom_out_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.zoom_out {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_zoom_out_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.refresh {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.play_arrow_reverse {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_play_arrow_reverse_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.skip_previous {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_skip_previous_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.skip_next {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_skip_next_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.pause {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_pause_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.movie {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_movie_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.help {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_help_outline_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.help_outline {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_help_outline_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.error {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_error_outline_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.error_outline {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_error_outline_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.build {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_build_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.videocam {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_videocam_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.info_outline {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_info_outline_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.subject {margin:0px;padding:18;line-height:36px;background:url(\\quot\\/?network=greenlight//amp//id=getimage//amp//filename=ic_subject_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.solid_green {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_solid_green_circle_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.solid_white {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_solid_white_circle_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.solid_red {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_solid_red_circle_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.transparent {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_transparent_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.print {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_print_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.add {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_add_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.remove {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_remove_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////crlf//span.fast_forward {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_fast_forward_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//span.fast_rewind {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_fast_rewind_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////crlf//span.search {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_search_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//div.search {margin:0px;padding:36px 0px 0px 36px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_search_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf//span.vertical_align_bottom {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_vertical_align_bottom_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//div.vertical_align_bottom {margin:0px;padding:36px 0px 0px 36px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_vertical_align_bottom_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf//span.folder_open {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_folder_open_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf//div.folder_open {margin:0px;padding:36px 0px 0px 36px;width:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_folder_open_black_18dp_2x.png\\quot\\) no-repeat center;}//crlf//span.open_in_new {margin:0px;padding:18;line-height:36px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_open_in_new_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////crlf//@media only screen and (min-width:1024px) {//crlf////crlf////tab///* Reverse colors *///crlf////tab//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab////tab//span.clear {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.play_arrow {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_play_arrow_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.done {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_done_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.keyboard_arrow_left {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_left_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.keyboard_arrow_down {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.keyboard_arrow_right {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_right_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.keyboard_arrow_up {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_white_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//</conditional>//crlf////crlf////tab///* Not reverse colors *///crlf////tab//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab////tab//span.clear {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_clear_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.play_arrow {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_play_arrow_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.done {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_done_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.keyboard_arrow_left {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_left_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.keyboard_arrow_down {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_down_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.keyboard_arrow_right {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_right_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////tab//span.keyboard_arrow_up {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_keyboard_arrow_up_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//</conditional>//crlf////crlf////tab//div.map_pointer {margin:0px;padding:24px 0px 0px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_place_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.map_pointer {margin:0px;padding:12px;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_place_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab////crlf////tab//span.my_location {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_my_location_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.zoom_in {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_zoom_in_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.zoom_out {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_zoom_out_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.refresh {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_refresh_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.play_arrow_reverse {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_play_arrow_reverse_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.skip_previous {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_skip_previous_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.skip_next {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_skip_next_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.pause {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_pause_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.movie {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_movie_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.help {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_help_outline_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.help_outline {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_help_outline_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.error {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_error_outline_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.error_outline {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_error_outline_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.build {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_build_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.videocam {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_videocam_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.info_outline {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_info_outline_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.subject {margin:0px;padding:12;line-height:24px;background:url(\\quot\\/?network=greenlight//amp//id=getimage//amp//filename=ic_subject_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.solid_green {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_solid_green_circle_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.solid_white {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_solid_white_circle_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.solid_red {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_solid_red_circle_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.transparent {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_transparent_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.print {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_print_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.add {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_add_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.remove {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_remove_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////crlf////tab//span.fast_forward {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_fast_forward_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//span.fast_rewind {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_fast_rewind_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////crlf////tab//span.search {margin:0px;padding:12;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_search_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//div.search {margin:0px;padding:24px 0px 0px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_search_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab//span.vertical_align_bottom {margin:0px;padding:12px;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_vertical_align_bottom_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//div.vertical_align_bottom {margin:0px;padding:24px 0px 0px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_vertical_align_bottom_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab//span.folder_open {margin:0px;padding:12px;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_folder_open_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////tab//div.folder_open {margin:0px;padding:24px 0px 0px 24px;width:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_folder_open_black_24dp_1x.png\\quot\\) no-repeat center;}//crlf////tab//span.open_in_new {margin:0px;padding:12px;line-height:24px;background:url(\\quot\\__RequestServer__/?network=greenlight//amp//id=getimage//amp//filename=ic_open_in_new_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////crlf//}//crlf////crlf////crlf//^
ID=482135|X=183|Y=33|W=0|H=0|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/****************************************************************//crlf//styles for inspect menu//crlf//*****************************************************************///crlf//div.inspect_menu_container {width:auto;height:auto;min-width:200px;max-width:300px;position:absolute;z-index:2;background-color:__BackgroundColor__;border:1px solid red;padding:5px;margin:0px}//crlf//td.inspectRecordTD {padding:0px}//crlf//ul.inspect_menu_ul {display:block;padding:0px;margin:0px}//crlf//li.inspect_menu_li {cursor:pointer;list-style-type:none;margin:5px 0px 0px 0px}//crlf//li.inspect_menu_li_disabled {list-style-type:none;margin:0px;color://pound//606060;font-style:italic}//crlf//^
ID=886080|X=183|Y=33|W=917|H=624|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=//tab////tab////tab//div.flygradient1 {background:linear-gradient(to right\\comma\\ //pound//e7eee6 \\comma\\ //pound//20964a);}//crlf////tab////tab////tab//div.flygradient2 {background:linear-gradient(to bottom\\comma\\ //pound//e7eee6 \\comma\\ //pound//20964a);}//crlf////tab////tab////tab//div.flygradient3 {background-color://pound//20964a}//crlf////tab////tab////tab//div.blackbar {background-color:black;}//crlf////tab////tab////tab//span.lfyblacktext1 {font-size:3em}//crlf////crlf////tab////tab////tab//span.flygreentext1 {font-size:3em; color://pound//009444;}//crlf////tab////tab////tab//span.flygreentext2 {font-size:2em; color://pound//009444;}//crlf////tab////tab////tab//span.flygreentext3 {font-size:1em; color://pound//009444;}//crlf////crlf////tab////tab////tab//span.flywhitetext1 {font-size:2em; color:white}//crlf////tab////tab////tab//span.flyflywhitetext1 {font-size:1em; color:white}//crlf////crlf////tab////tab////tab//table.flyfeatures {border-collapse:collapse;width:75\\percent\\}//crlf////tab////tab////tab//td.flyfeatures {border:solid 1px //pound//009444;padding:10px}//crlf////tab////tab////tab////crlf////tab////tab////tab//span.flycheck {margin:0px;padding:18;line-height:36px;background:url(\\quot\\http://127.0.0.1:4446/?network=greenlight//amp//id=getimage//amp//filename=ic_done_black_18dp_2x.png\\quot\\) no-repeat left;}//crlf////crlf////tab////tab////tab//div.flycolumn1 {float:left;max-width:30\\percent\\;padding-right:30px}//crlf////tab////tab////tab//div.flycolumn2 {float:left;max-width:30\\percent\\;padding-right:30px}//crlf////tab////tab////tab//div.flycolumn3 {float:left;max-width:30\\percent\\}//crlf//^
ID=801478|X=183|Y=33|W=986|H=679|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<include type:expression; expression:htmlConstant(\\quot\\EmFactor1\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\1.6em\\quot\\)>//crlf//<include type:expression; expression:htmlConstant(\\quot\\EmFactor2\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\1.4em\\quot\\)>//crlf//<include type:expression; expression:htmlConstant(\\quot\\EmFactor3\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\1.2em\\quot\\)>//crlf//<include type:expression; expression:htmlConstant(\\quot\\EmFactor4\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\\\quot\\1em\\quot\\)>//crlf////crlf//body {padding:0px; margin:0px; font:normal normal normal 8pt tahoma;}//crlf////crlf//h1 //tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 1em; color:black; margin-top:10px; margin-bottom:5px;}//crlf//h2//tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 1em; color:black; padding-bottom:3px; margin-bottom:0px; margin-top:10px;}//crlf//h3//tab////tab////tab////tab////tab////tab//{font-family:tahoma; font-size: 1em; font-style:italic; padding-bottom:0px; margin-bottom:0px;}//crlf//p//tab////tab////tab////tab////tab////tab////tab//{font-family: tahoma\\comma\\ helvetica\\comma\\ arial\\comma\\ sans-serif; font-size:1em; margin-top:5px; margin-bottom:5px;color:black}//crlf//ul//tab////tab////tab////tab////tab////tab//{margin: 0; padding-top:0px; padding-left: 20; }//crlf//ul li//tab////tab////tab////tab////tab//{margin: 0; padding-top: 5; list-style-type: circle;}//crlf//ol//tab////tab////tab////tab////tab////tab//{margin: 0; padding-top:0px; padding-left: 20; }//crlf//ol li//tab////tab////tab////tab////tab//{margin: 0; padding-top: 5;}//crlf////crlf//table //tab////tab////tab////tab//{font-family: tahoma\\comma\\ helvetica\\comma\\ arial\\comma\\ sans-serif; font-size:1em; color: black; border-width:0px; border-collapse:collapse;}//crlf//th //tab////tab////tab////tab////tab////tab//{vertical-align:top; border-width:0px; padding:5px 5px 5px 0px;}//crlf//td //tab////tab////tab////tab////tab////tab//{vertical-align:top; border-width:0px; padding:5px 5px 0px 0px;}//crlf////crlf///* used to right-justify numbers in tables *///crlf//td.tdr {text-align:right}//crlf////crlf///* standard table *///crlf//table.basic1 {border-collapse:collapse;border-top:none;border-left:none;border-right:none}//crlf//table.basic1 th//tab////tab////tab//{text-align:left; background-color:white; vertical-align:bottom; border:none; padding:2px 10px 2px 3px;}//crlf//table.basic1 td//tab////tab////tab//{vertical-align:top; border-width:1px; border-style:solid; border-color:\\pound\\b8b8b8; padding:2px 10px 2px 3px;}//crlf//table.basic1 tr.section//tab//{border:solid 1px \\pound\\b8b8b8}//crlf//td.basic1_subtotal//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:\\pound\\b8b8b8; padding:2px 10px 2px 3px;}//crlf//td.basic1_subtotal0//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:\\pound\\b8b8b8; padding:2px 10px 2px 3px;}//crlf//td.basic1_subtotal1//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:\\pound\\b8b8b8; padding:2px 10px 2px 3px;}//crlf//td.basic1_subtotal2//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:\\pound\\b8b8b8; padding:2px 10px 2px 3px;}//crlf//td.basic1_subtotal3//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:\\pound\\b8b8b8; padding:2px 10px 2px 3px;}//crlf//td.basic1_subtotal4//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:\\pound\\b8b8b8; padding:2px 10px 2px 3px;}//crlf//td.basic1_subtotal5//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:\\pound\\b8b8b8; padding:2px 10px 2px 3px;}//crlf//td.basic1_subtotal6//tab////tab//{font-weight:bold; vertical-align:top; border-width:1px; border-style:solid; border-color:\\pound\\b8b8b8; padding:2px 10px 2px 3px;}//crlf////crlf///* td classes *///crlf//td.negative {background-color:red}//crlf//td.redbkgnd {background-color:\\pound\\ffcccc}//crlf//td.greenbkgnd {background-color:\\pound\\d9ffe1}//crlf////crlf///* embedded view containers *///crlf///* NOTE: Do not add a margin here.  Otherwise\\comma\\ views with 50\\percent\\ width will not float next to each other *///crlf//div.embedded_view_section {margin:0px 0px 0px 0px}//crlf////crlf///* section headers with green background *///crlf///*//crlf////tab//3/11/2024 Removed the gradient because the header was given a light grey background in an email //crlf////tab//and the white text was not readable.//crlf//*///crlf//div.sectionheader {clear:both;cursor:pointer;width:100\\percent\\;margin:5px 0px;padding:2px 0px 0px 0px;border:1px solid black;background-color:\\pound\\1e8c45;border-radius:8px;height:auto;min-height:23px}//crlf//div.sectionheader:hover {margin:5px 0px;padding:3px 0px;border:2px solid \\pound\\20964a}//crlf//span.sectionname {color:white;margin:0px 0px 0px 5px;font-size:1.2em;font-weight:bold}//crlf////crlf///* section headers with grey background *///crlf//div._sectionheader {clear:both;cursor:pointer;width:99\\percent\\;margin:5px 0px;padding:4px 1px;border:1px solid black;background-color:\\pound\\ebebeb;border-radius:8px;height:auto}//crlf//div._sectionheader:hover {margin:5px 0px;padding:3px 0px;border:2px solid black}//crlf//span._sectionname {margin:0px 0px 0px 5px;font-size:1.0em;font-weight:bold}//crlf////crlf//span.sectionheadericonok {padding:12px 12px;margin:0px;background:url(\\quot\\http://127.0.0.1:4446/?network=greenlight\\amp\\id=getimage\\amp\\filename=ic_solid_green_circle_24dp_1x.png\\quot\\) no-repeat left;}//crlf//span.sectionheadericonerror {padding:12px 12px;margin:0px;background:url(\\quot\\http://127.0.0.1:4446/?network=greenlight\\amp\\id=getimage\\amp\\filename=ic_error_outline_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf//span.sectionheadericonwarn {padding:12px 12px;margin:0px;background:url(\\quot\\http://127.0.0.1:4446/?network=greenlight\\amp\\id=getimage\\amp\\filename=ic_help_outline_black_24dp_1x.png\\quot\\) no-repeat left;}//crlf////crlf//span.sectiondescription {font-style:italic;float:right}//crlf////crlf//div.sectionsub {margin:5px 8px;padding:5px 0px;border:none;display:none} //crlf////crlf//div.sectionheader2 {clear:both;cursor:pointer;width:100\\percent\\;margin:5px 0px;padding:4px 1px;border:1px solid black;background-color:\\pound\\ebebeb;border-radius:8px;height:auto;min-height:23px}//crlf//div.sectionheader2:hover {margin:5px 0px;padding:3px 0px;border:2px solid \\pound\\20964a}//crlf//span.sectionname2 {color:white;margin:0px 0px 0px 5px;font-size:1.0em;font-weight:bold}//crlf////crlf///* used for google chart data and output *///crlf//div.googlechartdata {border:solid 1px black;display:none}//crlf//div.googlechartoutput {border:none;background-color:white;display:inline}//crlf////crlf///* note: A border is not supplied here.  It can be added by creating a div to contain the chart //crlf////tab//using [tableID]Chart as the ID of the div.  //crlf//*///crlf//div.googlechartoutputwrapper {float:left;border:none;background-color:white;z-index:99;display:none}//crlf//div.googlechartoutputborderedwrapper {float:left;border:solid 1px black;background-color:white;z-index:99;display:none}//crlf////crlf///* Aspect Charts *///crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\563888\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf///* Meter *///crlf//div.meter_outer {border-radius:3px;border:solid 1px \\pound\\c9c9c9;float:left}//crlf//div.meter_outerleft {float:left;}//crlf//div.meter_outerright {float:right;}//crlf//div.meter_innerleft {float:right;background-color:\\pound\\dc8989;border-right:solid 1px black}//crlf//div.meter_innerright {position:relative;left:1;background-color:\\pound\\2cf911;}//crlf////crlf///* meter - opaque *///crlf//div.meter_opaque {float:left}//crlf////crlf//<conditional expression:false>//crlf////tab//div.widgetcontainer//tab//{padding:0px; margin:0px; border:solid 1px black; background:white; font:normal normal normal 8pt tahoma;}//crlf////tab//p.widgetcontainer //tab//{font:normal normal normal 8pt tahoma; margin:0px; padding:5px 0px 5px 0px;}//crlf////tab//td.widgetcontainer //tab//{font:normal normal normal 8pt tahoma; margin:0px; padding:5px 0px 5px 0px;}//crlf////crlf////tab///* Include Defaults *///crlf////tab//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\438873\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Tables (border\\comma\\ no border...) *///crlf////tab//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\943138\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Icons *///crlf////tab//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\625046\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Table headers *///crlf////tab//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\75699\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Chapters *///crlf////tab//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\630514\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Tabbed Dialog and Menu *///crlf////tab//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\174218\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Table Info *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\309792\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Other *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\977595\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Aspect Support *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\687311\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include UI Menu *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\263096\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include UI Popups *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\785637\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include UI View Management *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\632391\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include UI Inspect *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\482135\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Table Edit Dialog\\comma\\ Message\\comma\\ Chart *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\568962\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Displays Dialog *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\217598\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Dialog Headers *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\537776\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf////tab///* Include Calendar *///crlf////tab//<!include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Stylesheet 2015\\quot\\; containerItemID:\\quot\\443135\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf//</conditional>//crlf////crlf////crlf////crlf//^
ID=563888|X=183|Y=33|W=933|H=641|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=619854|AttachLeft=|AlignLeft=619854|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=//crlf//div.chart_title {width:100\\percent\\;background-color:__BackgroundColor__;border:solid 0px black;text-align:center;font-weight:bold;font-size:2em}//crlf//div.chart_leftaxis {width:auto;background-color:__BackgroundColor__;float:left;border:none;margin0px;padding:0px}//crlf//div.chart_rightaxis {width:auto;background-color:__BackgroundColor__;float:right;border:none;margin0px;padding:0px}//crlf//div.chart_bottomaxis {width:100\\percent\\;background-color:color:transparent;border:solid 0px black;height:auto;position:absolute}//crlf////crlf////crlf///* saved plotarea_container color: //pound//f3f2f2 *///crlf//div.chart_plotarea_container {width:100\\percent\\;overflow:auto;background-color:__BackgroundColor__;position:absolute;float:left;margin:0px;padding:0px;border:solid 1px black}//crlf//div.chart_plotarea {width:100\\percent\\;height:100\\percent\\;background-color:transparent;border-bottom:solid 1px black;position:relative}//crlf////crlf//div.chart_slider {width:50px;background-color:__BackgroundColor__;border:none;clear:both;margin:0px;padding:0px;position:relative}//crlf//input.slider_input {width:100\\percent\\;background-color:__BackgroundColor__}//crlf//div.chart_legend {width:50px;background-color:red;float:orange;border:solid 0px black}//crlf////crlf//div.vertical_axis_major_tick_container {border:none;position:absolute}//crlf//div.vertical_left_axis_major_tick {border:none;background-color:__BackgroundColor__;color:__ForegroundColor__;position:absolute;margin:0px;padding:0px;text-align:right}//crlf//div.vertical_right_axis_major_tick {border:none;background-color:__BackgroundColor__;color:__ForegroundColor__;position:absolute;margin:0px;padding:0px;text-align:left}//crlf//div.vertical_axis_minor_tick_container {border:none;position:absolute;background-color:__BackgroundColor__}//crlf//div.vertical_axis_minor_tick {border:none;background-color:__BackgroundColor__;position:absolute;margin:0px;padding:0px;}//crlf//hr.vertical_tick {}//crlf//div.vertical_tick_value {position:relative}//crlf////crlf///* styles for bottom axis of a line or column chart *///crlf//div.bottom_axis_tick_container {position:absolute;border:none;display:inline;padding:0px;margin:0px}//crlf//div.bottom_axis_tick {transform:rotate(45deg);position:relative;top:20px;left:-5;white-space:nowrap};//crlf////crlf///* styles for bottom axis of a scatter chart *///crlf//div.bottomxy_axis_major_tick_container {border:none;position:absolute;background-color:__BackgroundColor__}//crlf//div.bottomxy_axis_major_tick {display:inline;border:none;background-color:__BackgroundColor__;position:absolute;margin:0px;padding:0px;text-left}//crlf//div.bottomxy_axis_minor_tick_container {border:none;position:absolute;background-color:__BackgroundColor__}//crlf//div.bottomxy_axis_minor_tick {display:inline;border:none;background-color:__ForegroundColor__;position:absolute;margin:0px;padding:0px;}//crlf//hr.bottomxy_tick {}//crlf//div.bottomxy_tick_value {position:relative}//crlf////crlf//ul.chart_legend {}//crlf//li.chart_legend {display:inline;float:left}//crlf//div.chart_legend_marker {width:10px;height:10px;margin-left:10px;margin-right:5px;display:inline}//crlf//span.chart_legend_text {font-weight:bold;color:__ForegroundColor__;background-color:__BackgroundColor__}//crlf////crlf//div.point {position:absolute;width:2px;height:3px;z-index:3}//crlf//div.point:hover {background-color:red;width:10px;height:10px;}//crlf////crlf//div.chartYearTick {z-index:2;position:absolute;background-color:black;width:2px;margin:0px;padding:0px;border:none}//crlf//div.chartMonthTick {z-index:2;position:absolute;background-color://pound//cac2c2;width:1px;margin:0px;padding:0px;border:none}//crlf//div.chartTodayTick {z-index:2;position:absolute;background-color://pound//7cfc00;width:2px;margin:0px;padding:0px;border:none}//crlf////crlf///* Reverse colors *///crlf//<conditional expression:boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))>//crlf////tab//div.recession_shade {position:absolute;background-color://pound//c9c9c9;opacity:0.3}//crlf//</conditional>//crlf////crlf///* Not reverse colors *///crlf//<conditional expression:not(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\))))>//crlf////tab//div.recession_shade {position:absolute;background-color://pound//c9c9c9;opacity:0.5}//crlf//</conditional>//crlf////crlf//div.chart_horz_crosshair {position:fixed;display:none;height:1px;background-color://pound//300eec;z-index:99}//crlf//div.chart_vert_crosshair {position:fixed;display:none;width:1px;background-color://pound//300eec;z-index:99}//crlf////crlf//div.point_info_container {position:absolute;z-index:4;opacity:0.7;border:solid 1px __ForegroundColor__;width:250px;height:auto;padding:5px;background-color:__BackgroundColor__}//crlf//div.point_info {font-weight:bold}//crlf//div.point_info_close_icon {float:right}//crlf//
</widget><widget name="Javascript 2015" group="UI 2015" category="" description="" type="Container" Mobile="false" Processing=0 metadata="" IncludeInViewer="false" PublicName="Javascript 2015" modified="09-05-2022 23:32:33" modifiedby="Thnikpad3" TaskEnabled=false IsAgent=false ContainsAgentSensors=false ContainsAgentActions=false TaskInitialStartTime=03-29-2019 03:40:03:000 TaskIntervalType=0 TaskLastExecuted= TaskCatchUpMissedTasks=false TaskYearsBetweenExecution=0 TaskMonthsBetweenExecution=0 TaskDaysBetweenExecution=0 TaskHoursBetweenExecution=0 TaskMinutesBetweenExecution=0 TaskSecondsBetweenExecution=0 TaskExecuteSun=true TaskExecuteMon=true TaskExecuteTue=true TaskExecuteWed=true TaskExecuteThu=true TaskExecuteFri=true TaskExecuteSat=true TaskConditional_Expression="" TaskConditional_Expression_Description="" TaskState_Function="" TaskState_Expression_Description="" TaskWidgetParams="" TaskWindowForExecution=0>
Preferences|toolboxx=43|toolboxy=221|aspectfuncx=100|aspectfuncy=100|aspectfuncw=750|aspectfunch=auto|aspectfuncLock=false|aspectfuncVisible=false|PublishFtpFilename=Javascript 2015.html|PublishToFtpSite=false|PublishFTPAccount=0|PublishFtpDirectory=/|PublishFtpPublicDirectory=/|PublishCopyFile=false|PublishCopyFilename=|PublishWysiwig=false|PublishIncludeAspectScript=false|PublishIncludeAspectStyleshet=false|PublishAsText=false|^
ID=top_bar|X=0|Y=0|W=150|H=20|AutoHeight=true|AutoWidth=true|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=false|BorderStyle=solid 1 black|Visible=true|Print=false|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=html|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=|AttachLeft=|AlignLeft=|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|^
ID=589704|X=183|Y=16|W=150|H=20|AutoHeight=true|AutoWidth=true|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=html|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=top_bar|AttachLeft=left_bar|AlignLeft=|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<select style=\\quot\\width:200px\\quot\\ onChange=\\quot\\showTab(this)\\quot\\>//crlf////tab//<option value='370976'>All JS</option>//crlf////tab//<option value='993103'>Viewer</option>//crlf////tab//<option value='249315'>JS For Email Attachment</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='803322'>Initialization</option>//crlf////tab//<option value='591093'>Google Analytics</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='296720'>UI Selections</option>//crlf////tab//<option value='857658'>UI Popups</option>//crlf////tab//<option value='195067'>UI Params</option>//crlf////tab//<option value='600452'>UI View Management</option>//crlf////tab//<option value='350254'>UI Inspect</option>//crlf////tab//<option value='391179'>UI View Containers</option>//crlf////tab//<option value='804531'>UI External Param Container</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='158824'>Dialog for Table Record</option>//crlf////tab//<option value='851443'>Display Options</option>//crlf////tab//<option value='69513'>Table Data Submission</option>//crlf////tab//<option value='801274'>Table Info</option>//crlf////tab//<option value='538055'>Table Functions</option>//crlf////tab//<option value='269074'>Charts</option>//crlf////tab//<option value='350058'>Aspect Charts</option>//crlf////tab//<option value='455955'>Animations</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='499706'>Select File Dialog</option>//crlf////tab//<option value='440336'>Geolocation</option>//crlf////tab//<option value='783016'>System Dialog</option>//crlf////tab//<option value='37575'>Chapters</option>//crlf////tab//<option value='567024'>Tabbed Dialogs</option>//crlf////tab//<option value='768522'>Refresh On Interval</option>//crlf////tab//<option value='208063'>Aspect Specific Functions</option>//crlf////tab//<option value='715444'>Styles / Scripts</option>//crlf////tab//<option value='655411'>Log / Debugging</option>//crlf////tab//<option value='433893'>Visibility / Set Interval</option>//crlf////tab//<option value='913848'>Collections</option>//crlf////tab//<option value='940807'>Session</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='571416'>Text Functions</option>//crlf////tab//<option value='270967'>Http Request</option>//crlf////tab//<option value='130298'>Utility Functions</option>//crlf////tab//<option value='961525'>Cookies</option>//crlf////tab//<option value='622194'>Positioning</option>//crlf////tab//<option value='82587'>Host information</option>//crlf////tab//<option value=''></option>//crlf////tab//<option value=''>-------------------------</option>//crlf////tab//<option value='829332'>Drop-down menu</option>//crlf////tab//<option value='819734'>Left Bar Functions - Old</option>//crlf////tab//<option value='528184'>Tooltips</option>//crlf////tab//<option value='80555'>Play Videos</option>//crlf////tab//<option value='902418'>Retired Functions</option>//crlf//</select>//crlf//^
ID=370976|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf////tab//1.07//crlf//</state>//crlf////crlf////All Javascript//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\591093\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\499706\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\440336\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\783016\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\829332\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\158824\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\819734\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\571416\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\37575\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\567024\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\270967\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\130298\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\768522\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\803322\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\961525\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\622194\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\82587\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\528184\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\851443\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\208063\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\80555\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\902418\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\69513\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\801274\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\538055\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\269074\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\350058\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\715444\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\655411\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\433893\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\913848\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\940807\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\296720\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\857658\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\195067\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\600452\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\350254\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\391179\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\804531\\quot\\; params:\\quot\\\\quot\\;>//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\455955\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf//^
ID=783016|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************************************//crlf//FUNCTIONS USED TO DISPLAY SYSTEM DIALOG//crlf////crlf//The showDialog function is called to display the dialog.  params is a //amp// delimited string of //crlf//arguments.  The following arguments can be defined://crlf////crlf//icon - If the value is true\\comma\\ a status icon is displayed before the message//crlf//msg - the message to be displayed.  //crlf//ProgressMax - If specified\\comma\\ a progress bar wll be displayed with a value of ProgressMax//crlf//ProgressToken - Must be specified when ProgressMax is defined.  This is a token that wlil be //crlf////tab//requested at a 1 second interval to update the progress bar.  The token can contain a single //crlf////tab//number indicating the number of steps (out of max) completed so far or it can be a pipe-delimited //crlf////tab//string that contains the number followed by a new message to be displayed in the dialog.//crlf////crlf//Currently ProgressMax and ProgressToken only work when the token is defined on the machine //crlf////tab//specified by getServer() (i.e. the local computer)//crlf////crlf//(these arguments cause a button to be displayed when defined.  The argument defines the//crlf// function to be called when the button is pressed.  For example fnOK=myfunction()//amp//fnCancel=//crlf// The value can also be 'close' which will just hide the dialog without calling a function//crlf//fnOk//crlf//fnYes//crlf//fnNo//crlf//fnCancel//crlf//fnOther1 - Pass a value in Other1 to set the label of the button//crlf//fnOther2 - \\quot\\\\quot\\//tab////tab////tab//    //crlf//fnOther3 - \\quot\\\\quot\\//tab////tab////tab//    //crlf////crlf//Quotes can be included in the function definitions by using $q//crlf////crlf//examples://crlf//showDialog('icon=true//amp//msg=this is a test')//crlf//showDialog('icon=true//amp//msg=this is a test//amp//top=200//amp//left=200//amp//width=400//amp//height=100')//crlf//showDialog('icon=true//amp//msg=this is a test//amp//fnOk=alert($qtest$q)//amp//fnCancel=close')//crlf//showDialog('icon=true//amp//msg=this is a test//amp//fnOk=alert($qtest$q)//amp//fnOther1=alert($qOther$q)//amp//Other1=Other//amp//fnCancel=close')//crlf//showDialog('close')//crlf//******************************************************************************************************///crlf//var bShowingSystemDialog=false;//crlf////crlf//function showDialog(params)//crlf//{//crlf////tab////always close the dialog to avoid multiple ones being opened //crlf////tab//var e=document.getElementById(\\quot\\SystemDialog\\quot\\);//crlf////tab//if(e) document.body.removeChild(e);//crlf////crlf////tab////if no params were passed\\comma\\ just exit after closing the dialog//crlf////tab//if(!params) return;//crlf////tab////crlf////tab//var d=document.createElement('div');//crlf////tab//d.id=\\quot\\SystemDialog\\quot\\;//crlf////tab////crlf////tab//d.style.zIndex=99;//crlf////tab//d.className=\\quot\\showdialog\\quot\\;//crlf////tab////d.style.width=(bIsMobileDevice) ? \\quot\\270px\\quot\\ : \\quot\\300px\\quot\\;//crlf////tab//d.style.width=\\quot\\75\\percent\\\\quot\\;//crlf////tab//d.style.maxWidth=\\quot\\300px\\quot\\;//crlf////tab////crlf////tab//var bTopSpecified=false;//crlf////tab//var bLeftSpecified=false;//crlf////crlf////tab//var arCommands=new Array(\\quot\\ICON\\quot\\\\comma\\\\quot\\MSG\\quot\\\\comma\\\\quot\\LEFT\\quot\\\\comma\\\\quot\\TOP\\quot\\\\comma\\\\quot\\WIDTH\\quot\\\\comma\\\\quot\\HEIGHT\\quot\\\\comma\\\\quot\\FNOK\\quot\\\\comma\\\\quot\\FNYES\\quot\\\\comma\\\\quot\\FNNO\\quot\\\\comma\\\\quot\\FNCANCEL\\quot\\\\comma\\\\quot\\FNOTHER1\\quot\\\\comma\\\\quot\\FNOTHER2\\quot\\\\comma\\\\quot\\FNOTHER3\\quot\\\\comma\\\\quot\\POSITION\\quot\\\\comma\\\\quot\\MAX-WIDTH\\quot\\\\comma\\\\quot\\PROGRESSMAX\\quot\\\\comma\\\\quot\\PROGRESSTOKEN\\quot\\);//crlf////tab//aParams=getSubStringArray(params\\comma\\\\quot\\//amp//\\quot\\\\comma\\true);//crlf////tab//var bAddProgressBar=false;//crlf////tab//var ProgressMax=0;//crlf////tab//var sProgressToken=\\quot\\\\quot\\;//crlf////tab//for (var i=0;i<aParams.length;i++) {//crlf////tab////tab//var n=aParams[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var sName=aParams[i].substring(0\\comma\\n);//crlf////tab////tab////tab//var sNameUpper=sName.toUpperCase();//crlf////tab////tab////tab//var sValue=aParams[i].substring(n+1);//crlf////tab////tab////tab//if(sValue.equalsIgnoreCase(\\quot\\close\\quot\\)) sValue=\\quot\\showDialog()\\quot\\;//crlf////tab////tab////tab////crlf////tab////tab////tab//var iCommand=-1;//crlf////tab////tab////tab//for (var j=0;j<arCommands.length;j++) {//crlf////tab////tab////tab////tab////alert(\\quot\\j=\\quot\\+j+\\quot\\ arCommands[j]=\\quot\\+arCommands[j]);//crlf////tab////tab////tab////tab//if(sName.equalsIgnoreCase(arCommands[j])) iCommand=j;//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab////alert(\\quot\\sName=\\quot\\+sName+\\quot\\ sValue=\\quot\\+sValue+\\quot\\ iCommand=\\quot\\+iCommand+\\quot\\ len=\\quot\\+arCommands.length);//crlf////tab////tab////tab//switch(iCommand) {//crlf////tab////tab////tab////tab//case  0://tab////icon//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var img=new Image();//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//bAddProgressBar=true;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case  1://tab////msg//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var t=document.createElement(\\quot\\span\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//t.id=\\quot\\SystemDialogMsg\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//t.innerHTML=sValue;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//d.appendChild(t);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case  2://tab////left//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//d.style.left=sValue;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//bLeftSpecified=true;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case  3://tab////top//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//d.style.top=sValue;//tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//bTopSpecified=true;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case  4://tab////width//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//d.style.width=replaceAllSubstrings(sValue\\comma\\\\quot\\pcnt\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case  5://tab////height//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//d.style.height=sValue;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case  6://tab////fnok//crlf////tab////tab////tab////tab//case  7://tab////fnyes//crlf////tab////tab////tab////tab//case  8://tab////fnno//crlf////tab////tab////tab////tab//case  9://tab////fncancel//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var b=document.createElement(\\quot\\input\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//b.setAttribute('type'\\comma\\'button');//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//b.setAttribute('name'\\comma\\sName.substring(2));//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//b.setAttribute('value'\\comma\\sName.substring(2));//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//b.setAttribute('class'\\comma\\\\quot\\systemdialogbutton\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//b.setAttribute(\\quot\\onclick\\quot\\\\comma\\sValue);//tab////this works for firefox//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//b.onclick=Function(sValue);//tab////tab////this works for IE//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//d.appendChild(b);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case 10://tab////fnother1//crlf////tab////tab////tab////tab//case 11://tab////fnother2//crlf////tab////tab////tab////tab//case 12://tab////fnother3//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case 13: //tab////position//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//d.style.position=sValue;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case 14: //tab////max-width//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//d.style.maxWidth=replaceAllSubstrings(sValue\\comma\\\\quot\\pcnt\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case 15://tab////ProgressMax//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//ProgressMax=parseInt(sValue);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//case 16://tab////ProgressToken//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//sProgressToken=sValue;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////add the progress bar after all other elements//crlf////tab//if((bAddProgressBar) ~~pipe~~~~pipe~~ (ProgressMax>0)) {//crlf////tab////tab//var eProgress=document.createElement(\\quot\\progress\\quot\\);//crlf////tab////tab//eProgress.id=\\quot\\SystemDialogProgress\\quot\\;//crlf////tab////tab//eProgress.style.width=\\quot\\100\\percent\\\\quot\\;//crlf////tab////tab//if(ProgressMax>0) {//crlf////tab////tab////tab//eProgress.setAttribute(\\quot\\max\\quot\\\\comma\\ProgressMax);//crlf////tab////tab////tab//eProgress.setAttribute(\\quot\\value\\quot\\\\comma\\0);//crlf////tab////tab//};//crlf////tab////tab//d.appendChild(eProgress);//crlf////tab//};//crlf////crlf////tab//document.body.appendChild(d);//crlf////crlf////tab////set top and left position if not specified//crlf////tab//if(!bLeftSpecified) {//crlf////tab////tab////position in the middle of the screen//crlf////tab////tab//var Middle=document.body.offsetWidth/2 - d.offsetWidth/2;//crlf////tab////tab//d.style.left=Middle+\\quot\\px\\quot\\;//crlf////tab//};//crlf////crlf////tab//if(!bTopSpecified) {//crlf////tab////tab//d.style.top=\\quot\\100px\\quot\\;//crlf////tab//};//crlf////crlf////tab////if a progress token and max value have been specified\\comma\\ call the function to update the progress bar//crlf////tab//if((ProgressMax>0) //amp////amp// (sProgressToken.length>0)) {//crlf////tab////tab//var sUrl=getServer()+\\quot\\/?Network=greenlight//amp//id=eval//amp//expression=getToken(\\quot\\+sProgressToken+\\quot\\)\\quot\\;//crlf////tab////tab//var sFunc=\\quot\\updateDialog('\\quot\\+sProgressToken+\\quot\\'\\comma\\s)\\quot\\;//crlf////tab////tab//setTimeout(\\quot\\asynchInclude(null\\comma\\\\\quot\\\\quot\\+sUrl+\\quot\\\\\quot\\\\comma\\\\\quot\\\\quot\\+sFunc+\\quot\\\\\quot\\\\comma\\\\\quot\\\\quot\\+sFunc+\\quot\\\\\quot\\);\\quot\\\\comma\\1000);//crlf////tab//};//crlf//};//crlf////crlf///************************************************************************//crlf//This function is called by showDialog when a progress bar has been specified //crlf//using ProgressMax and ProgressToken.  This function makes a request to the //crlf//server for the given token and then updates the dialog.  The token is a //crlf//number indicating the number of steps (out of max steps) completed.  It can //crlf//also be of the form [steps completed]~~pipe~~[message] which will also update the //crlf//message in the dialog.//crlf//************************************************************************///crlf//function updateDialog(_progresstoken\\comma\\_tokenvalue) {//crlf////tab////return if the dialog has been closed//crlf////tab//var eDialog=document.getElementById(\\quot\\SystemDialog\\quot\\);//crlf////tab//if(!eDialog) {//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//if(_tokenvalue) {//crlf////tab////tab//var iValue=0;//crlf////tab////tab//var sMsg=\\quot\\\\quot\\;//crlf////crlf////tab////tab//sTokenValue=_tokenvalue.trim();//crlf////crlf////tab////tab//if(sTokenValue.length>0) {//crlf////tab////tab////tab//var n=sTokenValue.indexOf(\\quot\\~~pipe~~\\quot\\);//crlf////tab////tab////tab//if(n<0) {//crlf////tab////tab////tab////tab//iValue=parseInt(sTokenValue);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//iValue=parseInt(sTokenValue.substring(0\\comma\\n));//crlf////tab////tab////tab////tab//sMsg=sTokenValue.substring(n+1);//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if(sMsg.length>0) {//crlf////tab////tab////tab////tab//var eMsg=document.getElementById(\\quot\\SystemDialogMsg\\quot\\);//crlf////tab////tab////tab////tab//eMsg.innerHTML=sMsg;//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if(!isNaN(iValue)) {//crlf////tab////tab////tab////tab//var eProgress=document.getElementById(\\quot\\SystemDialogProgress\\quot\\);//crlf////tab////tab////tab////tab//if(eProgress) eProgress.value=iValue;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab//var sUrl=getServer()+\\quot\\/?Network=greenlight//amp//id=eval//amp//expression=getToken(\\quot\\+_progresstoken+\\quot\\)\\quot\\;//crlf////tab////tab//var sFunc=\\quot\\updateDialog('\\quot\\+_progresstoken+\\quot\\'\\comma\\s)\\quot\\;//crlf////tab////tab//setTimeout(\\quot\\asynchInclude(null\\comma\\\\\quot\\\\quot\\+sUrl+\\quot\\\\\quot\\\\comma\\\\\quot\\\\quot\\+sFunc+\\quot\\\\\quot\\\\comma\\\\\quot\\\\quot\\+sFunc+\\quot\\\\\quot\\);\\quot\\\\comma\\1000);//crlf////tab//};//crlf////tab////crlf//};//crlf////crlf//function showDialogSub(t\\comma\\top\\comma\\left\\comma\\width\\comma\\height)//crlf//{//crlf////tab////appendToLog(\\quot\\showDialogSub\\quot\\);//crlf////tab//bShowingSystemDialog=false;//crlf////tab//var e=document.getElementById(\\quot\\SystemDialogContainer\\quot\\);//crlf////tab//if(!e) {//crlf////tab////tab//e=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//e.id=\\quot\\SystemDialogContainer\\quot\\;//crlf////tab////tab//document.body.appendChild(e);//crlf////tab//};//crlf////crlf////tab//e.style.zIndex=99;//crlf////tab//e.innerHTML=t;//crlf////crlf////tab//var e2=document.getElementById(\\quot\\SystemDialog\\quot\\);//crlf////tab//if(e2) {//crlf////tab////tab//(top==0) ? e2.style.top=\\quot\\100px\\quot\\ : e2.style.top=top+\\quot\\px\\quot\\;//crlf////tab////tab//(left==0) ? e2.style.left=\\quot\\100px\\quot\\ : e2.style.left=left+\\quot\\px\\quot\\;//crlf////tab////tab//(width==0) ? e2.style.width=\\quot\\300px\\quot\\ : e2.style.width=width+\\quot\\px\\quot\\;//crlf////tab////tab//(height==0) ? e2.style.height=\\quot\\auto\\quot\\ : e2.style.height=height+\\quot\\px\\quot\\;//crlf////tab//};//crlf////tab//setVisible(e\\comma\\true);//crlf//};//crlf////crlf//function oldshowDialog(params\\comma\\count) {//crlf////tab////appendToLog(\\quot\\showDialog params=\\quot\\+params+\\quot\\ count=\\quot\\+count);//crlf////crlf////tab//if(!params) {//crlf////tab////tab////If the system dialog is still initializing\\comma\\ then wait 1 second and try again to hide it//crlf////tab////tab////Otherwise\\comma\\ the dialog will not be hidden if the dialog is shown and then hidden before it becomes visible//crlf////tab////tab//(bShowingSystemDialog) ? setTimeout(\\quot\\showDialog()\\quot\\\\comma\\1000) : setVisible(\\quot\\SystemDialogContainer\\quot\\\\comma\\false);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//bShowingSystemDialog=false;//crlf////crlf////tab////var strUrl=\\quot\\http://127.0.0.1:{greenlight_client_http_port}/?Network=GreenLight//amp//ID=getCachedWidget//amp//DocumentID=77NaWu0FhKDKXL7C70JpnKmy//amp//Widget=HTML Status Message\\quot\\;//crlf////tab//var strUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=getCachedWidget//amp//DocumentID=77NaWu0FhKDKXL7C70JpnKmy//amp//Widget=HTML Status Message\\quot\\;//crlf////tab//if (params) strUrl +=\\quot\\//amp//\\quot\\+params;//crlf////crlf////tab////Try to load the dialog up to 5 times if an error occurs//crlf////tab////Count will only be defined if an error has occurred in asynchInclude//crlf////tab//var n=0;//crlf////tab//if(count) {//crlf////tab////tab//if(count>5) {//crlf////tab////tab////tab//alert(\\quot\\An error has occurred.//tab//Please refresh the page.\\quot\\);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab////tab//n=count+1;//crlf////tab////tab//setTimeout(\\quot\\showDialog(\\\quot\\\\quot\\+params+\\quot\\\\\quot\\\\comma\\\\quot\\+n+\\quot\\)\\quot\\\\comma\\1000);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var t=getElementValue(params\\comma\\\\quot\\top\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab//var l=getElementValue(params\\comma\\\\quot\\left\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab//var w=getElementValue(params\\comma\\\\quot\\width\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab//var h=getElementValue(params\\comma\\\\quot\\height\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////crlf////tab//(t.length>0) ? t=parseInt(t) : t=0;//crlf////tab//(l.length>0) ? l=parseInt(l) : l=0;//crlf////tab//(w.length>0) ? w=parseInt(w) : w=0;//crlf////tab//(h.length>0) ? h=parseInt(h) : h=0;//crlf////crlf////tab//var sFuncOk=\\quot\\showDialogSub(req.responseText\\comma\\\\quot\\+t+\\quot\\\\comma\\\\quot\\+l+\\quot\\\\comma\\\\quot\\+w+\\quot\\\\comma\\\\quot\\+h+\\quot\\)\\quot\\;//crlf////tab//var sFuncErr=\\quot\\showDialog(\\\quot\\\\quot\\+params+\\quot\\\\\quot\\\\comma\\1)\\quot\\;//crlf////tab//bShowingSystemDialog=true;//crlf////tab//asynchInclude(null\\comma\\strUrl\\comma\\sFuncOk\\comma\\sFuncErr);//crlf//};//crlf////crlf//^
ID=829332|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************************************//crlf//FUNCTIONS USED FOR DROP-DOWN MENUS//crlf//******************************************************************************************************///crlf//var timerDropDownMenu=null;//crlf////crlf//// open drop-down list//crlf//function menuOpen(id) {//tab////crlf////tab//menuCancelTimeout();//crlf////tab//menuCloseAll();//crlf////tab//setVisible(id\\comma\\true);//crlf//};//crlf////crlf//// close drop-down list//crlf//function menuCloseAll() {//crlf////tab//var arMenu=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for (var i=0;i<arMenu.length;i++) {//crlf////tab////tab//if (arMenu[i].getAttribute(\\quot\\isMenu\\quot\\)) setVisible(arMenu[i]\\comma\\false);//crlf////tab//};//crlf//};//crlf////crlf////go close timer//crlf//function menuSetTimeout()//tab//{//crlf////tab////The timeout here is important.  If it is too short\\comma\\ the menu will disappear in IE before the mouse is moved to a selection//crlf////tab//timerDropDownMenu=window.setTimeout(\\quot\\menuCloseAll()\\quot\\\\comma\\500);//crlf//};//crlf////crlf//// cancel close timer//crlf//function menuCancelTimeout() {//crlf////tab//if(timerDropDownMenu) {//crlf////tab////tab//window.clearTimeout(timerDropDownMenu);//crlf////tab////tab//timerDropDownMenu=null;//crlf////tab//};//crlf//};//crlf//^
ID=158824|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************//crlf//Called on mobile devices to focus the given dialog and hide all the others.  The//crlf//current state is recorded so it can be restord.  Called for dialogs used to//crlf//edit records in a table and for display dialogs.  Allows for dialogs to be opened//crlf//on top of each other.  For example\\comma\\ a dialog used to edit a record may contain//crlf//a table with a display dialog and an edit-record dialog.//crlf////crlf//Information about the current state of all divs is recorded in a string and added to the//crlf//arFocusDialog array which acts like a stack.  When the dialog is closed\\comma\\ the string//crlf//is pulled from and the state of all divs is restored.  The defocusDialog() function is //crlf//caled to restore the state of the divs.//crlf//******************************************************************************///crlf//var arFocusDialog=new Array();//crlf//var bInFocusDialog=false;//crlf////crlf//function focusDialog(ID)//crlf//{//crlf////tab//bInFocusDialog=true;//crlf////tab//location.hash=\\quot\\//pound//edit\\quot\\;//crlf////crlf////tab////The first two elements in the string are the dialog ID and the y position of the document//crlf////tab//s=ID+\\quot\\~~pipe~~\\quot\\+window.scrollY;;//crlf////tab//var sDebug=\\quot\\\\quot\\;//crlf////tab////crlf////tab////add information about the remaining divs//crlf////tab//var arDiv=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for (var i=0;i<arDiv.length;i++) {//crlf////tab////tab//if((boolVal(arDiv[i].getAttribute(\\quot\\isItem\\quot\\))) ~~pipe~~~~pipe~~ (arDiv[i].getAttribute(\\quot\\IsMobileDialog\\quot\\))) {//crlf////tab////tab////tab//if(!arDiv[i].id.equalsIgnoreCase(ID)) {//crlf////tab////tab////tab////tab//if(isVisible(arDiv[i])) {//crlf////tab////tab////tab////tab////tab//s+=\\quot\\~~pipe~~\\quot\\+arDiv[i].id+\\quot\\=true\\quot\\;//crlf////tab////tab////tab////tab////tab//setVisible(arDiv[i]\\comma\\false);//crlf////tab////tab////tab////tab////tab//sDebug+=\\quot\\Hide \\quot\\+arDiv[i].id+\\quot\\\r\n\\quot\\;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//s+=\\quot\\~~pipe~~\\quot\\+arDiv[i].id+\\quot\\=false\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//arFocusDialog[arFocusDialog.length]=s;//crlf////tab//sDebug +=\\quot\\Show \\quot\\+ID+\\quot\\=true\r\n\\quot\\//crlf////tab////crlf////tab////add an attribute that can be used in the loop above to identify divs that are not items but that should be hidden.//crlf////tab////This happens when a dialog is opened to edit a record and the dialog contains a table.  When the display options//crlf////tab////are opened in the tablr or a record is edited\\comma\\ the edit dialog opened from the first table will have been moved//crlf////tab////to the body and it will no longer be inside a container item.  This attibute is used to hide dialogs like these//crlf////tab////that have been opened on the way to tue current dialog.//crlf////tab//document.getElementById(ID).setAttribute(\\quot\\IsMobileDialog\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab//setVisible(ID\\comma\\true);//crlf////tab////crlf////tab//sDebug +=\\quot\\arFocusDialog length=\\quot\\+arFocusDialog.length+\\quot\\\r\n\\quot\\;//crlf////tab////sDebug +=\\quot\\arFocusDialog[\\quot\\+(arFocusDialog.length-1)+\\quot\\]=\\quot\\+arFocusDialog[arFocusDialog.length-1]+\\quot\\\r\n\\quot\\;//crlf////tab////alert(sDebug);//crlf////tab////appendToLog(sDebug\\comma\\false\\comma\\true);//crlf////tab//bInFocusDialog=false;//crlf//};//crlf////crlf//function defocusDialog()//crlf//{//crlf////tab////abort if this is being called by hashChange when the location is set in focusDialog//crlf////tab//if(bInFocusDialog) return;//crlf////tab////crlf////tab////abort if there are no records in arFocusDialog//crlf////tab//if(arFocusDialog.length==0) {//crlf////tab////tab//appendToLog(\\quot\\deFocusDialog Error: length=0\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab////get the last string recorded in arFocusDialog//crlf////tab//var sDebug=\\quot\\defocusDialog restoring \\quot\\+arFocusDialog[arFocusDialog.length-1]+\\quot\\\r\n\\quot\\;//crlf////tab//var a=getSubStringArray(arFocusDialog[arFocusDialog.length-1]\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////crlf////tab////the ID of the dialog is the first element in the array//crlf////tab//sDebug +=\\quot\\defocusDialog setVisible \\quot\\+a[0]+\\quot\\=false\r\n\\quot\\;//crlf////tab//setVisible(a[0]\\comma\\false);//crlf////crlf////tab////restore the y position//crlf////tab//sDebug +=\\quot\\defocusDialog scrollto \\quot\\+parseInt(a[1])+\\quot\\\r\n\\quot\\;//crlf////tab//window.scrollTo(0\\comma\\parseInt(a[1]));//crlf////crlf////tab////restore the visibility of the remaining items//crlf////tab//for(var i=2;i<a.length;i++) {//crlf////tab////tab//var n=a[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//var sID=a[i].substring(0\\comma\\n);//crlf////tab////tab//var bVisible=boolVal(a[i].substring(n+1));//crlf////tab////tab//sDebug +=\\quot\\Show \\quot\\+sID+\\quot\\=\\quot\\+bVisible+\\quot\\\r\n\\quot\\;//crlf////tab////tab//setVisible(sID\\comma\\bVisible);//crlf////tab//};//crlf////tab////crlf////tab////remove the string from the array//crlf////tab//arFocusDialog.length--;//crlf////crlf////tab////alert(sDebug);//crlf////tab////appendToLog(sDebug\\comma\\false\\comma\\true);//crlf//};//crlf////crlf///******************************************************************************//crlf//Called when the edit dialog is closed on a mobile device by pressing the back button//crlf//This is implemented by onhashchange=\\quot\\hashChange()\\quot\\ in the body element of the widget//crlf//container.  When the dialog is displayed\\comma\\ //pound//edit is added to window.location.  When the //crlf//back button is pressed\\comma\\ the location no longer contains //pound//edit.//crlf////crlf//This function is not called when the close icon in the top right of a dialog is clicked //crlf//to close the dialog.  Instead\\comma\\ the defocusDialog function is called directly.//crlf//******************************************************************************///crlf//function hashChange()//crlf//{//crlf////tab//var sLocation=window.location.toString().toUpperCase();//crlf////tab//if(sLocation.indexOf(\\quot\\EDIT\\quot\\)<=0) defocusDialog();//crlf////tab////crlf////tab//if(false) {//crlf////tab////tab//if(sLocation.toUpperCase().indexOf(\\quot\\EDIT\\quot\\)<=0) {//crlf////tab////tab////tab//var arDiv=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab////tab////tab//for (var i=0;i<arDiv.length;i++) {//crlf////tab////tab////tab////tab//if(arDiv[i].getAttribute(\\quot\\hideafteredit\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////tab////tab//setVisible(arDiv[i]\\comma\\false);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(arDiv[i].getAttribute(\\quot\\ShowAfterEdit\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////tab////tab//setVisible(arDiv[i]\\comma\\true);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//window.scrollTo(0\\comma\\document.body.getAttribute('RestoreScrollTop'));//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Opens the edit dialog for a selected row in a table.//crlf//******************************************************************************///crlf//function showTableEditDialogForRow(table\\comma\\RowIndex)//crlf//{//crlf////tab//if(!table) {//crlf////tab////tab//alert(\\quot\\Error: showTableEditDialogForRow: Invalid table\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////verify that the RowIndex is in bounds//crlf////tab//if((!RowIndex) ~~pipe~~~~pipe~~ (RowIndex<0) ~~pipe~~~~pipe~~ (RowIndex>=table.rows.size)) {//crlf////tab////tab//alert(\\quot\\Error: showTableEditDialogForRow: Invalid RowIndex: \\quot\\+RowIndex);//crlf////tab////tab//printStackTrace();//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////record metadata for the table including HashID\\comma\\ DriverID\\comma\\ etc. so data can be submitted//crlf////tab////even if the table is closed before the data is submitted//crlf////tab//recordTableMetadata(table.getAttribute(\\quot\\ID\\quot\\));//crlf////tab////crlf////tab//for(var i=0;i<table.rows[RowIndex].cells.length;i++) {//crlf////tab////tab//var sName=table.rows[RowIndex].cells[i].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab//if((sName) //amp////amp// (sName.equalsIgnoreCase(\\quot\\editrecord\\quot\\))) {//crlf////tab////tab////tab////alert(\\quot\\showing dialog\\quot\\);//crlf////tab////tab////tab//showTableEditDialog(table.rows[RowIndex].cells[i]);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////alert(\\quot\\could not find dialog TD\\quot\\);//crlf//};//crlf////crlf///******************************************************************************//crlf//Opens the edit dialog for a record in a table.  e is the icon clicked to being editing.//crlf//******************************************************************************///crlf//function showTableEditDialog(e)//crlf//{//crlf////tab////the td element is passed when a cell is clicked in a mobile document//crlf////tab//var td=e;//crlf////crlf////tab////if it isn't a td in a mobile document\\comma\\ it's content inside the td//crlf////tab//if(td.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)==false) td=e.parentNode;//crlf////tab////crlf////tab////if the parent is not a td\\comma\\ look one more level up.  This is used when the function is called by clicking on a field//crlf////tab////in the table instead of the normal edit icon included in the table.  The field looks like <td><text><span onClick=xxx></span></text></td>//crlf////tab//if(td.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)==false) td=td.parentNode;//crlf////tab////crlf////tab//var tr=td.parentNode;//crlf////tab//var tbody=tr.parentNode;//crlf////tab//var table=tbody.parentNode;//crlf////tab//if(table.nodeName.equalsIgnoreCase(\\quot\\table\\quot\\)==false) {//crlf////tab////tab//alert(\\quot\\Error reading driver information\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var sTableID=table.getAttribute(\\quot\\ID\\quot\\);//crlf////tab//var sDialogID=table.getAttribute(\\quot\\EditDialogID\\quot\\);//crlf//appendToLog(\\quot\\showTableEditDialog sTableID=\\quot\\+sTableID);//crlf////tab////abort if the row is currently being deleted//crlf////tab//var sDeleted=tr.getAttribute(\\quot\\deleted\\quot\\);//crlf////tab//if((sDeleted) //amp////amp// (sDeleted.equalsIgnoreCase(\\quot\\true\\quot\\))) {//crlf////tab////tab//appendToLog(\\quot\\showTableEditDialog: Aborted because record is being deleted\\quot\\);//crlf////tab////tab//setVisible(sDialogID\\comma\\false);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab////record metadata for the table including HashID\\comma\\ DriverID\\comma\\ etc. so data can be submitted//crlf////tab////even if the table is closed before the data is submitted//crlf////tab//recordTableMetadata(table.getAttribute(\\quot\\ID\\quot\\));//crlf////tab////crlf////tab////initialize the dialog header.  It is initially outside the dialog div and needs to be//crlf////tab////moved inside the div//crlf////tab//initializeTableDialogHeader(sTableID\\comma\\sDialogID\\comma\\tr.getAttribute(\\quot\\KeyValue\\quot\\));//crlf////tab////crlf////tab////hide the disable div //crlf////tab//if(document.getElementById(\\quot\\EditDialogDisable\\quot\\+sTableID)) setVisible(\\quot\\EditDialogDisable\\quot\\+sTableID\\comma\\false);//crlf////tab////crlf////tab////get array of all field ID's and field types from the table header//crlf////tab//sAllFieldID=table.getAttribute(\\quot\\aspectAllFieldID\\quot\\);//crlf////tab//sAllFieldType=table.getAttribute(\\quot\\aspectAllFieldType\\quot\\);//crlf////tab//if((sAllFieldID==null) ~~pipe~~~~pipe~~ (sAllFieldType==null)) {//crlf////tab////tab//alert(\\quot\\No fields included for editing\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var arFieldID=getSubStringArray(sAllFieldID\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//var arFieldType=getSubStringArray(sAllFieldType\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////crlf////tab////get array of all values from the row//crlf////tab//var arValues=getSubStringArray(getAttr(tr\\comma\\\\quot\\aspectAllValues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//for(var i=0;i<arValues.length;i++) {//crlf////tab////tab//arValues[i]=tokenizeTableValue(arValues[i]\\comma\\false);//crlf////tab//};//crlf////crlf////tab////set value of all elements in the dialog//crlf////tab//var div=document.getElementById(sDialogID);//crlf////tab//if(!div) {//crlf////tab////tab//alert(\\quot\\Cannot locate dialog: \\quot\\+sDialogID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var arRefresh=setDialogValues(sTableID\\comma\\div\\comma\\arFieldID\\comma\\arValues);//crlf////crlf////tab////set the table ID and KeyValue in the dialog//crlf////tab//div.setAttribute(\\quot\\TableID\\quot\\\\comma\\sTableID);//crlf////tab//div.setAttribute(\\quot\\KeyValue\\quot\\\\comma\\tr.getAttribute(\\quot\\KeyValue\\quot\\));//crlf////crlf////tab////if it's a mobile device...//crlf////tab//if(bIsMobileDevice) {//crlf////tab////tab//div.parentNode.removeChild(div);//crlf////tab////tab//document.body.appendChild(div);//crlf////tab////tab////crlf////tab////tab////Hide all divs on the page and display the dialog.  //crlf////tab////tab//focusDialog(div.id);//crlf////tab////tab////crlf////tab////tab///*//crlf////tab////tab////tab//09-18-2015: Don't know why this is disabled.  It may be better to record Informaiton about the scroll position//crlf////tab////tab////tab//of divs in the focusDialog() function//crlf////tab////tab//*///crlf////tab////tab//if(false) {//crlf////tab////tab////tab////record the current scrolling position of the page so it can be restored when the dialog is closed//crlf////tab////tab////tab//var iScrollTop=0;//crlf////tab////tab////tab////iScrollTop=document.pageYOffset;//crlf////tab////tab////tab//iScrollTop=window.scrollY;//crlf////tab////tab////tab////iScrollTop=document.body.scrollTop;//crlf////tab////tab////tab////iScrollTop=document.html.scrollTop;//crlf////tab////tab////tab////iScrollTop=document.documentElement.scrollTop;//crlf////tab////tab////tab////crlf////tab////tab////tab//appendToLog(\\quot\\iScrollTop=\\quot\\+iScrollTop\\comma\\false\\comma\\true);//crlf////tab////tab////tab////crlf////tab////tab////tab//document.body.setAttribute(\\quot\\RestoreScrollTop\\quot\\\\comma\\iScrollTop);//crlf////tab////tab////tab////document.body.setAttribute(\\quot\\RestoreScrollTop\\quot\\\\comma\\document.body.scrollTop);//crlf////tab////tab////tab////document.body.setAttribute(\\quot\\RestoreScrollLeft\\quot\\\\comma\\document.body.scrollLeft);//crlf////crlf////tab////tab////tab////move the dialog to the body element//crlf////tab////tab////tab//div.parentNode.removeChild(div);//crlf////tab////tab////tab//document.body.appendChild(div);//crlf////tab////tab////tab////crlf////tab////tab////tab////Hide all other divs.  Set an attribute to indicate the items that should be //crlf////tab////tab////tab////displayed when the dialog is closed//crlf////tab////tab////tab//var arDiv=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab////tab////tab//for (var i=0;i<arDiv.length;i++) {//crlf////tab////tab////tab////tab//if (boolVal(arDiv[i].getAttribute(\\quot\\isItem\\quot\\))) {//crlf////tab////tab////tab////tab////tab//if(isVisible(arDiv[i])) {//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].setAttribute(\\quot\\ShowAfterEdit\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//setVisible(arDiv[i]\\comma\\false);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].setAttribute(\\quot\\ShowAfterEdit\\quot\\\\comma\\\\quot\\false\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab////set an attribute in the dialog used to identify and hide the dialog//crlf////tab////tab////tab//div.setAttribute(\\quot\\HideAfterEdit\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////10-09-2015 Moved setVisible here so the width of the dialog can be calculated//crlf////tab////before positioning it horizontally//crlf////tab//setVisible(sDialogID\\comma\\true);//crlf////tab////crlf////tab////02-27-2017: Added IsAspectDialog attribute to provide a clean way to locate a dialog div.//crlf////tab//div.setAttribute(\\quot\\isAspectDialog\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////crlf////tab////make sure the dialog is positioned//crlf////tab//if(bIsMobileDevice) {//crlf////tab////tab//div.style.position=\\quot\\absolute\\quot\\;//crlf////tab////tab//div.style.left=\\quot\\0px\\quot\\;//crlf////tab////tab//div.style.top=\\quot\\0px\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////position the dialog for desktop browsers.  Use either \\quot\\fixed\\quot\\ or \\quot\\absolute\\quot\\ positioning.  //crlf////tab////tab////They both position the dialog immediately to the right of the edit icon.  Fixed //crlf////tab////tab////positioning displays the dialog without requiring it to fit within the parent div.  //crlf////tab////tab////The dialog is displayed over the parent div and can be any size.  Absolute positioning //crlf////tab////tab////displays the dialog in the constraints of the parent div's boundaries and it may be //crlf////tab////tab////chopped off.  Absolute positioning must be used on mobile devices\\comma\\ otherwise the dialog //crlf////tab////tab////will not scroll and it is not possible to move it to view the input fields when the //crlf////tab////tab////devices keyboard is displayed.  May need to add the ability to specify when a dialog //crlf////tab////tab////should be fixed or absolute.  Could include an attribute in the dialog div//crlf////tab////tab//var sMethod=\\quot\\absolute\\quot\\;//crlf////tab////tab//div.style.position=sMethod;//crlf////tab////tab////var xy=getPosition2012(e\\comma\\sMethod\\comma\\div.parentNode);//crlf////tab////tab//var xy=getPosition2012(e\\comma\\sMethod\\comma\\div.parentNode);//crlf////tab////tab//if(isMobileDevice()) {//crlf////tab////tab////tab//div.style.left=\\quot\\0px\\quot\\;//crlf////tab////tab////tab//div.style.top=xy[1]+\\quot\\px\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////div.style.left=xy[0]+\\quot\\px\\quot\\;//crlf////crlf////tab////tab////tab//div.style.left=0;//crlf////crlf////tab////tab////tab////center the dialog if the table width is greater than the dialog width//crlf////tab////tab////tab//var maxwidth=Math.min(documentWidth()\\comma\\table.tBodies[0].offsetWidth);//crlf////tab////tab////tab//if(maxwidth>div.offsetWidth) {//crlf////tab////tab////tab////tab////don't shift the dialog toward the center if the left position will be small.//crlf////tab////tab////tab////tab////Otherwise\\comma\\ a small (e.g. 9px) margin can be introduced for small screens.//crlf////tab////tab////tab////tab////Might have something to do with the scroll bar//crlf////tab////tab////tab////tab//var left=Math.min(250\\comma\\(maxwidth-div.offsetWidth)/2);//crlf////tab////tab////tab////tab//if(left>20) div.style.left=left;//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//div.style.top=(xy[1]+e.offsetHeight+5)+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////set focus to the input with a DefaultFocus attribute.  Do this before calling the initialization function//crlf////tab////so the initialization function can override the focus set here//crlf////tab//var arInputElements=new Array();//crlf////tab//getAllInputNodes(div\\comma\\arInputElements);//crlf////tab//for(var i=0;i<arInputElements.length;i++) {//crlf////tab////tab//if(arInputElements[i].getAttribute(\\quot\\DefaultFocus\\quot\\)) {//crlf////tab////tab////tab//arInputElements[i].focus();//crlf////tab////tab////tab//break;//tab////crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////call initialization function for dialog if one is defined//crlf////tab//var s=\\quot\\initializeDialog\\quot\\+sDialogID;//crlf////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) eval(s+\\quot\\()\\quot\\);//crlf////crlf////tab////look for initialization function in the aspectinit attribute of the div//crlf////tab////This is used so a single function can be called even when the dialog ID is random//crlf////tab////The ID of the dialog div is passed as an argument.  Additional arguments can be//crlf////tab////made available to the function by including them in the dialog div's attributes or//crlf////tab////as hidden inputs inside the dialog.//crlf////tab//var sInitFunction=div.getAttribute(\\quot\\aspectinit\\quot\\);//crlf////tab//var bCallPostInit=null;//crlf////tab//if(sInitFunction) {//crlf////tab////tab//if(eval('typeof '+sInitFunction)==\\quot\\function\\quot\\) {//crlf////tab////tab////tab//bCallPostInit=eval(sInitFunction+\\quot\\('\\quot\\+sDialogID+\\quot\\')\\quot\\);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////initialize calendar and other controls//crlf////tab//initializeCustomControls();//crlf////crlf////tab////show the dialog.  If it's a mobile device\\comma\\ navigate to the //pound//edit hash in the widget container.  This is done so when//crlf////tab////the back button is pressed on the device\\comma\\ the hash is removed from the location and the table can be restored//crlf////tab////setVisible(sDialogID\\comma\\true);//crlf////crlf////tab////if(bIsMobileDevice) location.hash=\\quot\\//pound//edit\\quot\\;//crlf////tab////crlf////tab////12-31-2015 - Set the dialog height.  This is to set a consistent height that encompasses//crlf////tab////any tabs in the dialog//crlf////tab////09-18-2016 - Added ability to specify AdjustHeight=false to avoid adjusting the height of a dialog.//crlf////tab////This allows a dialog to be any height necessary to accommodate the data.  However\\comma\\ it should not be //crlf////tab////used when the dialog contains tabs because the height will be different for each tab.  This was added //crlf////tab////to address an invoice dialog in which the records are added to the end of the table.//crlf////tab//var s=div.getAttribute(\\quot\\AdjustHeight\\quot\\);//crlf////tab//if((!s) ~~pipe~~~~pipe~~ (!s.equalsIgnoreCase(\\quot\\false\\quot\\))) {//crlf////tab////tab//setTableDialogHeight(sDialogID);//crlf////tab//};//crlf////crlf////tab////04-27-2016 set the tabsInitialized attribute to false for tabs and select boxes.  This will//crlf////tab////cause the first tab and first select option to be selected//crlf////tab////Right now\\comma\\ the last selected tab is displayed when the dialog is opened.  This could //crlf////tab////be modified to always return to the first tab when the dialog is opened.//crlf////tab//var a=div.getElementsByTagName(\\quot\\table\\quot\\);//crlf////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab//if(a[i].getAttribute(\\quot\\tabsInitialized\\quot\\)) {//crlf////tab////tab////tab//a[i].setAttribute(\\quot\\tabsInitialized\\quot\\\\comma\\false);//crlf////tab////tab////tab//var arTabs=getTabIDs(a[i]);//crlf////tab////tab////tab//if(arTabs.length>=1) a[i].setAttribute(\\quot\\SelectedTab\\quot\\\\comma\\arTabs[0]);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//a=div.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab//if(a[i].getAttribute(\\quot\\tabsInitialized\\quot\\)) {//crlf////tab////tab////tab//a[i].setAttribute(\\quot\\tabsInitialized\\quot\\\\comma\\false);//crlf////tab////tab////tab//var arTabs=getTabIDs(a[i]);//crlf////tab////tab////tab//if(arTabs.length>=1) a[i].value=arTabs[0];//crlf////tab////tab//};//crlf////tab//};//crlf////tab//initializeTabbedDialogs();//crlf////crlf////tab////scroll the dialog into view//tab////crlf////tab//scrollElementIntoView(div);//crlf////crlf////tab////refresh tables - It's important that tables be refreshed after the dialog is made visible so the table message//crlf////tab////is displayed in the correct position.  This is why the setDialogValues returns a list of tables to be refreshed//crlf////tab////rather than refreshing them as they're found.  If an element was included in the table div\\comma\\ the message could be//crlf////tab////displayed there and some of this mess would go away.//crlf//appendToLog(\\quot\\showTableEditDialog8 arRefresh=\\quot\\+arRefresh);//crlf////tab//if(arRefresh.length>0) {//crlf////tab////tab//for(var i=0;i<arRefresh.length;i++) {//crlf////tab////tab////tab////check to see if the table still exists.  This is necessary because a dialog might include a table that//crlf////tab////tab////tab////is created on the fly by an initialization function when the dialog is loaded and the table may no longer exist.//crlf////tab////tab////tab//if(document.getElementById(arRefresh[i])) refreshTable(arRefresh[i]);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//if((sInitFunction) //amp////amp// (bCallPostInit)) {//crlf////tab////tab//eval(sInitFunction+\\quot\\('\\quot\\+sDialogID+\\quot\\'\\comma\\true)\\quot\\);//crlf////tab//};//crlf//};//crlf////crlf//function adjustDialogHeight(e) {//crlf////tab////go up the parent list until the dialog div is located.  This is the first div with a isAspectDialog attribute //crlf////tab//var DialogDiv=null;//crlf////tab//var node=e;//crlf////tab//while((node!=null) //amp////amp// (DialogDiv==null) //amp////amp// (node.parentNode)) {//crlf////tab////tab//if((node.getAttribute) //amp////amp// (node.getAttribute(\\quot\\isAspectDialog\\quot\\))) {//crlf////tab////tab////tab//DialogDiv=node;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//node=node.parentNode;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//if(DialogDiv) {//crlf////tab////tab//if(DialogDiv.id) {//crlf////tab////tab////tab//var s=DialogDiv.getAttribute(\\quot\\AdjustHeight\\quot\\);//crlf////tab////tab////tab//if((!s) ~~pipe~~~~pipe~~ (!s.equalsIgnoreCase(\\quot\\false\\quot\\))) {//crlf////tab////tab////tab////tab//appendToLog(\\quot\\adjustDialogHeight calling setTableDialogHeight for ID=\\quot\\+DialogDiv.id);//crlf////tab////tab////tab////tab//setTableDialogHeight(DialogDiv.id);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Sets the height of tabbed dialogs so a consistent height is maintained when//crlf//switching from one tab to another.  Sets each tab visible to calculate the height//crlf//and sets the dialog to the greatest tab height.  Looks for a table with class=TabDialog//crlf//and uses the first instance found.  Additional instances are ignored in case//crlf//the dialog includes another driver and dialog.//crlf//******************************************************************************///crlf//function setTableDialogHeight(ID) //crlf//{//crlf////tab//var d=document.getElementById(ID);//crlf////crlf////tab//d.style.height=\\quot\\auto\\quot\\;//crlf////tab////crlf////tab//var arTable=d.getElementsByTagName(\\quot\\table\\quot\\);//crlf////tab//var Done=false;//crlf////tab//for(var i=0;(!Done) //amp////amp// (i<arTable.length);i++) {//crlf////tab////tab//if(arTable[i].getAttribute(\\quot\\class\\quot\\)) {//crlf////tab////tab////tab//if(arTable[i].getAttribute(\\quot\\class\\quot\\).equalsIgnoreCase(\\quot\\TabDialog\\quot\\)) {//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////get the currently selected tab.  These attributes are set by the showTab() function when a tab//crlf////tab////tab////tab////tab////is selected.  It is important that these values be gotten here because the section below calls //crlf////tab////tab////tab////tab////showTab() to make each tab in the dialog visible and these values will be affected.//crlf////tab////tab////tab////tab//var eClickedParent=arTable[i].parentNode.parentNode;//crlf////tab////tab////tab////tab//var sSalectedTab=eClickedParent.getAttribute(\\quot\\SelectedTab\\quot\\);//crlf////tab////tab////tab////tab//var sSelectedTabIDs=eClickedParent.getAttribute(\\quot\\SelectedTabIDs\\quot\\);//crlf////crlf////tab////tab////tab////tab//var h=d.offsetHeight;//crlf////tab////tab////tab////tab////appendToLog(\\quot\\Found TabDialog.  Rows=\\quot\\+arTable[i].rows.length+\\quot\\ cells=\\quot\\+arTable[i].rows[0].cells.length);//crlf////tab////tab////tab////tab//for(var cell=arTable[i].rows[0].cells.length-1;cell>=0;cell--) //crlf////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab//var arChild=arTable[i].rows[0].cells[cell].childNodes;//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\cell \\quot\\+cell+\\quot\\ Child len=\\quot\\+arChild.length);//crlf////tab////tab////tab////tab////tab//for (var child=0;child<arChild.length;child++) {//crlf////tab////tab////tab////tab////tab////tab//if ((arChild[child].nodeName.equalsIgnoreCase(\\quot\\A\\quot\\)) ~~pipe~~~~pipe~~ (arChild[child].nodeName.equalsIgnoreCase(\\quot\\SPAN\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(arChild[child].onclick) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var str1=String(arChild[child].onclick);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(str1.toUpperCase().indexOf(\\quot\\SHOWTAB\\quot\\)>=0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var n1=str1.toUpperCase().indexOf(\\quot\\SHOWTAB(\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var n2=str1.indexOf(\\quot\\)\\quot\\\\comma\\n1);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var str2=str1.substring(n1+8\\comma\\n2);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var arStr=getSubStringArray(str2\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var s=replaceAllSubstrings(replaceAllSubstrings(arStr[1]\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\quot\\)\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//showTab(arChild[child]\\comma\\s);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//h=Math.max(h\\comma\\d.offsetHeight);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\sTabName=\\quot\\+sTabName+\\quot\\ height=\\quot\\+d.offsetHeight+\\quot\\ h=\\quot\\+h);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//d.style.height=h+\\quot\\px\\quot\\;//crlf////tab////tab////tab////crlf////tab////tab////tab////tab//Done=true;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////restore the tab that was active//crlf////tab////tab////tab////tab////appendToLog(\\quot\\setTableDialogHeight sSalectedTab=\\quot\\+sSalectedTab+\\quot\\ sSelectedTabIDs=\\quot\\+sSelectedTabIDs);//crlf////tab////tab////tab////tab//if(sSalectedTab) showTab(document.getElementById(sSalectedTab\\comma\\sSelectedTabIDs)\\comma\\sSelectedTabIDs);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Initializes fields in the dialog used to edit a record in a table.  If the table//crlf//contains a readonly attribute with a value of true\\comma\\ fields in the dialog belonging//crlf//to the structure are disabled.  //crlf////crlf//TableID//tab////tab//ID of the table the dialog is associated with//crlf//e//tab////tab////tab//The div containing the dialog to be updated //crlf//ArFieldID//tab//Array of field ID's from the table's aspectAllFieldID attribute//crlf//arValues//tab////tab//Array of de-tokenized values from the table's aspectAllValues attribute//crlf//ExcludeInputs//tab//If defined and true\\comma\\ only span tags will be updated.  This is done to avoid//crlf////tab////tab////tab//overwriting edits that may not be reflected yet when a record is refreshed//crlf//ExcludeTableRefresh - Indicates that the body of any tables included in the dialog should //crlf////tab////tab////tab//not be set to not visible.  This is used by updateTableRecord() when an input is //crlf////tab////tab////tab//modified in the dialog and a new set of values is retrieved.  In this case\\comma\\ the table//crlf////tab////tab////tab//should remain visible.  In cases where a dialog is just opened\\comma\\ the table body should //crlf////tab////tab////tab//be made not visible so a table from a previous record does not appear while the table //crlf////tab////tab////tab//is being loaded.//crlf////crlf//This function is called from these functions://tab////tab////tab////crlf////tab//showTableEditDialog - used to display a table dialog//crlf////tab//initializeTables2012 - called by asynchIncludesub whenever content is updated//crlf////tab//updateTableRecord - called by updatePendingSubmissions to update a table record and the associated dialog.//crlf////tab////tab//The dialog is only updated if it is associated with the record being refreshed.//crlf////tab//dialogRecordSelected - ??? This function is used when a dialog header is included //crlf////tab//updateDialogRecord - ??? This function is used when a dialog header is included //crlf////tab//addDialogRecord - ??? This function is used when a dialog header is included //crlf////tab////tab////tab////crlf//******************************************************************************///crlf//function setDialogValues(TableID\\comma\\e\\comma\\ArFieldID\\comma\\ArValues\\comma\\ExcludeInputs\\comma\\ExcludeTableRefresh)//crlf//{//crlf////tab////NOTE: This function is called recursively to look for inputs in every child element in the dialog.//crlf////tab//if(ExcludeInputs==undefined) {//crlf////tab////tab////appendToLog(\\quot\\setDialogValues(TableID:\\quot\\+TableID+\\quot\\\\comma\\ExcludeInputs:\\quot\\+ExcludeInputs+\\quot\\\\comma\\ExcludeTableRefresh:\\quot\\+ExcludeTableRefresh+\\quot\\) ArFieldID=\\quot\\+ArFieldID.toString()+\\quot\\ ArValues=\\quot\\+ArValues.toString());//crlf////tab//};//crlf////tab////crlf////tab//if(!bContainerLoaded) return(new Array());//crlf////tab////crlf////tab//var bExcludeInputs=((ExcludeInputs) //amp////amp// (ExcludeInputs==true));//crlf////tab////crlf////printStackTrace();//crlf////appendToLog(\\quot\\setDialogValues TableID=\\quot\\+TableID+\\quot\\ Fields=\\quot\\+ArFieldID+\\quot\\ Values=\\quot\\+ArValues\\comma\\false\\comma\\true);//crlf////appendToLog(\\quot\\setDialogValues TableID=\\quot\\+TableID+\\quot\\ bContainerLoaded=\\quot\\+bContainerLoaded\\comma\\false\\comma\\true);//crlf////tab//if(!e) {//crlf////tab////tab//appendToLog(\\quot\\Invalid edit dialog in setDialogValues.  TableID:\\quot\\+TableID);//crlf////tab////tab//return(new Array());//crlf////tab//};//crlf////tab////crlf////tab//var eTable=document.getElementById(TableID);//crlf////tab//var attr=eTable.getAttribute(\\quot\\aspectreadonly\\quot\\);//crlf////tab//var bReadOnly=((attr) //amp////amp// (attr.equalsIgnoreCase(\\quot\\true\\quot\\)));//crlf////tab////crlf////tab////initialize an array of table ID's that will be updated when the other values have been set.  //crlf////tab////Tables need to be refreshed last because external filters and driver params may be //crlf////tab////included in the dialog values//crlf////tab//var arTablesToRefresh=new Array();//crlf////tab////crlf////tab//for(var i=0;i<e.childNodes.length;i++) {//crlf////tab////tab//var eChild=e.childNodes[i];//crlf////tab////tab//if(eChild.nodeName.indexOf(\\quot\\\x23\\quot\\)<0) {//crlf////tab////tab////tab////refresh any driver tables included in the dialog.  Check for 'ver' attribute to exclude //crlf////tab////tab////tab////standard tables used to format the dialog//crlf////tab////tab////tab//if((eChild.nodeName.equalsIgnoreCase(\\quot\\table\\quot\\)) //amp////amp// (eChild.getAttribute(\\quot\\aspectver\\quot\\))) {//crlf////tab////tab////tab////tab//var attrNoRefresh=eChild.getAttribute(\\quot\\norefresh\\quot\\);//crlf////tab////tab////tab////tab//var sNoRefresh=(attrNoRefresh) ? attrNoRefresh : \\quot\\false\\quot\\;//crlf////tab////tab////tab////tab//if(!sNoRefresh.equalsIgnoreCase(\\quot\\true\\quot\\)) {//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\setDialogValues: will refresh table: \\quot\\+eChild.id);//crlf////tab////tab////tab////tab////tab//var sID=eChild.getAttribute(\\quot\\ID\\quot\\);//crlf////tab////tab////tab////tab////tab//if(sID) {//crlf////tab////tab////tab////tab////tab////tab//arTablesToRefresh[arTablesToRefresh.length]=sID;//crlf////crlf////tab////tab////tab////tab////tab////tab////09-02-2016 - This is disabled because when data is edited in a dialog\\comma\\ the//crlf////tab////tab////tab////tab////tab////tab////table record is refreshed after the data has been saved by a call to //crlf////tab////tab////tab////tab////tab////tab////updateTableRecord().  However\\comma\\ that function does not read the list of tables//crlf////tab////tab////tab////tab////tab////tab////to be refreshed returned by this function.  The result is that a table //crlf////tab////tab////tab////tab////tab////tab////included in a dialog is hidden by this call and is never refreshed and just//crlf////tab////tab////tab////tab////tab////tab////appears to go away.//crlf////crlf////tab////tab////tab////tab////tab////tab////09-04-2016 The table body needs to be made not visible when a new record is //crlf////tab////tab////tab////tab////tab////tab////selected.  Otherwise\\comma\\ the table from the previous dialog will be displayed //crlf////tab////tab////tab////tab////tab////tab////until the table refreshes.  Added the ExcludeTableRefresh parameter so //crlf////tab////tab////tab////tab////tab////tab////updateTableRecord() can explicitly indicate that tables should not be updated.//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////02-03-2017: Added check of display style to avoid hiding tables for dialogs displayed//crlf////tab////tab////tab////tab////tab////tab////initially - e.g. a dialog where the table is hidden but the dialog is displayed.  Don't//crlf////tab////tab////tab////tab////tab////tab////want to hide the table in this case because it will not be made visible//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\setDialogValues eTable.style.display=\\quot\\+eTable.style.display);//crlf////tab////tab////tab////tab////tab////tab//if((!ExcludeTableRefresh) //amp////amp// (eTable.style.display!=\\quot\\none\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab//setVisible(document.getElementById(sID).tBodies[0]\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\setDialogValues: will not refresh table: \\quot\\+eChild.id);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//var sName=eChild.getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab////tab////tab//if(sName) {//crlf////tab////tab////tab////tab////tab//var n=getFieldIndex(sName\\comma\\ArFieldID);//crlf////tab////tab////tab////tab////tab//if(n>=0) {//crlf////console.log(\\quot\\Setting value of \\quot\\+sName+\\quot\\=\\quot\\+ArValues[n]+\\quot\\ eChild.type=\\quot\\+eChild.type+\\quot\\ value=\\quot\\+ArValues[n]);//crlf////tab////tab////tab////tab////tab////tab//if(eChild.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////eChild.innerHTML=ArValues[n];//crlf////tab////tab////tab////tab////tab////tab////tab//eChild.innerHTML=formatField(TableID\\comma\\eChild\\comma\\ArValues[n]);//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else if(eChild.nodeName.equalsIgnoreCase(\\quot\\img\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab//eChild.src=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab//eChild.src=ArValues[n];//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//var bIsActiveElement=false;//crlf////tab////tab////tab////tab////tab////tab////tab//if(document.activeElement) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//bIsActiveElement=(document.activeElement==eChild);//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////tab////tab//if((!bExcludeInputs) //amp////amp// (!bIsActiveElement) //amp////amp// (eChild.type)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(eChild.type==\\quot\\hidden\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.value=ArValues[n];//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(eChild.type==\\quot\\checkbox\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.checked=(ArValues[n].equalsIgnoreCase(\\quot\\true\\quot\\)) ~~pipe~~~~pipe~~ (ArValues[n].equalsIgnoreCase(\\quot\\y\\quot\\));//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else if(eChild.type==\\quot\\select-one\\quot\\) {//crlf////console.log(\\quot\\Setting value of \\quot\\+sName+\\quot\\=\\quot\\+ArValues[n]+\\quot\\ eChild.type=\\quot\\+eChild.type+\\quot\\ value=\\quot\\+ArValues[n]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////if a value is not supplied for a drop-down\\comma\\ set it to 0.  This can happen if default values//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////are not specified for a field in the structure//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(ArValues[n].length>0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////This is a quick fix for a problem that occurs when the AspectAllValues attribute is updated when a record is edited.//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////The updated values include lookups instead of the value (e.g. --select-- instead of 0).//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////NOTE://tab//03-17-2013//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////This is because TAspectDriver.getRecordValues was calling getEmbeddedFieldInfo with InfoType set to 4//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////which causes it to use getFieldForHtml instead of getField.  //crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////The InfoTypeis now 2 which should work properly.//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////This also affects select-multiple below//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var bSetIt=false;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////try to match the value//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//for (var j=0;j<eChild.options.length;j++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eChild.options[j].value.equalsIgnoreCase(ArValues[n])) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.value=ArValues[n];//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////eChild.selectedIndex=n;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////eChild.options[n].selected=true;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//bSetIt=true;//crlf////console.log(\\quot\\bSetIt1 value=\\quot\\+eChild.value);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////if no match found\\comma\\ set it to the option with text matching the value//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(bSetIt==false) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//for (var j=0;j<eChild.options.length;j++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eChild.options[j].text.equalsIgnoreCase(ArValues[n])) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.value=eChild.options[j].value;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//bSetIt=true;//crlf////console.log(\\quot\\bSetIt2\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(bSetIt==false) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.options[eChild.options.length]=new Option(ArValues[n]\\comma\\ArValues[n]\\comma\\false\\comma\\false); //crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.value=ArValues[n];//crlf////console.log(\\quot\\bSetIt3\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.value=\\quot\\0\\quot\\;//crlf////console.log(\\quot\\set value to 0\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//} //crlf////tab////tab////tab////tab////tab////tab////tab////tab//else if(eChild.type==\\quot\\select-multiple\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////NOTE://tab//03-17-2013//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////See note above for select box values//crlf////crlf////console.log(\\quot\\select-multiple value=\\quot\\+ArValues[n]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////select each option for which a matching value is found//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var a=getSubStringArray(ArValues[n]\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//for (var j=0;j<eChild.options.length;j++) {//crlf////console.log(\\quot\\value=\\quot\\+eChild.options[j].value+\\quot\\ index=\\quot\\+a.indexOf(eChild.options[j].value)\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.options[j].selected=((a!=null) //amp////amp// (a.indexOf(eChild.options[j].value)>=0));//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else if(eChild.type==\\quot\\textarea\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.value=replaceAllSubstrings(ArValues[n]\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////else if((eChild.type.equalsIgnoreCase(\\quot\\text\\quot\\)) ~~pipe~~~~pipe~~ (eChild.type.equalsIgnoreCase(\\quot\\password\\quot\\)) ~~pipe~~~~pipe~~ (eChild.type.equalsIgnoreCase(\\quot\\hidden\\quot\\))){//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else if((eChild.nodeName==\\quot\\INPUT\\quot\\) //amp////amp// (isHTMLInput(eChild))) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////Note: Weirdness in Javascript considers an empty string as \\quot\\not defined\\quot\\.  The formatField function uses the//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////value of the element as a starting point if a value is not defined.  Have to set the value of the element//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////before calling the function//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.value=replaceAllSubstrings(ArValues[n]\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////console.log(\\quot\\eChild.value=\\quot\\+eChild.value+\\quot\\ name=\\quot\\+eChild.getAttribute(\\quot\\name\\quot\\));//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////see if it's an input associated with a datalist//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sDataListID=eChild.getAttribute(\\quot\\List\\quot\\);//crlf////console.log(\\quot\\eChild.name=\\quot\\+eChild.name+\\quot\\ List=\\quot\\+sDataListID);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if((sDataListID) //amp////amp// (eChild.type.equalsIgnoreCase(\\quot\\hidden\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var eInput=document.getElementById(sDataListID+\\quot\\_input\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eInput) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////get the value from the datalist.  Need to use the text that would//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////appear in a select box\\comma\\ not the value//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var eDataList=document.getElementById(sDataListID);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eDataList) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eInput.value=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//for(var j=0;j<eDataList.options.length;j++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eDataList.options[j].getAttribute(\\quot\\AspectID\\quot\\).equalsIgnoreCase(eChild.value)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eDataList.options[j].value.toUpperCase().startsWith(\\quot\\-- SELECT\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eInput.value=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eInput.value=eDataList.options[j].value;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////console.log(\\quot\\set value of \\quot\\+eInput.id+\\quot\\=\\quot\\+eDataList.options[j].value);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//alert(\\quot\\Error: Cannot locate datalist with ID=\\quot\\+sDataListID);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//alert(\\quot\\Error: Cannot locate datalist input with ID=\\quot\\+sDataListID+\\quot\\_input\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eChild.type.equalsIgnoreCase(\\quot\\datetime-local\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(ArValues[n].startsWith(\\quot\\12-31-1969\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(!eChild.getAttribute(\\quot\\pattern\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.setAttribute(\\quot\\pattern\\quot\\\\comma\\\\quot\\yyyy-MM-ddTHH:mm\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sValue=formatField(TableID\\comma\\eChild\\comma\\ArValues[n]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\setDialogValues formatted [\\quot\\+ArValues[n]+\\quot\\] as \\quot\\+sValue);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sValue=formatField(TableID\\comma\\eChild\\comma\\ArValues[n]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab///* This is a quick hack to avoid putting 0.00 into input fields *///crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sValue==\\quot\\0.00\\quot\\) sValue=\\quot\\\\quot\\;//crlf////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.value=sValue;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else if(eChild.type.equalsIgnoreCase(\\quot\\date\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eChild.value=formatField(TableID\\comma\\eChild\\comma\\ArValues[n]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//console.log(\\quot\\Error in setDialogValues: Unknown type - \\quot\\+eChild.type\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab//eChild.disabled=bReadOnly;//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////Need to set values in child nodes of the current child node.  This is a recursive //crlf////tab////tab////tab////tab////function that sets values in all divs\\comma\\ tables\\comma\\ etc. included in the div containing //crlf////tab////tab////tab////tab////the dialog.  Some time can be saved by not checking child nodes like option\\comma\\ select\\comma\\//crlf////tab////tab////tab////tab////etc. that will have no child nodes.//crlf////tab////tab////tab////tab//if((eChild.nodeName!=\\quot\\INPUT\\quot\\) //amp////amp// (eChild.nodeName!=\\quot\\OPTION\\quot\\) //amp////amp// (eChild.nodeName!=\\quot\\SELECT\\quot\\) //amp////amp// (eChild.nodeName!=\\quot\\UL\\quot\\) //amp////amp// (eChild.nodeName!=\\quot\\SCRIPT\\quot\\) //amp////amp// (eChild.nodeName!=\\quot\\HR\\quot\\)) {//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\Calling setDialogValues for node \\quot\\+eChild.nodeName\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab//var b1=(ExcludeInputs) ? ExcludeInputs : false;//crlf////tab////tab////tab////tab////tab//var b2=(ExcludeTableRefresh) ? ExcludeTableRefresh : false;//crlf////tab////tab////tab////tab////tab//arTablesToRefresh=arTablesToRefresh.concat(setDialogValues(TableID\\comma\\eChild\\comma\\ArFieldID\\comma\\ArValues\\comma\\b1\\comma\\b2));//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////appendToLog(\\quot\\setDialogValues arTablesToRefresh=\\quot\\+arTablesToRefresh\\comma\\false\\comma\\true); //crlf////tab//return(arTablesToRefresh);//crlf//};//crlf////crlf///******************************************************************************//crlf//Submits data edited in a dialog.  The TableID and KeyExpression are recorded as attributes in the//crlf//dialog when it is displayed.  //crlf////crlf//The ADialogID parameter is not required.  The parent dialog will//crlf//be determined by checking the parent nodes of e until a dialog div is found.  However\\comma\\ ADialogID//crlf//can be passed to explicitly indicate the parent dialog div.  This can be used when a dialog contains//crlf//a 2nd dialog inside of it with data from another driver (e.g. the BackOffice registration container).//crlf//The format might be//crlf//[div dialog1]//crlf////tab//field from 1//crlf////tab//[div dialog2]//crlf////tab////tab//field from 2//crlf////tab//[/div]//crlf////tab//field from 1//crlf//[/div]//crlf//******************************************************************************///crlf//function OldsubmitDialogCell(e\\comma\\ADialogID)//crlf//{//crlf////tab////appendToLog(\\quot\\submitDialogCell: \\quot\\+e.getAttribute(\\quot\\name\\quot\\));//crlf////tab////crlf////tab//if(!ADialogID) {//crlf////tab////tab////go up the parent list until the dialog div is located.  This is the first div with a TableID attribute //crlf////tab////tab//var div=null;//crlf////tab////tab//var node=e;//crlf////tab////tab//while((node!=null) //amp////amp// (div==null) //amp////amp// (e.parentNode)) {//crlf////tab////tab////tab//if((node.getAttribute) //amp////amp// (node.getAttribute(\\quot\\TableID\\quot\\))) {//crlf////tab////tab////tab////tab//div=node;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//node=node.parentNode;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//div=document.getElementById(ADialogID);//crlf////tab//};//crlf////crlf////tab//if(div==null) {//crlf////tab////tab////This can happen during development when editing a dialog that is to be used in a table //crlf////tab////tab////since there is no table\\comma\\ just the dialog//crlf////tab////tab////alert(\\quot\\could not locate dialog div.\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////set the background color of the cell and the attribute indicating it's saving//crlf////tab//var eParent=e.parentNode;//crlf////tab//if((eParent.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)) ~~pipe~~~~pipe~~ (eParent.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\))) {//crlf////tab////tab////appendToLog(\\quot\\submitDialogCell setting pending status for \\quot\\+eParent+\\quot\\ Name=\\quot\\+e.getAttribute(\\quot\\name\\quot\\));;//crlf////tab////tab//setPendingSubmissionStyle(e\\comma\\false\\comma\\true);//crlf////tab////tab////eParent.style.backgroundColor=PendingSubmissionBackgroundColor;//crlf////tab////tab//eParent.setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\new\\quot\\);//crlf////tab//};//crlf////tab////crlf////tab////get the table ID from the dialog div//crlf////tab//sTableID=div.getAttribute(\\quot\\TableID\\quot\\);//crlf////tab//sKeyValue=div.getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab//sFieldID=e.getAttribute(\\quot\\name\\quot\\);//crlf////tab//var sValue=\\quot\\\\quot\\;//crlf////tab//if (e.type==\\quot\\select-multiple\\quot\\) {//crlf////tab////tab//for (var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab//if(e.options[i].selected) {//crlf////tab////tab////tab////tab//if(sValue.length>0) sValue +=\\quot\\~~pipe~~\\quot\\;//crlf////tab////tab////tab////tab//sValue +=e.options[i].value;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//sValue=(e.type==\\quot\\checkbox\\quot\\) ? e.checked : e.value;//crlf////tab//};//crlf////tab////crlf////tab////format the contents of the cell//crlf////tab//if((e.type!=\\quot\\select-one\\quot\\) //amp////amp// (e.type!=\\quot\\select-multiple\\quot\\) //amp////amp// (e.type!=\\quot\\checkbox\\quot\\) //amp////amp// (e.type!=\\quot\\date\\quot\\)) {//crlf////tab////tab////appendToLog(\\quot\\submitDialogCell: e.type=\\quot\\+e.type+\\quot\\ formatting value\\quot\\);//crlf////tab////tab//e.value=formatField(sTableID\\comma\\e);//crlf////tab//};//crlf////crlf////tab////update the corresponding cell in the table if there is one.  Setting the value of the control//crlf////tab////in the table does not cause the onChange event to fire so the data is not submitted twice//crlf////tab//var table=document.getElementById(sTableID);//crlf////tab//var Control=getTableCellControl(table\\comma\\sKeyValue\\comma\\sFieldID);//crlf////crlf////tab//var sDebug=\\quot\\\\quot\\;//crlf////tab//if(Control!=null) {//crlf////tab////tab//sDebug=\\quot\\submitDialogCell setting table cell Control=\\quot\\+Control+\\quot\\ type=\\quot\\+Control.type+\\quot\\ nodename=\\quot\\+Control.nodeName;//crlf////tab////tab//if((Control.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) ~~pipe~~~~pipe~~ (Control.nodeName.equalsIgnoreCase(\\quot\\date\\quot\\)) ~~pipe~~~~pipe~~ (Control.nodeName.equalsIgnoreCase(\\quot\\password\\quot\\))) {//crlf////tab////tab////tab//if(e.type==\\quot\\select-one\\quot\\) {//crlf////tab////tab////tab////tab////set the table cell to the description of the lookup\\comma\\ not the value//crlf////tab////tab////tab////tab//for (var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab////tab//if(e.options[i].value.equalsIgnoreCase(e.value)) Control.innerHTML=e.options[i].innerHTML;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//sDebug +=\\quot\\ set select-one\\quot\\//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(e.type==\\quot\\select-muliple\\quot\\) {//crlf////tab////tab////tab////tab////set the table cell to the description of the lookup\\comma\\ not the value//crlf////tab////tab////tab////tab//Control.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab//for (var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab////tab//if(e.options[i].selected) Control.innerHTML +=e.options[i].innerHTML;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//sDebug +=\\quot\\ set select-multiple\\quot\\//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if((e.nodeName.equalsIgnoreCase(\\quot\\input\\quot\\)) //amp////amp// (e.getAttribute(\\quot\\list\\quot\\)!=null)) {//crlf////tab////tab////tab////tab////set the table cell to the value of the datalist\\comma\\ not the value//crlf////tab////tab////tab////tab//var sListID=e.getAttribute(\\quot\\list\\quot\\);//crlf////tab////tab////tab////tab//if(sListID) {//crlf////tab////tab////tab////tab////tab//var eDatalistInput=document.getElementById(sListID+\\quot\\_input\\quot\\);//crlf////tab////tab////tab////tab////tab//if(eDatalistInput) Control.innerHTML=eDatalistInput.value;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//if(Control.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) {//crlf////tab////tab////tab////tab////tab//Control.innerHTML=e.value;//crlf////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set other innerHTML\\quot\\//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//Control.value=e.value;//crlf////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set other value\\quot\\//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//(Control.type==\\quot\\checkbox\\quot\\) ? Control.checked=sValue : Control.value=e.value;//crlf////tab////tab////tab//sDebug +=\\quot\\ set checkbox\\quot\\//crlf////tab////tab//};//crlf////crlf////tab////tab//var td=Control.parentNode;//crlf////tab////tab//if(td.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)) {//crlf////tab////tab////tab//setPendingSubmissionStyle(Control\\comma\\true\\comma\\true);//crlf////tab////tab////tab////td.style.backgroundColor=PendingSubmissionBackgroundColor;//crlf////tab////tab////tab//td.setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\new\\quot\\);//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//sDebug=\\quot\\submitDialogCell setting table cell control was null\\quot\\;//crlf////tab//};//crlf////crlf////tab////alert(\\quot\\submitDialogCell: \\quot\\+sDebug\\comma\\false\\comma\\true);//crlf////tab////crlf////tab//var s=\\quot\\\\quot\\;//crlf////tab////appendToLog(\\quot\\submitDialogCell: sValue=\\quot\\+sValue);//crlf////tab//((typeof sValue)==\\quot\\boolean\\quot\\) ? s=sValue.toString() : s=replaceAllSubstrings(sValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\);//crlf////tab////appendToLog(\\quot\\submitDialogCell: submitTableData.  TableID:\\quot\\+sTableID+\\quot\\ KeyValue:\\quot\\+sKeyValue+\\quot\\ FieldID:\\quot\\+sFieldID+\\quot\\ Value=\\quot\\+s);//crlf////tab//submitTableData(sTableID\\comma\\sKeyValue\\comma\\sFieldID\\comma\\s);//crlf//};//crlf////crlf//function advanceToNextInput(e) {//crlf////tab//var Done=false;//crlf////tab//var eParent=e.parentNode;//crlf////tab//var cLoop=0;//crlf////tab//while((!Done) //amp////amp// (cLoop<5) //amp////amp// (eParent)) {//crlf////tab////tab//var arInput=eParent.getElementsByTagName(\\quot\\input\\quot\\);//crlf////tab////tab////appendToLog(\\quot\\cLoop=\\quot\\+cLoop+\\quot\\ arInput.length=\\quot\\+arInput.length);//crlf////tab////tab//for(var i=0;i<arInput.length;i++) {//crlf////tab////tab////tab//if(arInput[i]==e) {//crlf////tab////tab////tab////tab////appendToLog(\\quot\\advanceToNextInput arInput[\\quot\\+i+\\quot\\].type=\\quot\\+arInput[i].type+\\quot\\ arInput.length=\\quot\\+arInput.length);//crlf////tab////tab////tab////tab//j=i+1;//crlf////tab////tab////tab////tab//while(j<arInput.length) {//crlf////tab////tab////tab////tab////tab//var bIsTabStop=false;//crlf////tab////tab////tab////tab////tab//if(arInput[j].nodeName==\\quot\\SELECT\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab//bIsTabStop=true;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else if(arInput[j].nodeName==\\quot\\TEXTAREA\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab//bIsTabStop=true;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else if(arInput[j].nodeName==\\quot\\INPUT\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab//bIsTabStop=(\\quot\\TEXT~~pipe~~NUMBER~~pipe~~DATE~~pipe~~CHECKBOX~~pipe~~BUTTON\\quot\\.indexOf(arInput[j].type.toUpperCase())>=0);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\bIsTabStop1=\\quot\\+bIsTabStop);//crlf////crlf////tab////tab////tab////tab////tab////don't stop on checkbox in table used to select records//crlf////tab////tab////tab////tab////tab//if(arInput[j].type.equalsIgnoreCase(\\quot\\checkbox\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\found checkbox\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//var eCheckboxParent=arInput[j].parentNode;//crlf////tab////tab////tab////tab////tab////tab//if(eCheckboxParent) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(eCheckboxParent.nodeName==\\quot\\TD\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Parent is TD.  Name=\\quot\\+eCheckboxParent.getAttribute(\\quot\\name\\quot\\));//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(eCheckboxParent.getAttribute(\\quot\\name\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eCheckboxParent.getAttribute(\\quot\\name\\quot\\).equalsIgnoreCase(\\quot\\selectrecord\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//bIsTabStop=false;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\not focusing checkbox\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////see if a tabstop attribute is specified//crlf////tab////tab////tab////tab////tab//var s=arInput[j].getAttribute(\\quot\\TabStop\\quot\\);//crlf////tab////tab////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab////tab////tab//bIsTabStop=(s.equalsIgnoreCase(\\quot\\true\\quot\\));//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////don't stop if the control is not visible//crlf////tab////tab////tab////tab////tab//if(bIsTabStop) {//crlf////tab////tab////tab////tab////tab////tab//var style=window.getComputedStyle(arInput[j]);//crlf////tab////tab////tab////tab////tab////tab//if((style.display==\\quot\\none\\quot\\) ~~pipe~~~~pipe~~ (arInput[j].offsetWidth==0)) bIsTabStop=false;//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////don't stop if the control is disabled//crlf////tab////tab////tab////tab////tab//if(arInput[j].disabled) {//crlf////tab////tab////tab////tab////tab////tab//bIsTabStop=false;//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////don't stop if the control is read-only//crlf////tab////tab////tab////tab////tab//if(arInput[j].getAttribute(\\quot\\readonly\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab//bIsTabStop=false;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\arInput[\\quot\\+j+\\quot\\].type=\\quot\\+arInput[j].type+\\quot\\ ID=\\quot\\+arInput[j].id+\\quot\\ bIsTabStop=\\quot\\+bIsTabStop);//crlf////tab////tab////tab////tab////tab//if(bIsTabStop) {//crlf////tab////tab////tab////tab////tab////tab//try {//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\set focus j=\\quot\\+j+\\quot\\ ID=\\quot\\+arInput[j].id+\\quot\\ name=\\quot\\+arInput[j].name);//crlf////tab////tab////tab////tab////tab////tab////tab//arInput[j].focus();//crlf////tab////tab////tab////tab////tab////tab////tab//arInput[j].select();//crlf////tab////tab////tab////tab////tab////tab////tab//return(arInput[j]);//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//catch(e) {//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Error: could not set focus: \\quot\\+e.toString());//crlf////tab////tab////tab////tab////tab////tab////tab//return(null);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//j++;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//eParent=eParent.parentNode;//crlf////tab////tab//cLoop++;//crlf////tab//};//crlf//};//crlf////crlf//function advanceToPrevInput(e) {//crlf////tab//var Done=false;//crlf////tab//var eParent=e.parentNode;//crlf////crlf////tab////if the parent is a TD\\comma\\ need to go up to TABLE.  Otherwise\\comma\\ this routine//crlf////tab////will only act on the table row and will not allow the focus to be set to a //crlf////tab////previous table row.//crlf////tab//if(eParent.nodeName==\\quot\\TD\\quot\\) {//crlf////tab////tab////n is used just to avoid a potential infinite loop//crlf////tab////tab//n=0;//crlf////tab////tab//while((n<10) //amp////amp// (eParent.nodeName!=\\quot\\TABLE\\quot\\)) {//crlf////tab////tab////tab//eParent=eParent.parentNode;//crlf////tab////tab////tab//n++;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//var cLoop=0;//crlf////tab//while((!Done) //amp////amp// (cLoop<5) //amp////amp// (eParent)) {//crlf////tab////tab//var arInput=eParent.getElementsByTagName(\\quot\\input\\quot\\);//crlf////tab////tab//for(var i=0;i<arInput.length;i++) {//crlf////tab////tab////tab//if(arInput[i]==e) {//crlf////tab////tab////tab////tab//j=i-1;//crlf////tab////tab////tab////tab//while(j>=0) {//crlf////tab////tab////tab////tab////tab//if(\\quot\\TEXT~~pipe~~NUMBER~~pipe~~DATE\\quot\\.indexOf(arInput[j].type.toUpperCase())>=0) {//crlf////tab////tab////tab////tab////tab////tab//arInput[j].focus();//crlf////tab////tab////tab////tab////tab////tab//arInput[j].select();//crlf////tab////tab////tab////tab////tab////tab//return(arInput[j]);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//j--;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//return;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//eParent=eParent.parentNode;//crlf////tab////tab//cLoop++;//crlf////tab//};//crlf//};//crlf////crlf///*****************************************************************//crlf//There is a problem advancing to the next input when the enter key is pressed.  //crlf//It seems to be a conflict with  submitTableCell() and submitDialogCell().  As a workaround\\comma\\//crlf//keyDown() records the last keypress and aborts when the enter key is pressed.  //crlf////crlf//The submitTableCell() function checks the value of the last key pressed.  If it is 13\\comma\\//crlf//submitTableCell() clears the value of LastKeyPress and calls advanceToNextInput().//crlf////crlf//02-04-2017: Aborting when the enter key is pressed prevents advancing to the next field//crlf//in a dialog.  Things appear to work properly if the keyDown() function does not abort//crlf//when the enter key is pressed AND submitTableCell still advances when enter was the last//crlf//key pressed.  This allows the input to advance in both tables and dialogs and for the input //crlf//to advance in a table when enter is pressed but onChange is not fired because the data//crlf//in the cell has not changed.//crlf//*****************************************************************///crlf//var LastKeyPress=0;//crlf////crlf//function keyDown(evt\\comma\\e) {//crlf////tab//var key=evt.keyCode ? evt.keyCode : evt.which ? evt.which : evt.charCode;//crlf////tab//LastKeyPress=key//crlf////tab////if(key==13) return;//crlf////tab////appendToLog(\\quot\\keyDown key=\\quot\\+key+\\quot\\ list=\\quot\\+e.getAttribute(\\quot\\list\\quot\\));//crlf////tab//if(e.getAttribute(\\quot\\list\\quot\\)) {//crlf////tab////tab//if(key==40) return;//tab////crlf////tab////tab//if(key==13) {//crlf////tab////tab////tab//var eList=document.getElementById(e.getAttribute(\\quot\\list\\quot\\));//crlf////tab////tab////tab//if(isDatalistSelectionValid(e.value\\comma\\eList)) {//crlf////tab////tab////tab////tab//advanceToNextInput(e);//crlf////tab////tab////tab//};//crlf////tab////tab////tab//return key;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////don't advance on cursor keys for number inputs//crlf////tab//if((key==38) ~~pipe~~~~pipe~~ (key==40)) {//crlf////tab////tab//if((e.nodeName==\\quot\\INPUT\\quot\\) //amp////amp// (e.type)) {//crlf////tab////tab////tab//if(e.type.equalsIgnoreCase(\\quot\\number\\quot\\)) return;//crlf////tab////tab////tab//if(e.type.equalsIgnoreCase(\\quot\\date\\quot\\)) return;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//var eFocus=null;//crlf////tab//switch(key) {//crlf////tab////tab//case 13://tab////enter//crlf////tab////tab////tab////tab////tab////tab////tab//eFocus=advanceToNextInput(e);//crlf////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab//case 38://tab////up//crlf////tab////tab////tab////tab////tab////tab////tab//eFocus=advanceToPrevInput(e);//crlf////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab//case 40://tab////down//crlf////tab////tab////tab////tab////tab////tab////tab//eFocus=advanceToNextInput(e);//crlf////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab//};//crlf////crlf////crlf////tab//if(eFocus) {//crlf////tab////tab////appendToLog(\\quot\\eFocus.type=\\quot\\+eFocus.type);//crlf////tab////tab//if(eFocus.type.equalsIgnoreCase(\\quot\\BUTTON\\quot\\)) {//crlf////tab////tab////tab////appendToLog(\\quot\\Returning false\\quot\\);//crlf////tab////tab////tab//return(false);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//return key;//crlf//};^
ID=819734|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//function switchToDesktop() {//crlf////tab//window.open(getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget//amp//RequestDesktop=true\\quot\\\\comma\\\\quot\\_self\\quot\\);//crlf//};//crlf////crlf//function switchToMobile() {//crlf////tab//window.open(getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget//amp//RequestMobile=true\\quot\\\\comma\\\\quot\\_self\\quot\\);//crlf//};//crlf////crlf///*********************************************************************************//crlf//Used to set the left and top bars to display content from the back-office package instead//crlf//of the support package.  Used to view pages from the customer's perspective.//crlf//*********************************************************************************///crlf//function setDeployedView(s) //crlf//{//crlf////tab//if(s) {//crlf////tab////tab//loadContent(\\quot\\top_bar\\quot\\\\comma\\getLeftBarArgs());//crlf////tab////tab//loadContent(\\quot\\left_bar\\quot\\\\comma\\getLeftBarArgs());//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var eCheck=document.getElementById(\\quot\\SetDeployedView\\quot\\);//crlf////tab//if(!eCheck) {//crlf////tab////tab//alert(\\quot\\Element not found: SetDeployedView\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=setToken//amp//Name=Aspect_Support_Show_Deployed_View//amp//Value=\\quot\\+eCheck.checked;//crlf////tab//var sFuncOk=\\quot\\setDeployedView(s)\\quot\\;//crlf////tab//var sFuncErr=\\quot\\setDeployedView(s)\\quot\\;//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFuncOk\\comma\\sFuncErr);//crlf//};//crlf////crlf///********************************************************************************//crlf//Functions for the left menu bar//crlf//********************************************************************************///crlf//function getLeftBarSelectedCompany()//crlf//{//crlf////tab//var e=document.getElementById(\\quot\\left_bar_select_company\\quot\\);//crlf////tab//if(e) return(e.value);//crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf//function getLeftBarSelectedComputer()//crlf//{//crlf////tab//var e=document.getElementById(\\quot\\left_bar_select_computer\\quot\\);//crlf////tab//if(e) return(e.value);//crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf//function getLeftBarSelectedPackage()//crlf//{//crlf////tab//var sPackageID=document.getElementById(\\quot\\select_menu\\quot\\).value;//crlf////tab//if(sPackageID.indexOf(\\quot\\//power//\\quot\\)>0) {//crlf////tab////tab//var a=getSubStringArray(sPackageID\\comma\\\\quot\\//power//\\quot\\\\comma\\true);//crlf////tab////tab//return(a[0]);//crlf////tab//};//crlf////tab//return(sPackageID);//crlf//};//crlf////crlf//function getLeftBarSelectedMenu()//crlf//{//crlf////tab//var sPackageID=document.getElementById(\\quot\\select_menu\\quot\\).value;//crlf////tab//var sMenu=\\quot\\home\\quot\\;//crlf////tab//if(sPackageID.indexOf(\\quot\\//power//\\quot\\)>0) {//crlf////tab////tab//var a=getSubStringArray(sPackageID\\comma\\\\quot\\//power//\\quot\\\\comma\\true);//crlf////tab////tab//return(a[1]);//crlf////tab//};//crlf////tab//return(sMenu);//crlf//};//crlf////crlf//function getLeftBarArgs()//crlf//{//crlf////tab//var s=\\quot\\Package=\\quot\\+getLeftBarSelectedPackage();//crlf////tab//s +=\\quot\\//amp//Menu=\\quot\\+getLeftBarSelectedMenu();//crlf////tab//s +=\\quot\\//amp//LeftBarCompany=\\quot\\+getLeftBarSelectedCompany();//crlf////tab//s +=\\quot\\//amp//LeftBarComputer=\\quot\\+getLeftBarSelectedComputer();//crlf////tab//return(s);//crlf//};//crlf////crlf//function leftBarCompanySelected(eSelect)//crlf//{//crlf////tab//applyOverlay(\\quot\\left_bar\\quot\\);//crlf////tab////crlf////tab////clear the selected computer so if doesn't cause the associated company to be //crlf////tab////selected when the content loads.//crlf////tab//document.getElementById(\\quot\\left_bar_select_computer\\quot\\).value=\\quot\\0\\quot\\;//crlf////tab////crlf////tab////appendToLog(\\quot\\leftBarCompanySelected args=\\quot\\+getLeftBarArgs()\\comma\\false\\comma\\true);//crlf////tab//loadContent(\\quot\\left_bar\\quot\\\\comma\\getLeftBarArgs());//crlf//};//crlf////crlf//function leftBarComputerSelected(eSelect)//crlf//{//crlf////tab////applyOverlay(\\quot\\left_bar\\quot\\);//crlf////tab////appendToLog(\\quot\\leftBarComputerSelected args=\\quot\\+getLeftBarArgs()\\comma\\false\\comma\\true);//crlf////tab////loadContent(\\quot\\left_bar\\quot\\\\comma\\getLeftBarArgs());//crlf////tab//refreshLeftBarMenu();//crlf//};//crlf////crlf//function updateCompanyList()//crlf//{//crlf////tab//applyOverlay(\\quot\\left_bar\\quot\\);//crlf////tab//loadContent(\\quot\\left_bar\\quot\\\\comma\\getLeftBarArgs()+\\quot\\//amp//updateCompanyList=true\\quot\\);//crlf//};//crlf////crlf//function refreshLeftBarMenu()//crlf//{//crlf////tab//var e=document.getElementById(\\quot\\left_bar_menu_div\\quot\\);//crlf////tab//var sUrl=e.getAttribute(\\quot\\urlbase\\quot\\);//crlf////tab//var arParam=getSubStringArray(sUrl\\comma\\\\quot\\//amp//\\quot\\\\comma\\false);//crlf////tab//sUrl=\\quot\\\\quot\\;//crlf////tab//for(var i=0;i<arParam.length;i++) {//crlf////tab////tab//if((!arParam[i].startsWith(\\quot\\Package\\quot\\)) //amp////amp// (!arParam[i].startsWith(\\quot\\Menu\\quot\\)) //amp////amp// (!arParam[i].startsWith(\\quot\\LeftBarCompany\\quot\\)) //amp////amp// (!arParam[i].startsWith(\\quot\\LeftBarComputer\\quot\\))) {//crlf////tab////tab////tab//if(sUrl.length>0) sUrl +=\\quot\\//amp//\\quot\\;//crlf////tab////tab////tab//sUrl +=arParam[i];//crlf////tab////tab//};//crlf////tab//};//crlf////tab//sUrl +=\\quot\\//amp//\\quot\\+getLeftBarArgs();//crlf////tab//e.setAttribute(\\quot\\url\\quot\\\\comma\\sUrl);//crlf////tab//setInterval(e\\comma\\0\\comma\\true\\comma\\\\quot\\\\quot\\);//crlf////tab//refreshWidgets();//crlf////appendToLog(\\quot\\refreshLeftBarMenu args=\\quot\\+getLeftBarArgs());//crlf////tab////show the menu select box//crlf////tab//var s=getLeftBarSelectedComputer();//crlf////tab//if((s) //amp////amp// (s.length>0) //amp////amp// (s!=\\quot\\0\\quot\\)) {//crlf////tab////tab//setVisible(\\quot\\menu_header\\quot\\\\comma\\true);//crlf////tab////tab//setVisible(\\quot\\select_menu\\quot\\\\comma\\true);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//setVisible(\\quot\\menu_header\\quot\\\\comma\\false);//crlf////tab////tab//setVisible(\\quot\\select_menu\\quot\\\\comma\\false);//crlf////tab//};//crlf//};//crlf////crlf//function menuSelected()//crlf//{//crlf////tab////applyOverlay(\\quot\\left_bar\\quot\\);//crlf////tab////loadContent(\\quot\\left_bar\\quot\\\\comma\\getLeftBarArgs()\\comma\\\\quot\\refreshWidgets()\\quot\\\\comma\\\\quot\\refreshWidgets()\\quot\\);//crlf////tab////crlf////tab////get new url for div//crlf////tab//var sValue=document.getElementById(\\quot\\select_menu\\quot\\).value;//crlf////tab//var a=getSubStringArray(sValue\\comma\\\\quot\\//power//\\quot\\\\comma\\false);//crlf////tab//var sPackage=a[0];//crlf////tab//var sMenu=a[1];//crlf////tab////crlf////tab//var e=document.getElementById(\\quot\\left_bar_menu_div\\quot\\);//crlf////tab//var sUrl=e.getAttribute(\\quot\\urlbase\\quot\\);//crlf////tab////sUrl +=\\quot\\//amp//package=\\quot\\+sPackage+\\quot\\//amp//menu=\\quot\\+sMenu;//crlf////tab//var arParam=getSubStringArray(sUrl\\comma\\\\quot\\//amp//\\quot\\\\comma\\false);//crlf////tab//sUrl=\\quot\\\\quot\\;//crlf////tab//for(var i=0;i<arParam.length;i++) {//crlf////tab////tab//if((!arParam[i].startsWith(\\quot\\Package\\quot\\)) //amp////amp// (!arParam[i].startsWith(\\quot\\Menu\\quot\\)) //amp////amp// (!arParam[i].startsWith(\\quot\\LeftBarCompany\\quot\\)) //amp////amp// (!arParam[i].startsWith(\\quot\\LeftBarComputer\\quot\\))) {//crlf////tab////tab////tab//if(sUrl.length>0) sUrl +=\\quot\\//amp//\\quot\\;//crlf////tab////tab////tab//sUrl +=arParam[i];//crlf////tab////tab//};//crlf////tab//};//crlf////tab//sUrl +=\\quot\\//amp//\\quot\\+getLeftBarArgs();//crlf////crlf////tab//e.setAttribute(\\quot\\url\\quot\\\\comma\\sUrl);//crlf////tab//setInterval(e\\comma\\0\\comma\\true\\comma\\\\quot\\\\quot\\);//crlf////tab//refreshWidgets();//crlf//};//crlf////crlf//function menuOptionSelected(sMenu\\comma\\sDescription\\comma\\sActionType\\comma\\sTarget\\comma\\sArgs)//crlf//{//crlf////tab//if(sArgs.startsWith(\\quot\\/?\\quot\\)) sArgs=getServer()+sArgs;//crlf////tab////crlf////tab//if(sActionType.equalsIgnoreCase(\\quot\\URL\\quot\\)) {//crlf////tab////tab//window.open(sArgs\\comma\\\\quot\\_self\\quot\\);//crlf////tab//}//crlf////tab//else if(sActionType.equalsIgnoreCase(\\quot\\UpdateContent\\quot\\)) {//crlf////tab////tab//sArgs+=\\quot\\//amp//Package=\\quot\\+getLeftBarSelectedPackage();//crlf////tab////tab//sArgs+=\\quot\\//amp//LeftBarCompany=\\quot\\+getLeftBarSelectedCompany();//crlf////tab////tab//sArgs+=\\quot\\//amp//LeftBarComputer=\\quot\\+getLeftBarSelectedComputer();//crlf////tab////tab//appendToLog(\\quot\\LoadContent \\quot\\+sTarget+\\quot\\ \\quot\\+sArgs\\comma\\false\\comma\\true);//crlf////tab////tab//loadContent(sTarget\\comma\\sArgs\\comma\\\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab//};//crlf//};//crlf////crlf///**************************************************************//crlf//Called when text is entered to search for a customer ID//crlf//in the Aspect Support left bar//crlf//**************************************************************///crlf//var arLeftBarAllCompany=null;//crlf//var arLeftBarAllCustomer=null;//crlf//var arLeftBarCompanyLookup=null;//crlf////crlf//function HashIDSearchUpdated(ClearSearch) //crlf//{//crlf////tab//if(ClearSearch) {//crlf////tab////tab//document.getElementById(\\quot\\search_customer_id\\quot\\).value=\\quot\\\\quot\\;//crlf////tab////tab//loadContent(\\quot\\left_bar\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//if(arLeftBarAllCompany==null) {//crlf////tab////tab//var arLeftBarAllCustomer=document.getElementById(\\quot\\Collection_AllCustomer\\quot\\).innerHTML;//crlf////crlf////tab////tab////These are not currently used//crlf////tab////tab////var arLeftBarAllCompany=document.getElementById(\\quot\\Collection_AllCompany\\quot\\).innerHTML;//crlf////tab////tab////var arLeftBarCompanyLookup=document.getElementById(\\quot\\Collection_CompanyLookup\\quot\\).innerHTML;//crlf////tab//};//crlf////crlf////tab//var arSelections=\\quot\\0=-- Select1 --\\quot\\;//crlf////tab//var strTyped=document.getElementById(\\quot\\search_customer_id\\quot\\).value.toUpperCase().trim();//crlf////tab//var arCustomer=getSubStringArray(arLeftBarAllCustomer\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////crlf////tab//var sSelected=null;//crlf////tab//var cMatch=0;//crlf////tab//for (var i=0;i<arCustomer.length;i++) {//crlf////tab////tab//arValues=getSubStringArray(arCustomer[i]\\comma\\\\quot\\=\\quot\\);//crlf////tab////tab////if(arValues[0].toUpperCase().indexOf(strTyped)>=0) {//crlf////tab////tab//if(arCustomer[i].toUpperCase().indexOf(strTyped)>=0) {//crlf////tab////tab////tab//arSelections=addElement(arSelections\\comma\\arCustomer[i]\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab////tab////tab//if(sSelected==null) sSelected=arValues[0];//crlf////tab////tab////tab//cMatch++;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////clear the connection info//crlf////tab//var eConnectionInfo=document.getElementById(\\quot\\LeftBarConnectionInfo\\quot\\);//crlf////tab//if(eConnectionInfo) eConnectionInfo.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab//var eSelect=document.getElementById(\\quot\\left_bar_select_computer\\quot\\);//crlf////tab//setOptions(eSelect\\comma\\arSelections);//crlf////tab//eSelect.value=\\quot\\0\\quot\\;//crlf////crlf////tab////if only a single match was found\\comma\\ select it and refresh the left bar to update//crlf////tab////the menu items//crlf////tab//if(cMatch==1) {//crlf////tab////tab//eSelect.value=sSelected;//crlf////tab////tab//leftBarComputerSelected(eSelect);//crlf////tab//};//crlf//};//crlf//^
ID=571416|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************************************//crlf//TEXT FUNCTIONS//crlf//******************************************************************************************************///crlf//function keywordMatch(Keys\\comma\\Str) {//crlf////tab//var bMatch=false;//crlf////tab//if(Keys.trim().length==0) return(true);//crlf////tab//if(Str.trim().length==0) return(false);//crlf////crlf////tab//var sString=Str.toUpperCase();//crlf////crlf////tab//var arKeys=getSubStringArray(Keys.toUpperCase()\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//if((arKeys!=null)) {//crlf////tab////tab//var Done=false;//crlf////tab////tab//for(var i=0;(!Done) //amp////amp// (i<arKeys.length);i++) {//crlf////tab////tab////tab//appendToLog(\\quot\\arKeys[\\quot\\+i+\\quot\\]=\\quot\\+arKeys[i]+\\quot\\ sString=\\quot\\+sString);//crlf////tab////tab////tab//if(arKeys[i].length>0) {//crlf////tab////tab////tab////tab//if(arKeys[i].startsWith(\\quot\\+\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(arKeys[i].length>1) {//crlf////tab////tab////tab////tab////tab////tab//if(sString.indexOf(arKeys[i].substring(1))<0) {//crlf////tab////tab////tab////tab////tab////tab////tab//bMatch=false;//crlf////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\Match=false[1]\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//Done=true;//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\Match=true[1]\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//bMatch=true;//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//}//tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(arKeys[i].startsWith(\\quot\\-\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(arKeys[i].length>1) {//crlf////tab////tab////tab////tab////tab////tab//if(sString.indexOf(arKeys[i].substring(1))>=0) {//crlf////tab////tab////tab////tab////tab////tab////tab//bMatch=false;//crlf////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\Match=false[2]\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//Done=true;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//if(sString.indexOf(arKeys[i])>=0) bMatch=true;//crlf////tab////tab////tab////tab////tab//appendToLog(\\quot\\Match=\\quot\\+bMatch+\\quot\\[3]\\quot\\);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(bMatch);//crlf//};//crlf////crlf//function getSalt(n) {//crlf////tab//var arChars=\\quot\\0123456789abcdefghijklmnopqrstuvwxyz\\quot\\;//crlf////tab//var s=\\quot\\\\quot\\;//crlf////tab//for (var i=0;i<n;i++) {//crlf////tab////tab//r=Math.floor(Math.random()*36);//crlf////tab////tab//s +=arChars.charAt(r);//crlf////tab//};//crlf////tab//return(s);//crlf//};//crlf////crlf///*//crlf////tab//Returns a unique numberic value for the given string.  The result is limited to 32 bits.//crlf////tab//The result is not guaranteed to be unique since strings can be of any length\\comma\\ but for //crlf////tab//practical purposes it is.  This function is used to generate widget ID's in the reports//crlf////tab//container using the selected report and stores as the string.//crlf//*///crlf//function getHashCode(s)//crlf//{//crlf////tab//var h=0;//crlf////tab//var off=0;//crlf////tab//var len=s.length;//crlf////tab//for (var i=0;i<len;i++) {//crlf////tab////tab//h=31*h + s.charCodeAt(off);//crlf////tab////tab//while(h>4294967296)  h -=4294967296;//crlf////tab////tab//off++;//crlf////tab//};//crlf////tab//return(h.toString());//crlf//};//crlf////crlf//Array.prototype.indexOf=function(s){//crlf////tab//for(var i=0;i<this.length;i++) {//crlf////tab////tab//if (typeof(this[i])==\\quot\\string\\quot\\) {//crlf////tab////tab////tab//if(this[i].equalsIgnoreCase(s)) return(i);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if(this[i]==s) return(i);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(-1);//crlf//};//crlf////crlf//String.prototype.trim=function() {//crlf////tab//return this.replace(///power//\s\s*/\\comma\\ '').replace(/\s\s*$/\\comma\\ '');//crlf//};//crlf////crlf//String.prototype.deleteCharAt=function(index) {//crlf////tab//if (index==0) return(this.substring(1));//crlf////tab//return this.substring(0\\comma\\index) + this.substring(index+1);//crlf//};//crlf////crlf//String.prototype.startsWith=function(str){//crlf//    return (this.toUpperCase().indexOf(str.toUpperCase())===0);//crlf//}//crlf////crlf//String.prototype.equalsIgnoreCase=function(str){//crlf////tab//if(!str) return(false);//crlf//    return (this.toUpperCase()==str.toUpperCase());//crlf//}//crlf////crlf//String.prototype.setLength=function(len){//crlf////tab//if (len>this.length) return(this);//crlf////tab//return(this.substring(0\\comma\\len));//crlf//}//crlf////crlf////tab//String.prototype.replaceAll=function(str1\\comma\\ str2\\comma\\ ignore) {//crlf////tab////tab//return this.replace(new RegExp(str1.replace(/([\/\\\comma\\\!\\\//power//\$\{\}\[\]\(\)\.\*\+\?\~~pipe~~\<\>\-\//amp//])/g\\comma\\\\quot\\\\$//amp//\\quot\\)\\comma\\(ignore?\\quot\\gi\\quot\\:\\quot\\g\\quot\\))\\comma\\(typeof(str2)==\\quot\\string\\quot\\)?str2.replace(/\$/g\\comma\\\\quot\\$$$$\\quot\\):str2);//crlf////tab//} ;//crlf////crlf//function replaceAllSubstrings(str\\comma\\target\\comma\\replacement) //crlf//{//crlf////tab//if(!str) return(\\quot\\\\quot\\);//crlf////tab//return(str.toString().replaceAll(target\\comma\\replacement\\comma\\false));//crlf//};//crlf////crlf//function oldreplaceAllSubstrings(str\\comma\\target\\comma\\replacement) //crlf//{//crlf////tab//if(!str) return(\\quot\\\\quot\\);//crlf////tab////crlf////tab//if (replacement.toUpperCase().indexOf(target.toUpperCase())>=0) {//crlf////tab////tab//var s=\\quot\\The replacement: \\quot\\+replacement+\\quot\\ includes the target: \\quot\\+target+\\quot\\ while replacing\n\\quot\\//crlf////tab////tab//s +=target+\\quot\\\nwith\n\\quot\\+replacement;//crlf////tab////tab//alert(s);//crlf////tab////tab//return(str);//crlf////tab//};//crlf////crlf////tab//var n=-1;//crlf////tab//do {//crlf////tab////tab//n=str.indexOf(target);//crlf////tab////tab//if(n>=str.length) {//crlf////tab////tab////tab//appendToLog(\\quot\\replaceAllSubstrings target=\\quot\\+target+\\quot\\ replacement=\\quot\\+replacement+\\quot\\ n=\\quot\\+n+\\quot\\ str=\\quot\\+str\\comma\\false\\comma\\true);//crlf////tab////tab////tab//n=-1;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if (n>=0) str=str.substring(0\\comma\\n)+replacement+str.substring((n+target.length)\\comma\\str.length);//crlf////tab////tab//};//crlf////tab//} while (n>=0);//crlf////crlf////tab//return(str);//crlf//};//crlf////crlf//function quote(str) {//crlf////tab//return(\\quot\\\x22\\quot\\+str+\\quot\\\x22\\quot\\);//crlf//};//crlf////crlf//Object.prototype.toType=function() {//crlf//  return ({}).toString.call(this).match(/\s([a-zA-Z]+)/)[1].toLowerCase()//crlf//};//crlf////crlf//function getSubStringArray(Src\\comma\\ADelimit\\comma\\ARemoveQuotes)//crlf//{//crlf////tab//if(Src==\\quot\\\\quot\\) {//crlf////tab////tab//var arString=new Array();//crlf////tab////tab//arString[0]=\\quot\\\\quot\\;//crlf////tab////tab//return(arString);//crlf////tab//};//crlf////crlf////tab//if((!Src) ~~pipe~~~~pipe~~ (Src==null)) {//crlf////tab////tab//appendToLog(\\quot\\Src is null in getSubStringArray1\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//printStackTrace();//crlf////tab////tab//return(null);//crlf////tab//};//crlf////tab////crlf////tab////check for non-string variable//crlf////tab//try {//crlf////tab////tab//var Ch=Src.charAt(0);//crlf////tab//}//crlf////tab//catch(e) {//crlf////tab////tab//printStackTrace();//crlf////tab////tab//appendToLog(\\quot\\getSubStringArray: Error: \\quot\\+e.toString()\\comma\\false\\comma\\true);//crlf////tab//};//crlf////tab////crlf////tab//var Str1=\\quot\\\\quot\\;//crlf////tab//var Len=Src.length;//crlf////tab//var cDelimiters//tab//=0;//crlf////tab//var LastIndex=0;//crlf////tab//var InQuotes=false;//crlf////crlf////tab//if (Len==0) return(\\quot\\\\quot\\);//crlf////tab////crlf////tab////initialize array for recording location of commas//crlf////tab//var arDelimit=new Array(Len+1);//crlf////crlf////tab////get locations of delimiters//crlf////tab//for (var i=0;i<Len;i++) {//crlf////tab////tab//var Ch=Src.charAt(i);//crlf////tab////tab//if (Ch=='\x22') {//crlf////tab////tab////tab//InQuotes=!InQuotes;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if ((Ch==ADelimit) //amp////amp// (!InQuotes)) {//crlf////tab////tab////tab////tab//arDelimit[cDelimiters]=i;//crlf////tab////tab////tab////tab//cDelimiters++;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////fake a delimiter at the end of the string//crlf////tab//arDelimit[cDelimiters]=Len;//crlf////tab//cDelimiters++;//crlf////tab////crlf////tab//var arString=new Array(cDelimiters);//crlf////tab////crlf////tab//for (var i=0;i<cDelimiters;i++)//tab////crlf////tab//{//crlf////tab////tab//Str1=\\quot\\\\quot\\;//crlf////tab////tab////crlf////tab////tab//if (arDelimit[i]>LastIndex) //crlf////tab////tab//{//crlf////tab////tab////tab//Str1 +=Src.substring(LastIndex\\comma\\arDelimit[i]);//crlf////crlf////tab////tab////tab////remove quotes//crlf////tab////tab////tab//if (ARemoveQuotes) {//crlf////tab////tab////tab////tab//if (Str1.length>0) {//crlf////tab////tab////tab////tab////tab//if (Str1.charAt(0)==\\quot\\\x22\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab//Str1=Str1.deleteCharAt(0);//crlf////tab////tab////tab////tab////tab////tab//if ((Str1.length>0) //amp////amp// (Str1.charAt(Str1.length-1)=='\x22')) {//crlf////tab////tab////tab////tab////tab////tab////tab//Str1=Str1.setLength(Str1.length-1);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////trim//crlf////tab////tab////tab//Str1=Str1.trim();//crlf////tab////tab////tab////while ((Str1.length>0) //amp////amp// (Str1.charAt(0)==' ')) Str1=Str1.deleteCharAt(0);//crlf////tab////tab////tab////while ((Str1.length>0) //amp////amp// (Str1.charAt(Str1.length-1)==' ')) Str1=Str1.setLength(Str1.length-1);//crlf////crlf////tab////tab////tab//arString[i]=Str1;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//arString[i]=\\quot\\\\quot\\;//crlf////tab////tab//}//crlf////crlf////tab////tab//LastIndex=arDelimit[i]+1;//crlf////tab//};//crlf////crlf////tab//if (false) {//crlf////tab////tab//String1=\\quot\\\\quot\\;//crlf////tab////tab//for (var i=0;i<arString.length;i++) String1 +=arString[i]+\\quot\\\n\\quot\\;//crlf////tab////tab//alert(\\quot\\arString=\\quot\\+String1);//crlf////tab//};//crlf////crlf////tab//return(arString);//crlf//};//crlf////crlf////returns the element at the given index from the delimited array in str//crlf//function getElement(str\\comma\\index\\comma\\delimiter)//crlf//{//crlf////tab//arString=getSubStringArray(str\\comma\\delimiter\\comma\\true);//crlf////tab//if (index>=arString.length) {//crlf////tab////tab//alert(\\quot\\index out of bounds in getElement(\\quot\\+str+\\quot\\\\comma\\\\quot\\+index+\\quot\\\\comma\\\\quot\\+delimiter+\\quot\\)\\quot\\);//crlf////tab////tab//return(\\quot\\\\quot\\);//crlf////tab//};//crlf////tab//return(arString[index]);//crlf//};//crlf////crlf////returns the value of the element with the given name in a delimited string of the form \\quot\\name1=value2~~pipe~~name2=value2...\\quot\\//crlf//function getElementValue(str\\comma\\name\\comma\\delimiter)//crlf//{//crlf////tab//if(str==null) {//crlf////tab////tab//appendToLog(\\quot\\str is null in getElementValue for \\quot\\+name\\comma\\false\\comma\\true);//crlf////tab////tab//return(\\quot\\\\quot\\);//crlf////tab//};//crlf////tab////crlf////tab//var arElement=getSubStringArray(str\\comma\\delimiter\\comma\\true);//crlf////tab//for (var i=0;i<arElement.length;i++) {//crlf////tab////tab//var arString=getSubStringArray(arElement[i]\\comma\\\\quot\\=\\quot\\\\comma\\true);//crlf////tab////tab//if (arString.length>0) {//crlf////tab////tab////tab//if (arString[0].equalsIgnoreCase(name)) {//crlf////tab////tab////tab////tab//var strValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab//for (var j=1;j<arString.length;j++) strValue=addElement(strValue\\comma\\arString[j]\\comma\\\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab//return(strValue);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf//function addElement(str\\comma\\name\\comma\\Delimiter)//crlf//{//crlf////tab//if (!Delimiter) Delimiter=\\quot\\\\comma\\\\quot\\;//crlf////tab//if (str.length>0) str +=Delimiter;//crlf////tab//str +=name;//crlf////tab//return(str);//crlf//};//crlf////crlf//function padLeft(str\\comma\\ch\\comma\\len)//crlf//{//crlf////tab//var strResult=str.toString();//crlf////tab//while (strResult.length<len) strResult=ch + strResult;//crlf////tab//return(strResult);//crlf//};//crlf////crlf//function formatDate(dt\\comma\\Pattern)//crlf//{//crlf////tab////set a default pattern used to pass time to Aspect//crlf////tab//var strResult=\\quot\\MM-dd-yyyy HH:mm:ss z\\quot\\;//crlf////tab//if (Pattern) strResult=Pattern;//crlf////tab////crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\MM\\quot\\\\comma\\padLeft(dt.getMonth()+1\\comma\\\\quot\\0\\quot\\\\comma\\2));//crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\dd\\quot\\\\comma\\padLeft(dt.getDate()\\comma\\\\quot\\0\\quot\\\\comma\\2));//crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\yyyy\\quot\\\\comma\\padLeft(dt.getFullYear()\\comma\\\\quot\\0\\quot\\\\comma\\4));//crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\HH\\quot\\\\comma\\padLeft(dt.getHours()\\comma\\\\quot\\0\\quot\\\\comma\\2));//crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\mm\\quot\\\\comma\\padLeft(dt.getMinutes()\\comma\\\\quot\\0\\quot\\\\comma\\2));//crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\ss\\quot\\\\comma\\padLeft(dt.getSeconds()\\comma\\\\quot\\0\\quot\\\\comma\\2));//crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\SSS\\quot\\\\comma\\padLeft(dt.getMilliseconds()\\comma\\\\quot\\0\\quot\\\\comma\\3));//crlf////crlf////tab//var Hour=dt.getHours();//crlf////tab//var Hourhh=(Hour<=12) ? Hour : Hour-12;//crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\hh\\quot\\\\comma\\padLeft(Hourhh\\comma\\\\quot\\0\\quot\\\\comma\\2));//crlf////tab////crlf////tab//if(strResult.toUpperCase().indexOf(\\quot\\A\\quot\\)>=0) {//crlf////tab////tab//var s=\\quot\\PM\\quot\\;//crlf////tab////tab//if(Hour<12) s=\\quot\\AM\\quot\\;//crlf////tab////tab////crlf////tab////tab//if(strResult.toUpperCase().indexOf(\\quot\\AA\\quot\\)<0) {//crlf////tab////tab////tab//s=s.substring(0\\comma\\1);//crlf////tab////tab////tab//if(strResult.indexOf(\\quot\\A\\quot\\)>=0) {//crlf////tab////tab////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\A\\quot\\\\comma\\s);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\a\\quot\\\\comma\\s);//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if(strResult.indexOf(\\quot\\AA\\quot\\)>=0) { //crlf////tab////tab////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\AA\\quot\\\\comma\\s);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\aa\\quot\\\\comma\\s);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//switch(dt.getTimezoneOffset()) {//crlf////tab////tab//case 300: strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\tz\\quot\\\\comma\\\\quot\\(EST)\\quot\\); break;//crlf////tab////tab//case 360: strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\tz\\quot\\\\comma\\\\quot\\(CST)\\quot\\); break;//crlf////tab////tab//case 420: strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\tz\\quot\\\\comma\\\\quot\\(MST)\\quot\\); break;//crlf////tab////tab//case 480: strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\tz\\quot\\\\comma\\\\quot\\(PST)\\quot\\); break;//crlf////tab////tab//default: strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\tz\\quot\\\\comma\\\\quot\\GMT-\\quot\\+padLeft((dt.getTimezoneOffset()/60)\\comma\\\\quot\\0\\quot\\\\comma\\2)+\\quot\\00\\quot\\);//crlf////tab//};//crlf////tab////crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\z\\quot\\\\comma\\\\quot\\-\\quot\\+padLeft((dt.getTimezoneOffset()/60)\\comma\\\\quot\\0\\quot\\\\comma\\2)+\\quot\\00\\quot\\);//crlf////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\Z\\quot\\\\comma\\\\quot\\-\\quot\\+padLeft((dt.getTimezoneOffset()/60)\\comma\\\\quot\\0\\quot\\\\comma\\2)+\\quot\\00\\quot\\);//crlf////appendToLog(\\quot\\formatDate dt=\\quot\\+dt+\\quot\\ pattern=\\quot\\+Pattern+\\quot\\ result=\\quot\\+strResult\\comma\\false\\comma\\true);//crlf////tab//return(strResult);//crlf//};//crlf////crlf//function formatNumber(n\\comma\\Pattern) //crlf//{//crlf////tab//var Num;//crlf////crlf////tab//if (typeof(n)==\\quot\\string\\quot\\) {//crlf////tab////tab//Num=parseFloat(n);//crlf////tab//}//crlf////tab//else if ((typeof(n)==\\quot\\int\\quot\\) ~~pipe~~~~pipe~~ (typeof(n)==\\quot\\float\\quot\\) ~~pipe~~~~pipe~~ (typeof(n)==\\quot\\number\\quot\\)) {//crlf////tab////tab//Num=n;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//return(\\quot\\Unrecognized type: \\quot\\+n+\\quot\\ type: \\quot\\+typeof(n));//crlf////tab//};//crlf////tab////crlf////tab////for right now\\comma\\ just look for a decimal in the pattern and return two digits if there's a decimal.//crlf////tab////Otherwise return no digits after the decimal//crlf////tab//var strResult=\\quot\\\\quot\\;//crlf////tab//var n=Pattern.indexOf(\\quot\\.\\quot\\);//crlf////tab//if (n>=0) {//crlf////tab////tab//var NumDecimals=Pattern.length-n-1;//crlf////tab////tab//strResult=Num.toFixed(NumDecimals);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//strResult=Num.toFixed(0);//crlf////tab//};//crlf////tab////crlf////tab//return(strResult);//crlf//};//crlf////crlf////Replaces special characters with tokens and vice versa//crlf//function tokenizeSpecialChars(str\\comma\\bool) //crlf//{//crlf////tab////alert(\\quot\\tokenizeSpecialChars \\quot\\+bool+\\quot\\ \\quot\\+str);//crlf////tab//if (bool) {//crlf////tab////tab//var strResult=replaceAllSubstrings(str\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\\\\\am\\quot\\+\\quot\\p\\\\\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\+\\quot\\\\comma\\\\quot\\\\\\pl\\quot\\+\\quot\\us\\\\\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\\\qu\\quot\\+\\quot\\ot\\\\\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\\\ap\\quot\\+\\quot\\os\\\\\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\\\\\pou\\quot\\+\\quot\\nd\\\\\\quot\\);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//var strResult=replaceAllSubstrings(str\\comma\\\\quot\\\\\\am\\quot\\+\\quot\\p\\\\\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\\\\\pl\\quot\\+\\quot\\us\\\\\\quot\\\\comma\\\\quot\\+\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\\\\\qu\\quot\\+\\quot\\ot\\\\\\quot\\\\comma\\\\quot\\\x22\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\\\\\ap\\quot\\+\\quot\\os\\\\\\quot\\\\comma\\\\quot\\'\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\\\\\pou\\quot\\+\\quot\\nd\\\\\\quot\\\\comma\\\\quot\\//pound//\\quot\\);//crlf////crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\//am\\quot\\+\\quot\\p//\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\//pl\\quot\\+\\quot\\us//\\quot\\\\comma\\\\quot\\+\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\//qu\\quot\\+\\quot\\ot//\\quot\\\\comma\\\\quot\\\x22\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\//ap\\quot\\+\\quot\\os//\\quot\\\\comma\\\\quot\\'\\quot\\);//crlf////tab////tab//strResult=replaceAllSubstrings(strResult\\comma\\\\quot\\//pou\\quot\\+\\quot\\nd//\\quot\\\\comma\\\\quot\\//pound//\\quot\\);//crlf////tab//};//crlf////tab////crlf////tab////alert(\\quot\\strResult=\\quot\\+strResult);//crlf////tab//return(strResult);//crlf//};//crlf////crlf////Use this in place of Boolean(value).  IE and Firefox handle booleans differently.//crlf//function boolVal(s) {//crlf////tab//if(!s) return(false);//crlf////tab//if(s==\\quot\\true\\quot\\) return(true);//crlf////tab//if(s==true) return(true);//crlf////tab//return(false);//crlf//};//crlf////crlf//^
ID=567024|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************************************//crlf//FUNCTIONS USED FOR TABBED DIALOG//crlf//******************************************************************************************************///crlf//function setDialogTabStyle(aCell\\comma\\aLink\\comma\\bSelected) {//crlf////tab//if(!aCell) return;//crlf////tab////crlf////tab//if (bSelected) {//crlf////tab////tab//aLink.className=\\quot\\tabdialogtabselected\\quot\\;//crlf////tab////tab////aLink.style.color=\\quot\\black\\quot\\;//crlf////tab////tab////aLink.style.fontWeight=\\quot\\bold\\quot\\;//crlf////tab////tab////aCell.style.backgroundColor=\\quot\\//pound//e9e9e9\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//aLink.className=\\quot\\tabdialogtabunselected\\quot\\;//crlf////tab////tab////aLink.style.color=\\quot\\black\\quot\\;//crlf////tab////tab////aLink.style.fontWeight=\\quot\\normal\\quot\\;//crlf////tab////tab////aCell.style.backgroundColor=\\quot\\//pound//e9e9e9\\quot\\;//crlf////tab//};//crlf//};//crlf////crlf////Searches for tabbed dialogs and sets the style of the default tab.  Called directly and by refreshWidgets() every second.//crlf//function initializeTabbedDialogs() {//crlf////appendToLog(\\quot\\initializeTabbedDialogs started\\quot\\\\comma\\false\\comma\\true);//crlf////tab////initialize all tabbed dialogs//crlf////tab//var arTable=document.getElementsByTagName(\\quot\\TABLE\\quot\\);//crlf////crlf////tab//for (var i=0;i<arTable.length;i++) {//crlf////tab////tab//if(!boolVal(arTable[i].getAttribute(\\quot\\tabsInitialized\\quot\\)))//crlf////tab////tab//{//crlf////tab////tab////tab//var bAllTabsLoaded=true;//crlf////tab////tab////tab//var bInitialized=false;//crlf////tab////tab////tab//var arTableRow=arTable[i].getElementsByTagName(\\quot\\tr\\quot\\);//crlf////tab////tab////tab//for (var j=0;j<arTableRow.length;j++) {//crlf////tab////tab////tab////tab//var arTableCell=arTableRow[j].getElementsByTagName(\\quot\\td\\quot\\);//crlf////tab////tab////tab////tab//for (var k=0;k<arTableCell.length;k++) {//crlf////tab////tab////tab////tab////tab//var arChild=arTableCell[k].childNodes;//crlf////tab////tab////tab////tab////tab//for (var l=0;l<arChild.length;l++) {//crlf////tab////tab////tab////tab////tab////tab//if ((arChild[l].nodeName.equalsIgnoreCase(\\quot\\A\\quot\\)) ~~pipe~~~~pipe~~ (arChild[l].nodeName.equalsIgnoreCase(\\quot\\SPAN\\quot\\))) {//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////Modified 6/14/17 to address error getting onclick text of a section header in a table//crlf////tab////tab////tab////tab////tab////tab////tab//if(arChild[l].hasAttribute(\\quot\\onclick\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////if(arChild[l].onclick) {//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////tab////Modified 6/14/17 to address error getting onclick text of a section header in a table//crlf////tab////tab////tab////tab////tab////tab////tab////tab////var str1=String(arChild[l].onclick);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var str1=String(arChild[l].getAttribute(\\quot\\onclick\\quot\\));//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(str1.toUpperCase().indexOf(\\quot\\SHOWTAB\\quot\\)>=0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var n1=str1.toUpperCase().indexOf(\\quot\\SHOWTAB(\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var n2=str1.indexOf(\\quot\\)\\quot\\\\comma\\n1);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var str2=str1.substring(n1+8\\comma\\n2);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var arStr=getSubStringArray(str2\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var s=replaceAllSubstrings(replaceAllSubstrings(arStr[1]\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\quot\\)\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var arTabName=getSubStringArray(s\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////see if all tabs have been loaded completely before setting the TabsInitialized attribute to true//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//for(var cTab=0;cTab<arTabName.length;cTab++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(arTabName[cTab].length>0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var eCheckLoaded=document.getElementById(arTabName[cTab]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(!eCheckLoaded) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////the item has not been loaded at all//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//bAllTabsLoaded=false;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////sLoaded is defined when the element is a container item.  This extra check makes sure the item//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////has been completely loaded by the container\\comma\\ including items that may require processing.  Not//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////all elements will have sLoaded defined.  For example\\comma\\ the dialog used to edit an item in a container//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////will not have sLoaded defined.//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sLoaded=eCheckLoaded.getAttribute(\\quot\\IsLoaded\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sLoaded) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////the item has been loaded but has not been flagged as completely loaded by the container//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sLoaded.equalsIgnoreCase(\\quot\\true\\quot\\)==false) bAllTabsLoaded=false;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(bInitialized) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//setDialogTabStyle(arTableCell[j]\\comma\\arChild[l]\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//for(var cTab=0;cTab<arTabName.length;cTab++) setVisible(arTabName[cTab]\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//setDialogTabStyle(arTableCell[j]\\comma\\arChild[l]\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//for(var cTab=0;cTab<arTabName.length;cTab++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////give consideration to widget containers and don't display tabs that are not flagged as visible//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var eItem=document.getElementById(arTabName[cTab]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eItem) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sAttr=eItem.getAttribute(\\quot\\visible\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sAttr) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sAttr instanceof String) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sAttr.equalsIgnoreCase(\\quot\\true\\quot\\)) setVisible(arTabName[cTab]\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sAttr==true) setVisible(arTabName[cTab]\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//setVisible(arTabName[cTab]\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//setVisible(arTabName[cTab]\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////record the currently selected tab so it can be displayed if the table and it's tab contents are hidden//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//arTable[i].setAttribute(\\quot\\SelectedTab\\quot\\\\comma\\s);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(strTabName+\\quot\\ visible\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//bInitialized=true;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab//arTable[i].setAttribute(\\quot\\tabsInitialized\\quot\\\\comma\\bAllTabsLoaded);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////initialize all select boxes//crlf////tab//var arSelect=document.getElementsByTagName(\\quot\\SELECT\\quot\\);//crlf////tab//for (i=0;i<arSelect.length;i++) //crlf////tab//{//crlf////tab////tab//var s=String(arSelect[i].onchange);//crlf////tab////tab//if(s.toUpperCase().indexOf(\\quot\\SHOWTAB\\quot\\)>=0) //crlf////tab////tab//{//crlf////tab////tab////tab////The dialog header includes a select box containing the ID of every record in the table.  Do not treat this as a tab selector//crlf////tab////tab////tab////because spans or divs used in the table with the record ID as the ID will be hidden.  This occurs in the notifications table//crlf////tab////tab////tab////when the ID of the record is used to create a span tag used to view a notification//crlf////tab////tab////tab//var bIsDialogHeader=false;//crlf////tab////tab////tab//if(arSelect[i].onchange) {//crlf////tab////tab////tab////tab//var sOnChange=String(arSelect[i].onchange);//crlf////tab////tab////tab////tab//bIsDialogHeader=sOnChange.toUpperCase().indexOf(\\quot\\DIALOGRECORDSELECTED\\quot\\)>=0;//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if((bIsDialogHeader==false) //amp////amp// (arSelect[i].options.length>0)) {//crlf////tab////tab////tab////tab//if(!boolVal(arSelect[i].getAttribute(\\quot\\tabsInitialized\\quot\\))) {//crlf////tab////tab////tab////tab////tab//bAllTabsLoaded=true;//crlf////tab////tab////tab////tab////tab//for (var j=0;j<arSelect[i].options.length;j++) //crlf////tab////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab////tab//if(arSelect[i].options[j].value.length>0) {//crlf////tab////tab////tab////tab////tab////tab////tab//var arItems=getSubStringArray(arSelect[i].options[j].value\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab//for(var k=0;k<arItems.length;k++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if (document.getElementById(arItems[k])) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//setVisible(arItems[k]\\comma\\arSelect[i].options[j].selected);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//bAllTabsLoaded=false;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//arSelect[i].setAttribute(\\quot\\tabsInitialized\\quot\\\\comma\\bAllTabsLoaded);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////initialize all drop-down menus//crlf////tab//menuCloseAll();//crlf////appendToLog(\\quot\\initializeTabbedDialogs complete\\quot\\\\comma\\false\\comma\\true);//crlf//};//crlf////crlf///*//crlf//Returns an array of all child elements in e where e is a table of tabs\\comma\\ a select element//crlf//or a span element containing a drop-down menu.  The child elements are the ID's //crlf//associated with each element in the control.  An ID may contain one or more ID's//crlf//separated by pipes (e.g. div1~~pipe~~div2~~pipe~~div3.  //crlf//*///crlf//function getTabIDs(e)//crlf//{//crlf////tab//var arChildID=new Array();//crlf////tab////crlf////tab//if(e.nodeName.equalsIgnoreCase(\\quot\\table\\quot\\)) {//crlf////tab////tab//var arTableRow=e.getElementsByTagName(\\quot\\tr\\quot\\);//crlf////tab////tab//for (var i=0;i<arTableRow.length;i++) {//crlf////tab////tab////tab//var arTableCell=arTableRow[i].getElementsByTagName(\\quot\\td\\quot\\);//crlf////tab////tab////tab//for (var j=0;j<arTableCell.length;j++) {//crlf////tab////tab////tab////tab//var arChild=arTableCell[j].childNodes;//crlf////tab////tab////tab////tab//for (var k=0;k<arChild.length;k++) {//crlf////tab////tab////tab////tab////tab//if ((arChild[k].nodeName.equalsIgnoreCase(\\quot\\A\\quot\\)) ~~pipe~~~~pipe~~ (arChild[k].nodeName.equalsIgnoreCase(\\quot\\SPAN\\quot\\)))//crlf////tab////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab////tab//var str1=String(arChild[k].onclick);//crlf////tab////tab////tab////tab////tab////tab//var n1=str1.toUpperCase().indexOf(\\quot\\SHOWTAB(\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//var n2=str1.indexOf(\\quot\\)\\quot\\\\comma\\n1);//crlf////tab////tab////tab////tab////tab////tab//var str2=str1.substring(n1+8\\comma\\n2);//crlf////tab////tab////tab////tab////tab////tab//var arStr=getSubStringArray(str2\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//arChildID[arChildID.length]=replaceAllSubstrings(replaceAllSubstrings(arStr[1]\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\quot\\)\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else if(e.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\)) {//crlf////tab////tab//var arLink=eDiv.getElementsByTagName(\\quot\\a\\quot\\);//crlf////tab////tab//for (var i=0;i<arLink.length;i++) {//crlf////tab////tab////tab//var str1=String(arLink[i].onclick);//crlf////tab////tab////tab//var n1=str1.toUpperCase().indexOf(\\quot\\SHOWTAB(\\quot\\);//crlf////tab////tab////tab//var n2=str1.indexOf(\\quot\\)\\quot\\\\comma\\n1);//crlf////tab////tab////tab//var str2=str1.substring(n1+8\\comma\\n2);//crlf////tab////tab////tab//var arStr=getSubStringArray(str2\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab//arChildID[arChildID.length]=replaceAllSubstrings(replaceAllSubstrings(arStr[1]\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\quot\\)\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else if(e.nodeName.equalsIgnoreCase(\\quot\\select\\quot\\)) {//crlf////tab////tab//for (var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab//var arStr=getSubStringArray(e.options[i].value\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////tab////tab//for (var j=0;j<arStr.length;j++) {//crlf////tab////tab////tab////tab//arChildID[arChildID.length]=arStr[j];//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//return(arChildID);//crlf//};//crlf////crlf///*//crlf//Hides all child elements defined in e where e is a table of tabs\\comma\\ a select element//crlf//or a span element containing a drop-down menu//crlf//*///crlf//function hideTabElements(e) {//crlf////tab//var arTabs=getTabIDs(e);//crlf////tab//if(arTabs) {//crlf////tab////tab//for (var i=0;i<arTabs.length;i++) {//crlf////tab////tab////tab//var ar=getSubStringArray(arTabs[i]\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////tab////tab////if(ar==null) alert(\\quot\\ar=null in hideTabElements\\quot\\);//crlf////tab////tab////tab//for (var j=0;j<ar.length;j++) {//crlf////tab////tab////tab////tab//setVisible(ar[j]\\comma\\false);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Shows a tab in a tabbed dialog.//crlf////crlf//02-27-2017 - Added ability to record the last selected tab in the dialog.  This is //crlf//used by setTableDialogHeight() to restore the selected tab after resizing the height//crlf//of the dialog.//crlf////crlf//An ID is assigned to the item that was clicked.  These items will not have an ID by //crlf//default.  A parent item is determined based on the clicked item.  If the item is a td //crlf//in a tabbed dialog table\\comma\\ the parent will be the item containing the table.  The ID of //crlf//the clicked item and the value of aName\\comma\\ which is a pipe-delimited list of IDs to be //crlf//displayed\\comma\\ is recorded in the parent.  The setTableDialogHeight() function gets the //crlf//parent of the table when setting the dialog height and restores the active tab after //crlf//cycling through all of the tabs to set the height.//crlf////crlf//The selected tab is recorded in the parent node rather than in the table or the select //crlf//element because it must be shared between the two.  For example\\comma\\ selecting a tab in //crlf//a dialog should set the selected tab for the select element as well.  The selected tab //crlf//is actually stored in the parent node of the parent node because the tabbed dialog and //crlf//select box will each be wrapped in their own div.  Using the parent of the parent //crlf//causes the value to be stored in a shared element.//crlf//******************************************************************************///crlf//function showTab(eClicked\\comma\\aName\\comma\\InitializeTab) //crlf//{//crlf////tab////add an ID to the clicked control if it doesn't have one//crlf////tab//if(!eClicked.id) eClicked.id=getSalt(6);//crlf////tab//var eClickedParent=null;//crlf////crlf////tab////appendToLog(\\quot\\showTab: \\quot\\+eClicked+\\quot\\ Name: \\quot\\+aName);//crlf////tab//if((eClicked.nodeName.equalsIgnoreCase(\\quot\\a\\quot\\)) ~~pipe~~~~pipe~~ (eClicked.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\)))//crlf////tab//{//crlf////tab////tab////get the table the hyperlink belongs to//crlf////tab////tab//var eTable=null;//crlf////tab////tab//var eDiv=null;//crlf////tab////tab//var e=eClicked.parentNode;//crlf////tab////tab//while ((e) //amp////amp// (!eTable) //amp////amp// (!eDiv)) {//crlf////tab////tab////tab//if(e.nodeName.equalsIgnoreCase(\\quot\\table\\quot\\)) eTable=e;//crlf////tab////tab////tab//if(e.nodeName.equalsIgnoreCase(\\quot\\div\\quot\\)) eDiv=e;//crlf////tab////tab////tab//e=e.parentNode;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//if((!eTable) //amp////amp// (!eDiv)) {//crlf////tab////tab////tab//appendToLog(\\quot\\Cannot locate table containing tabs or div containing menu\\quot\\);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////crlf////tab////tab//if(eTable)//crlf////tab////tab//{//crlf////tab////tab////tab////record the selected tab in the parent of the table//crlf////tab////tab////tab//eClickedParent=eTable.parentNode.parentNode;//crlf////tab////tab////tab//eClickedParent.setAttribute(\\quot\\SelectedTab\\quot\\\\comma\\eClicked.id);//crlf////tab////tab////tab//eClickedParent.setAttribute(\\quot\\SelectedTabIDs\\quot\\\\comma\\aName);//crlf////crlf////tab////tab////tab////hide all divs and set the font for the selected/unselected tabs//crlf////tab////tab////tab//var arTableRow=eTable.getElementsByTagName(\\quot\\tr\\quot\\);//crlf////tab////tab////tab//for (var i=0;i<arTableRow.length;i++) {//crlf////tab////tab////tab////tab//var arTableCell=arTableRow[i].getElementsByTagName(\\quot\\td\\quot\\);//crlf////tab////tab////tab////tab//for (var j=0;j<arTableCell.length;j++) {//crlf////tab////tab////tab////tab////tab//var arChild=arTableCell[j].childNodes;//crlf////tab////tab////tab////tab////tab//for (var k=0;k<arChild.length;k++) {//crlf////tab////tab////tab////tab////tab////tab//if ((arChild[k].nodeName.equalsIgnoreCase(\\quot\\A\\quot\\)) ~~pipe~~~~pipe~~ (arChild[k].nodeName.equalsIgnoreCase(\\quot\\SPAN\\quot\\)))//crlf////tab////tab////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab////tab////tab////hide all divs except the selected one//crlf////tab////tab////tab////tab////tab////tab////tab//var str1=String(arChild[k].onclick);//crlf////tab////tab////tab////tab////tab////tab////tab//var n1=str1.toUpperCase().indexOf(\\quot\\(THIS\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//var n2=str1.indexOf(\\quot\\)\\quot\\\\comma\\n1);//crlf////tab////tab////tab////tab////tab////tab////tab//var str2=str1.substring(n1+1\\comma\\n2);//crlf////tab////tab////tab////tab////tab////tab////tab//var arStr=getSubStringArray(str2\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab//var sTabs=replaceAllSubstrings(replaceAllSubstrings(arStr[1]\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\quot\\)\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//var arTabName=getSubStringArray(sTabs\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//for(var cTab=0;cTab<arTabName.length;cTab++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var bShow=((\\quot\\~~pipe~~\\quot\\+aName).toUpperCase().indexOf(\\quot\\~~pipe~~\\quot\\+arTabName[cTab].toUpperCase())>=0);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(arTabName[cTab].length>0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//setVisible(arTabName[cTab]\\comma\\bShow);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\setVisible: \\quot\\+arTabName[cTab]+\\quot\\ Show=\\quot\\+bShow+\\quot\\ Equals aName:\\quot\\+arTabName[cTab].equalsIgnoreCase(aName));//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(bShow) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eTable.setAttribute(\\quot\\SelectedTab\\quot\\\\comma\\sTabs);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(InitializeTab) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var s=\\quot\\loadContent\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var eTab=document.getElementById(arTabName[cTab]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eTab) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sInitialized=eTab.getAttribute(\\quot\\AspectTabInitialized\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if((!sInitialized) ~~pipe~~~~pipe~~ (!sInitialized.equalsIgnoreCase(\\quot\\true\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//loadContent(arTabName[cTab]\\comma\\\\quot\\InitializeTab=true\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//eTab.setAttribute(\\quot\\AspectTabInitialized\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab//setDialogTabStyle(arTableCell[j]\\comma\\arChild[k]\\comma\\arChild[k]==eClicked);//crlf////tab////tab////tab////tab////tab////tab////tab//if(false) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////set the font for the tab//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if (arChild[k]==eClicked) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arChild[k].style.color=\\quot\\black\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arChild[k].style.fontWeight=\\quot\\bold\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arTableCell[j].style.backgroundColor=\\quot\\//pound//48f\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arChild[k].style.color=\\quot\\black\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arChild[k].style.fontWeight=\\quot\\normal\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arTableCell[j].style.backgroundColor=\\quot\\//pound//bdf\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////Set the tabsinitialized flag.  This is for when a tab is selected manually before content has been fully loaded//crlf////tab////tab////tab////If it is not set\\comma\\ the table will keep defaulting back to the original tab//crlf////tab////tab////tab//eTable.setAttribute(\\quot\\tabsInitialized\\quot\\\\comma\\true);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////the control is a drop-down menu\\comma\\ so hide the menu and show the tab//crlf////tab////tab////tab//menuCloseAll();//crlf////tab////tab////tab//var arLink=eDiv.getElementsByTagName(\\quot\\a\\quot\\);//crlf////tab////tab////tab//for (var i=0;i<arLink.length;i++) {//crlf////tab////tab////tab////tab//var str1=String(arLink[i].onclick);//crlf////tab////tab////tab////tab//var n1=str1.toUpperCase().indexOf(\\quot\\SHOWTAB(\\quot\\);//crlf////tab////tab////tab////tab//var n2=str1.indexOf(\\quot\\)\\quot\\\\comma\\n1);//crlf////tab////tab////tab////tab//var str2=str1.substring(n1+8\\comma\\n2);//crlf////tab////tab////tab////tab//var arStr=getSubStringArray(str2\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab//var strTabName=replaceAllSubstrings(replaceAllSubstrings(arStr[1]\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\quot\\)\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab//setVisible(strTabName\\comma\\strTabName.equalsIgnoreCase(aName));//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//var arSpan=eDiv.getElementsByTagName(\\quot\\span\\quot\\);//crlf////tab////tab////tab//for (var i=0;i<arSpan.length;i++) {//crlf////tab////tab////tab////tab//var str1=String(arSpan[i].onclick);//crlf////tab////tab////tab////tab//var n1=str1.toUpperCase().indexOf(\\quot\\SHOWTAB(\\quot\\);//crlf////tab////tab////tab////tab//var n2=str1.indexOf(\\quot\\)\\quot\\\\comma\\n1);//crlf////tab////tab////tab////tab//var str2=str1.substring(n1+8\\comma\\n2);//crlf////tab////tab////tab////tab//var arStr=getSubStringArray(str2\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab//var strTabName=replaceAllSubstrings(replaceAllSubstrings(arStr[1]\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\quot\\)\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab//setVisible(strTabName\\comma\\strTabName.equalsIgnoreCase(aName));//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else if (eClicked.nodeName.equalsIgnoreCase(\\quot\\select\\quot\\)) //crlf////tab//{//crlf////tab////tab////the contol is a select box - so show the selected tab//crlf////crlf////tab////tab////record the selected tab in the parent of the table//crlf////tab////tab//eClickedParent=eClicked.parentNode.parentNode;//crlf////tab////tab//eClickedParent.setAttribute(\\quot\\SelectedTab\\quot\\\\comma\\eClicked.id);//crlf////tab////tab//eClickedParent.setAttribute(\\quot\\SelectedTabIDs\\quot\\\\comma\\eClicked.value);//crlf////crlf////tab////tab//for (var i=0;i<eClicked.options.length;i++) {//crlf////tab////tab////tab//if(eClicked.options[i].value.length>0) {//crlf////tab////tab////tab////tab//var arTabName=getSubStringArray(replaceAllSubstrings(replaceAllSubstrings(eClicked.options[i].value\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\quot\\)\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\quot\\)\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab////tab////tab////tab//for(var cTab=0;cTab<arTabName.length;cTab++) {//crlf////tab////tab////tab////tab////tab//if(arTabName[cTab].length>0) {//crlf////tab////tab////tab////tab////tab////tab//var e=document.getElementById(arTabName[cTab]);//crlf////tab////tab////tab////tab////tab////tab//if(e) {//crlf////tab////tab////tab////tab////tab////tab////tab////show/hide elements//crlf////tab////tab////tab////tab////tab////tab////tab//setVisible(e\\comma\\eClicked.options[i].selected);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//makeScrollingTable();//crlf//};//crlf//^
ID=270967|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************************************//crlf//XMLHTTPREQUEST FUNCTIONS//crlf//******************************************************************************************************///crlf//function getxmlHttpRequestObject()//crlf//{//crlf////tab//var req=false;//crlf////crlf////tab//// For Safari\\comma\\ Firefox\\comma\\ and other non-MS browsers//crlf////tab//if (window.XMLHttpRequest) {//crlf////tab////tab//try {req=new XMLHttpRequest();} //crlf////tab////tab//catch (e) {req=false;}//crlf////tab//} //crlf////tab//else if (window.ActiveXObject) {//crlf////tab////tab//// For Internet Explorer on Windows//crlf////tab////tab//try {//crlf////tab////tab////tab//req=new ActiveXObject(\\quot\\Msxml2.XMLHTTP\\quot\\);//crlf////tab////tab//} //crlf////tab////tab//catch (e) {//crlf////tab////tab////tab//try {req=new ActiveXObject(\\quot\\Microsoft.XMLHTTP\\quot\\);} //crlf////tab////tab////tab//catch (e) {req=false;}//crlf////tab////tab//}//crlf////tab//}//crlf////tab////crlf////tab//return(req);//crlf//};//crlf////crlf////Executes a synchrounous request for content and returns the result.  This method waits until the content is received before returning.//crlf////The asynchInclude function can be used to make an asynchronous request.//crlf//function getxmlHttpRequest(url)//crlf//{//crlf////tab//var req=getxmlHttpRequestObject();//crlf////crlf////tab//if (req) {//crlf////tab////tab//var strUrl=url;//crlf////tab////tab//if(strUrl.indexOf(\\quot\\127.0.0.1\\quot\\)>=0) {//crlf////tab////tab////tab//strUrl +=\\quot\\//amp//random=\\quot\\+Math.floor(Math.random()*99999999);//crlf////tab////tab////tab//strUrl +=\\quot\\//amp//HashID={AspectHashID}\\quot\\;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//try {//crlf////tab////tab////tab//req.open('GET'\\comma\\strUrl\\comma\\false);//crlf////crlf////tab////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)<0) {//crlf////tab////tab////tab////tab////req.timeout=60000; //not recognized by IE (IE6 at least)//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab////chrome doesn't like accept-encoding//crlf////tab////tab////tab//if(getBrowserUserAgent().toUpperCase().indexOf(\\quot\\CHROME\\quot\\)<0) {//crlf////tab////tab////tab////tab////neither does firefox//crlf////tab////tab////tab////tab//var isFirefox=typeof InstallTrigger !=='undefined';//crlf////tab////tab////tab////tab//if(!isFirefox) req.setRequestHeader(\\quot\\Accept-Encoding\\quot\\\\comma\\\\quot\\gzip\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab////tab//req.send(null);//crlf////tab////tab////tab//return(req.responseText);//crlf////tab////tab//}//crlf////tab////tab//catch(e) {//crlf////tab////tab////tab////A false error is returned when a display is deleted.  Don't show an alert until this is worked out.  //crlf////tab////tab////tab////alert(\\quot\\Error getting request. [\\quot\\+e+\\quot\\]\nPlease refresh the page and try again.\\quot\\);//crlf////tab////tab////tab//return(\\quot\\\\quot\\);//crlf////tab////tab//};//crlf////tab//} //crlf////tab//else {//crlf////tab////tab//alert(\\quot\\Error getting request.  Please refresh the page and try again.\\quot\\);//crlf////tab////tab//return(\\quot\\\\quot\\);//crlf////tab//}//crlf////tab////crlf////tab//return(\\quot\\Error in getxmlHttpRequest: \\quot\\+url);//crlf//};//crlf////crlf///************************************************************************//crlf////tab//Using asynchInclue to return a result://crlf////tab////crlf////tab//Basically\\comma\\ this function calls itself again after the request is complete.//crlf////tab////crlf////tab//function myfunc(arg) {//crlf////tab////tab//if (!arg) {//crlf////tab////tab////tab//asynchInclude(null\\comma\\url\\comma\\\\quot\\myfunc(req.responseText)\\quot\\);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//alert(\\quot\\Results: \\quot\\+arg);//crlf////tab////tab//};//crlf////tab//};//crlf//************************************************************************///crlf////crlf////Entry for asynchInclude.  Used to allow recursion in asynchIncludesub so that an include can be tried a 2nd time if an empty string is returned//crlf//function asynchInclude(element\\comma\\url\\comma\\func\\comma\\errfunc) {//crlf////tab////for some reason\\comma\\ href=\\quot\\//pound//\\quot\\ gets mangled in firefox.  The //pound// symbol is replaced with a goofy url.  This prevents that from happening.//crlf////tab//var strUrl=replaceAllSubstrings(url\\comma\\\\quot\\href=\x22//pound//\x22\\quot\\\\comma\\\\quot\\href=\x22//pound//\x22\\quot\\);//crlf////tab//strUrl=replaceAllSubstrings(url\\comma\\\\quot\\href='//pound//'\\quot\\\\comma\\\\quot\\href='//pound//'\\quot\\);//crlf////tab////appendToLog(\\quot\\asynchInclude: \\quot\\+url);//crlf////crlf////tab////12-27-2016: added this dummy call before executing the actual call.  While working on the login script //crlf////tab////in Registration 2017\\comma\\ there were sometimes long delays processing the asynchinclude used to refresh the //crlf////tab////content after the first asynchinclude was called to submit the form data (login or logout).//crlf////tab////This did not seem to be a problem in Aspect.  Additional asynchinclude calls would be processed by Aspect //crlf////tab////while the login request was pending for 2 to 3 minutes.  Adding a dummy asynchinclude call seemed to //crlf////tab////solve the problem.  It may have something to do with the way the browser submits requests.//crlf////tab////crlf////tab////12-05-2017: Removed this call to asynchInclude because it generates a lot of traffic when customers are //crlf////tab////working remotely.  It may also increase the likelihood of too many active sockets in the browser.//crlf////tab////May still need to look into the original problem that led to adding it in the first place//crlf////tab////asynchIncludesub(0\\comma\\null\\comma\\getServer()+\\quot\\/?network=greenlight//amp//id=ping\\quot\\);//crlf////crlf////tab//asynchIncludesub(0\\comma\\element\\comma\\strUrl\\comma\\func\\comma\\errfunc);//crlf//};//crlf////crlf////Does an asynchronous request to set the content for the given element.  This method allows the content of an element to be set//crlf////without waiting for the server to return the content.  //crlf//function asynchIncludesub(count\\comma\\element\\comma\\url\\comma\\func\\comma\\errfunc)//crlf//{//crlf////tab//var req=getxmlHttpRequestObject();//crlf////crlf////tab////Post is used because long urls required to submit a container item to the Aspect server//crlf////tab////are truncated with get.  However\\comma\\ they are not truncated when the request is made to the local machine.//crlf////tab//var sMethod=\\quot\\post\\quot\\;//crlf////tab////crlf////tab//var sUserAgent=getBrowserUserAgent();//crlf////tab//var bSafari=(sUserAgent.toUpperCase().indexOf(\\quot\\SAFARI\\quot\\)>=0) ? true : false;//crlf////tab//var bChrome=(sUserAgent.toUpperCase().indexOf(\\quot\\CHROME\\quot\\)>=0) ? true : false;//crlf////tab////crlf////tab////appendToLog(\\quot\\sUserAgent=\\quot\\+sUserAgent);//crlf////tab////appendToLog(\\quot\\bSafari=\\quot\\+bSafari);//crlf////tab////Safari on IPOD doesn't seem to support Post method.  Throws errors on content-length and connection headers//crlf////tab//if(bSafari) {//crlf////tab////tab////06-19-2017 Disabled this because Chrome uses safari in the user-agent and processitem //crlf////tab////tab////requests are chopped off by the get method//crlf////tab////tab////if(sUserAgent.toUpperCase().indexOf(\\quot\\ANDROID\\quot\\)<0) sMethod=\\quot\\get\\quot\\; //crlf////tab//};//crlf////tab////crlf////tab//if (req) {//crlf////tab////tab////var strUrl=url+\\quot\\//amp//random=\\quot\\+Math.floor(Math.random()*99999999);//crlf////tab////tab////strUrl +=\\quot\\//amp//HashID={AspectHashID}\\quot\\;//crlf////tab////tab//var strUrl=url;//crlf////tab////tab//if(strUrl.indexOf(\\quot\\127.0.0.1\\quot\\)>=0) {//crlf////tab////tab////tab//strUrl +=\\quot\\//amp//random=\\quot\\+Math.floor(Math.random()*99999999);//crlf////tab////tab////tab//strUrl +=\\quot\\//amp//HashID={AspectHashID}\\quot\\;//crlf////tab////tab//};//crlf////crlf////tab////tab//strUrl=replaceAllSubstrings(strUrl\\comma\\'\n'\\comma\\'');//crlf////tab////tab//strUrl=replaceAllSubstrings(strUrl\\comma\\'\r'\\comma\\'');//crlf////tab////tab//strUrl=replaceAllSubstrings(strUrl\\comma\\'\t'\\comma\\'');//crlf////tab////tab////crlf////tab////tab////01-2017.  Add cookie.  This is done to pass session information to the server//crlf////tab////tab////to confirm that the session is valid//crlf////tab////tab//strUrl +=\\quot\\//amp//cookie=session=\\quot\\+getCookie(\\quot\\session\\quot\\)+\\quot\\;webid=\\quot\\+getCookie(\\quot\\webid\\quot\\);//crlf////crlf////tab////tab//var n=strUrl.indexOf(\\quot\\?\\quot\\);//crlf////tab////tab//if(n<1) alert(\\quot\\Error getting host and params in asynchInclude\\quot\\);//crlf////tab////tab//var sHost=strUrl.substring(0\\comma\\n-1);//crlf////tab////tab//var sParams=strUrl.substring(n+1);//crlf////tab////tab////appendToLog(\\quot\\sHost1=\\quot\\+sHost+\\quot\\ sParams=\\quot\\+sParams);//crlf////tab////tab//if((sHost.length<=1) ~~pipe~~~~pipe~~ (sHost.equalsIgnoreCase(\\quot\\_\\quot\\+\\quot\\_RequestServer__\\quot\\)) ~~pipe~~~~pipe~~ (sHost.equalsIgnoreCase(\\quot\\_\\quot\\+\\quot\\_SourceServer__\\quot\\))) sHost=getServer();//crlf////tab////tab////appendToLog(\\quot\\sHost2=\\quot\\+sHost);//crlf////tab////tab////alert(\\quot\\Host=\\quot\\+sHost+\\quot\\\nParams=\\quot\\+sParams);//crlf////tab////tab////appendToLog(\\quot\\asynchInclude: Method=\\quot\\+sMethod);//crlf////tab////tab////appendToLog(\\quot\\asynchInclude: \\quot\\+strUrl);//crlf////crlf////tab////tab////=====================================================================================================//crlf////tab////tab////02-23-2017: Added the AsynchIncludeID attribute to handle situations in which content is updated //crlf////tab////tab////multiple times.  A random value is recorded in the AsynchIncludeID attribute each time a call is //crlf////tab////tab////made to update content.  If the attribute has been changed by the time the content is received from //crlf////tab////tab////the server\\comma\\ then the element is not updated and will be updated by a subsequent call.  //crlf////tab////tab////=====================================================================================================//crlf////tab////tab//var sSalt=getSalt(4);//crlf////tab////tab//if(element) element.setAttribute(\\quot\\AsynchIncludeID\\quot\\\\comma\\sSalt);//crlf////tab////tab////crlf////tab////tab//req.onreadystatechange=function()//crlf////tab////tab//{ //crlf////tab////tab////tab//if(req.readyState==4) {//crlf////tab////tab////tab////tab//if (req.status==200) {//crlf////tab////tab////tab////tab////tab//var s=req.responseText;//crlf////tab////tab////tab////tab////tab//if (element!=null) {//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab//if ((s.length==0) //amp////amp// (count<5) //amp////amp// (url.toUpperCase().indexOf(\\quot\\REFRESHTABLEONINTERVAL=TRUE\\quot\\)<0)) {//crlf////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\asynchInclude failed.  Making attempt: \\quot\\+(count+2)\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab//asynchIncludesub(count+1\\comma\\element\\comma\\url\\comma\\func\\comma\\errfunc);//crlf////tab////tab////tab////tab////tab////tab////tab//return;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab//if(s.trim().length==0) {//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\asynchinclude request failed.  url=\\quot\\+url\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////set a flag indicating the item has been successfully updated.//crlf////tab////tab////tab////tab////tab////tab////tab//element.setAttribute(\\quot\\AspectASynchInclude\\quot\\\\comma\\new Date().getTime());//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////=====================================================================================================//crlf////tab////tab////tab////tab////tab////tab////02-23-2017: The content of the element is only updated if the AsynchIncludeID attribute of the element is still//crlf////tab////tab////tab////tab////tab////tab////the same as it was when the call was made to get the content.  If the attribute has changed\\comma\\ it means//crlf////tab////tab////tab////tab////tab////tab////another call has been made to update the element while the previous call was still being handled.//crlf////tab////tab////tab////tab////tab////tab////=====================================================================================================//crlf////tab////tab////tab////tab////tab////tab//if(element.getAttribute(\\quot\\AsynchIncludeID\\quot\\)==sSalt) {//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\asynchInclude updating content attr=\\quot\\+element.getAttribute(\\quot\\AsynchIncludeID\\quot\\)+\\quot\\ sSalt=\\quot\\+sSalt);//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\asynchInclude got \\quot\\+s.length+\\quot\\ bytes\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\s=\\quot\\+s.substring(0\\comma\\Math.min(128\\comma\\s.length)));//crlf////tab////tab////tab////tab////tab////tab////tab//element.innerHTML=replaceAllSubstrings(s\\comma\\\\quot\\__Request\\quot\\+\\quot\\Server__\\quot\\\\comma\\getServer());//crlf////tab////tab////tab////tab////tab////tab////tab//element.setAttribute(\\quot\\updating\\quot\\\\comma\\false);//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////=====================================================================================================//crlf////tab////tab////tab////tab////tab////tab////tab////02-23-2017: Previously\\comma\\ the following function calls were made regardless of whether there were//crlf////tab////tab////tab////tab////tab////tab////tab////subsequent calls being handled.  If the content of the element is being replaced by another successive//crlf////tab////tab////tab////tab////tab////tab////tab////call\\comma\\ it shouldn't be necessary to execute these functions.  Watch for special cases.  For example\\comma\\//crlf////tab////tab////tab////tab////tab////tab////tab////is it ever necessary to execute func every time the call is made?  Keep in mind that many calls will //crlf////tab////tab////tab////tab////tab////tab////tab////use a null element and this will not be a factor.  It is only a factor when content is being loaded //crlf////tab////tab////tab////tab////tab////tab////tab////into an element.//crlf////tab////tab////tab////tab////tab////tab////tab////=====================================================================================================//crlf////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////initialize tables if a table is included in the content.  This is necessary to initialize the//crlf////tab////tab////tab////tab////tab////tab////tab////dialog for a table.  Otherwise\\comma\\ the dialog will not be initialized if the table is hidden and //crlf////tab////tab////tab////tab////tab////tab////tab////the dialog is shown initially.//crlf////tab////tab////tab////tab////tab////tab////tab//if(s.toUpperCase().indexOf(\\quot\\ASPECTVER\\quot\\)>=0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\asynchInclude calling initializeTables2012()\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//initializeTables2012();//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////adjust the height of the dialog containing the element if there is one.  The adjustDialogHeight traverses the parent nodes\\comma\\ starting//crlf////tab////tab////tab////tab////tab////tab////tab////with element to see if element is contained in a dialog.  If it is\\comma\\ the dialog is resized if necessary to contain the updated content.//crlf////tab////tab////tab////tab////tab////tab////tab////For example\\comma\\ a dialog's height may be increased to contain a table that is loaded into the dialog after the dialog is initialized or//crlf////tab////tab////tab////tab////tab////tab////tab////when records are added to the table.//crlf////tab////tab////tab////tab////tab////tab////tab//adjustDialogHeight(element);//crlf////crlf////tab////tab////tab////tab////tab////tab////tab//addScripts();//crlf////tab////tab////tab////tab////tab////tab////tab//addStyles();//crlf////tab////tab////tab////tab////tab////tab////tab//addAnimations();//crlf////tab////tab////tab////tab////tab////tab////tab//if (func) eval(func);//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\asynchInclude not updating content attr=\\quot\\+element.getAttribute(\\quot\\AsynchIncludeID\\quot\\)+\\quot\\ sSalt=\\quot\\+sSalt);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//if (func) eval(func);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////Remember: Browser security prevents request across different domains//crlf////tab////tab////tab////tab////tab//if((count<5) //amp////amp// (url.toUpperCase().indexOf(\\quot\\REFRESHTABLEONINTERVAL=TRUE\\quot\\)<0)) {//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\asynchInclude failed.  Making attempt: \\quot\\+(count+2)\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//asynchIncludesub(count+1\\comma\\element\\comma\\url\\comma\\func\\comma\\errfunc);//crlf////tab////tab////tab////tab////tab////tab//return;//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////alert(\\quot\\asynchInclude error: \\quot\\+req.status+\\quot\\ url: \\quot\\+strUrl);//crlf////tab////tab////tab////tab////tab//if (element!=null) {//crlf////tab////tab////tab////tab////tab////tab//element.setAttribute(\\quot\\updating\\quot\\\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab//element.setAttribute(\\quot\\counter\\quot\\\\comma\\60);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//if (errfunc) eval(errfunc);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//}; //crlf////tab////tab////crlf////tab////tab//try {//crlf////tab////tab////tab////appendToLog(\\quot\\asynchInclude opening connection to \\quot\\+sHost);//crlf////tab////tab////tab//if(sMethod==\\quot\\post\\quot\\) {//crlf////tab////tab////tab////tab//req.open('POST'\\comma\\sHost\\comma\\true);//crlf////tab////tab////tab////tab//req.setRequestHeader(\\quot\\Content-type\\quot\\\\comma\\ \\quot\\application/x-www-form-urlencoded\\quot\\);//crlf////tab////tab////tab////tab////req.setRequestHeader(\\quot\\Content-length\\quot\\\\comma\\sParams.length);//crlf////tab////tab////tab////tab////req.setRequestHeader(\\quot\\Connection\\quot\\\\comma\\ \\quot\\close\\quot\\);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//req.open('GET'\\comma\\strUrl\\comma\\ true);//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//catch(e) {//crlf////tab////tab////tab//if (errfunc) eval(errfunc);//crlf////tab////tab//};//crlf////crlf////tab////tab////chrome doesn't like accept-encoding//crlf////tab////tab//try {//crlf////tab////tab////tab////neither does firefox//crlf////tab////tab////tab//var isFirefox=typeof InstallTrigger !=='undefined';//crlf////tab////tab////tab//if((!isFirefox) //amp////amp// (bChrome==false) //amp////amp// (bSafari==false)) req.setRequestHeader(\\quot\\Accept-Encoding\\quot\\\\comma\\\\quot\\gzip\\quot\\);//crlf////tab////tab//}//crlf////tab////tab//catch(e) {//crlf////tab////tab////tab//appendToLog(\\quot\\Error setting encoding in request \\quot\\+e);//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//try {//crlf////tab////tab////tab//if(sMethod==\\quot\\post\\quot\\) {//crlf////tab////tab////tab////tab//req.send(sParams);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//req.send(null);//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//catch(e) {appendToLog(\\quot\\Error sending request: \\quot\\+e);};//crlf////tab//} //crlf////tab//else {//crlf////tab////tab//element.innerHTML=\\quot\\Sorry\\comma\\ your browser does not support XMLHTTPRequest objects. This page requires Internet Explorer 5 or better for Windows\\comma\\ or Firefox for any system\\comma\\ or Safari. Other compatible browsers may also exist.\\quot\\;//crlf////tab//}//crlf//};^
ID=130298|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//[!------------------------------------------------------------------------//crlf//Opens a faq in a new view.  Called by table menus to open a faq.//crlf//--------------------------------------------------------------------------]//crlf//function inspectFAQ(FaqID\\comma\\Dir\\comma\\Name\\comma\\FaqName) {//crlf////tab//var sParams=\\quot\\ViewID=sicv2e3W//amp//Dir=\\quot\\+Dir+\\quot\\//amp//name=\\quot\\+Name+\\quot\\//amp//ListType=faq//amp//taskID=\\quot\\+FaqID;//crlf////tab//if((Dir.toUpperCase().indexOf(\\quot\\SUPPORT\\quot\\)>=0) ~~pipe~~~~pipe~~ (Dir.toUpperCase().indexOf(\\quot\\BACKOFFICE\\quot\\)>=0)) {//crlf////tab////tab//sParams+=\\quot\\//amp//source={AspectServerHashID}\\quot\\;//crlf////tab//};//crlf////tab//openInspectWindow(FaqName\\comma\\sParams);//crlf//};//crlf////crlf//[!------------------------------------------------------------------------//crlf//Opens a procedure in a new view.  Called by table menus to open a procedure.//crlf//--------------------------------------------------------------------------]//crlf//function inspectProcedure(ProcedureID\\comma\\Dir\\comma\\Name\\comma\\ProcedureName) {//crlf////tab//var sParams=\\quot\\ViewID=sicv2e3W//amp//Dir=\\quot\\+Dir+\\quot\\//amp//name=\\quot\\+Name+\\quot\\//amp//ListType=procedure//amp//taskID=\\quot\\+ProcedureID;//crlf////tab//if((Dir.toUpperCase().indexOf(\\quot\\SUPPORT\\quot\\)>=0) ~~pipe~~~~pipe~~ (Dir.toUpperCase().indexOf(\\quot\\BACKOFFICE\\quot\\)>=0)) {//crlf////tab////tab//sParams+=\\quot\\//amp//source={AspectServerHashID}\\quot\\;//crlf////tab//};//crlf////tab//openInspectWindow(ProcedureName\\comma\\sParams);//crlf//};//crlf////crlf//[!------------------------------------------------------------------------//crlf//Plays a video in a new view.  Called by html created by the getVideoHyperlink() function.  //crlf//--------------------------------------------------------------------------]//crlf//function openVideoView(salt\\comma\\VideoID\\comma\\VideoTitle) {//crlf////tab//if(VideoID==\\quot\\0\\quot\\) return;//crlf////tab//var sTitle=VideoTitle;//crlf////tab//if(!sTitle.toUpperCase().startsWith(\\quot\\VIDEO: \\quot\\)) sTitle=\\quot\\Video: \\quot\\+sTitle;//crlf////tab//openInspectWindow(sTitle\\comma\\\\quot\\ViewID=Sc3wxX77//amp//VideoID=\\quot\\+VideoID+\\quot\\//amp//VideoTitle=\\quot\\+sTitle);//crlf//};//crlf////crlf//[!------------------------------------------------------------------------//crlf//Plays a video created by the getVideoHyperlink() function.  //crlf//--------------------------------------------------------------------------]//crlf//function playVideo2017(salt\\comma\\VideoID\\comma\\VideoTitle) //crlf//{//crlf////tab//if(VideoID==\\quot\\0\\quot\\) return;//crlf////crlf////tab//var eVideoFrame=document.getElementById(salt+\\quot\\VideoFrame\\quot\\);//crlf////tab//if(!eVideoFrame) {//crlf////tab////tab//appendToLog(\\quot\\Error: Cannot locate video container: \\quot\\+salt+\\quot\\VideoFrame\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var eVideoContainer=document.getElementById(salt+\\quot\\VideoContainer\\quot\\);//crlf////crlf////tab////show the video player//crlf////tab//setVisible(salt+\\quot\\VideoFrame\\quot\\\\comma\\true);//crlf////crlf////tab//var eVideoSource=document.getElementById(salt+\\quot\\VideoSource\\quot\\);//crlf////tab////var sNewSrc=\\quot\\http://img.aspectserver.com/videos/\\quot\\+VideoID+\\quot\\.mp4\\quot\\;//crlf////tab//var sNewSrc=\\quot\\http://{AspectServerIP1a}/videos/\\quot\\+VideoID+\\quot\\.mp4\\quot\\;//crlf////tab//var sCurrentSrc=eVideoSource.getAttribute(\\quot\\src\\quot\\);//crlf////tab//if(!sNewSrc.equalsIgnoreCase(sCurrentSrc)) {//crlf////tab////tab//eVideoSource.setAttribute(\\quot\\src\\quot\\\\comma\\sNewSrc);//crlf////tab////tab//eVideoContainer.load();//crlf////tab////tab//eVideoContainer.setAttribute(\\quot\\title\\quot\\\\comma\\VideoTitle);//crlf////tab////tab//eVideoContainer.setAttribute(\\quot\\VideoID\\quot\\\\comma\\VideoID);//crlf////tab////tab//initVideoListeners(eVideoContainer);//crlf////tab//};//crlf////crlf//};//crlf////crlf//function isMobileDevice()//crlf//{//crlf////tab//if(navigator.userAgent.toUpperCase().indexOf(\\quot\\MOBILE\\quot\\)>=0) return(true);//crlf////tab//if(navigator.userAgent.toUpperCase().indexOf(\\quot\\ANDROID\\quot\\)>=0) return(true);//crlf////tab//return(false);//crlf//};//crlf////crlf//[!------------------------------------------------------------------------//crlf//Returns true if the given element is a text input or any of the html5//crlf//input elements.  //crlf//--------------------------------------------------------------------------]//crlf//function isHTMLInput(e) {//crlf////tab//return((\\quot\\text\\comma\\password\\comma\\hidden\\comma\\color\\comma\\date\\comma\\datetime\\comma\\datetime-local\\comma\\email\\comma\\month\\comma\\number\\comma\\range\\comma\\search\\comma\\tel\\comma\\time\\comma\\url\\comma\\week\\comma\\\\quot\\.indexOf(e.type+\\quot\\\\comma\\\\quot\\)>=0));//crlf//};//crlf////crlf///******************************************************************************************************//crlf//DOCUMENT FUNCTIONS//crlf//******************************************************************************************************///crlf//function documentWidth() {//crlf////tab//var w=630;//crlf////crlf////tab//if (parseInt(navigator.appVersion)>3) {//crlf////tab////tab//if (navigator.appName==\\quot\\Netscape\\quot\\) w=window.innerWidth;//crlf////tab////tab//if (navigator.appName.indexOf(\\quot\\Microsoft\\quot\\)!=-1) w=document.body.offsetWidth;//crlf////tab//};//crlf////tab////crlf////tab//return(w);//crlf//};//crlf////crlf//function documentHeight() {//crlf////tab//var h=460;//crlf////crlf////tab//if (parseInt(navigator.appVersion)>3) {//crlf////tab////tab//if (navigator.appName==\\quot\\Netscape\\quot\\) h=window.innerHeight;//crlf////tab////tab//if (navigator.appName.indexOf(\\quot\\Microsoft\\quot\\)!=-1) h=document.body.offsetHeight;//crlf////tab//};//crlf////crlf////tab//return(h);//crlf//};//crlf////crlf//function setInnerHtml(strID\\comma\\strValue)//crlf//{//crlf////tab//e=document.getElementById(strID);//crlf////tab//if (e) e.innerHTML=strValue;//crlf//};//crlf////crlf//function getBrowserCodeName() {//crlf////tab//return(navigator.appCodeName);//crlf//};//crlf////crlf//function getBrowserName() {//crlf////tab//return(navigator.appName);//crlf//};//crlf////crlf//function getBrowserVersion() {//crlf////tab//return(navigator.appVersion);//crlf//};//crlf////crlf//function getBrowserCookiesEnabled() {//crlf////tab//return(navigator.cookieEnabled);//crlf//};//crlf////crlf//function getBrowserPlatform() {//crlf////tab//return(navigator.platform);//crlf//};//crlf////crlf//function getBrowserUserAgent() {//crlf////tab//return(navigator.userAgent);//crlf//};//crlf////crlf///*******************************************************************************//crlf//These two routines provide a replacement for setAttribute and getAttribute //crlf//which don't seem reliable in IE.//crlf////crlf//Compatibility is provided for setAttribute and getAttribute.  For example\\comma\\//crlf//calling getAttr will return the same value as getAttribute unless a value//crlf//has been recorded by setAttr.  This allows the two original routines to //crlf//be replaced with the new ones without breaking existing code.//crlf////crlf//A unique identifier is created for the element by assigning it an ID if it//crlf//does not already have one.  //crlf////crlf//Unfortunately\\comma\\ IE does not support prototyping of elements either.  So//crlf//the functions are done again without prototyping.//crlf//*******************************************************************************///crlf///*//crlf//Element.prototype._setAttr=function(akey\\comma\\avalue) {//crlf////tab//if(!this.id) this.id=getSalt(6);//crlf////tab//hashPut(this.id+\\quot\\:\\quot\\+akey\\comma\\avalue);//crlf//};//crlf////crlf//Element.prototype._getAttr=function(akey) {//crlf////tab//if(!this.id) return(this.getAttribute(akey));//crlf////tab//var o=hashGet(this.id+\\quot\\:\\quot\\+akey);//crlf////tab//if(o) return(o);//crlf////tab//return(this.getAttribute(akey));//crlf//};//crlf//*///crlf//function setAttr(e\\comma\\akey\\comma\\avalue) {//crlf////tab//if(!e.id) e.id=getSalt(6);//crlf////tab//hashPut(e.id+\\quot\\:\\quot\\+akey\\comma\\avalue);//crlf//};//crlf////crlf//function getAttr(e\\comma\\akey) {//crlf////tab//if(!e.id) return(e.getAttribute(akey));//crlf////tab//var o=hashGet(e.id+\\quot\\:\\quot\\+akey);//crlf////tab//if(o) return(o);//crlf////tab//return(e.getAttribute(akey));//crlf//};//crlf////crlf//function getViewportWidth() {//crlf////tab//// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight//crlf////tab//if (typeof window.innerWidth !='undefined') return(window.innerWidth);//crlf////crlf////tab//// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)//crlf////tab//if (typeof document.documentElement !='undefined' //amp////amp// typeof document.documentElement.clientWidth !=//crlf////tab// 'undefined' //amp////amp// document.documentElement.clientWidth !=0) return(document.documentElement.clientWidth);//crlf////crlf////tab//// older versions of IE//crlf////tab//return(document.getElementsByTagName('body')[0].clientWidth);//crlf//};//crlf////crlf//function getViewportHeight() {//crlf////tab//// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight//crlf////tab//if (typeof window.innerHeight !='undefined') return(window.innerHeight);//crlf////crlf////tab//// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)//crlf////tab//if (typeof document.documentElement !='undefined' //amp////amp// typeof document.documentElement.clientWidth !=//crlf////tab// 'undefined' //amp////amp// document.documentElement.clientHeight !=0) return(document.documentElement.clientHeight);//crlf////crlf////tab//// older versions of IE//crlf////tab//return(document.getElementsByTagName('body')[0].clientHeight);//crlf//};//crlf////crlf//function getViewportSize() {//crlf////tab//// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight//crlf////tab//if (typeof window.innerWidth !='undefined') return(window.innerHeight);//crlf////crlf////tab//// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)//crlf////tab//if (typeof document.documentElement !='undefined' //amp////amp// typeof document.documentElement.clientWidth !=//crlf////tab// 'undefined' //amp////amp// document.documentElement.clientWidth !=0) return(document.documentElement.clientHeight);//crlf////crlf////tab//// older versions of IE//crlf////tab//return(document.getElementsByTagName('body')[0].clientHeight);//crlf//};//crlf////crlf///*************************************************************************************//crlf//Returns the name of the currently selected option in the given select element//crlf//**************************************************************************************///crlf//function getOptionName(eSelect) {//crlf////tab//if(!eSelect) return(\\quot\\\\quot\\);//crlf////tab//for (var i=0;i<eSelect.options.length;i++) {//crlf////tab////tab//if (eSelect.options[i].value.equalsIgnoreCase(eSelect.value)) return(eSelect.options[i].innerHTML);//crlf////tab//};//crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf//function getOptions(eSelect) {//crlf////tab//var s=\\quot\\\\quot\\;//crlf////tab//for(var i=0;i<eSelect.options.length;i++) {//crlf////tab////tab//if(i>0) s +=\\quot\\~~pipe~~\\quot\\;//crlf////tab////tab//s+=eSelect.options[i].value+\\quot\\=\\quot\\+eSelect.options[i].text;//crlf////tab//};//crlf////tab//return(s);//crlf//};//crlf////crlf//function sizeTextareaHeight(e) {//crlf////tab//var iStartRows=e.rows;//crlf////crlf////tab//while ((e.rows > 1) //amp////amp// (e.scrollHeight < e.offsetHeight)) e.rows--;//crlf////tab////crlf////tab//var h=0;//crlf////tab//while ((e.scrollHeight > e.offsetHeight) //amp////amp// (h!==e.offsetHeight)) {//crlf////tab////tab//h=e.offsetHeight;//crlf////tab////tab//e.rows++;//crlf////tab//}//crlf////tab////crlf////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)>=0) e.rows++;//crlf////crlf////tab//if(e.rows!=iStartRows) positionItems();//crlf//};//crlf////crlf///******************************************************************************//crlf//Enables or disables all elements in the given element.  //crlf//e//tab//- the element containing the elements to be enabled or disabled.  //crlf//b //tab//- true/false to enable or disable the elements.  //crlf//types- optional comma-delimited string indicating the types of elements to be affected//crlf//******************************************************************************///crlf//function enableElements(e\\comma\\b\\comma\\types) { //crlf////tab//var arType=getSubStringArray(\\quot\\input\\comma\\select\\comma\\textarea\\comma\\button\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//if(types) arType=getSubStringArray(\\quot\\input\\comma\\select\\comma\\textarea\\comma\\button\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////crlf////tab//for (var i=0;i<arType.length;i++) {//crlf////tab////tab//var arElements=e.getElementsByTagName(arType[i]); //crlf////tab////tab//for (var j=0; j<arElements.length; j++) { //crlf////tab////tab////tab//arElements[j].disabled=(b==false);//crlf////tab////tab//};//crlf////tab//};//crlf//}//tab////crlf////crlf//var arHashKey=new Array();//crlf//var arHashValue=new Array();//crlf////crlf///*******************************************************************************//crlf//Adds a value to the hashtable.  The key must be a string.  The value may//crlf//be any type.//crlf//*******************************************************************************///crlf//function hashPut(akey\\comma\\avalue) {//crlf////tab//var n=arHashKey.indexOf(akey);//crlf////tab//if(n<0) n=arHashKey.length;//crlf////tab//arHashKey[n]=akey;//crlf////tab//arHashValue[n]=avalue;//crlf////tab//return(akey);//crlf//};//crlf////crlf///*******************************************************************************//crlf//Retrieves a value from the hashtable//crlf//*******************************************************************************///crlf//function hashGet(akey) {//crlf////tab//var n=arHashKey.indexOf(akey);//crlf////tab//if(n<0) return(null);//crlf////tab//return(arHashValue[n]);//crlf//};//crlf////crlf//function setWrap(e\\comma\\b)//crlf//{//crlf////tab//if (e.wrap) {//crlf////tab////tab//(b) ? e.wrap=\\quot\\hard\\quot\\ : e.wrap=\\quot\\off\\quot\\;//crlf////tab//} else { // wrap attribute not supported - try Mozilla workaround//crlf////tab////tab//(b) ? e.setAttribute(\\quot\\wrap\\quot\\\\comma\\\\quot\\hard\\quot\\) : e.setAttribute(\\quot\\wrap\\quot\\\\comma\\\\quot\\off\\quot\\);//crlf////tab////tab//var e2=e.cloneNode(true);//crlf////tab////tab//e2.value=e.value;//crlf////tab////tab//e.parentNode.replaceChild(e2\\comma\\e);//crlf////tab//};//crlf//};//crlf////crlf///*************************************************************************************//crlf//Validates the value of a date input and formats the input according to the pattern//crlf//specified in the input or its parent element//crlf//*************************************************************************************///crlf//function validateDateInput(e) {//crlf////tab//var t=parseTime(e.value);//crlf////tab//var sPattern=e.getAttribute(\\quot\\pattern\\quot\\);//crlf////crlf////tab////if a pattern is not found\\comma\\ look in the parent node.  In tables\\comma\\ the pattern will//crlf////tab////be in the TD element and not the input element//crlf////tab//if(!sPattern) sPattern=e.parentNode.getAttribute(\\quot\\pattern\\quot\\);//crlf////crlf////tab//if(!sPattern) sPattern=\\quot\\MM-dd-yyyy HH:mm:ss\\quot\\;//crlf////tab//e.value=formatDate(t\\comma\\sPattern);//crlf//};//crlf////crlf///*************************************************************************************//crlf//Parses a time\\comma\\ allowing for HH:mm and HH:mm:ss strings//crlf//*************************************************************************************///crlf//function parseTime(s){//crlf////tab////get millisecond portion.  This is not parsed by javascript and needs to be added back here//crlf////tab////MM-dd-yyyy HH:mm:ss:SSS-0700//crlf////tab//var sParse=s;//crlf////tab//var Milliseconds=0;//crlf////tab//if(s.length>=23) {//crlf////tab////tab//Milliseconds=parseInt(s.substring(20\\comma\\23));//crlf////tab////tab//if(sParse.length>24) {//crlf////tab////tab////tab//sParse=replaceAllSubstrings(sParse.substring(0\\comma\\19)\\comma\\\\quot\\-\\quot\\\\comma\\\\quot\\/\\quot\\)+sParse.substring(23\\comma\\28);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//sParse=replaceAllSubstrings(sParse.substring(0\\comma\\19)\\comma\\\\quot\\-\\quot\\\\comma\\\\quot\\/\\quot\\);//crlf////tab////tab//};//crlf////tab////tab//var dt=new Date(Date.parse(sParse));//crlf////tab////tab//return(new Date(dt.getTime()+Milliseconds));//crlf////tab//};//crlf////crlf////tab////replace dash and backslash with forward slash //crlf////tab//sParse=replaceAllSubstrings(sParse\\comma\\\\quot\\-\\quot\\\\comma\\\\quot\\/\\quot\\);//crlf////tab//sParse=replaceAllSubstrings(sParse\\comma\\\\quot\\\x5C\\quot\\\\comma\\\\quot\\/\\quot\\);//crlf////tab//sParse=sParse.trim();//crlf////crlf////tab//var sDate=\\quot\\12/31/1969\\quot\\;//crlf////tab//var sTime=\\quot\\00:00\\quot\\;//crlf////crlf////tab//if(sParse.indexOf(\\quot\\ \\quot\\)>0) {//crlf////tab////tab////it's a date and time //crlf////tab////tab//var n=sParse.indexOf(\\quot\\ \\quot\\);//crlf////tab////tab//sDate=sParse.substring(0\\comma\\n);//crlf////tab////tab//sTime=sParse.substring(n+1);//crlf////crlf////tab////tab//if(sDate.length==8) {//crlf////tab////tab////it's a date - MMddyyyy//crlf////tab////tab////tab//sDate=sDate.substring(0\\comma\\2)+\\quot\\/\\quot\\+sDate.substring(2\\comma\\4)+\\quot\\/\\quot\\+sDate.substring(4);//crlf////tab////tab//}//crlf////tab////tab//else if(sDate.length==4) {//crlf////tab////tab////tab////it's a date - MMdd//crlf////tab////tab////tab//sDate=sDate.substring(0\\comma\\2)+\\quot\\/\\quot\\+sDate.substring(2)+\\quot\\/\\quot\\+new Date().getFullYear();//crlf////tab////tab//}//crlf////crlf////tab////tab////see if there is only one slash or two//crlf////tab////tab//var n1=sDate.indexOf(\\quot\\/\\quot\\);//crlf////tab////tab//var n2=sDate.indexOf(\\quot\\/\\quot\\\\comma\\n1+1);//crlf//appendToLog(\\quot\\parseTime sDate=\\quot\\+sDate+\\quot\\ n1=\\quot\\+n1+\\quot\\ n2=\\quot\\+n2);//crlf////tab////tab//if(n2<0) {//crlf////tab////tab////tab////if only one slash (MM/dd) add the year//crlf////tab////tab////tab//sDate=sDate.substring(0\\comma\\n1)+\\quot\\/\\quot\\+sDate.substring(n1+1)+\\quot\\/\\quot\\+new Date().getFullYear();//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////check for 2 digit year.  The first slash must be in position n=2 to avoid //crlf////tab////tab////tab////including yyyy/mm/dd format in these lines.//crlf////tab////tab////tab//if(n1==2) {//crlf////tab////tab////tab////tab//sMonth=sDate.substring(0\\comma\\n1);//crlf////tab////tab////tab////tab//sDay=sDate.substring(n1+1\\comma\\n2);//crlf////tab////tab////tab////tab//sYear=sDate.substring(n2+1);//crlf////tab////tab////tab////tab//if(sYear.length==2) {//crlf////tab////tab////tab////tab////tab//sYear=new Date().getFullYear().toString().substring(0\\comma\\2)+sYear;//crlf////tab////tab////tab////tab////tab//sDate=sMonth+\\quot\\/\\quot\\+sDay+\\quot\\/\\quot\\+sYear;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else if(sParse.indexOf(\\quot\\/\\quot\\)>0) {//crlf////tab////tab////it's a date only//crlf////tab////tab//sDate=sParse;//crlf////crlf////tab////tab////see if it's in yyyy-MM-dd format//crlf////tab////tab//if(sDate.charAt(4)==\\quot\\/\\quot\\) {//crlf////tab////tab////tab////if a two digit year was entered\\comma\\ it will start with 00.  Convert it to a four digit year.//crlf////tab////tab////tab//var sYear=sDate.substring(0\\comma\\4);//crlf////tab////tab////tab//if(sYear.startsWith(\\quot\\00\\quot\\)) {//crlf////tab////tab////tab////tab//sYear=\\quot\\20\\quot\\+sYear.substring(2);//crlf////tab////tab////tab//};//crlf////tab////tab////tab//sDate=sDate.substring(5)+\\quot\\/\\quot\\+sYear;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////see if there is only one slash or two//crlf////tab////tab////tab//var n1=sParse.indexOf(\\quot\\/\\quot\\);//crlf////tab////tab////tab//var n2=sParse.indexOf(\\quot\\/\\quot\\\\comma\\n1+1);//crlf////tab////tab////tab//if(n2<0) {//crlf////tab////tab////tab////tab////if only one slash (MM/dd) add the year//crlf////tab////tab////tab////tab//sDate=sDate.substring(0\\comma\\n1)+\\quot\\/\\quot\\+sDate.substring(n1+1)+\\quot\\/\\quot\\+new Date().getFullYear();//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab////check for 2 digit year//crlf////tab////tab////tab////tab//sMonth=sDate.substring(0\\comma\\n1);//crlf////tab////tab////tab////tab//sDay=sDate.substring(n1+1\\comma\\n2);//crlf////tab////tab////tab////tab//sYear=sDate.substring(n2+1);//crlf////tab////tab////tab////tab//if(sYear.length==2) {//crlf////tab////tab////tab////tab////tab//sYear=new Date().getFullYear().toString().substring(0\\comma\\2)+sYear;//crlf////tab////tab////tab////tab////tab//sDate=sMonth+\\quot\\/\\quot\\+sDay+\\quot\\/\\quot\\+sYear;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else if(sParse.indexOf(\\quot\\:\\quot\\)>0) {//crlf////tab////tab////it's a time only//crlf////tab////tab//sTime=sParse;//crlf////tab//}//crlf////tab//else if(sParse.length==8) {//crlf////tab////tab////it's a date - MMddyyyy//crlf////tab////tab//sDate=sParse.substring(0\\comma\\2)+\\quot\\/\\quot\\+sParse.substring(2\\comma\\4)+\\quot\\/\\quot\\+sParse.substring(4);//crlf////tab//}//crlf////tab//else if(sParse.length==4) {//crlf////tab////tab////it's a date - MMdd//crlf////tab////tab//sDate=sParse.substring(0\\comma\\2)+\\quot\\/\\quot\\+sParse.substring(2)+\\quot\\/\\quot\\+new Date().getFullYear();//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////the format is invalid//crlf////tab////tab//return(new Date(0));//crlf////tab//};//crlf////tab////crlf////tab//appendToLog(\\quot\\parsing \\quot\\+sDate+\\quot\\ \\quot\\+sTime);//crlf////tab//printStackTrace();//crlf////tab//var dt=new Date(Date.parse(sDate+\\quot\\ \\quot\\+sTime));//crlf////tab//if (isNaN(dt)) dt=new Date();//crlf////tab//return(new Date(dt.getTime()));//crlf//};//crlf////crlf//function oldparseTime(s){//crlf////tab//if((s.length==5) //amp////amp// (s.charAt(2)==\\quot\\:\\quot\\)) {//crlf////tab////tab//s=\\quot\\12/31/1969 \\quot\\+s+\\quot\\:00\\quot\\;//crlf////tab//}//crlf////tab//else if((s.length==8) //amp////amp// (s.charAt(2)==\\quot\\:\\quot\\)) {//crlf////tab////tab//s=\\quot\\12/31/1969 \\quot\\+s;//crlf////tab//};//crlf////tab//return(new Date(Date.parse(s)));//crlf//};//crlf////crlf//function isNumberField(FieldType) {//crlf////tab//if((FieldType==2) ~~pipe~~~~pipe~~ (FieldType==4) ~~pipe~~~~pipe~~ (FieldType==5) ~~pipe~~~~pipe~~ (FieldType==6) ~~pipe~~~~pipe~~ (FieldType==7) ~~pipe~~~~pipe~~ (FieldType==8) ~~pipe~~~~pipe~~ (FieldType==9) ~~pipe~~~~pipe~~ (FieldType==12)) return(true);//crlf////tab//return(false);//crlf//};//crlf////crlf//function isTimeField(FieldType) {//crlf////tab//if((FieldType==10) ~~pipe~~~~pipe~~ (FieldType==13) ~~pipe~~~~pipe~~ (FieldType==18) ~~pipe~~~~pipe~~ (FieldType==21)) return(true);//crlf////tab//return(false);//crlf//};//crlf////crlf///******************************************************************************************************//crlf//MISCELLANEOUS UTILITIES//crlf//******************************************************************************************************///crlf////Returns a property for the border of the given element.  //crlf////sborder is top\\comma\\ left\\comma\\ right or bottom//crlf////sprop is width\\comma\\ style or color.  \\quot\\px\\quot\\ is removed from the width in the return value//crlf//function getBorderProperty(e\\comma\\sborder\\comma\\sprop) {//crlf////tab//if(sborder.equalsIgnoreCase(\\quot\\top\\quot\\)) {//crlf////tab////tab//var s=e.style.borderTop;//crlf////tab//}//crlf////tab//else if(sborder.equalsIgnoreCase(\\quot\\left\\quot\\)) {//crlf////tab////tab//var s=e.style.borderLeft;//crlf////tab//}//crlf////tab//else if(sborder.equalsIgnoreCase(\\quot\\bottom\\quot\\)) {//crlf////tab////tab//var s=e.style.borderBottom;//crlf////tab//}//crlf////tab//else if(sborder.equalsIgnoreCase(\\quot\\right\\quot\\)) {//crlf////tab////tab//var s=e.style.borderRight;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//return(\\quot\\error\\quot\\);//crlf////tab//};//crlf////alert(\\quot\\border=\\quot\\+s);//tab////crlf////tab////Get array of properties.  Of course\\comma\\ they're in a different order in each browser (e.g. 1px solid //pound//ffffff or solid 1px //pound//ffffff//crlf////tab//var arString=getSubStringArray(s\\comma\\\\quot\\ \\quot\\\\comma\\true);//crlf////tab//if(arString!=null) {//crlf////tab////tab//if(sprop.equalsIgnoreCase(\\quot\\width\\quot\\)) {//crlf////tab////tab////tab//for (var i=0;i<arString.length;i++) {//crlf////tab////tab////tab////tab//if(arString[i].toUpperCase().indexOf(\\quot\\PX\\quot\\)>0) return(parseInt(replaceAllSubstrings(arString[i]\\comma\\\\quot\\px\\quot\\\\comma\\\\quot\\\\quot\\)));//crlf////tab////tab////tab//};//crlf////tab////tab////tab//return(\\quot\\error\\quot\\);//crlf////tab////tab//};//crlf////crlf////tab////tab//if(sprop.equalsIgnoreCase(\\quot\\style\\quot\\)) {//crlf////tab////tab////tab//for (var i=0;i<arString.length;i++) {//crlf////tab////tab////tab////tab//if((arString[i].toUpperCase().indexOf(\\quot\\PX\\quot\\)<0) //amp////amp// (arString[i].indexOf(\\quot\\//pound//\\quot\\)<0) //amp////amp// (arString[i].toUpperCase().indexOf(\\quot\\RGB\\quot\\)<0)) return(arString[i]);//crlf////tab////tab////tab//};//crlf////tab////tab////tab//return(\\quot\\error\\quot\\);//crlf////tab////tab//};//crlf////crlf////tab////tab//if(sprop.equalsIgnoreCase(\\quot\\color\\quot\\)) {//crlf////tab////tab////tab//for (var i=0;i<arString.length;i++) {//crlf////tab////tab////tab////tab//if((arString[i].toUpperCase().indexOf(\\quot\\RGB\\quot\\)>=0) ~~pipe~~~~pipe~~ (arString[i].indexOf(\\quot\\//pound//\\quot\\)>=0)) return(arString[i]);//crlf////tab////tab////tab//};//crlf////tab////tab////tab//return(\\quot\\error\\quot\\);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(\\quot\\error\\quot\\);//crlf//};//crlf////crlf///*//tab//Gets the xy position of an element relative to the body of the document *///crlf//function getPosition(e){//crlf////tab//var topValue=0\\comma\\leftValue=0;//crlf////tab//while(e){//crlf////tab////tab//leftValue+=e.offsetLeft;//crlf////tab////tab//topValue+=e.offsetTop;//crlf////tab////tab//e=e.offsetParent;//crlf////tab//}//crlf////tab//var arXY=new Array(leftValue\\comma\\topValue);//crlf////tab//return arXY;//crlf//};//crlf////crlf///*//tab//Gets the description associated with the selected option in a select input *///crlf//function getOptionDescription(strFormName\\comma\\strElementName)//crlf//{//crlf////tab//var e=document.forms[strFormName];//crlf////tab//if (e) {//crlf////tab////tab//e=document.forms[strFormName].elements[strElementName];//crlf////tab////tab//if (e) {//crlf////tab////tab////tab//for (var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab//if (e.options[i].value.equalsIgnoreCase(e.value)) return(e.options[i].innerHTML);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf///******************************************************************************//crlf//Adds a div on top of an element.  Used to disable controls in the element.//crlf//e//tab//-//tab//Element to which overlay will be added//crlf//ID//tab//-//tab//An optional ID to be given to the overlay.  This can be used to //crlf////tab////tab//remove the overlay.//crlf//******************************************************************************///crlf//function removeOverlay(el)//crlf//{//crlf////tab//var e=document.getElementById(el);//crlf////tab//if(!e) e=el;//crlf////tab//if(!e) return;//crlf////tab////crlf////tab//e.parentNode.removeChild(e);//crlf//};//crlf////crlf//function applyOverlay(el\\comma\\ID)//crlf//{//crlf////tab//var e=document.getElementById(el);//crlf////tab//if(!e) e=el;//crlf////tab//if(!e) {//crlf////tab////tab//appendToLog(\\quot\\Error in applyOverlay.  e is null\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//printStackTrace();//crlf////tab////tab//return;//crlf////tab//};//crlf////tab//var img=document.createElement(\\quot\\img\\quot\\);//crlf////tab//img.src=imgOverlay.src;//crlf////tab//img.style.position=\\quot\\absolute\\quot\\;//crlf////tab//img.style.left=\\quot\\0px\\quot\\;//crlf////tab//img.style.top=\\quot\\0px\\quot\\;//crlf////crlf////tab////modified 04-13-2013.  The intent is to add a new element at the start of the div containing the table//crlf////tab////and set the positionubg\\comma\\  The positioning of the overlay may be unpredictable if the positioning of the //crlf////tab////parent is not specified.//crlf////tab//var div=document.createElement(\\quot\\div\\quot\\);//crlf////tab//div.style.position=\\quot\\relative\\quot\\;//crlf////tab//e.insertBefore(div\\comma\\e.firstChild)//crlf////tab//var xy=getPosition2012(div\\comma\\\\quot\\absolute\\quot\\\\comma\\div);//crlf////tab//img.style.position=\\quot\\absolute\\quot\\;//crlf////tab//img.style.left=xy[0]+\\quot\\px\\quot\\;//crlf////tab//img.style.top=xy[1]+\\quot\\px\\quot\\;//crlf////crlf////tab//img.width=e.offsetWidth-2;//crlf////tab//img.height=e.offsetHeight-2;//crlf////tab////img.style.width=\\quot\\100\\percent\\\\quot\\;//crlf////tab////img.style.height=\\quot\\100\\percent\\\\quot\\;//crlf////tab////img.style.filter=\\quot\\alpha(opacity=50)\\quot\\;//crlf////tab////img.style.opacity=\\quot\\0.5\\quot\\;//crlf////tab//img.style.overflow=\\quot\\hidden\\quot\\;//crlf////tab//if(ID) div.id=ID;//crlf////crlf////tab////modified 04-13-2013.  The image is added to the new div instead of the table div//crlf////tab////e.appendChild(img);//crlf////tab//div.appendChild(img);//crlf////tab////crlf////tab//if(false) {//crlf////tab////tab//var d=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//if(ID) d.id=ID;//crlf////tab////tab//d.style.position=\\quot\\absolute\\quot\\;//crlf////tab////tab//d.style.left=\\quot\\0px\\quot\\;//crlf////tab////tab//d.style.top=\\quot\\0px\\quot\\;//crlf////tab////tab//d.style.background=\\quot\\//pound//eaeaea\\quot\\;//crlf////tab////tab//d.style.width=e.offsetWidth+\\quot\\px\\quot\\;//crlf////tab////tab//d.style.zIndex=\\quot\\98\\quot\\; //don't hide the message dialog with uses 99 as the z index.//crlf////tab////tab//d.style.height=e.offsetHeight+\\quot\\px\\quot\\;//crlf////tab////tab//d.style.opacity=\\quot\\0.5\\quot\\;//crlf////tab////tab//d.style.border=\\quot\\none\\quot\\;//crlf////tab////tab//d.style.margin=\\quot\\0px\\quot\\;//crlf////tab////tab//d.style.padding=\\quot\\0px\\quot\\;//crlf////tab////tab//d.style.overflow=\\quot\\hidden\\quot\\;//crlf////tab////tab//d.appendChild(img);//crlf////tab////tab//e.appendChild(d);//crlf////tab//};//crlf//};//crlf////crlf///*********************************************************************************//crlf//Clears the innerHTML of the given item and displays the status icon.  Used to //crlf//display the status icon when refreshing content of an element//crlf//*********************************************************************************///crlf//function showStatusIcon(aitem)//crlf//{//crlf////tab//var e=document.getElementById(aitem);//crlf////tab//if(!e) e=aitem;//crlf////tab//if(!e.nodeName) {//crlf////tab////tab//alert(\\quot\\Error in setVisible: \\quot\\+aitem);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//e.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab////var img=document.createElement(\\quot\\img\\quot\\);//crlf////tab////img.src=imageStatusActive.src;//crlf////tab////e.appendChild(img);//crlf////crlf////tab//var eProgress=document.createElement(\\quot\\progress\\quot\\);//crlf////tab//e.appendChild(eProgress);//crlf//};//crlf////crlf//function setElementValue(strElementID\\comma\\strValue)//crlf//{//crlf////tab//e=document.getElementById(strElementID);//crlf////tab//if (e) {//crlf////tab////tab//e.value=strValue;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//alert(\\quot\\Cannot locate element: \\quot\\+strElementID+\\quot\\ in setElementValue()\\quot\\);//crlf////tab//};//crlf//};//crlf////crlf///* Inserts a node after another  node *///crlf//function insertAfter( referenceNode\\comma\\ newNode ) {//crlf////tab//if(referenceNode==null) {//crlf////tab////tab//appendToLog(\\quot\\Error in insertAfter.  reference=null newNode=\\quot\\+newNode.ID);//crlf////tab////tab//printStackTrace();//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//if(referenceNode.parentNode) {//crlf////tab////tab//referenceNode.parentNode.insertBefore( newNode\\comma\\ referenceNode.nextSibling );//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//alert(\\quot\\Missing parent node when adding node \\quot\\+newNode.ID+\\quot\\ before: \\quot\\+referenceNode+\\quot\\\n\n\\quot\\+referenceNode.innerHTML);//crlf////tab//};//crlf//};//crlf////crlf////crlf///*//tab//Concatenates all elements in a form to create a string used to submit the form.  E.g. param1=value1//amp//param2=value2...//crlf////tab//The result does not include the server address or the /?//crlf////tab//One way this can be used it to submit a form to an Aspect script for processing without reloading the page.//crlf////tab//See the form named sendFilesForm in the Send Files widget in the Customer Support library for an example.//crlf//*///crlf//function getFormSubmissionUrl(f)//crlf//{//crlf////tab//var strUrl=\\quot\\\\quot\\;//crlf////tab//for (var i=0;i<f.elements.length;i++) {//crlf////tab////tab//if ((f.elements[i].name) //amp////amp// (f.elements[i].value) //amp////amp// ((f.elements[i].type!=\\quot\\button\\quot\\))) {//crlf////tab////tab////tab//if (f.elements[i].type=='checkbox') {//tab////crlf////tab////tab////tab////tab////don't submit checkboxes that aren't checked//crlf////tab////tab////tab////tab//if (f.elements[i].checked) strUrl=addElement(strUrl\\comma\\f.elements[i].name+\\quot\\=\\quot\\+tokenizeSpecialChars(f.elements[i].value\\comma\\true)\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//strUrl=addElement(strUrl\\comma\\f.elements[i].name+\\quot\\=\\quot\\+tokenizeSpecialChars(f.elements[i].value\\comma\\true)\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(strUrl);//crlf//};//crlf////tab////crlf///******************************************************************************//crlf//Returns a list of all child nodes belonging directly or indirectly to the given //crlf//parent.  arNodes must be initialized before the call.  //crlf//******************************************************************************///crlf//function getAllChildNodes(e\\comma\\arNodes)//crlf//{//crlf////tab//for(var i=0;i<e.childNodes.length;i++) {//crlf////tab////tab//var eChild=e.childNodes[i];//crlf////tab////tab//if(eChild.nodeName.indexOf(\\quot\\//pound//\\quot\\)<0) {//crlf////tab////tab////tab//arNodes[arNodes.length]=eChild;//crlf////tab////tab////tab//getAllChildNodes(eChild\\comma\\arNodes);//crlf////tab////tab//};//tab////tab////crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns a list of all input nodes (checkbox\\comma\\ select\\comma\\ text) belonging directly or indirectly to the given //crlf//parent.//crlf//******************************************************************************///crlf//function getAllInputNodes(e\\comma\\arNodes)//crlf//{//crlf////tab//for(var i=0;i<e.childNodes.length;i++) {//crlf////tab////tab//var eChild=e.childNodes[i];//crlf////tab////tab//if(eChild.nodeName.indexOf(\\quot\\//pound//\\quot\\)<0) {//crlf////tab////tab////tab////09-14-2016 Modified this to include all nodes with nodeName=INPUT to include html5 inputs like//crlf////tab////tab////tab////date and number//crlf////tab////tab////tab////if((eChild.type==\\quot\\checkbox\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\select-one\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\select-multiple\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\text\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\date\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\password\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\textarea\\quot\\)) {//crlf////tab////tab////tab//if((eChild.nodeName==\\quot\\INPUT\\quot\\)  ~~pipe~~~~pipe~~ (eChild.type==\\quot\\select-one\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\select-multiple\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\textarea\\quot\\)) {//crlf////tab////tab////tab////tab//arNodes[arNodes.length]=eChild;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//getAllInputNodes(eChild\\comma\\arNodes);//crlf////tab////tab////tab//};//crlf////tab////tab//};//tab////tab////crlf////tab//};//crlf//};//crlf////crlf//function setDimensions(e) {//crlf////tab//var bDebug=((e.id) //amp////amp// (e.id.equalsIgnoreCase(\\quot\\588702\\quot\\)));//crlf////tab//if((e.getAttribute(\\quot\\AutoWidth\\quot\\)) //amp////amp// (boolVal(e.getAttribute(\\quot\\AutoWidth\\quot\\)))) {//crlf////tab////tab//e.style.width=\\quot\\auto\\quot\\;//crlf////tab//};//crlf////tab//if((e.getAttribute(\\quot\\AutoHeight\\quot\\)) //amp////amp// (boolVal(e.getAttribute(\\quot\\AutoHeight\\quot\\)))) {//crlf////tab////tab//e.style.height=\\quot\\auto\\quot\\;//crlf////tab//};//crlf////crlf////tab//if (bDebug) appendToLog(e.id+\\quot\\ w1=\\quot\\+e.style.width+\\quot\\ h1=\\quot\\+e.style.height+\\quot\\ offsetw=\\quot\\+e.offsetWidth+\\quot\\ offseth=\\quot\\+e.offsetHeight);//crlf////tab////crlf////tab//if((e.offsetWidth>0) //amp////amp// (e.offsetHeight>0)) {//crlf////tab////tab//if(e.getAttribute(\\quot\\minwidth\\quot\\)) {//crlf////tab////tab////tab//var n=parseInt(e.getAttribute(\\quot\\minwidth\\quot\\));//crlf////tab////tab////tab//if((n>0) //amp////amp// (e.offsetWidth<n)) e.style.width=n+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab////tab//if(e.getAttribute(\\quot\\maxwidth\\quot\\)) {//crlf////tab////tab////tab//var n=parseInt(e.getAttribute(\\quot\\maxwidth\\quot\\));//crlf////tab////tab////tab//if((n>0) //amp////amp// (e.offsetWidth>n)) e.style.width=n+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab////tab//if(e.getAttribute(\\quot\\minheight\\quot\\)) {//crlf////tab////tab////tab//var n=parseInt(e.getAttribute(\\quot\\minheight\\quot\\));//crlf////tab////tab////tab//if((n>0) //amp////amp// (e.offsetHeight<n)) e.style.height=n+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab////tab//if(e.getAttribute(\\quot\\maxheight\\quot\\)) {//crlf////tab////tab////tab//var n=parseInt(e.getAttribute(\\quot\\maxheight\\quot\\));//crlf////tab////tab////tab//if((n>0) //amp////amp// (e.offsetHeight>n)) e.style.height=n+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//if (bDebug) appendToLog(e.id+\\quot\\ w2=\\quot\\+e.style.width+\\quot\\ h2=\\quot\\+e.style.height);//crlf//};//crlf//^
ID=768522|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf////======================================================================================================//crlf////Refreshes all span and div tags that have an interval and url defined.  Also initiates refreshing of tables that have an interval//crlf////specified.//crlf////======================================================================================================//crlf//var bRefreshWidgetsInitialized=false;//crlf////crlf//function refreshWidgets(bIsInitialized) {//crlf////crlf////tab////console.log(new Date()+\\quot\\ refreshWidgets bIsInitialized=\\quot\\+bIsInitialized);//crlf////crlf////tab//if(!bIsInitialized) {//crlf////tab////tab////this function has been called by the widget container and not by a timeout set in this function//crlf////tab////tab//if(!bRefreshWidgetsInitialized) {//crlf////tab////tab////tab////console.log(new Date()+\\quot\\ setTimeout1 for refreshWidgets\\quot\\);//crlf////tab////tab////tab//bRefreshWidgetsInitialized=true;//crlf////tab////tab////tab//setTimeout(\\quot\\refreshWidgets(true)\\quot\\\\comma\\10000);//crlf////tab////tab//};//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//if(bContainerLoaded==true) {//crlf////tab////tab////console.log(new Date()+\\quot\\ calling refreshWidgetsSub\\quot\\);//crlf////tab////tab//refreshWidgetsSub();//crlf////tab//};//crlf////crlf////tab////console.log(new Date()+\\quot\\ setTimeout2 for refreshWidgets\\quot\\);//crlf////tab//setTimeout(\\quot\\refreshWidgets(true)\\quot\\\\comma\\10000);//crlf//};//crlf////crlf//function refreshWidgetsSub() {//crlf////tab////enable refresh on interval for any tables that have an interval specified//crlf////tab//var arTable=document.getElementsByTagName(\\quot\\table\\quot\\);//crlf////tab//for(var i=0;i<arTable.length;i++) {//crlf////tab////tab//var bRefreshOnIntervalInitiated=false;//crlf////tab////tab//if(arTable[i].getAttribute(\\quot\\AspectRefreshOnIntervalInitiated\\quot\\)) {//crlf////tab////tab////tab//bRefreshOnIntervalInitiated=arTable[i].getAttribute(\\quot\\AspectRefreshOnIntervalInitiated\\quot\\).equalsIgnoreCase(\\quot\\true\\quot\\);//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//if(!bRefreshOnIntervalInitiated) {//crlf////tab////tab////tab//var iRefreshIntervalLocal=0;//crlf////tab////tab////tab//var iRefreshIntervalRemote=0;//crlf////tab////tab////tab//if(arTable[i].getAttribute(\\quot\\AspectRefreshInterval\\quot\\)) iRefreshIntervalLocal=parseInt(arTable[i].getAttribute(\\quot\\AspectRefreshInterval\\quot\\));//crlf////tab////tab////tab//if(arTable[i].getAttribute(\\quot\\AspectRefreshIntervalRemote\\quot\\)) iRefreshIntervalRemote=parseInt(arTable[i].getAttribute(\\quot\\AspectRefreshIntervalRemote\\quot\\));//crlf////tab////tab////tab////crlf////tab////tab////tab//if((iRefreshIntervalLocal>0) ~~pipe~~~~pipe~~ (iRefreshIntervalRemote>0)) {//crlf////tab////tab////tab////tab//var iActiveInterval=0;//crlf////tab////tab////tab////tab//var sActiveRefreshWhenHidden=false;//crlf////tab////tab////tab////tab//if(arTable[i].getAttribute(\\quot\\AspectHashID\\quot\\).equalsIgnoreCase(\\quot\\{AspectHashID}\\quot\\)) {//crlf////tab////tab////tab////tab////tab//iActiveInterval=iRefreshIntervalLocal*1000;//crlf////tab////tab////tab////tab////tab//sActiveRefreshWhenHidden=arTable[i].getAttribute(\\quot\\RefreshWhenHidden\\quot\\);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//iActiveInterval=iRefreshIntervalRemote*1000;//crlf////tab////tab////tab////tab////tab//sActiveRefreshWhenHidden=arTable[i].getAttribute(\\quot\\RefreshWhenHiddenRemote\\quot\\);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//if(iActiveInterval>0) {//crlf////tab////tab////tab////tab////tab//arTable[i].setAttribute(\\quot\\AspectActiveRefreshInterval\\quot\\\\comma\\iActiveInterval);//crlf////tab////tab////tab////tab////tab//arTable[i].setAttribute(\\quot\\AspectActiveRefreshWhenHidden\\quot\\\\comma\\sActiveRefreshWhenHidden);//crlf////tab////tab////tab////tab////tab//arTable[i].setAttribute(\\quot\\AspectRefreshOnIntervalInitiated\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab////tab////tab////tab//setTimeout(\\quot\\refreshTableOnInterval(\x22\\quot\\+arTable[i].id+\\quot\\\x22)\\quot\\\\comma\\iActiveInterval);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////see if an edit window is open and don't refresh if it is (this is for dialogs used to edit an item in a widget container)//crlf////tab//var arDiv=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for (var i=0;i<arDiv.length;i++) {//crlf////tab////tab//var strID=arDiv[i].getAttribute(\\quot\\ID\\quot\\);//crlf////tab////tab//if (strID) {//crlf////tab////tab////tab//if ((strID.toUpperCase().indexOf(\\quot\\EDITOVERLAY\\quot\\)>0) ~~pipe~~~~pipe~~ (strID.toUpperCase().indexOf(\\quot\\DELETEOVERLAY\\quot\\)>0)) {//crlf////tab////tab////tab////tab//if (arDiv[i].style.display.equalsIgnoreCase(\\quot\\block\\quot\\)) {//crlf////tab////tab////tab////tab////tab//intRefreshingWidgets--;//crlf////tab////tab////tab////tab////tab//if(intRefreshingWidgets<0) intRefreshingWidgets=0;//crlf////tab////tab////tab////tab////tab////Don't refresh too frequently because initializeTabbedDialogs() might be costly//crlf////tab////tab////tab////tab////tab//setTimeout(\\quot\\refreshWidgets()\\quot\\\\comma\\10000);//crlf////tab////tab////tab////tab////tab//return;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//var arTagNames=new Array(2);//crlf////tab//arTagNames[0]=\\quot\\span\\quot\\;//crlf////tab//arTagNames[1]=\\quot\\div\\quot\\;//crlf////tab////crlf////tab//var tNow=new Date().getTime();//crlf////tab////crlf////tab//for(var i=0;i<arTagNames.length;i++) {//crlf////tab////tab//var e=document.getElementsByTagName(arTagNames[i]);//crlf////tab////tab////appendToLog(\\quot\\refreshWidgets e.length=\\quot\\+e.length);//crlf////tab////tab//for (var j=0;j<e.length;j++) {//crlf////tab////tab////tab//var strUrl=e[j].getAttribute(\\quot\\url\\quot\\);//crlf////tab////tab////tab//if (strUrl) {//crlf////tab////tab////tab////crlf////tab////tab////tab////tab////check for any tables in the item and see if a dialog is opened for a table//crlf////tab////tab////tab////tab////Note:  This takes too long.  Can't initialize a list of dialog ID's one time//crlf////tab////tab////tab////tab////because they may change if new items are added to the page.  //crlf////tab////tab////tab////tab//var bDialogOpen=false;//crlf////tab////tab////tab////tab///*//crlf////tab////tab////tab////tab//var arTable=e[j].getElementsByTagName(\\quot\\table\\quot\\);//crlf////tab////tab////tab////tab//for(var k=0;k<arTable.length;k++) {//crlf////tab////tab////tab////tab////tab//var sDialogID=arTable[k].getAttribute(\\quot\\EditDialogID\\quot\\);//crlf////tab////tab////tab////tab////tab//if(sDialogID) {//crlf////tab////tab////tab////tab////tab////tab//var sDisplay=document.getElementById(sDialogID).style.display;//crlf////tab////tab////tab////tab////tab////tab//if((sDisplay) //amp////amp// (sDisplay.equalsIgnoreCase(\\quot\\block\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab//bDialogOpen=true;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//*///crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab//if(!bDialogOpen) {//crlf////tab////tab////tab////tab////tab//strUrl=replaceAllSubstrings(strUrl\\comma\\\\quot\\\n\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab//strUrl=replaceAllSubstrings(strUrl\\comma\\\\quot\\\r\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab//strUrl=replaceAllSubstrings(strUrl\\comma\\\\quot\\\t\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////crlf////tab////tab////tab////tab////tab//var intInterval=e[j].getAttribute(\\quot\\interval\\quot\\);//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////determine if the item is visible.  If not\\comma\\ only update if the interval is set to 0//crlf////tab////tab////tab////tab////tab//var bIsVisible=(e[j].offsetWidth>0)//crlf////console.log(\\quot\\refreshWidgetsSub bIsVisible=\\quot\\+bIsVisible+\\quot\\ intInterval=\\quot\\+intInterval);//crlf////tab////tab////tab////tab////tab////only update if an interval has been specified and if it's >=0//crlf////tab////tab////tab////tab////tab//if (((intInterval) //amp////amp// (intInterval>=0)) //amp////amp// ((bIsVisible) ~~pipe~~~~pipe~~ (intInterval=0)))//crlf////tab////tab////tab////tab////tab//{//crlf////console.log(\\quot\\getting url for ID: \\quot\\+e[j].id+\\quot\\ url=[\\quot\\+strUrl+\\quot\\]\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////if it's 0\\comma\\ set it to -1 so it's only updated one time and does not repeat//crlf////tab////tab////tab////tab////tab////tab//if(intInterval==0) e[j].setAttribute(\\quot\\interval\\quot\\\\comma\\\\quot\\-1\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab//var intCntr=e[j].getAttribute(\\quot\\counter\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//if (!intCntr) {//crlf////tab////tab////tab////tab////tab////tab////tab//e[j].setAttribute(\\quot\\counter\\quot\\\\comma\\\\quot\\0\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//intCntr=0;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab//var boolUpdating=e[j].getAttribute(\\quot\\updating\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Counter=\\quot\\+intCntr+\\quot\\ updating=\\quot\\+boolUpdating+\\quot\\ url=\\quot\\+strUrl);//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////NOTE: 10-08-2012 It looks like this function may be running twice because the //crlf////tab////tab////tab////tab////tab////tab////timeout is set to 10\\comma\\000 but it appears to be running twice that fast.//crlf////tab////tab////tab////tab////tab////tab////The counter is decremented by 5 instead of 10 below for now to account for it.//crlf////tab////tab////tab////tab////tab////tab//if((boolUpdating==null) ~~pipe~~~~pipe~~ (boolUpdating==\\quot\\false\\quot\\) ~~pipe~~~~pipe~~ (boolUpdating==false))//crlf////tab////tab////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab////tab////tab//if (intCntr<=0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var bShouldUpdate=true;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var LastUpdate=e[j].getAttribute(\\quot\\AspectASynchInclude\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(LastUpdate) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var tElapsed=(tNow-parseInt(LastUpdate))/1000;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(tElapsed<intInterval) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//bShouldUpdate=false;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////alert(\\quot\\aborting update because only \\quot\\+tElapsed+\\quot\\ seconds have elapsed of \\quot\\+intInterval+\\quot\\\nUrl=\\quot\\+strUrl);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////alert(\\quot\\Allowing update because \\quot\\+tElapsed+\\quot\\ seconds have elapsed of \\quot\\+intInterval+\\quot\\\nUrl=\\quot\\+strUrl);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(bShouldUpdate) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//e[j].setAttribute(\\quot\\counter\\quot\\\\comma\\intInterval);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//e[j].setAttribute(\\quot\\updating\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sFuncOk=\\quot\\initializeReport()\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sUrlFunc=e[j].getAttribute(\\quot\\urlfunc\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sUrlFunc) sFuncOk +=\\quot\\;\\quot\\+sUrlFunc;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sErrFunc=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sID=e[j].ID;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//asynchInclude(e[j]\\comma\\strUrl\\comma\\sFuncOk\\comma\\sFuncOk);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//intCntr-=10;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//e[j].setAttribute(\\quot\\counter\\quot\\\\comma\\intCntr);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//intCntr-=10;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//e[j].setAttribute(\\quot\\counter\\quot\\\\comma\\intCntr);//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//intCntr-=10;//crlf////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////if the item has been updating for x minutes\\comma\\ set the updating flag to false//crlf////tab////tab////tab////tab////tab////tab////tab////This is to correct a situation in which the updating flag is not cleared do to an undetermined error //crlf////tab////tab////tab////tab////tab////tab////tab////asynchInclude() sets the update flag to false so this should never happen but it has//crlf////tab////tab////tab////tab////tab////tab////tab//if(intCntr<-240) e[j].setAttribute(\\quot\\updating\\quot\\\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab//e[j].setAttribute(\\quot\\counter\\quot\\\\comma\\intCntr);//crlf////tab////tab////tab////tab////tab////tab////tab////alert(\\quot\\already updating\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////console.log(\\quot\\not updating ID: \\quot\\+e[j].id+\\quot\\ url=[\\quot\\+strUrl+\\quot\\]\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//^
ID=803322|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//var JavascriptVer=\\quot\\06.06.2019.02\\quot\\;//crlf////crlf//var PendingSubmissionBackgroundColor=\\quot\\//pound//f5f5a3\\quot\\//crlf////crlf//var imageStatusActive=new Image();//crlf//imageStatusActive.src=\\quot\\__RequestServer__/?Network=Greenlight//amp//ID=getImage//amp//filename={@replacesubstring(getToken(\\quot\\packageurl_aspect_software_net_core\\quot\\)\\comma\\\\quot\\\\\\quot\\\\comma\\\\quot\\/\\quot\\)}core/doc/images/StatusActive01.gif\\quot\\;//crlf////crlf//var imgOverlay=new Image();//crlf////imgOverlay.src=\\quot\\__RequestServer__/?Network=GreenLight//amp//ID=getImage//amp//filename=disableoverlay.png\\quot\\;//crlf//imgOverlay.src=getServer()+\\quot\\/?Network=GreenLight//amp//ID=getImage//amp//filename=disableoverlay.png\\quot\\;//crlf////crlf////This is set to true for mobile devices in TCacheWidget:initializeWidgetContainer()//crlf//var bIsMobileDevice=false;//crlf////crlf////Set by mergeList() in the widget container when all items have been loaded.  Used to avoid updating url's in refreshWidgets()//crlf////that are in processed items with the ID __processed before they have been moved to the actual item.//crlf//var bContainerLoaded=false;//crlf////crlf////crlf///******************************************************************************************************//crlf//INITIALIZATION FUNCTIONS//crlf//******************************************************************************************************///crlf//function aspectinit()//crlf//{//crlf////tab//refreshWidgets();//crlf////tab//initializeTabbedDialogs();//crlf////tab////crlf////tab////set unique identifier for this browser//crlf////tab//var s=getCookie(\\quot\\webid\\quot\\);//crlf////tab//if((!s) ~~pipe~~~~pipe~~ (s.trim().length==0)) {//crlf////tab////tab//setCookie(\\quot\\webid\\quot\\\\comma\\getSalt(6));//crlf////tab//};//crlf////crlf////tab//if(eval('typeof ga')==\\quot\\function\\quot\\) {//crlf////tab////tab//ga('set'\\comma\\'dimension3'\\comma\\getCookie(\\quot\\webid\\quot\\));//crlf////tab//};//crlf//};//crlf////crlf////crlf//^
ID=left_bar|X=0|Y=16|W=147|H=111|AutoHeight=true|AutoWidth=true|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=html|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=top_bar|AttachLeft=|AlignLeft=top_bar|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|^
ID=961525|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************************************//crlf//Cookie functions//crlf//******************************************************************************************************///crlf//function setCookie(name\\comma\\value\\comma\\exp_y\\comma\\exp_m\\comma\\exp_d\\comma\\path\\comma\\domain\\comma\\secure) {//crlf////tab//var sCookie=name + \\quot\\=\\quot\\ + escape(value);//crlf////crlf////tab//if (exp_y) {//crlf////tab////tab//var expires=new Date(exp_y\\comma\\exp_m\\comma\\exp_d);//crlf////tab////tab//sCookie +=\\quot\\; expires=\\quot\\ + expires.toGMTString();//crlf////tab//}//crlf////crlf////tab//if (path) sCookie +=\\quot\\; path=\\quot\\ + escape(path);//crlf////tab//if (domain) sCookie +=\\quot\\; domain=\\quot\\ + escape(domain);//crlf////tab//if (secure) sCookie +=\\quot\\; secure\\quot\\;//crlf////tab//document.cookie=sCookie;//crlf//};//crlf////crlf//function getCookie(cookie_name) {//crlf////tab//var sResult=document.cookie.match ('(//power//~~pipe~~;) ?' + cookie_name + '=([//power//;]*)(;~~pipe~~$)');//crlf////tab//if(sResult) {//crlf////tab////tab//return(unescape(sResult[2]));//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//return null;//crlf////tab//};//crlf//};//crlf////crlf//function deleteCookie(name) {//crlf////tab//setCookie(name\\comma\\\\quot\\\\quot\\\\comma\\1970\\comma\\1\\comma\\1);//crlf//};//crlf//^
ID=622194|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///*************************************************************************//crlf//This function is used to scroll a table dialog into view\\comma\\ especially for//crlf//mobile devices.  The scrollIntoViewIfNeeded function is only available in //crlf//Chrome and perhaps some other browsers.  It will have to be implemented//crlf//with code.  Right now this function has no effect if scrollIntoViewIfNeeded //crlf//is undefined.  //crlf//*************************************************************************///crlf//function scrollElementIntoView(e) {//crlf////tab//if(e.scrollIntoViewIfNeeded) {//crlf////tab////tab//e.scrollIntoViewIfNeeded(true);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////this needs work.  In particular\\comma\\ dialogs for records near the bottom //crlf////tab////tab////of a table where the dialog extends beneath the table jump when this//crlf////tab////tab////function is called.//crlf////tab////tab//if(false) {//crlf////tab//    var ParentRect=e.parentNode.getBoundingClientRect();//crlf////tab//    var eRect=e.getBoundingClientRect();//crlf////tab////tab////tab//if (eRect.top < ParentRect.top ~~pipe~~~~pipe~~ eRect.bottom > ParentRect.bottom//crlf////tab//       ~~pipe~~~~pipe~~ eRect.right > ParentRect.right ~~pipe~~~~pipe~~ eRect.left < ParentRect.left)//crlf////tab//    e.scrollIntoView();//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///*************************************************************************//crlf//Gets the coordinates that would be used to position the element using //crlf//fixed positioning.  Called by getPosition2012().//crlf//*************************************************************************///crlf////for debugging//crlf//var sPositionLog=\\quot\\\\quot\\;//crlf////crlf//function getOrientation(){//crlf//    return((Math.abs(window.orientation) - 90==0) ? \\quot\\landscape\\quot\\ : \\quot\\portrait\\quot\\);//crlf//};//crlf////crlf//function getFixedCoord(e) {//crlf////tab//sPositionLog +=\\quot\\getPosition for \\quot\\+e.id+\\quot\\\r\n\\quot\\;//crlf////tab//var topValue=0\\comma\\leftValue=0;//crlf////crlf////tab////get fixed coordinates//crlf////tab//var e2=e;//crlf////tab//var bDone=false;//crlf////tab//while((e2) //amp////amp// (bDone==false)) {//crlf////tab////tab//if(e2.style) {//crlf////tab////tab////tab//var sNodeName=(e2.nodeName) ? e2.nodeName : \\quot\\\\quot\\;//crlf////tab////tab////tab//leftValue+=e2.offsetLeft;//crlf////tab////tab////tab//topValue+=e2.offsetTop;//crlf////tab////tab////tab//sPosition=e2.style.position;//crlf////tab////tab////tab//if(sPosition.equalsIgnoreCase(\\quot\\fixed\\quot\\)) bDone=true;//crlf////tab////tab////tab//sPositionLog +=\\quot\\offset [\\quot\\+sNodeName+\\quot\\:\\quot\\+sPosition+\\quot\\] \\quot\\+e2.id+\\quot\\ x=\\quot\\+e2.offsetLeft+\\quot\\ y=\\quot\\+e2.offsetTop+\\quot\\ left=\\quot\\+leftValue+\\quot\\ top=\\quot\\+topValue+\\quot\\\r\n\\quot\\;//crlf////tab////tab//};//crlf////tab////tab//e2=e2.offsetParent;//crlf////tab//};//crlf////crlf////tab////adjust for scrolling//crlf////tab//bDone=false;//crlf////tab//var e2=e;//crlf////tab//while((e2) //amp////amp// (!bDone)) {//crlf////tab////tab//var sNodeName=(e2.nodeName) ? e2.nodeName : \\quot\\\\quot\\;//crlf////tab////tab//if(e2.style) {//crlf////tab////tab////tab//if(sNodeName.equalsIgnoreCase(\\quot\\body\\quot\\)) {//crlf////tab////tab////tab////tab//if(e2.scrollLeft) leftValue -=e2.scrollLeft;//crlf////tab////tab////tab////tab//if(e2.scrollTop) topValue -=e2.scrollTop;//crlf////tab////tab////tab////tab//sPositionLog +=\\quot\\scroll [\\quot\\+sNodeName+\\quot\\:\\quot\\+sPosition+\\quot\\] \\quot\\+e2.id+\\quot\\ x=\\quot\\+e2.scrollLeft+\\quot\\ y=\\quot\\+e2.scrollTop+\\quot\\ left=\\quot\\+leftValue+\\quot\\ top=\\quot\\+topValue+\\quot\\\r\n\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//sPosition=e2.style.position;//crlf////tab////tab////tab////tab//if(sPosition.equalsIgnoreCase(\\quot\\fixed\\quot\\)) {//crlf////tab////tab////tab////tab////tab//bDone=true;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////Note: Checking for auto in the width and height addresses a situation with items in widget containers that//crlf////tab////tab////tab////tab////tab////have width and height set to auto but also have the autoscroll property set to true.  If this was not here\\comma\\//crlf////tab////tab////tab////tab////tab////an item with a scrollbar would be positioned too high on the page.  Editing the call log item after scrolling//crlf////tab////tab////tab////tab////tab////down the calls is an example.//crlf////tab////tab////tab////tab////tab//if(e2.scrollLeft) {//crlf////tab////tab////tab////tab////tab////tab//if(e2.style.width.equalsIgnoreCase(\\quot\\auto\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//leftValue -=e2.scrollLeft;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//if(e2.scrollTop) {//crlf////tab////tab////tab////tab////tab////tab//if(e2.style.height.equalsIgnoreCase(\\quot\\auto\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//topValue -=e2.scrollTop;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//sPositionLog +=\\quot\\scroll [\\quot\\+sNodeName+\\quot\\:\\quot\\+sPosition+\\quot\\] \\quot\\+e2.id+\\quot\\ x=\\quot\\+e2.scrollLeft+\\quot\\ y=\\quot\\+e2.scrollTop+\\quot\\ left=\\quot\\+leftValue+\\quot\\ top=\\quot\\+topValue+\\quot\\\r\n\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//e2=e2.parentNode;//crlf////tab//};//crlf////crlf////tab//return(new Array(leftValue\\comma\\topValue));//crlf//};//crlf////crlf///*************************************************************************//crlf//Returns an array containing the left and top values for positioning an//crlf//element using either fixed or absolute.  //crlf//e//tab////tab//- The element on which the positioning is based //crlf//Method//tab//- fixed or absolute//crlf//eParent//tab//- The parent element to which the positioned element will be added//crlf//*************************************************************************///crlf//function getPosition2012(e\\comma\\Method\\comma\\eParent)//crlf//{//crlf////tab//var bDebug=false;//crlf////tab//sPositionLog=\\quot\\\\quot\\;//crlf////crlf////tab////get the coordinates that would be used to position the item using \\quot\\fixed\\quot\\//crlf////tab//var arXY=getFixedCoord(e);//crlf////crlf////tab//if(bDebug) {//crlf////tab////tab//var eFixed1=document.getElementById(\\quot\\DebugPositioning1\\quot\\);//crlf////tab////tab//if(!eFixed1) {//crlf////tab////tab////tab//eFixed1=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//eFixed1.id=\\quot\\DebugPositioning1\\quot\\;//crlf////tab////tab////tab//eFixed1.style.position=\\quot\\fixed\\quot\\;//crlf////tab////tab////tab//eFixed1.style.background=\\quot\\yellow\\quot\\;//crlf////tab////tab////tab//eFixed1.style.zIndex=\\quot\\99\\quot\\;//crlf////tab////tab////tab//eFixed1.style.width=\\quot\\60px\\quot\\;//crlf////tab////tab////tab//eFixed1.style.height=\\quot\\10px\\quot\\;//crlf////tab////tab////tab//eFixed1.innerHTML=\\quot\\fixed-1\\quot\\;//crlf////tab////tab////tab//document.getElementsByTagName('BODY')[0].appendChild(eFixed1);//crlf////tab////tab//};//crlf////tab////tab//eFixed1.style.left=arXY[0]+\\quot\\px\\quot\\;//crlf////tab////tab//eFixed1.style.top=arXY[1]+\\quot\\px\\quot\\;//crlf////tab//};//crlf////tab////crlf////tab////if method is absolute\\comma\\ make coordinates relative to parent//crlf////tab//if(Method.equalsIgnoreCase(\\quot\\absolute\\quot\\)) {//crlf////tab////tab//if(eParent) {//crlf////tab////tab////tab//sPositionLog+=\\quot\\Converting to relative coordinates\r\n\\quot\\;//crlf////tab////tab////tab//var ParentXY=getFixedCoord(eParent);//crlf////crlf////tab////tab////tab//if(bDebug) {//crlf////tab////tab////tab////tab//var eFixed2=document.getElementById(\\quot\\DebugPositioning2\\quot\\);//crlf////tab////tab////tab////tab//if(!eFixed2) {//crlf////tab////tab////tab////tab////tab//eFixed2=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab////tab////tab//eFixed2.id=\\quot\\DebugPositioning2\\quot\\;//crlf////tab////tab////tab////tab////tab//eFixed2.style.position=\\quot\\fixed\\quot\\;//crlf////tab////tab////tab////tab////tab//eFixed2.style.background=\\quot\\yellow\\quot\\;//crlf////tab////tab////tab////tab////tab//eFixed2.style.zIndex=\\quot\\99\\quot\\;//crlf////tab////tab////tab////tab////tab//eFixed2.style.width=\\quot\\60px\\quot\\;//crlf////tab////tab////tab////tab////tab//eFixed2.style.height=\\quot\\10px\\quot\\;//crlf////tab////tab////tab////tab////tab//eFixed2.innerHTML=\\quot\\fixed-2\\quot\\;//crlf////tab////tab////tab////tab////tab//document.getElementsByTagName('BODY')[0].appendChild(eFixed2);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab//eFixed2.style.left=ParentXY[0]+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab//eFixed2.style.top=ParentXY[1]+\\quot\\px\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//sPositionLog +=\\quot\\Parent X=\\quot\\+ParentXY[0]+\\quot\\ Y=\\quot\\+ParentXY[1]+\\quot\\\r\n\\quot\\;//crlf////tab////tab////tab//arXY[0] -=ParentXY[0];//crlf////tab////tab////tab//arXY[1] -=ParentXY[1];//crlf////tab////tab////tab//sPositionLog +=\\quot\\New X=\\quot\\+arXY[0]+\\quot\\ Y=\\quot\\+arXY[1]+\\quot\\\r\n\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//alert(\\quot\\Missing parent element in getPosition()\\quot\\);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////tab////crlf////tab//if(bDebug) appendToLog(sPositionLog\\comma\\false\\comma\\true);//crlf////tab//return arXY;//crlf//};//crlf////crlf//function getPosition2012old(e\\comma\\Method\\comma\\eParent)//crlf//{//crlf////tab//var topValue=0\\comma\\leftValue=0;//crlf////crlf////tab////calculate offset//crlf////tab//var e2=e;//crlf////tab//var bDone=false;//crlf////tab//while((e2) //amp////amp// (bDone==false)) {//crlf////tab////tab//leftValue+=e2.offsetLeft;//crlf////tab////tab//topValue+=e2.offsetTop;//crlf////tab////tab//e2=e2.offsetParent;//crlf////tab////tab//if((e2) //amp////amp// (Method.equalsIgnoreCase(\\quot\\absolute\\quot\\))) {//crlf////tab////tab////tab//var s=e2.style.position;//crlf////tab////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\absolute\\quot\\))) bDone=true;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////adjust for scrolling//crlf////tab//var e2=e;//crlf////tab//while(e2){//crlf////tab////tab////This differs from javascript1 because the page is not in an iframe//crlf////tab////tab//var sNodeName=(e2.nodeName) ? e2.nodeName : \\quot\\\\quot\\;//crlf////tab////tab////crlf////tab////tab////only account for scrolling of the body element when the method is fixed.  This was modified then tooltips//crlf////tab////tab////were changed to fixed positioning.  The tooltips require body scrolling to be included.  However\\comma\\ table//crlf////tab////tab////dialogs\\comma\\ which use absolute positioning\\comma\\ require scrolling of the body to be ignored//crlf////tab////tab//if((Method.equalsIgnoreCase(\\quot\\fixed\\quot\\)) ~~pipe~~~~pipe~~ (e2.nodeName.equalsIgnoreCase(\\quot\\body\\quot\\)==false)) {//crlf////tab////tab////tab//if(e2.scrollLeft) leftValue -=e2.scrollLeft;//crlf////tab////tab////tab//if(e2.scrollTop) topValue -=e2.scrollTop;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//e2=e2.parentNode;//crlf////tab//};//crlf////tab////crlf////tab//var arXY=new Array(leftValue\\comma\\topValue);//crlf////tab//return arXY;//crlf//};//crlf//^
ID=82587|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************//crlf//Returns the protocol and host in the form http://xxx.xxx.xxx.xxx:xxxx///crlf//******************************************************************************///crlf//function getServer() {//crlf////tab////Get server.  Check for aspect-software.net and override it with the Aspect server.//crlf////tab////This allows pages to be loaded from aspect-software.net and for them to include a table //crlf////tab////using asynchinclude.  When the table is refreshed\\comma\\ getserver() cannot be used because it returns//crlf////tab////aspect-software.net.  In this case\\comma\\ override the server with the actual Aspect server IP.//crlf////tab//var s=window.location.protocol+\\quot\\//\\quot\\+window.location.host;//crlf////tab//if(s.toUpperCase().indexOf(\\quot\\ASPECT-SOFTWARE\\quot\\)>=0) {//crlf////tab////tab//s=\\quot\\http://{AspectServerIP2}\\quot\\;//crlf////tab//};//crlf////tab//return(s);//crlf////crlf////tab////return(window.location.protocol+\\quot\\//\\quot\\+window.location.host);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the host name and port in the form xxx.xxx.xxx.xxx:xxxx//crlf//******************************************************************************///crlf//function getHost() {//crlf////tab//return(window.location.host);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the name part of the host//crlf//******************************************************************************///crlf//function getHostName() {//crlf////tab//return(window.location.hostname);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the port number of host//crlf//******************************************************************************///crlf//function getPort() {//crlf////tab//return(window.location.port);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the protocol (http: or https:)//crlf//******************************************************************************///crlf//function getProtocol() {//crlf////tab//return(window.location.protocol);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the path of the current url//crlf//******************************************************************************///crlf//function getPathname() {//crlf////tab//return(window.location.pathname);//crlf//};//crlf////crlf//^
ID=528184|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)\\plus\\\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)\\plus\\\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//function hideTooltip(e)//crlf//{//crlf////tab//if (e) e.style.display=\\quot\\none\\quot\\;//crlf//};//crlf////crlf//function showTooltip(e\\comma\\Msg\\comma\\OffsetX\\comma\\OffsetY\\comma\\MaxWidth)//crlf//{//crlf////tab////don\\apos\\t show tooltips for mobile devices//crlf////tab//if(bIsMobileDevice) return;//crlf////tab//if(isMobileDevice()) return;//crlf////tab////alert(\\quot\\user: \\quot\\\\plus\\navigator.userAgent);//crlf////tab//if(screen.width<1024) return; //just a guess.  May not work for tablets.//crlf////tab////crlf////tab////disable tooltips for Microsoft version 6 (which shows as version 4 in getBrowserVersion) because the tooltips are not z-indexed properly//crlf////tab////if ((getBrowserName().startsWith(\\quot\\Microsoft\\quot\\)) \\amp\\\\amp\\ (getBrowserVersion().startsWith(\\quot\\4.0\\quot\\))) return;//crlf////crlf////tab//var strMsg=Msg;//crlf////crlf////tab////09-2022 - Modified this to allow for htmlTable() in tooltip.  The quotes (single and double) //crlf////tab////were not being handled properly.//crlf////tab////strMsg=replaceAllSubstrings(Msg\\comma\\\\quot\\~~pipe~~~~pipe~~q\\quot\\\\plus\\\\quot\\uot~~pipe~~~~pipe~~\\quot\\\\comma\\\\quot\\\\amp\\\\pound\\34;\\quot\\);//crlf////tab////strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\~~pipe~~~~pipe~~a\\quot\\\\plus\\\\quot\\pos~~pipe~~~~pipe~~\\quot\\\\comma\\\\quot\\\\amp\\\\pound\\39;\\quot\\);//crlf////tab//strMsg=replaceAllSubstrings(Msg\\comma\\\\quot\\~~pipe~~~~pipe~~q\\quot\\\\plus\\\\quot\\uot~~pipe~~~~pipe~~\\quot\\\\comma\\\\quot\\~~backslash~~x22\\quot\\);//crlf////tab//strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\~~pipe~~~~pipe~~a\\quot\\\\plus\\\\quot\\pos~~pipe~~~~pipe~~\\quot\\\\comma\\\\quot\\~~backslash~~x27\\quot\\);//crlf////crlf////tab////strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\<\\quot\\\\comma\\\\quot\\<\\quot\\);//crlf////tab////strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\>\\quot\\\\comma\\\\quot\\>\\quot\\);//crlf////crlf////tab////these are used to handle tooltips for scheduled tasks.  There is a problem with characters in expressions being turned into//crlf////tab////greater than/less than symbols rather than staying tokenized.  TTaskScheduler.getTaskTooltip converts the symbols to \\pound\\60 and \\pound\\62//crlf////tab////12-07-2013 - This is still a problem to be resolved.  For a workaround\\comma\\ see the tooltip for the ID field in Aspect_Performance_Profile_DriverStruct_Detail//crlf////tab//strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\\\pound\\60\\quot\\\\comma\\\\quot\\\\amp\\lt;\\quot\\);//crlf////tab//strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\\\pound\\62\\quot\\\\comma\\\\quot\\\\amp\\gt;\\quot\\);//crlf////crlf////tab////Follow any commas and right parenthesis with a space so expressions are allowed to wrap//crlf////tab//strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\~~backslash~~xFF\\quot\\);//crlf////tab//strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\~~backslash~~xFF\\quot\\\\comma\\\\quot\\\\comma\\ \\quot\\);//crlf////tab//strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\(\\quot\\\\comma\\\\quot\\~~backslash~~xFF\\quot\\);//crlf////tab//strMsg=replaceAllSubstrings(strMsg\\comma\\\\quot\\~~backslash~~xFF\\quot\\\\comma\\\\quot\\( \\quot\\);//crlf////crlf////tab//if (OffsetX==0) OffsetX=10;//crlf////tab//if (OffsetY==0) OffsetY=10;//crlf////tab////crlf////tab//if ((MaxWidth==null) ~~pipe~~~~pipe~~ (MaxWidth==0)) MaxWidth=400;//crlf////tab////crlf////tab//var div=document.getElementById(\\quot\\tooltip\\quot\\);//crlf////tab////crlf////tab//if (div==null) {//crlf////tab////tab//tagBody=document.getElementsByTagName(\\apos\\BODY\\apos\\)[0];//crlf////tab////tab//div=document.createElement(\\apos\\div\\apos\\);//crlf////tab////tab//div.id=\\quot\\tooltip\\quot\\;//crlf////tab////tab//div.className=\\quot\\tooltip\\quot\\; //apparently setAttrubute(\\quot\\class\\quot\\...) doesn\\apos\\t work in IE//crlf////tab////tab//div.onclick=Function(\\quot\\javascript:hideTooltip(this);\\quot\\);//crlf////tab////tab//tagBody.appendChild(div);//tab////tab////crlf////tab//};//crlf////crlf////tab//div.innerHTML=strMsg;//crlf////crlf////tab////don\\apos\\t use the event (e) if just hiding with a blank message.  This allows the showTooltip method to be called//crlf////tab////without an event if it needs to be cleared manually.  One example of this is when a div is made visible under//crlf////tab////a tooltip that is being displayed.  //crlf////tab//if (strMsg.length>0) {//crlf////tab////tab//var W=div.offsetWidth;//crlf////tab////tab//var H=div.offsetHeight;//crlf////crlf////tab////tab////modified 10-23-2012 to get the source element for the event and calculate the position//crlf////tab////tab////from that.  Otherwise tooltips are positioned incorrectly when the page or elements on the//crlf////tab////tab////page are scrolled.//crlf////tab////tab//var eTarget=null;//crlf////tab////tab//if (e.target) {//crlf////tab////tab////tab//eTarget=e.target;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if (e.srcElement) eTarget=e.srcElement;//crlf////tab////tab//};//crlf////tab////tab//if (eTarget.nodeType==3) eTarget=eTarget.parentNode;// defeat Safari bug//crlf////crlf////tab////tab////div.style.position=\\quot\\fixed\\quot\\;//crlf////tab////tab//var xy=getPosition2012(eTarget\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName(\\apos\\BODY\\apos\\)[0]);//crlf////tab////tab//var X=xy[0];//crlf////tab////tab//var Y=xy[1]\\plus\\eTarget.offsetHeight;//crlf////crlf////tab////tab////var X=e.clientX;//crlf////tab////tab////var Y=e.clientY;//crlf////tab////tab//var Top//tab//=Y\\plus\\OffsetY;//crlf////tab////tab//var Left=X\\plus\\OffsetX;//crlf////tab////tab//div.style.border=\\quot\\1pt solid\\quot\\;//crlf////tab////tab//div.style.top=Top\\plus\\\\quot\\px\\quot\\;//crlf////tab////tab//div.style.left=Left\\plus\\\\quot\\px\\quot\\;//crlf////crlf////tab////tab//if (div.offsetWidth>MaxWidth) {//crlf////tab////tab////tab//div.style.width=MaxWidth\\plus\\\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//div.style.padding=\\quot\\5px\\quot\\;//crlf////tab////tab////div.style.border=5;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//div.style.padding=0;//crlf////tab////tab////alert(\\quot\\border=\\quot\\\\plus\\div.style.border);//crlf////tab////tab//div.style.border=\\quot\\none\\quot\\;//crlf////tab////tab//div.style.width=\\quot\\auto\\quot\\;//crlf////tab//};//crlf////crlf////tab////div.innerHTML=\\quot\\W:\\quot\\\\plus\\W\\plus\\\\quot\\ H:\\quot\\\\plus\\H\\plus\\\\quot\\ ScreenX:\\quot\\\\plus\\e.screenX\\plus\\\\quot\\ ScreenY:\\quot\\\\plus\\e.screenY\\plus\\\\quot\\ clientX=\\quot\\\\plus\\e.clientX\\plus\\\\quot\\ clientY=\\quot\\\\plus\\e.clientY;//crlf//};//crlf//^
ID=851443|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************//crlf////tab//NOTES ABOUT DISPLAYS//crlf////crlf////tab//The Display Dialog is generated by the computer that generates the table.//crlf////tab//If a table is requested from a remote machine\\comma\\ that machine will produce//crlf////tab//the dialog.//crlf////tab////crlf////tab//The WidgetID of each display is used as the ID for the select box used//crlf////tab//to select a display\\comma\\ both in the table and in the display dialog.  The //crlf////tab//WidgetID is valid ONLY on the source machine.//crlf////tab////crlf////tab//Requests to refresh the dialog after a widget has been deleted or a new//crlf////tab//one has been created must be made to the source machine using a notification.//crlf////tab//A request is also made to the remote machine when a display is selected//crlf////tab//in the display dialog to get the settings for the display.//crlf////tab////crlf////tab//When a widget is saved\\comma\\ created or deleted\\comma\\ the source HashID of the //crlf////tab//driver is passed in the call to Library acceptWidgetByID.  When a source//crlf////tab//is defined\\comma\\ the library script uses a notification to execute the script//crlf////tab//on the remote machine.//crlf//******************************************************************************///crlf////crlf///******************************************************************************//crlf//Gets values from display dialog to be passed as a widget//crlf//******************************************************************************///crlf//function getDisplayFormValues(sTableID) //crlf//{//crlf////tab//var table=document.getElementById(sTableID);//crlf////tab//var f=document.forms[\\quot\\Display_Dialog_\\quot\\+sTableID];//crlf////crlf////tab//var sContent=\\quot\\\\quot\\;//crlf////tab////crlf////tab////get the location the widget will be saved to - aspect\\comma\\ company or local//crlf////tab//var sLocation=f.library_location.value;//crlf////crlf////tab////get sort and subtotal information//crlf////tab//sContent +=\\quot\\~~pipe~~field_sort1=\\quot\\+f.sort1.value+\\quot\\~~pipe~~field_sort2=\\quot\\+f.sort2.value+\\quot\\~~pipe~~field_sort3=\\quot\\+f.sort3.value;//crlf////tab//if(f.sort4) sContent +=\\quot\\~~pipe~~field_sort4=\\quot\\+f.sort4.value;//crlf////tab//sContent +=\\quot\\~~pipe~~field_subtotal1=\\quot\\+f.subtotal1.checked+\\quot\\~~pipe~~field_subtotal2=\\quot\\+f.subtotal2.checked+\\quot\\~~pipe~~field_subtotal3=\\quot\\+f.subtotal3.checked;//crlf////tab//if(f.subtotal4) sContent +=\\quot\\~~pipe~~field_subtotal4=\\quot\\+f.subtotal4.checked;//crlf////tab////crlf////tab//for (var i=1;i<5;i++) {//crlf////tab////tab//var e=document.getElementById(\\quot\\SortOrder\\quot\\+i+\\quot\\_\\quot\\+sTableID);//crlf////tab////tab//if(e) {//crlf////tab////tab////tab//var s=e.getAttribute(\\quot\\AspectSortOrder\\quot\\);//crlf////tab////tab////tab//(s.equalsIgnoreCase(\\quot\\ascending\\quot\\)) ? sContent +=\\quot\\~~pipe~~field_SortOrder\\quot\\+i+\\quot\\=0\\quot\\ : sContent +=\\quot\\~~pipe~~field_SortOrder\\quot\\+i+\\quot\\=1\\quot\\ ;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////get subtotal\\comma\\ grand total and chart settings//crlf////tab//sContent +=\\quot\\~~pipe~~field_SubtotalsOnly=\\quot\\+f.SubtotalsOnly.checked;//crlf////tab//sContent +=\\quot\\~~pipe~~field_GrandTotals=\\quot\\+f.GrandTotals.checked;//crlf////tab//sContent +=\\quot\\~~pipe~~field_chartType=\\quot\\+f.ChartType.value;//crlf////tab//if(f.ChartSeries) sContent +=\\quot\\~~pipe~~field_ChartSeries=\\quot\\+f.ChartSeries.value;//crlf////crlf////tab////get filter//crlf////tab//sContent +=\\quot\\~~pipe~~field_filter=\\quot\\+f.Filter.value;//crlf////tab////crlf////tab////get fields selected in table//crlf////tab//var sFieldsSelected=\\quot\\\\quot\\;//crlf////tab//var FieldsTable=document.getElementById(\\quot\\FieldsSelected_\\quot\\+sTableID);//crlf////tab//for (var i=0;i<FieldsTable.rows.length;i++) {//crlf////tab////tab//if(FieldsTable.rows[i].cells[0].firstChild.checked) {//crlf////tab////tab////tab//if(sFieldsSelected.length>0) sFieldsSelected +=\\quot\\\\comma\\\\quot\\;//crlf////tab////tab////tab//sFieldsSelected +=FieldsTable.rows[i].cells[0].getAttribute(\\quot\\AspectFieldID\\quot\\);//crlf////tab////tab////tab////crlf////tab////tab////tab//var s=FieldsTable.rows[i].cells[1].innerHTML;//crlf////tab////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\\\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\(\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\)\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\\percent\\\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\.\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////crlf////tab////tab////tab//sFieldsSelected +=\\quot\\//power//\\quot\\+s;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//sContent +=\\quot\\~~pipe~~FieldsSelected=\\quot\\+sFieldsSelected;//crlf////tab////crlf////tab////get external filters//crlf////tab//var sExternalFilters=getExternalFilters(sTableID);//crlf////tab//if(sExternalFilters.length>0) sContent +=\\quot\\~~pipe~~\\quot\\ + sExternalFilters;//crlf////tab////crlf////tab////get pivot fields//crlf////tab//for(var i=1;i<4;i++) {//crlf////tab////tab//var e=document.getElementById(\\quot\\pivotvalue\\quot\\+i+\\quot\\_\\quot\\+sTableID);//crlf////tab////tab//if(e) {//crlf////tab////tab////tab//sContent +=\\quot\\~~pipe~~pivotvalue\\quot\\+i+\\quot\\=\\quot\\+e.value;//crlf////tab////tab////tab//sContent +=\\quot\\~~pipe~~pivotname\\quot\\+i+\\quot\\=\\quot\\+document.getElementById(\\quot\\pivotname\\quot\\+i+\\quot\\_\\quot\\+sTableID).value;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////appendToLog(\\quot\\getDisplayFormValues returns \\quot\\+sContent\\comma\\false\\comma\\true);//crlf////tab//return(sContent);//crlf//};//crlf////crlf//function selectTableSort(e)//crlf//{//crlf////tab//sOrder=e.getAttribute(\\quot\\AspectSortOrder\\quot\\);//crlf////tab//if(sOrder.equalsIgnoreCase(\\quot\\ascending\\quot\\)) {//crlf////tab////tab//e.setAttribute(\\quot\\AspectSortOrder\\quot\\\\comma\\\\quot\\descending\\quot\\);//crlf////tab////tab//e.className=\\quot\\DisplayDialogSortDescendingIcon\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//e.setAttribute(\\quot\\AspectSortOrder\\quot\\\\comma\\\\quot\\ascending\\quot\\);//crlf////tab////tab//e.className=\\quot\\DisplayDialogSortAscendingIcon\\quot\\;//crlf////tab//};7//crlf//};//crlf////crlf//function oldselectTableSort(e)//crlf//{//crlf////tab//sOrder=e.getAttribute(\\quot\\AspectSortOrder\\quot\\);//crlf////tab//if(sOrder.equalsIgnoreCase(\\quot\\ascending\\quot\\)) {//crlf////tab////tab//e.setAttribute(\\quot\\AspectSortOrder\\quot\\\\comma\\\\quot\\descending\\quot\\);//crlf////tab////tab//if(bIsMobileDevice) {//crlf////tab////tab////tab//e.src=\\quot\\{ImageHostUrl}arrowDown32x32white.png\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//e.src=\\quot\\{ImageHostUrl}arrowDown12x12.png\\quot\\;//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//e.setAttribute(\\quot\\AspectSortOrder\\quot\\\\comma\\\\quot\\ascending\\quot\\);//crlf////tab////tab//if(bIsMobileDevice) {//crlf////tab////tab////tab//e.src=\\quot\\{ImageHostUrl}arrowUp32x32white.png\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//e.src=\\quot\\{ImageHostUrl}arrowUp12x12.png\\quot\\;//crlf////tab////tab//};//crlf////tab//};7//crlf//};//crlf////crlf//function getDisplayDialogArguments(sTableID)//crlf//{//crlf////tab//var fOptions=document.forms[\\quot\\Display_Dialog_\\quot\\+sTableID];//crlf////crlf////tab////get all driver fields in table.  This is done to avoid having to re-open the driver to create//crlf////tab////a new field list when the dialog is refreshed.  The format of the string passed in the url//crlf////tab////is Name//power//ID~~pipe~~Name//power//ID.  This string is processed by the getDisplayDialog() function//crlf////tab////The fields are taken from the FieldsSelected table in the display dialog//crlf////tab//var sFields=\\quot\\\\quot\\;//crlf////tab//var table=document.getElementById(\\quot\\FieldsSelected_\\quot\\+sTableID);//crlf////tab//for (var i=0;i<table.rows.length;i++) {//crlf////tab////tab//if(sFields.length>0) sFields +=\\quot\\~~pipe~~\\quot\\;//crlf////tab////tab//var s=replaceAllSubstrings(table.rows[i].cells[1].innerHTML\\comma\\\\quot\\\\\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\(\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\)\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\\percent\\\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\.\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab//sFields +=s;//crlf////tab////tab//sFields +=\\quot\\//power//\\quot\\+table.rows[i].cells[0].getAttribute(\\quot\\AspectFieldID\\quot\\);//crlf////tab//};//crlf////crlf////tab////Get the metadata included in the driver params if any.  This value is used to specify the metadata//crlf////tab////value used to locate displays associated with the driver.  By default\\comma\\ displays use the document id\\comma\\ //crlf////tab////widget and item to calculate the metadata.  Overriding it allows tables in different widgets to share//crlf////tab////the same displays//crlf////tab//table=document.getElementById(sTableID);//crlf////tab//var sParams=table.getAttribute(\\quot\\aspectparams\\quot\\);//crlf////tab//var sMetadata=getElementValue(sParams\\comma\\\\quot\\metadata\\quot\\\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab//var sHashID=table.getAttribute(\\quot\\aspecthashid\\quot\\);//crlf////tab//var sPivotNameFields=table.getAttribute(\\quot\\aspectPivotFields\\quot\\);//crlf////tab//var sPossiblePivotValues=table.getAttribute(\\quot\\aspectPossiblePivotValues\\quot\\);//crlf////tab//var sDialogHeader=table.getAttribute(\\quot\\aspectDialogHeader\\quot\\);//crlf////tab////crlf////tab//var sArgs=\\quot\\//amp//Source=\\quot\\+sHashID;//crlf////tab//sArgs +=\\quot\\//amp//DriverID=\\quot\\+fOptions.DriverID.value;//crlf////tab//sArgs +=\\quot\\//amp//DocumentID=\\quot\\+fOptions.DocumentID.value;//crlf////tab//sArgs +=\\quot\\//amp//Widget=\\quot\\+fOptions.Widget.value;//crlf////tab//sArgs +=\\quot\\//amp//ContainerItemID=\\quot\\+fOptions.ContainerItemID.value;//crlf////tab//sArgs +=\\quot\\//amp//TableID=\\quot\\+sTableID;//crlf////tab//sArgs +=\\quot\\//amp//AllFields=\\quot\\+sFields;//crlf////tab//sArgs +=\\quot\\//amp//Metadata=\\quot\\+sMetadata;//crlf////tab//if(sPivotNameFields) sArgs +=\\quot\\//amp//PivotNameFields=\\quot\\+sPivotNameFields;//crlf////tab//if(sPossiblePivotValues) sArgs +=\\quot\\//amp//PossiblePivotValues=\\quot\\+sPossiblePivotValues;//crlf////tab//if(sDialogHeader) sArgs +=\\quot\\//amp//DialogHeader=\\quot\\+sDialogHeader;//crlf////tab//return(sArgs);//crlf//};//crlf////crlf///******************************************************************************//crlf//See NOTES ABOUT DISPLAYS comment about how displays are refreshed\\comma\\ saved and deleted//crlf//Refresh the display dialog. Called when a display is deleted and when a //crlf//display is selected from the drop-down list in the display dialog//crlf//******************************************************************************///crlf//function refreshDisplayDialog(sTableID\\comma\\sWidgetID\\comma\\bShowDialog\\comma\\sResponse)//crlf//{//crlf////tab//if(sResponse) {//crlf////tab////tab//showDisplayDialogMessage(sTableID\\comma\\\\quot\\\\quot\\);//crlf////tab////tab//if(bShowDialog) openDisplayDialog(sTableID);//crlf////tab////tab//initializeTabbedDialogs(); //initialize tabs in the display dialog//crlf////tab////tab////appendToLog(\\quot\\refreshDisplayDialog complete.  bShowDialog=\\quot\\+bShowDialog\\comma\\false\\comma\\true);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////disable all elements in the dialog//crlf////tab//var fOptions=document.forms[\\quot\\Display_Dialog_\\quot\\+sTableID];//crlf////tab//enableElements(fOptions\\comma\\false);//crlf////crlf////tab////overlay a div to disable clicking on images//crlf////tab//var eFormWrapper=document.getElementById(\\quot\\Display_Dialog_FormWrapper\\quot\\+sTableID);//crlf////tab//applyOverlay(eFormWrapper);//crlf////tab////crlf////tab////show messagge//crlf////tab//showDisplayDialogMessage(sTableID\\comma\\\\quot\\Getting display settings...\\quot\\);//crlf////crlf////tab//if(false) {//crlf////tab////tab////get all driver fields in table.  This is done to avoid having to re-open the driver to create//crlf////tab////tab////a new field list when the dialog is refreshed.  The format of the string passed in the url//crlf////tab////tab////is Name//power//ID~~pipe~~Name//power//ID.  This string is processed by the getDisplayDialog() function//crlf////tab////tab//var sFields=\\quot\\\\quot\\;//crlf////tab////tab//var table=document.getElementById(\\quot\\FieldsSelected_\\quot\\+sTableID);//crlf////tab////tab//for (var i=0;i<table.rows.length;i++) {//crlf////tab////tab////tab//if(sFields.length>0) sFields +=\\quot\\~~pipe~~\\quot\\;//crlf////tab////tab////tab//sFields +=table.rows[i].cells[1].innerHTML;//crlf////tab////tab////tab//sFields +=\\quot\\//power//\\quot\\+table.rows[i].cells[0].getAttribute(\\quot\\AspectFieldID\\quot\\);//crlf////tab////tab//};//crlf////crlf////tab////tab////Get the metadata included in the driver params if any.  This value is used to specify the metadata//crlf////tab////tab////value used to locate displays associated with the driver.  By default\\comma\\ displays use the document id\\comma\\ //crlf////tab////tab////widget and item to calculate the metadata.  Overriding it allows tables in different widgets to share//crlf////tab////tab////the same displays//crlf////tab////tab//table=document.getElementById(sTableID);//crlf////tab////tab//var sParams=table.getAttribute(\\quot\\aspectparams\\quot\\);//crlf////tab////tab//var sMetadata=getElementValue(sParams\\comma\\\\quot\\metadata\\quot\\\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab////tab//var sHashID=table.getAttribute(\\quot\\aspecthashid\\quot\\)//tab////crlf////appendToLog(\\quot\\refreshDisplayDialog Params=\\quot\\+sParams+\\quot\\ Metadata=\\quot\\+sMetadata+\\quot\\ HashID=\\quot\\+sHashID\\comma\\false\\comma\\true);//crlf////tab////tab//var sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getDisplayDialog\\quot\\;//crlf////tab////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+sHashID;//crlf////tab////tab//sUrl +=\\quot\\//amp//DriverID=\\quot\\+fOptions.DriverID.value;//crlf////tab////tab//sUrl +=\\quot\\//amp//DocumentID=\\quot\\+fOptions.DocumentID.value;//crlf////tab////tab//sUrl +=\\quot\\//amp//Widget=\\quot\\+fOptions.Widget.value;//crlf////tab////tab//sUrl +=\\quot\\//amp//ContainerItemID=\\quot\\+fOptions.ContainerItemID.value;//crlf////tab////tab//sUrl +=\\quot\\//amp//TableID=\\quot\\+sTableID;//crlf////tab////tab//sUrl +=\\quot\\//amp//WidgetID=\\quot\\+sWidgetID;//crlf////tab////tab//sUrl +=\\quot\\//amp//AllFields=\\quot\\+sFields;//crlf////tab////tab//sUrl +=\\quot\\//amp//Metadata=\\quot\\+sMetadata;//crlf////tab//};//crlf////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getDisplayDialog\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//WidgetID=\\quot\\+sWidgetID+\\quot\\//amp//\\quot\\+getDisplayDialogArguments(sTableID);//crlf////tab//var sFunc=\\quot\\refreshDisplayDialog(\x22\\quot\\+sTableID+\\quot\\\x22\\comma\\\x22\\quot\\+sWidgetID+\\quot\\\x22\\comma\\\\quot\\+bShowDialog+\\quot\\\\comma\\req.responseText)\\quot\\;//crlf////appendToLog(\\quot\\refreshDisplayDialog url=\\quot\\+sUrl\\comma\\false\\comma\\true);//crlf////tab//asynchInclude(eFormWrapper\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///******************************************************************************//crlf//See NOTES ABOUT DISPLAYS comment about how displays are refreshed\\comma\\ saved and deleted//crlf//Delete a display//crlf//******************************************************************************///crlf//function getMetadata(sTableID)//crlf//{//crlf////tab//var fOptions=document.forms[\\quot\\Display_Dialog_\\quot\\+sTableID];//crlf////crlf////tab////see if metadata has been defined in the driver params.  This can be used to override the default metadata//crlf////tab////so displays can be shared by more than one widget//crlf////tab//var table=document.getElementById(sTableID);//crlf////tab//var sParams=table.getAttribute(\\quot\\AspectParams\\quot\\);//crlf////tab//var sMetadata=getElementValue(sParams\\comma\\\\quot\\metadata\\quot\\\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab//if(sMetadata.trim().length>0) return(sMetadata);//crlf////tab////crlf////tab////get the document ID\\comma\\ widget and containerItemID used to make up the metadata//crlf////tab//var sDriverID=fOptions.DriverID.value;//crlf////tab//var sDocumentID=fOptions.DocumentID.value;//crlf////tab//var sWidget=fOptions.Widget.value;//crlf////tab//var sContainerItemID=fOptions.ContainerItemID.value;//crlf////tab//var sMobile=fOptions.MobileDevice.value;//crlf////tab//sMetadata=sDriverID+\\quot\\~~pipe~~\\quot\\+sDocumentID+\\quot\\~~pipe~~\\quot\\+sWidget+\\quot\\~~pipe~~\\quot\\+sContainerItemID+\\quot\\~~pipe~~Mobile_\\quot\\+sMobile;//crlf////tab//return(sMetadata);//crlf//};//crlf////crlf//function deleteDisplay2012(sTableID\\comma\\iStep\\comma\\sMessage)//crlf//{//crlf////tab//var fOptions=document.forms[\\quot\\Display_Dialog_\\quot\\+sTableID];//crlf////tab//var sWidgetID=fOptions.WidgetMetadataID.value;//crlf////tab//var eDialog=document.getElementById(\\quot\\Display_Dialog_\\quot\\+sTableID);//crlf////tab//var eFormWrapper=document.getElementById(\\quot\\Display_Dialog_FormWrapper\\quot\\+sTableID);//crlf////tab//var xy=getPosition2012(eDialog\\comma\\\\quot\\fixed\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab////crlf////tab//switch(iStep)//crlf////tab//{//crlf////tab////tab//case 0://tab////get confirmation//crlf////tab////tab////tab////tab//showDialog(\\quot\\msg=Delete this display?<br><br>//amp//fnOk=deleteDisplay2012(\x22\\quot\\+sTableID+\\quot\\\x22\\comma\\1)//amp//fnCancel=close//amp//position=fixed//amp//left=\\quot\\+(xy[0]+30)+\\quot\\//amp//top=\\quot\\+(xy[1]+20));//crlf////tab////tab////tab////tab//break;//crlf////tab////tab//case 1://tab////delete the display//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////remove confirmation dialog//crlf////tab////tab////tab////tab//showDialog();//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab//var sUrl=getServer()+\\quot\\/?Network=Library//amp//ID=acceptWidgetByID\\quot\\;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//WidgetID=\\quot\\+sWidgetID+\\quot\\//amp//delete=true\\quot\\;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//metadata=\\quot\\+getMetadata(sTableID);//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//source=\\quot\\+document.getElementById(sTableID).getAttribute(\\quot\\hashid\\quot\\);//crlf////crlf////tab////tab////tab////tab////add parameters that will be used to generate and return a new display dialog after the widget is deleted//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//DisplayDialogArgs=\\quot\\+replaceAllSubstrings(getDisplayDialogArguments(sTableID)\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\$displaydialogamp$\\quot\\);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////disable all elements in the dialog//crlf////tab////tab////tab////tab//enableElements(fOptions\\comma\\false);//crlf////crlf////tab////tab////tab////tab////overlay a div to disable clicking on images//crlf////tab////tab////tab////tab//applyOverlay(eFormWrapper\\comma\\\\quot\\Overlay_\\quot\\+sTableID);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////show message//crlf////tab////tab////tab////tab//showDisplayDialogMessage(sTableID\\comma\\\\quot\\Deleting display...\\quot\\);//crlf////crlf////tab////tab////tab////tab//sFunc=\\quot\\deleteDisplay2012('\\quot\\+sTableID+\\quot\\'\\comma\\2\\comma\\req.responseText);\\quot\\;//crlf////tab////tab////tab////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////tab////tab////tab////tab//break;//crlf////tab////tab//case 2://tab////got response from server//crlf////crlf////tab////tab////tab////tab////hide message//crlf////tab////tab////tab////tab//showDisplayDialogMessage(sTableID\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab//if(sMessage.toUpperCase().startsWith(\\quot\\ERROR\\quot\\)) {//crlf////tab////tab////tab////tab////tab////enable all elements in the dialog//crlf////tab////tab////tab////tab////tab//enableElements(fOptions\\comma\\true);//crlf////crlf////tab////tab////tab////tab////tab////remove overlay//crlf////tab////tab////tab////tab////tab//var e=document.getElementById(\\quot\\Overlay_\\quot\\+sTableID);//crlf////tab////tab////tab////tab////tab//if(e) e.parentNode.removeChild(e);//crlf////crlf////tab////tab////tab////tab////tab//showDialog(\\quot\\msg=\\quot\\+sMessage+\\quot\\<br><br>//amp//fnOk=close//amp//position=fixed//amp//left=\\quot\\+(xy[0]+30)+\\quot\\//amp//top=\\quot\\+(xy[1]+20));//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//eFormWrapper.innerHTML=sMessage;//crlf////tab////tab////tab////tab////tab//initializeTabbedDialogs(); //initialize tabs in the display dialog//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//break;//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//See NOTES ABOUT DISPLAYS comment about how displays are refreshed\\comma\\ saved and deleted//crlf//Save a display//crlf//******************************************************************************///crlf//function saveDisplay2012(sTableID\\comma\\iStep\\comma\\sMessage)//crlf//{//crlf////tab//var fOptions=document.forms[\\quot\\Display_Dialog_\\quot\\+sTableID];//crlf////tab//var sWidgetID=fOptions.WidgetMetadataID.value;//crlf////tab//var eDialog=document.getElementById(\\quot\\Display_Dialog_\\quot\\+sTableID);//crlf////tab//var eFormWrapper=document.getElementById(\\quot\\Display_Dialog_FormWrapper\\quot\\+sTableID);//crlf////tab//var xy=getPosition2012(eDialog\\comma\\\\quot\\fixed\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab////crlf////tab////abort if no fields are selected//crlf////tab//if((iStep==0) //amp////amp// (countSelectedFields(sTableID)==0)) {//crlf////tab////tab//showDialog(\\quot\\msg=No fields have been selected for this display//amp//fnOk=close\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////if just starting and the WidgetID is 0\\comma\\ indicating no display has been defined\\comma\\ then go to save option//crlf////tab//if((iStep==0) //amp////amp// (sWidgetID==\\quot\\0\\quot\\)) {//crlf////tab////tab//saveDisplayAs2012(sTableID\\comma\\iStep);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//switch(iStep)//crlf////tab//{//crlf////tab////tab//case 0://tab////save the display//crlf////tab////tab////tab////tab////get the location where the display will be saved (local\\comma\\ company or aspect)//crlf////tab////tab////tab////tab//var sLocation=fOptions.library_location.value;//crlf////crlf////tab////tab////tab////tab////get the arguments from the form//crlf////tab////tab////tab////tab//var sArgs=getDisplayFormValues(sTableID);//crlf////crlf////tab////tab////tab////tab////format the url//crlf////tab////tab////tab////tab//var sUrl=getServer()+\\quot\\/?Network=Library//amp//ID=acceptWidgetByID\\quot\\;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//WidgetID=\\quot\\+sWidgetID;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//metadata=\\quot\\+getMetadata(sTableID);//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//Content=\\quot\\+sArgs;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//mobile=\\quot\\+fOptions.MobileDevice.value;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//source=\\quot\\+document.getElementById(sTableID).getAttribute(\\quot\\hashid\\quot\\);//crlf////crlf////tab////tab////tab////tab////add parameters that will be used to generate and return a new display dialog after the widget is deleted//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//DisplayDialogArgs=\\quot\\+replaceAllSubstrings(getDisplayDialogArguments(sTableID)\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\$displaydialogamp$\\quot\\);//crlf////crlf////tab////tab////tab////tab//sFunc=\\quot\\saveDisplay2012(\x22\\quot\\+sTableID+\\quot\\\x22\\comma\\1\\comma\\req.responseText);\\quot\\;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////Debugging//crlf////tab////tab////tab////tab////appendToLog(\\quot\\Url=\\quot\\+sUrl);//crlf////crlf////tab////tab////tab////tab////disable all elements in the dialog//crlf////tab////tab////tab////tab//enableElements(fOptions\\comma\\false);//crlf////crlf////tab////tab////tab////tab////overlay a div to disable clicking on images//crlf////tab////tab////tab////tab//applyOverlay(eFormWrapper\\comma\\\\quot\\Overlay_\\quot\\+sTableID);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////show message//crlf////tab////tab////tab////tab//showDisplayDialogMessage(sTableID\\comma\\\\quot\\Saving display...\\quot\\);//crlf////crlf////tab////tab////tab////tab////showTableMessage(sTableID\\comma\\\\quot\\Saving display\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////tab////tab////tab////tab//break;//crlf////tab////tab//case 1://tab////got response from server//crlf////crlf////tab////tab////tab////tab////hide message//crlf////tab////tab////tab////tab//showDisplayDialogMessage(sTableID\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////Note: The return value from the asynchInclude call is the html for a new display dialog//crlf////tab////tab////tab////tab////or an error message//crlf////tab////tab////tab////tab//if(sMessage.toUpperCase().startsWith(\\quot\\ERROR\\quot\\)) {//crlf////tab////tab////tab////tab////tab////enable all elements in the dialog//crlf////tab////tab////tab////tab////tab//enableElements(fOptions\\comma\\true);//crlf////crlf////tab////tab////tab////tab////tab////remove overlay//crlf////tab////tab////tab////tab////tab//var e=document.getElementById(\\quot\\Overlay_\\quot\\+sTableID);//crlf////tab////tab////tab////tab////tab//if(e) e.parentNode.removeChild(e);//crlf////crlf////tab////tab////tab////tab////tab//if(sMessage.length==0) sMessage=\\quot\\No response from server.  Try again.\\quot\\;//crlf////tab////tab////tab////tab////tab//showDialog(\\quot\\msg=\\quot\\+sMessage+\\quot\\<br><br>//amp//fnOk=close//amp//position=fixed//amp//left=\\quot\\+(xy[0]+30)+\\quot\\//amp//top=\\quot\\+(xy[1]+20));//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//eFormWrapper.innerHTML=sMessage;//crlf////tab////tab////tab////tab////tab//initializeTabbedDialogs(); //initialize tabs in the display dialog//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//break;//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//See NOTES ABOUT DISPLAYS comment about how displays are refreshed\\comma\\ saved and deleted//crlf//Save a display to a new name//crlf//******************************************************************************///crlf//function saveDisplayAs2012(sTableID\\comma\\iStep\\comma\\sMessage)//crlf//{//crlf////tab//var fSaveAs=document.forms[\\quot\\Save_Display_As_\\quot\\+sTableID];//crlf////tab//var fOptions=document.forms[\\quot\\Display_Dialog_\\quot\\+sTableID];//crlf////tab//var sDisplayName=fSaveAs.save_display_as.value;//crlf////tab//var eDialog=document.getElementById(\\quot\\Display_Dialog_\\quot\\+sTableID);//crlf////tab//var eFormWrapper=document.getElementById(\\quot\\Display_Dialog_FormWrapper\\quot\\+sTableID);//crlf////tab//var xy=getPosition2012(eDialog\\comma\\\\quot\\fixed\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab////crlf////tab////stay on step 0 if a name has not been entered//tab////tab////crlf////tab//if((sDisplayName.length==0) ~~pipe~~~~pipe~~ (sDisplayName.equalsIgnoreCase(\\quot\\New Display\\quot\\))) iStep=0;//crlf////crlf////tab//switch(iStep)//crlf////tab//{//crlf////tab////tab//case 0://tab////show Save As dialog//crlf////tab////tab////tab////tab//setVisible(\\quot\\Save_Display_As_\\quot\\+sTableID\\comma\\true);//crlf////tab////tab////tab////tab//break;//crlf////tab////tab//case 1://tab////save the display//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////get the location where the display will be saved (local\\comma\\ company or aspect)//crlf////tab////tab////tab////tab//var sLocation=fSaveAs.save_display_as_location.value;//crlf////crlf////tab////tab////tab////tab////get the arguments from the form//crlf////tab////tab////tab////tab//var sArgs=getDisplayFormValues(sTableID);//crlf////crlf////tab////tab////tab////tab////format the url//crlf////tab////tab////tab////tab//var sTokenizedName=tokenizeSpecialChars(sDisplayName\\comma\\true);//crlf////tab////tab////tab////tab//var sUrl=getServer()+\\quot\\/?Network=Library//amp//ID=acceptWidgetByID//amp//new=true\\quot\\;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//Name=\\quot\\+sTokenizedName+\\quot\\//amp//Location=\\quot\\+sLocation;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//metadata=\\quot\\+getMetadata(sTableID);//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//Content=\\quot\\+sArgs;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//mobile=\\quot\\+fOptions.MobileDevice.value;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//source=\\quot\\+document.getElementById(sTableID).getAttribute(\\quot\\hashid\\quot\\);//crlf////crlf////tab////tab////tab////tab////add parameters that will be used to generate and return a new display dialog after the widget is deleted//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//DisplayDialogArgs=\\quot\\+replaceAllSubstrings(getDisplayDialogArguments(sTableID)\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\$displaydialogamp$\\quot\\);//crlf////crlf////tab////tab////tab////tab//sFunc=\\quot\\saveDisplayAs2012(\x22\\quot\\+sTableID+\\quot\\\x22\\comma\\2\\comma\\req.responseText);\\quot\\;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////Debugging//crlf////tab////tab////tab////tab////appendToLog(\\quot\\Url=\\quot\\+sUrl\\comma\\false\\comma\\true);//crlf////crlf////tab////tab////tab////tab////hide the save as dialog and show a status message//crlf////tab////tab////tab////tab//setVisible(\\quot\\Save_Display_As_\\quot\\+sTableID\\comma\\false);//crlf////crlf////tab////tab////tab////tab////disable all elements in the dialog//crlf////tab////tab////tab////tab//enableElements(fOptions\\comma\\false);//crlf////crlf////tab////tab////tab////tab////overlay a div to disable clicking on images//crlf////tab////tab////tab////tab//applyOverlay(eFormWrapper\\comma\\\\quot\\Overlay_\\quot\\+sTableID);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////show message//crlf////tab////tab////tab////tab//showDisplayDialogMessage(sTableID\\comma\\\\quot\\Saving display...\\quot\\);//crlf////crlf////tab////tab////tab////tab//appendToLog(\\quot\\saveDisplayAs2012 sUrl=\\quot\\+sUrl);//crlf////tab////tab////tab////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////tab////tab////tab////tab//break;//crlf////tab////tab//case 2://tab////got response from server//crlf////crlf////tab////tab////tab////tab////hide message//crlf////tab////tab////tab////tab//showDisplayDialogMessage(sTableID\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////Note: The return value from the asynchInclude call is OK~~pipe~~WidgetID~~pipe~~Display Name//crlf////tab////tab////tab////tab////or an error message//crlf////tab////tab////tab////tab//if(sMessage.toUpperCase().startsWith(\\quot\\ERROR\\quot\\)) {//crlf////tab////tab////tab////tab////tab////enable all elements in the dialog//crlf////tab////tab////tab////tab////tab//enableElements(fOptions\\comma\\true);//crlf////crlf////tab////tab////tab////tab////tab////remove overlay//crlf////tab////tab////tab////tab////tab//var e=document.getElementById(\\quot\\Overlay_\\quot\\+sTableID);//crlf////tab////tab////tab////tab////tab//if(e) e.parentNode.removeChild(e);//crlf////crlf////tab////tab////tab////tab////tab//showDialog(\\quot\\msg=\\quot\\+sMessage+\\quot\\<br><br>//amp//fnOk=close//amp//position=fixed//amp//left=\\quot\\+(xy[0]+30)+\\quot\\//amp//top=\\quot\\+(xy[1]+20));//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//eFormWrapper.innerHTML=sMessage;//crlf////tab////tab////tab////tab////tab//initializeTabbedDialogs(); //initialize tabs in the display dialog//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//break;//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Called when a display is selected from the table controls.  Causes the table to refresh immediately//crlf//using the new display//crlf//******************************************************************************///crlf//function displaySelected1(eSelect\\comma\\sTableID) //crlf//{//crlf////tab//var sDisplayValue=eSelect.value;//crlf////tab////alert(\\quot\\displaySelected1: TableID=\\quot\\+sTableID+\\quot\\ Display=\\quot\\+sDisplayValue);//crlf////tab//refreshTable(sTableID\\comma\\\\quot\\refresh\\quot\\\\comma\\eSelect.value\\comma\\false);//crlf//};//crlf////crlf///******************************************************************************//crlf//Called when a display is selected from the display dialog.  Causes the dialog to be refreshed with//crlf//the controls from the selected display//crlf//******************************************************************************///crlf//function displaySelected2(eSelect\\comma\\sTableID) //crlf//{//crlf////tab//var sDisplayValue=eSelect.value;//crlf////tab////alert(\\quot\\displaySelected: TableID=\\quot\\+sTableID+\\quot\\ Display=\\quot\\+sDisplayValue);//crlf////tab//refreshDisplayDialog(sTableID\\comma\\sDisplayValue\\comma\\true);//crlf//};//crlf////crlf///******************************************************************************//crlf//Called when a display is selected from the display dialog.  Causes the dialog to be refreshed with//crlf//the controls from the selected display//crlf//******************************************************************************///crlf//function restoreDisplay(sTableID) //crlf//{//crlf////tab//var sDisplayValue=document.getElementById(\\quot\\SelectDisplay2\\quot\\+sTableID).value;//crlf////tab//refreshDisplayDialog(sTableID\\comma\\sDisplayValue\\comma\\true);//crlf//};//crlf////crlf///******************************************************************************//crlf//Used by mobile devices when the cancel button is pressed in the display dialog//crlf//******************************************************************************///crlf//function displayDialogCancel(sTableID)//crlf//{//crlf////tab//setVisible(\\quot\\Display_Dialog_\\quot\\+sTableID\\comma\\false);//crlf////tab//if(bIsMobileDevice) {//crlf////tab////tab//defocusDialog();//crlf////tab////tab//if(false) {//crlf////tab////tab////tab//var arDiv=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab////tab////tab//for (var i=0;i<arDiv.length;i++) {//crlf////tab////tab////tab////tab//if(arDiv[i].getAttribute(\\quot\\hideafteredit\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////tab////tab//setVisible(arDiv[i]\\comma\\false);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(arDiv[i].getAttribute(\\quot\\ShowAfterEdit\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////tab////tab//setVisible(arDiv[i]\\comma\\true);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//window.scrollTo(0\\comma\\document.body.getAttribute('RestoreScrollTop'));//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Called when the display dialog is closed by pressing okay.  Causes the table to be refreshed using//crlf//the display settings in the dialog.//crlf//******************************************************************************///crlf//function displayDialogOk(sTableID)//crlf//{//crlf////tab//setVisible(\\quot\\Display_Dialog_\\quot\\+sTableID\\comma\\false);//crlf////crlf////tab//if(bIsMobileDevice) {//crlf////tab////tab//defocusDialog();//crlf////tab////tab//if(false) {//crlf////tab////tab////tab//var arDiv=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab////tab////tab//for (var i=0;i<arDiv.length;i++) {//crlf////tab////tab////tab////tab//if(arDiv[i].getAttribute(\\quot\\hideafteredit\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////tab////tab//setVisible(arDiv[i]\\comma\\false);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(arDiv[i].getAttribute(\\quot\\ShowAfterEdit\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////tab////tab//setVisible(arDiv[i]\\comma\\true);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//window.scrollTo(0\\comma\\document.body.getAttribute('RestoreScrollTop'));//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//var fOptions=document.forms[\\quot\\Display_Dialog_\\quot\\+sTableID];//crlf////tab//var sDisplayID=fOptions.DisplayName.value;//crlf////tab////alert(\\quot\\displayDialogOk DisplayID=\\quot\\+sDisplayID);//crlf////tab//refreshTable(sTableID\\comma\\\\quot\\refresh\\quot\\\\comma\\sDisplayID\\comma\\true);//crlf////crlf////tab//if(bIsMobileDevice) {//crlf////tab////tab////remove the display dialog from the body.  A new one will be returned when the table is refreshed.//crlf////tab////tab//var div=document.getElementById(\\quot\\Display_Dialog_\\quot\\+sTableID);//crlf////tab////tab//div.parentNode.removeChild(div);//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//open the display dialog.  e is the icon used to open the display dialog//crlf//and will not be defined if called from refreshDisplayDialog.  Probably is //crlf//not needed//crlf//******************************************************************************///crlf//function openDisplayDialog(TableID\\comma\\e) {//crlf////tab//var div=document.getElementById(\\quot\\Display_Dialog_\\quot\\+TableID);//crlf////tab//var table=document.getElementById(TableID);//crlf////crlf////tab////position the dialog//crlf////tab//div.style.top=0;//crlf////tab//div.style.left=0;//crlf////crlf////tab//setVisible(div\\comma\\true);//crlf////crlf////tab////make sure the \\quot\\sort\\quot\\ option is selected in the drop-down used to select the dialog tab//crlf////tab//var eSelect=document.getElementById(\\quot\\SelectDisplayDialogTab\\quot\\+TableID);//crlf////tab//if(eSelect) {//crlf////tab////tab//eSelect.value=\\quot\\display_sort_\\quot\\+TableID;//crlf////tab////tab//showTab(eSelect);//crlf////tab////tab//appendToLog(\\quot\\set sort tab visible\\quot\\);//crlf////tab//};//crlf////crlf////tab////make sure the \\quot\\sort\\quot\\ tab is selected//crlf////tab//var eTab=document.getElementById(\\quot\\DisplayDialogTabSortTab\\quot\\+TableID);//crlf////tab//if(eTab) {//crlf////tab////tab//showTab(eTab\\comma\\\\quot\\display_sort_\\quot\\+TableID);//crlf////tab//};//crlf////crlf////tab////move it down//crlf////tab//var divContainer=document.getElementById(\\quot\\div\\quot\\+TableID);//crlf////tab//var xy=getPosition2012(table.tBodies[0]\\comma\\\\quot\\absolute\\quot\\\\comma\\divContainer);//crlf////tab//div.style.top=xy[1];//crlf////crlf////tab////center the dialog if the table width is greater than the dialog width//crlf////tab//var maxwidth=Math.min(documentWidth()\\comma\\table.tBodies[0].offsetWidth);//crlf////tab//if(maxwidth>div.offsetWidth) {//crlf////tab////tab////don't shift the dialog toward the center if the left position will be small.//crlf////tab////tab////Otherwise\\comma\\ a small (e.g. 9px) margin can be introduced for small screens.//crlf////tab////tab////Might have something to do with the scroll bar//crlf////tab////tab//var left=(maxwidth-div.offsetWidth)/2;//crlf////tab////tab//if(left>20) div.style.left=left;//crlf////tab//};//crlf////crlf////tab////set the height of the table used to select fields//crlf////tab////get the total height of the displays dialog//crlf////tab//var eFormWrapper=document.getElementById(\\quot\\Display_Dialog_FormWrapper\\quot\\+TableID);//crlf////tab//var TotalHeight=eFormWrapper.offsetHeight;//crlf////crlf////tab////determine the top position of the div surrounding the fields table//crlf////tab////This is done by looking for the select box used to select a dialog tab and//crlf////tab////the tab table.  One of them will be visible.//crlf////crlf////tab////look for select box//crlf////tab//var n=0;//crlf////tab//var e=document.getElementById(\\quot\\SelectDisplayDialogTab\\quot\\+TableID);//crlf////tab//if(e) {//crlf////tab////tab//var xy=getPosition2012(e\\comma\\\\quot\\absolute\\quot\\\\comma\\eFormWrapper);//tab////crlf////tab////tab//n=xy[1]+e.offsetHeight;//crlf////tab//};//crlf////crlf////tab////look for table of tabs//crlf////tab//var e=document.getElementById(\\quot\\SelectDisplayDialogTabTable\\quot\\+TableID);//crlf////tab//if(e) {//crlf////tab////tab//var xy=getPosition2012(e\\comma\\\\quot\\absolute\\quot\\\\comma\\eFormWrapper);//tab////crlf////tab////tab//n=Math.max(n\\comma\\xy[1]+e.offsetHeight);//crlf////tab//};//crlf////crlf////tab//if(n>0) {//crlf////tab////tab////the difference is the amount of space left for the fields table//crlf////tab////tab//var AvailableHeight=TotalHeight-n-10;//crlf////tab////crlf////tab////tab//var eFieldsTable=document.getElementById(\\quot\\FieldsSelected_\\quot\\+TableID);//crlf////tab////tab////eFieldsTable.style.height=AvailableHeight;//crlf////crlf////tab////tab//var eFieldsTableContainer=document.getElementById(\\quot\\DisplayDialogFieldsTableContainer\\quot\\+TableID);//crlf////tab////tab//if(eFieldsTableContainer) eFieldsTableContainer.style.height=AvailableHeight;//crlf////tab//};//crlf//};//crlf////crlf////crlf//function oldopenDisplayDialog(TableID\\comma\\e)//crlf//{//crlf////tab//var div=document.getElementById(\\quot\\Display_Dialog_\\quot\\+TableID);//crlf////tab//var table=document.getElementById(TableID);//crlf////tab////crlf////tab//div.style.position=\\quot\\absolute\\quot\\;//crlf////crlf////tab//if(bIsMobileDevice) {//crlf////tab////tab//div.style.top=\\quot\\0px\\quot\\;//crlf////tab////tab//div.style.left=\\quot\\0px\\quot\\;//crlf////tab////tab//div.style.width=getViewportWidth()+\\quot\\px\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//div.style.top=(table.offsetTop+40)+\\quot\\px\\quot\\;//crlf////tab////tab//div.style.left=(table.offsetLeft+20)+\\quot\\px\\quot\\;//crlf////tab//};//crlf////tab////crlf////tab////if it's a mobile device...//crlf////tab//if(bIsMobileDevice) {//crlf////tab////tab////set the width of elements in the dialog//crlf////tab////tab////SelectDisplay2$tableid$//crlf////tab////tab////crlf////tab////tab//focusDialog(div.id);//crlf////tab////tab//div.parentNode.removeChild(div);//crlf////tab////tab//document.body.appendChild(div);//crlf////tab////tab////crlf////tab////tab//if(false) {//crlf////tab////tab////tab////record the current scrolling position of the page so it can be restored when the dialog is closed//crlf////tab////tab////tab//var iScrollTop=0;//crlf////tab////tab////tab//iScrollTop=window.scrollY;//crlf////tab////tab////tab//document.body.setAttribute(\\quot\\RestoreScrollTop\\quot\\\\comma\\iScrollTop);//crlf////crlf////tab////tab////tab////move the dialog to the body element//crlf////tab////tab////tab//div.parentNode.removeChild(div);//crlf////tab////tab////tab//document.body.appendChild(div);//crlf////tab////tab////tab////crlf////tab////tab////tab////Hide all other divs.  Set an attribute to indicate the items that should be //crlf////tab////tab////tab////displayed when the dialog is closed//crlf////tab////tab////tab//var arDiv=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab////tab////tab//for (var i=0;i<arDiv.length;i++) {//crlf////tab////tab////tab////tab//if (boolVal(arDiv[i].getAttribute(\\quot\\isItem\\quot\\))) {//crlf////tab////tab////tab////tab////tab//if(isVisible(arDiv[i])) {//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].setAttribute(\\quot\\ShowAfterEdit\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//setVisible(arDiv[i]\\comma\\false);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].setAttribute(\\quot\\ShowAfterEdit\\quot\\\\comma\\\\quot\\false\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab////set an attribute in the dialog used to identify and hide the dialog//crlf////tab////tab////tab//div.setAttribute(\\quot\\HideAfterEdit\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//setVisible(div\\comma\\true);//crlf////tab////if(bIsMobileDevice) location.hash=\\quot\\//pound//edit\\quot\\;//crlf//};//crlf////crlf///****************************************************************************//crlf//Begin compare Javascript1 and Javascript2012 here//crlf//****************************************************************************///crlf////crlf////Initializes fields selected when the report is first loaded//crlf//function initializeReport() //crlf//{//crlf////tab////The widget ID is not available at this point\\comma\\ so check every form in the document for field named \\quot\\starting_fields_initialized\\quot\\ with a value of false//crlf////tab////This value is set when the widget is initially loaded by a script in the widget.  The widget also sets the fields \\quot\\starting_fields_list\\quot\\ and \\quot\\starting_fields_WidgetID\\quot\\//crlf////tab////This procedure is only necessary so that the display options can be initialized when the widget is first loaded.//crlf////tab//for (var cntrForm=0;cntrForm<document.forms.length;cntrForm++) {//crlf////tab////tab//f=document.forms[cntrForm];//crlf////tab////tab//if ((f.starting_fields_initialized) //amp////amp// (f.starting_fields_initialized.value==\\quot\\false\\quot\\))//crlf////tab////tab//{//crlf////tab////tab////tab//var strWidgetID=f.starting_fields_WidgetID.value;//crlf////tab////tab////tab//var strStartingFields=f.starting_fields_list.value;//crlf////tab////tab////tab////crlf////tab////tab////tab////Need to be careful to not crash this function due to a missing field.  Otherwise\\comma\\ remaining forms will//crlf////tab////tab////tab////not be initialized.//crlf////tab////tab////tab//if(document.forms[\\quot\\Filter\\quot\\+strWidgetID]) {//crlf////tab////tab////tab////tab//var SelectAll=document.forms[\\quot\\Filter\\quot\\+strWidgetID].AllFields;//crlf////tab////tab////tab////tab//var Select2=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsSelected;//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if((!SelectAll) ~~pipe~~~~pipe~~ (!SelectAll.options)) {//crlf////tab////tab////tab////tab//appendToLog(\\quot\\Error in initializeReport.  SelectOptions not valid.  WidgetID=\\quot\\+strWidgetID);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab////Add the selected fields in the order they are listed //crlf////tab////tab////tab////tab//if (true) //This was replaced by selectDisplay() above 12/28/10//crlf////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab//var arStartingFields=getSubStringArray(strStartingFields\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab//for (var i=0;i<arStartingFields.length;i++) {//crlf////tab////tab////tab////tab////tab////tab//var boolFound=false;//crlf////tab////tab////tab////tab////tab////tab//for (var j=0;((!boolFound) //amp////amp// (j<SelectAll.options.length));j++) {//crlf////tab////tab////tab////tab////tab////tab////tab//if (SelectAll.options[j].value.equalsIgnoreCase(arStartingFields[i])) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//Select2.options[Select2.options.length]=new Option(SelectAll.options[j].text\\comma\\SelectAll.options[j].value\\comma\\false\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//boolFound=true;//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////if(!boolFound) appendToLog(\\quot\\Could not find field in all fields: \\quot\\+arStartingFields[i]);//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////update the list of fields available to remove those in the selected list//crlf////tab////tab////tab////tab////tab//updateFieldsAvailable(strWidgetID);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////set the field to indicate that the fields selected list has been initiazed//crlf////tab////tab////tab////tab//f.starting_fields_initialized.value=\\quot\\true\\quot\\;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////move the speed filter fields div //crlf////tab////tab////tab////tab//eInsertBefore=document.getElementById(\\quot\\InsertSpeedFields\\quot\\+strWidgetID);//crlf////tab////tab////tab////tab//eCustomFields=document.getElementById(\\quot\\FilterSpeedFields\\quot\\+strWidgetID);//crlf////tab////tab////tab////tab//if((eInsertBefore) //amp////amp// (eCustomFields)) {//crlf////tab////tab////tab////tab////tab//eParent=document.getElementById(\\quot\\SpeedFilter\\quot\\+strWidgetID);//crlf////tab////tab////tab////tab////tab//eParent.insertBefore(eCustomFields\\comma\\eInsertBefore);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////move the custom fields div inside the customize dialog//crlf////tab////tab////tab////tab////Note: These fields may not be defined if the \\quot\\filter dialog\\quot\\ widget is not included in the page//crlf////tab////tab////tab////tab//eInsertBefore=document.getElementById(\\quot\\InsertCustomFields\\quot\\+strWidgetID);//crlf////tab////tab////tab////tab//eCustomFields=document.getElementById(\\quot\\FilterCustomFields\\quot\\+strWidgetID);//crlf////tab////tab////tab////tab//if((eInsertBefore) //amp////amp// (eCustomFields)) {//crlf////tab////tab////tab////tab////tab//eParent=document.getElementById(\\quot\\CustomFieldsContainer\\quot\\+strWidgetID);//crlf////tab////tab////tab////tab////tab//if(eParent) {//crlf////tab////tab////tab////tab////tab////tab//eParent.insertBefore(eCustomFields\\comma\\eInsertBefore);//crlf////crlf////tab////tab////tab////tab////tab////tab////hide the custom fields section inside the custom dialog if none are defined.//crlf////tab////tab////tab////tab////tab////tab//(eCustomFields.innerHTML.trim().length==0) ? setVisible(\\quot\\CustomFieldsContainer\\quot\\+strWidgetID\\comma\\false) : setVisible(\\quot\\CustomFieldsContainer\\quot\\+strWidgetID\\comma\\true);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////alert(\\quot\\selectDisplay: \\quot\\+strWidgetID+\\quot\\ Name: \\quot\\+document.forms[\\quot\\Filter\\quot\\+strWidgetID].Display.value);//crlf////tab////tab////tab////tab////selectDisplay(strWidgetID);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//initializeCustomControls();//crlf////tab////crlf////tab////This is necessary in case this function is being called by refreshWidgets() after including content using an interval//crlf////tab//initializeTabbedDialogs();//crlf////tab////crlf////tab//addScripts();//crlf//};//crlf////crlf////Refresh the table//crlf//var arRefreshing=\\quot\\\\quot\\;//crlf//function refreshDisplay(strWidgetID\\comma\\strFormName\\comma\\status) {//crlf////tab//if (status) {//crlf////tab////tab//arRefreshing=replaceAllSubstrings(arRefreshing\\comma\\strWidgetID+\\quot\\~~pipe~~\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab//initializeReport();//crlf////tab////tab//showDialog();//crlf////tab////tab//if(status==-1) {//crlf////tab////tab////tab//showDialog(\\quot\\msg=Error refreshing page.//amp//fnOk=close\\quot\\);//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////don't allow the refresh button to be pressed more than once//crlf////tab////tab////Need to consider that there may be multiple calls from different widgets at one time//crlf////tab////tab//if(arRefreshing.indexOf(strWidgetID+\\quot\\~~pipe~~\\quot\\)>=0) return;//crlf////tab////tab//arRefreshing+=strWidgetID+\\quot\\~~pipe~~\\quot\\;//crlf////tab////tab////crlf////tab////tab////hide the customize dialog//crlf////tab////tab//setVisible(\\quot\\Customize\\quot\\+strWidgetID\\comma\\false);//crlf////tab////tab////crlf////tab////tab//showDialog(\\quot\\icon=true//amp//msg=Loading...\\quot\\);//crlf////tab////tab//var strFuncOk=\\quot\\refreshDisplay('\\quot\\+strWidgetID+\\quot\\'\\comma\\'\\quot\\+strFormName+\\quot\\'\\comma\\1)\\quot\\;//crlf////tab////tab//var strFuncErr=\\quot\\refreshDisplay('\\quot\\+strWidgetID+\\quot\\'\\comma\\'\\quot\\+strFormName+\\quot\\'\\comma\\-1)\\quot\\;//crlf////tab////tab//filterTable(strWidgetID\\comma\\strFormName\\comma\\strFuncOk\\comma\\strFuncErr);//crlf////tab//};//crlf//};//crlf////crlf////Initializes display settings when a display is selected//crlf//function selectDisplay(strWidgetID\\comma\\boolRefresh) {//crlf////tab//f=document.forms[\\quot\\Filter\\quot\\+strWidgetID];//crlf////tab////crlf////tab////disable buttons//crlf////tab//f.Display.disabled=true;//crlf////tab////f.Refresh.disabled=true;//crlf////tab////f.Custom.disabled=true;//crlf////crlf////tab////disable all elements//crlf////tab//for (var i=0;i<f.elements.length;i++) {//crlf////tab////tab//f.elements[i].disabled=true;//crlf////tab//};//crlf////crlf////tab////set the name of the display in the custom dialog//crlf////tab//strDisplayID=f.Display.value;//crlf////tab//for (var i=0;i<f.Display.options.length;i++) {//crlf////tab////tab//if (f.Display.options[i].value==strDisplayID) {//crlf////tab////tab////tab//document.getElementById(\\quot\\display_name_\\quot\\+strWidgetID).innerHTML=f.Display.options[i].text;//crlf////tab////tab////tab//f.DisplayName.value=f.Display.options[i].text;//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////get the location of the widget library that contains the display//crlf////tab//var strDisplayServer=f.display_server.value;//crlf////tab////var strUrl=\\quot\\https://__server__/?Network=GreenLight//amp//ID=execScript//amp//ScriptID=GreenLight_getDisplayWidgetInfo//amp//WidgetID=\\quot\\+strDisplayID//crlf////tab//var strUrl=\\quot\\https://__server__/?Network=greenlight//amp//ID=getXmlHttpRequest//amp//url=https://\\quot\\+strDisplayServer+\\quot\\/?Network=GreenLight~~pipe~~ID=execScript~~pipe~~ScriptID=GreenLight_getDisplayWidgetInfo~~pipe~~WidgetID=\\quot\\+strDisplayID//crlf////tab//var strLocation=getxmlHttpRequest(strUrl);//crlf////tab//f.display_widget_library_location.value=strLocation;//crlf////tab////crlf////tab////add the location of the display to the name at the top of the customize dialog//crlf////tab//if(strLocation.toUpperCase().indexOf(\\quot\\ERROR\\quot\\)<0) {//crlf////tab////tab//document.getElementById(strWidgetID+\\quot\\location\\quot\\).innerHTML=strLocation;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//document.getElementById(strWidgetID+\\quot\\location\\quot\\).innerHTML=\\quot\\Error\\quot\\;//crlf////tab//};//crlf////crlf////tab////alert(\\quot\\DisplayID=\\quot\\+strDisplayID);//crlf////tab////var strUrl=\\quot\\https://\\quot\\+strDisplayServer+\\quot\\/?Network=GreenLight//amp//ID=execScript//amp//ScriptID=Aspect_Common_getCachedWidget_By_ID//amp//WidgetID=\\quot\\+strDisplayID//crlf////tab//var strUrl=\\quot\\https://__server__/?Network=greenlight//amp//ID=getXmlHttpRequest//amp//url=https://\\quot\\+strDisplayServer+\\quot\\/?Network=GreenLight~~pipe~~ID=execScript~~pipe~~ScriptID=Aspect_Common_getCachedWidget_By_ID~~pipe~~WidgetID=\\quot\\+strDisplayID;//crlf////tab////alert(\\quot\\strUrl=\\quot\\+strUrl);//crlf////tab//var strContent=getxmlHttpRequest(strUrl);//crlf////tab////alert(\\quot\\display Content=\\quot\\+replaceAllSubstrings(strContent\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\\\quot\\\x0A\\quot\\));//crlf////tab////crlf////tab//var arArgs=getSubStringArray(strContent\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab//for (var i=0;i<arArgs.length;i++) {//crlf////tab////tab//var arStr=getSubStringArray(arArgs[i]\\comma\\\\quot\\=\\quot\\\\comma\\true);//crlf////tab////tab//if (arStr.length>1) {//crlf////tab////tab////tab//if (arStr[0].equalsIgnoreCase(\\quot\\FieldsSelected\\quot\\)) {//crlf////tab////tab////tab////tab//var options=f.elements[\\quot\\FieldsSelected\\quot\\].options;//crlf////tab////tab////tab////tab//options.length=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab//arFields=getSubStringArray(arStr[1]\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////tab////tab////tab////tab//for (var j=0;j<arFields.length;j++) {//crlf////tab////tab////tab////tab////tab//arPair=getSubStringArray(arFields[j]\\comma\\\\quot\\//power//\\quot\\);//crlf////tab////tab////tab////tab////tab//if (arPair.length>1) {//crlf////tab////tab////tab////tab////tab////tab//options[options.length]=new Option(arPair[1]\\comma\\arPair[0]\\comma\\false\\comma\\false);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//var strName=arStr[0].substring(6); //field_ is prepended to all form field names//crlf////tab////tab////tab////tab//var strValue=arStr[1];//crlf////tab////tab////tab////tab//for (var j=2;j<arStr.length;j++) strValue+=\\quot\\=\\quot\\+arStr[j]; //add any additional elements in case the value field contains an equals sign//crlf////crlf////tab////tab////tab////tab//strValue=tokenizeSpecialChars(strValue\\comma\\false);//crlf////tab////tab////tab////tab//var e=f.elements[strName];//crlf////tab////tab////tab////tab//if (e) {//crlf////tab////tab////tab////tab////tab//if (e.type=='checkbox') {//tab////crlf////tab////tab////tab////tab////tab////tab//(strValue.equalsIgnoreCase(\\quot\\true\\quot\\)) ? e.checked=true : e.checked=false;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\set \\quot\\+arStr[0]+\\quot\\ to \\quot\\+strValue);//crlf////tab////tab////tab////tab////tab////tab////alert(\\quot\\set \\quot\\+arStr[0]+\\quot\\ to \\quot\\+strValue);//crlf////tab////tab////tab////tab////tab////tab//e.value=strValue;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////alert(\\quot\\Cannot locate field named \\quot\\+arStr[0]);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////update list of available fields//crlf////tab//updateFieldsAvailable(strWidgetID);//crlf////tab////crlf////tab////enable buttons//crlf////tab//f.Display.disabled=false;//crlf////tab////f.Refresh.disabled=false;//crlf////tab////f.Custom.disabled=false;//crlf////crlf////tab////enable all elements//crlf////tab//for (var i=0;i<f.elements.length;i++) {//crlf////tab////tab//f.elements[i].disabled=false;//crlf////tab//};//crlf////crlf////tab////Enable/disable the save //amp// delete button depending on the location//crlf////tab//if (f.Aspect_Support_Report_Widgets_User.value.startsWith(\\quot\\\x7B\\quot\\)) {//crlf////tab////tab//if (strLocation.equalsIgnoreCase(\\quot\\Aspect\\quot\\)) {//crlf////tab////tab////tab//f.btndelete.disabled=true;//crlf////tab////tab////tab//f.save.disabled=true;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//f.btndelete.disabled=false;//crlf////tab////tab////tab//f.save.disabled=false;//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//f.btndelete.disabled=false;//crlf////tab//};//crlf////crlf////tab////refresh the report - but do not refresh if the customize dialog is open//crlf////tab////This allows different displays to be selected from the drop-down list while the customize dialog is open//crlf////tab////so they can be modified and saved without generating a new report each time//crlf////tab//if ((boolRefresh) //amp////amp// (!isVisible(\\quot\\Customize\\quot\\+strWidgetID))) refreshDisplay(strWidgetID\\comma\\\\quot\\Filter\\quot\\+strWidgetID);//crlf//};//crlf////crlf////Get display widget content.  Reads all of the fields in the form to create the content that will be saved in the widget so the form can be //crlf////initialized again when the display is selected//crlf//function convertFormToWidgetContent(strWidgetID) //crlf//{//crlf////tab//var f=document.forms[\\quot\\Filter\\quot\\+strWidgetID];//crlf////crlf////tab//var strContent=\\quot\\\\quot\\;//crlf////tab////crlf////tab////get the location the widget will be saved to - aspect\\comma\\ company or local//crlf////tab//var strLocation=f.display_widget_library_location.value;//crlf////tab////alert(\\quot\\strLocation=\\quot\\+strLocation);//crlf////tab////crlf////tab////get all form fields with the attribute \\quot\\save\\quot\\//crlf////tab//for (var i=0;i<f.elements.length;i++) {//crlf////tab////tab//if ((f.elements[i].name) //amp////amp// ((f.elements[i].type!=\\quot\\button\\quot\\))) {//crlf////tab////tab////tab//var strAttr=f.elements[i].getAttribute(\\quot\\save\\quot\\);//crlf////tab////tab////tab//if (strAttr) {//crlf////tab////tab////tab////tab////alert(\\quot\\strAttr=\\quot\\+strAttr);//crlf////tab////tab////tab////tab//if ((strAttr.equalsIgnoreCase(\\quot\\aspect\\quot\\)) ~~pipe~~~~pipe~~ (strLocation.equalsIgnoreCase(\\quot\\company\\quot\\)) ~~pipe~~~~pipe~~ (strLocation.equalsIgnoreCase(\\quot\\local\\quot\\))) //crlf////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab//if (f.elements[i].type=='checkbox') {//tab////crlf////tab////tab////tab////tab////tab////tab//(f.elements[i].checked) ? strContent +=\\quot\\field_\\quot\\+f.elements[i].name+\\quot\\=true~~pipe~~\\quot\\ : strContent +=\\quot\\field_\\quot\\+f.elements[i].name+\\quot\\=false~~pipe~~\\quot\\;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//strContent +=\\quot\\field_\\quot\\+f.elements[i].name+\\quot\\=\\quot\\+tokenizeSpecialChars(f.elements[i].value\\comma\\true)+\\quot\\~~pipe~~\\quot\\;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////get the list of fields selected//crlf////tab//var arFieldsSelected=new Array();//crlf////tab//var Select2=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsSelected;//crlf////tab//for (var i=0;i<Select2.options.length;i++) {//crlf////tab////tab//arFieldsSelected[arFieldsSelected.length]=Select2.options[i].value+\\quot\\//power//\\quot\\+Select2.options[i].text;//crlf////tab////tab////arFieldsSelected[arFieldsSelected.length]=Select2.options[i].value;//crlf////tab//};//crlf////tab//strContent +=\\quot\\FieldsSelected=\\quot\\+arFieldsSelected.toString()+\\quot\\~~pipe~~\\quot\\;//crlf////tab////crlf////tab//return(strContent);//crlf//};//crlf////crlf////Shows or hides the div showing the status while saving a widget//crlf//function showDisplayOptionsStatus(strWidgetID\\comma\\strDisplayName\\comma\\strMsg\\comma\\boolShow\\comma\\boolShowCloseButton) {//crlf////tab//if (boolShow) {//crlf////tab////tab//divFilter=document.getElementById(\\quot\\Filter\\quot\\+strWidgetID);//crlf////tab////tab//divStatus=document.getElementById(\\quot\\Display_Options_Status\\quot\\+strWidgetID);//crlf////tab////tab//divStatus.style.left=(divFilter.offsetLeft+30)+\\quot\\px\\quot\\;//crlf////tab////tab//var intTopAdjust=getContainerAdjustment(document.getElementById(\\quot\\Customize\\quot\\+strWidgetID));//crlf////tab////tab//divStatus.style.top=(divFilter.offsetTop+divFilter.offsetHeight+30-intTopAdjust)+\\quot\\px\\quot\\;//crlf////tab////tab//divStatus.style.zIndex=4;//crlf////tab////tab////crlf////tab////tab//document.getElementById(\\quot\\Display_Options_Status_Message\\quot\\+strWidgetID).innerHTML=strMsg;//crlf////tab////tab//setVisible(\\quot\\Display_Options_Status\\quot\\+strWidgetID\\comma\\true);//crlf////tab////tab//(boolShowCloseButton) ? setVisible(\\quot\\Display_Options_Status_Button\\quot\\\\comma\\boolShowCloseButton) : setVisible(\\quot\\Display_Options_Status_Button\\quot\\\\comma\\false);//crlf////crlf////tab////tab//var arXY=getPosition(divFilter);//crlf////tab////tab//divStatus.style.top=(arXY[1]+60-intTopAdjust)+\\quot\\px\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//setVisible(\\quot\\Display_Options_Status\\quot\\+strWidgetID\\comma\\false);//crlf////tab//};//crlf//};//crlf////crlf////Saves display settings to the selected widget.  The documentID and widget name are used to create the metadata field for the widget//crlf////so it can be associated with a particular table.  The script looks up the location of the widget (Aspect\\comma\\ Company Widgets or Local Widgets)//crlf////before saving//crlf//function saveDisplay(strWidgetID\\comma\\strDocumentID\\comma\\strWidgetName) {//crlf////tab////alert(\\quot\\save display DocumentID=\\quot\\+strDocumentID+\\quot\\ WidgetID=\\quot\\+strWidgetID+\\quot\\ WidgetName=\\quot\\+strWidgetName);//crlf////tab//var str=convertFormToWidgetContent(strWidgetID);//crlf////tab//str=replaceAllSubstrings(str\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\\\quot\\\\\\\\quot\\+\\quot\\pipe\\\\\\quot\\); //crlf////tab//var strDisplayWidgetID=document.forms[\\quot\\Filter\\quot\\+strWidgetID].Display.value;//crlf////tab//if (strDisplayWidgetID.trim().length==0) {//crlf////tab////tab//alert(\\quot\\Cannot save unnamed display.  Select Save As to enter a name for the display.\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab////show status message//crlf////tab//var strDisplayName=document.getElementById(\\quot\\display_name_\\quot\\+strWidgetID).innerHTML;//crlf////tab//var strLocation=document.forms[\\quot\\Filter\\quot\\+strWidgetID].display_widget_library_location.value;//crlf////tab//var strMsg=\\quot\\Saving \x22\\quot\\+strDisplayName+\\quot\\\x22 to \\quot\\+strLocation+\\quot\\ displays.\\quot\\//crlf////tab//showDisplayOptionsStatus(strWidgetID\\comma\\strWidgetName\\comma\\strMsg\\comma\\true);//crlf////tab////crlf////tab//var strUrl=\\quot\\https://__server__/?Network=Library//amp//ID=acceptWidgetByID//amp//WidgetID=\\quot\\+strDisplayWidgetID+\\quot\\//amp//metadata=\\quot\\+strDocumentID+\\quot\\_\\quot\\+strWidgetName+\\quot\\//amp//Content=\\quot\\+str;//crlf////tab////crlf////tab////need to use xmlhttprequest when the page is served by a remote server.  The problem with this though is that the local widget cache//crlf////tab////is not updated when the display is saved because acceptWidgetByID is not called locally//crlf////tab//var strDisplayServer=document.forms[\\quot\\Filter\\quot\\+strWidgetID].display_server.value;//crlf////tab//if (strDisplayServer.indexOf(\\quot\\127.0.0.1\\quot\\)<=0) {//crlf////tab////tab//strUrl=\\quot\\https://__server__/?Network=greenlight//amp//ID=getXmlHttpRequest//amp//url=https://\\quot\\+strDisplayServer+\\quot\\/?Network=Library~~pipe~~ID=acceptWidgetByID~~pipe~~WidgetID=\\quot\\+strDisplayWidgetID+\\quot\\~~pipe~~metadata=\\quot\\+strDocumentID+\\quot\\_\\quot\\+strWidgetName+\\quot\\~~pipe~~Content=\\quot\\+str;//crlf////tab//};//crlf////crlf////tab//appendToLog(\\quot\\Saving Display.  Url=\\quot\\+strUrl\\comma\\false\\comma\\true);//crlf////crlf////tab//strResult=getxmlHttpRequest(strUrl);//crlf////tab////crlf////tab////hide status message//crlf////tab//showDisplayOptionsStatus(strWidgetID\\comma\\strWidgetName\\comma\\\\quot\\\\quot\\\\comma\\false);//crlf////tab////crlf////tab////alert(\\quot\\strResult=\\quot\\+strResult);//crlf//};//crlf////crlf////Used to save a display to a new name.  The boolGetName argument is set to true when the function is first called.//crlf////This displays the dialog used to get the display name and location.  When the function is called again from the//crlf////dialog\\comma\\ boolGetName is false and the display is saved as a widget//crlf//function saveDisplayAs(strWidgetID\\comma\\strDocumentID\\comma\\strWidgetName\\comma\\boolGetName) //crlf//{//crlf////tab//var f=document.forms[\\quot\\Filter\\quot\\+strWidgetID];//crlf////tab//var strDisplayName=f.save_display_as.value;//crlf////crlf////tab//if ((boolGetName) ~~pipe~~~~pipe~~ (strDisplayName.trim().length==0)) {//crlf////tab////tab//divFilter=document.getElementById(\\quot\\Filter\\quot\\+strWidgetID);//crlf////tab////tab//divSaveAs=document.getElementById(\\quot\\Save_Display_As\\quot\\+strWidgetID);//crlf////tab////tab//divSaveAs.style.left=(divFilter.offsetLeft+30)+\\quot\\px\\quot\\;//crlf////tab////tab//var intTopAdjust=getContainerAdjustment(document.getElementById(\\quot\\Customize\\quot\\+strWidgetID));//crlf////tab////tab//divSaveAs.style.top=(divFilter.offsetTop+divFilter.offsetHeight+30-intTopAdjust)+\\quot\\px\\quot\\;//crlf////tab////tab//divSaveAs.style.zIndex=4;//crlf////tab////tab//setVisible(\\quot\\Save_Display_As\\quot\\+strWidgetID\\comma\\true);//crlf////crlf////tab////tab//var arXY=getPosition(divFilter);//crlf////tab////tab//divSaveAs.style.top=(arXY[1]+60-intTopAdjust)+\\quot\\px\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//setVisible(\\quot\\Save_Display_As\\quot\\+strWidgetID\\comma\\false);//crlf////tab////tab////alert(\\quot\\save display DocumentID=\\quot\\+strDocumentID+\\quot\\ WidgetID=\\quot\\+strWidgetID+\\quot\\ WidgetName=\\quot\\+strWidgetName);//crlf////crlf////tab////tab//var strLocation=f.save_display_as_location.value;//crlf////tab////tab//var str=convertFormToWidgetContent(strWidgetID);//crlf////crlf////tab////tab////show status message//crlf////tab////tab//showDisplayOptionsStatus(strWidgetID\\comma\\strDisplayName\\comma\\\\quot\\Saving display: \\quot\\+strDisplayName\\comma\\true);//crlf////tab////tab////crlf////tab////tab//var strTokenizedName=tokenizeSpecialChars(strDisplayName\\comma\\true);//crlf////tab////tab//var strUrl=\\quot\\https://__server__/?Network=Library//amp//ID=acceptWidgetByID//amp//new=true//amp//Name=\\quot\\+strTokenizedName+\\quot\\//amp//Location=\\quot\\+strLocation+\\quot\\//amp//metadata=\\quot\\+strDocumentID+\\quot\\_\\quot\\+strWidgetName+\\quot\\//amp//Content=\\quot\\+str;//crlf////tab////tab//appendToLog(\\quot\\strUrl=\\quot\\+strUrl);//crlf////crlf////tab////tab//var strResult=\\quot\\\\quot\\;//crlf////tab////tab//strResult=getxmlHttpRequest(strUrl);//crlf////tab////tab////crlf////tab////tab////add the display to the list of displays//crlf////tab////tab//if (strResult.startsWith(\\quot\\ok\\quot\\)) {//crlf////tab////tab////tab//var arString=getSubStringArray(strResult\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////tab////tab//if (arString.length>2) {//crlf////tab////tab////tab////tab//var f=document.forms[\\quot\\Filter\\quot\\+strWidgetID];//crlf////tab////tab////tab////tab//arString[2]=tokenizeSpecialChars(arString[2]\\comma\\false);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////add the display to the drop down list and select it//crlf////tab////tab////tab////tab//f.Display.options[f.Display.options.length]=new Option(arString[2]\\comma\\arString[1]\\comma\\false\\comma\\false);//crlf////tab////tab////tab////tab//f.Display.value=arString[1];//tab////crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////set the name of the display in the customize div//crlf////tab////tab////tab////tab//document.getElementById(\\quot\\display_name_\\quot\\+strWidgetID).innerHTML=arString[2];//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////set the name of the display passed when refreshing the widget//crlf////tab////tab////tab////tab//f.DisplayName.value=arString[2];//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////hide status message//crlf////tab////tab////tab//showDisplayOptionsStatus(strWidgetID\\comma\\strWidgetName\\comma\\\\quot\\\\quot\\\\comma\\false);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//showDisplayOptionsStatus(strWidgetID\\comma\\strWidgetName\\comma\\strResult\\comma\\true\\comma\\true);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf////Deletes a display.  The boolConfirm argument is set to true the first time this function is called which causes the confirmation//crlf////dialog to be displayed.  When this function is called from the confirmation dialog\\comma\\ the widget is deleted//crlf//function deleteDisplay(strWidgetID\\comma\\boolConfirm) {//crlf////tab//if (boolConfirm) {//crlf////tab////tab//divFilter=document.getElementById(\\quot\\Filter\\quot\\+strWidgetID);//crlf////tab////tab//divDelete=document.getElementById(\\quot\\Delete_Display\\quot\\+strWidgetID);//crlf////tab////tab//divDelete.style.left=(divFilter.offsetLeft+30)+\\quot\\px\\quot\\;//crlf////tab////tab//var intTopAdjust=getContainerAdjustment(document.getElementById(\\quot\\Customize\\quot\\+strWidgetID));//crlf////tab////tab//divDelete.style.top=(divFilter.offsetTop+divFilter.offsetHeight+30-intTopAdjust)+\\quot\\px\\quot\\;//crlf////tab////tab//divDelete.style.zIndex=4;//crlf////tab////tab//document.getElementById(\\quot\\Confirm_Delete_Message\\quot\\+strWidgetID).innerHTML=document.getElementById(\\quot\\display_name_\\quot\\+strWidgetID).innerHTML;//crlf////tab////tab//setVisible(\\quot\\Delete_Display\\quot\\+strWidgetID\\comma\\true);//crlf////crlf////tab////tab//var arXY=getPosition(divFilter);//crlf////tab////tab//divDelete.style.top=(arXY[1]+60-intTopAdjust)+\\quot\\px\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//setVisible(\\quot\\Delete_Display\\quot\\+strWidgetID\\comma\\false);//crlf////crlf////tab////tab////show status message//crlf////tab////tab//var strDisplayName=document.getElementById(\\quot\\display_name_\\quot\\+strWidgetID).innerHTML;//crlf////tab////tab//showDisplayOptionsStatus(strWidgetID\\comma\\strDisplayName\\comma\\\\quot\\Deleting display: \\quot\\+strDisplayName\\comma\\true\\comma\\false);//crlf////tab////tab////crlf////tab////tab//var str=convertFormToWidgetContent(strWidgetID);//crlf////tab////tab//var strDisplayWidgetID=document.forms[\\quot\\Filter\\quot\\+strWidgetID].Display.value;//crlf////tab////tab//var strUrl=\\quot\\https://__server__/?Network=Library//amp//ID=acceptWidgetByID//amp//WidgetID=\\quot\\+strDisplayWidgetID+\\quot\\//amp//delete=true\\quot\\;//crlf////crlf////tab////tab////need to use xmlhttprequest when the page is served by a remote server.  The problem with this though is that the local widget cache//crlf////tab////tab////is not updated when the display is saved because acceptWidgetByID is not called locally//crlf////tab////tab//var strDisplayServer=document.forms[\\quot\\Filter\\quot\\+strWidgetID].display_server.value;//crlf////tab////tab//if (strDisplayServer.indexOf(\\quot\\127.0.0.1\\quot\\)<=0) {//crlf////tab////tab////tab////strUrl=\\quot\\https://__server__/?Network=greenlight//amp//ID=getXmlHttpRequest//amp//url=https://\\quot\\+strDisplayServer+\\quot\\/?Network=Library~~pipe~~ID=acceptWidgetByID~~pipe~~WidgetID=\\quot\\+strDisplayWidgetID+\\quot\\~~pipe~~delete=true\\quot\\;//crlf////tab////tab////tab//strUrl=\\quot\\https://\\quot\\+strDisplayServer+\\quot\\/?Network=Library//amp//ID=acceptWidgetByID//amp//WidgetID=\\quot\\+strDisplayWidgetID+\\quot\\//amp//delete=true\\quot\\;//crlf////tab////tab//};//crlf////crlf////tab////tab//strResult=getxmlHttpRequest(strUrl);//crlf////crlf////tab////tab////alert(\\quot\\delete display Result=\\quot\\+strResult);//crlf////tab////tab//if ((true) ~~pipe~~~~pipe~~ (strResult.startsWith(\\quot\\ok\\quot\\))) {//crlf////tab////tab////tab////remove the display from the drop-down list and select the next one up//crlf////tab////tab////tab//var f=document.forms[\\quot\\Filter\\quot\\+strWidgetID];//crlf////tab////tab////tab//var intNewSelection=-1;//crlf////tab////tab////tab//for (var i=0;i<f.Display.options.length;i++) {//crlf////tab////tab////tab////tab//if (f.Display.options[i].value==strDisplayWidgetID) {//crlf////tab////tab////tab////tab////tab//intNewSelection=i-1;//crlf////tab////tab////tab////tab////tab//f.Display.options[i]=null;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//if (intNewSelection<0) intNewSelection=0;//crlf////tab////tab////tab//if (intNewSelection<f.Display.options.length) {//crlf////tab////tab////tab////tab//f.Display.value=f.Display.options[intNewSelection].value;//crlf////tab////tab////tab////tab//selectDisplay(strWidgetID);//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////hide status message//crlf////tab////tab////tab//showDisplayOptionsStatus(strWidgetID\\comma\\strDisplayName\\comma\\\\quot\\\\quot\\\\comma\\false);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//showDisplayOptionsStatus(strWidgetID\\comma\\strDisplayName\\comma\\strResult\\comma\\true\\comma\\true);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf////Updates tooltips for selected fields//crlf//function setTooltipsForFieldsSelected(strWidgetID) {//crlf////tab//if (document.forms[\\quot\\Filter\\quot\\+strWidgetID]) {//crlf////tab////tab//var SelectAll=document.forms[\\quot\\Filter\\quot\\+strWidgetID].AllFields;//crlf////tab////tab//var Select2=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsSelected;//crlf////tab////tab//for (var i=0;i<Select2.options.length;i++) {//crlf////tab////tab////tab//for (var j=0;j<SelectAll.options.length;j++) {//crlf////tab////tab////tab////tab//if (SelectAll.options[j].value==Select2.options[i].value) {//crlf////tab////tab////tab////tab////tab//if (SelectAll.options[j].getAttribute(\\quot\\tooltip\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab//Select2.options[i].setAttribute(\\quot\\onMouseOver\\quot\\\\comma\\\\quot\\javascript:showTooltip(event\\comma\\'\\quot\\+SelectAll.options[j].getAttribute(\\quot\\tooltip\\quot\\)+\\quot\\'\\comma\\10\\comma\\10)\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//Select2.options[i].setAttribute(\\quot\\onMouseOut\\quot\\\\comma\\\\quot\\javascript:showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf////updates the list of fields available from the AllFields select box//crlf////this provides a single function that can be used to update the list whenever fields are added or removed from the selectd field//crlf////so the list only displays those fields not in the selected field list//crlf//function updateFieldsAvailable(strWidgetID) {//crlf////tab//var SelectAll=document.forms[\\quot\\Filter\\quot\\+strWidgetID].AllFields;//crlf////tab//var Select1=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsAvailable;//crlf////tab//var Select2=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsSelected;//crlf////tab////crlf////tab////make an array of all the values in the list of fields selected//crlf////tab//var strValues=\\quot\\~~pipe~~\\quot\\;//crlf////tab//for (var i=0;i<Select2.options.length;i++) strValues +=Select2.options[i].value + \\quot\\~~pipe~~\\quot\\;//crlf////crlf////tab////clear the list of fields available//crlf////tab//Select1.options.length=0;//crlf////tab////crlf////tab////add in all fields not in the list of selected fields//crlf////tab//for (var i=0;i<SelectAll.options.length;i++) {//crlf////tab////tab//if (strValues.indexOf(\\quot\\~~pipe~~\\quot\\+SelectAll.options[i].value+\\quot\\~~pipe~~\\quot\\)<0) {//crlf////tab////tab////tab//var ndx=Select1.options.length;//crlf////tab////tab////tab//Select1.options[ndx]=new Option(SelectAll.options[i].text\\comma\\SelectAll.options[i].value\\comma\\false\\comma\\false);//crlf////tab////tab////tab//if (SelectAll.options[i].getAttribute(\\quot\\tooltip\\quot\\)) {//crlf////tab////tab////tab////tab//Select1.options[ndx].setAttribute(\\quot\\onMouseOver\\quot\\\\comma\\\\quot\\javascript:showTooltip(event\\comma\\'\\quot\\+SelectAll.options[i].getAttribute(\\quot\\tooltip\\quot\\)+\\quot\\'\\comma\\10\\comma\\10)\\quot\\);//crlf////tab////tab////tab////tab//Select1.options[ndx].setAttribute(\\quot\\onMouseOut\\quot\\\\comma\\\\quot\\javascript:showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////set tooltips for all fields selected//crlf////tab//setTooltipsForFieldsSelected(strWidgetID);//crlf//};//crlf////crlf////adds fields to the list of selected fields.  Called when the 'Add' button is selected//crlf//function addSelectedFields(strWidgetID) {//crlf////tab//var Select1=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsAvailable;//crlf////tab//var Select2=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsSelected;//crlf////tab////crlf////tab////get insertion index - This is the first field selected in the list of selected fields//crlf////tab//var intInsertIndex=-1;//crlf////tab//for (var i=0;(intInsertIndex<0) //amp////amp// (i<Select2.options.length);i++) {//crlf////tab////tab//if (Select1.options[i].selected) intInsertIndex=i;//crlf////tab//};//crlf////tab////crlf////tab//for (var i=0;i<Select1.options.length;i++) {//crlf////tab////tab//if (Select1.options[i].selected) {//crlf////tab////tab////tab//var intInsertAt=Select2.options.length;//crlf////tab////tab////tab//Select2.options[intInsertAt]=new Option(Select1.options[i].text\\comma\\Select1.options[i].value\\comma\\false\\comma\\false);//crlf////tab////tab////tab//if (Select1.options[i].getAttribute(\\quot\\tooltip\\quot\\)) {//crlf////tab////tab////tab////tab//Select2.options[ndx].setAttribute(\\quot\\onMouseOver\\quot\\\\comma\\\\quot\\javascript:showTooltip(event\\comma\\'\\quot\\+Select1.options[i].getAttribute(\\quot\\tooltip\\quot\\)+\\quot\\'\\comma\\10\\comma\\10)\\quot\\);//crlf////tab////tab////tab////tab//Select2.options[ndx].setAttribute(\\quot\\onMouseOut\\quot\\\\comma\\\\quot\\javascript:showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//updateFieldsAvailable(strWidgetID);//crlf//};//crlf////crlf////removes fields from the list of selected fields.  Called when the remove button is pressed//crlf//function removeSelectedFields(strWidgetID) {//crlf////tab//var Select2=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsSelected;//crlf////tab//var Cntr=0;//crlf////tab//do {//crlf////tab////tab//(Select2.options[Cntr].selected) ? Select2.options[Cntr]=null : Cntr++;//crlf////tab//} while (Cntr<Select2.options.length);//crlf////tab////tab////tab////tab////crlf////tab//updateFieldsAvailable(strWidgetID);//crlf//};//crlf////crlf////moves a field up or down by one//crlf//function moveField(Select\\comma\\Index\\comma\\Direction) {//crlf////tab//if (Index>=Select.options.length) return;//crlf////tab//if ((Index+Direction>Select.options.length-1) ~~pipe~~~~pipe~~ (Index+Direction<0)) return;//crlf////tab////crlf////tab//var strText=Select.options[Index].text;//crlf////tab//var strValue=Select.options[Index].value;//crlf////tab//var boolSelected=Select.options[Index].selected;//crlf////tab//Select.options[Index].text=Select.options[Index+Direction].text;//crlf////tab//Select.options[Index].value=Select.options[Index+Direction].value;//crlf////tab//Select.options[Index].selected=Select.options[Index+Direction].selected;//crlf////tab//Select.options[Index+Direction].text=strText;//crlf////tab//Select.options[Index+Direction].value=strValue;//crlf////tab//Select.options[Index+Direction].selected=boolSelected;//crlf//};//crlf////crlf////moves selected fields up//crlf//function moveFieldsUp(strWidgetID) {//crlf////tab//var Select2=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsSelected;//crlf////tab//for (var i=0;i<Select2.options.length;i++) {//crlf////tab////tab//if (Select2.options[i].selected) moveField(Select2\\comma\\i\\comma\\-1);//crlf////tab//};//crlf////tab////crlf////tab////set tooltips for all fields selected//crlf////tab//setTooltipsForFieldsSelected(strWidgetID);//crlf//};//crlf////crlf////moves selected fields down//crlf//function moveFieldsDown(strWidgetID) {//crlf////tab//var Select2=document.forms[\\quot\\Filter\\quot\\+strWidgetID].FieldsSelected;//crlf////tab//for (var i=Select2.options.length-1;i>=0;i--) {//crlf////tab////tab//if (Select2.options[i].selected) moveField(Select2\\comma\\i\\comma\\1);//crlf////tab//};//crlf////tab////crlf////tab////set tooltips for all fields selected//crlf////tab//setTooltipsForFieldsSelected(strWidgetID);//crlf//};//crlf////crlf////Displays the dialog used to customize a display//crlf//function editFilter(strWidgetID\\comma\\e)//crlf//{//crlf////tab////Abort if the display is refreshing//crlf////tab//if(arRefreshing.indexOf(strWidgetID+\\quot\\~~pipe~~\\quot\\)>=0) return;//crlf////crlf////tab////initialize fields available from the master list (less those in the selected list)//crlf////tab//updateFieldsAvailable(strWidgetID);//crlf////tab////crlf////tab//divFilter=document.getElementById(\\quot\\Filter\\quot\\+strWidgetID);//tab////The div containing the display drop-down and save/delete/refresh buttons//crlf////tab//divCustom=document.getElementById(\\quot\\Customize\\quot\\+strWidgetID); //The div containing the display settings.  This is the div that will be made visible.//crlf////tab//divCustomFields=document.getElementById(\\quot\\FilterCustomFields\\quot\\+strWidgetID); //The div containing fields specific to the selected table.  It is contained in the custom div//crlf////crlf////tab////just close the filter dialog if it's already open - this allows the custom option to act as a toggle//crlf////tab//if(isVisible(divCustom)) {//crlf////tab////tab//setVisible(divCustom\\comma\\false);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var intTop=divFilter.offsetTop+divFilter.offsetHeight;//crlf////tab////crlf////tab////adjust the top coordinate if the widget is being displayed inside an absolutely positioned div in a widget container.//crlf////tab////The absolute positioning of the div causes the filter dialog to be positioned relative to the container div//crlf////tab//var intTopAdjust=getContainerAdjustment(document.getElementById(\\quot\\Customize\\quot\\+strWidgetID));//crlf////tab////crlf////tab//divCustom.style.left=divFilter.offsetLeft+\\quot\\px\\quot\\;//crlf////tab////divCustom.style.width=divFilter.offsetLeft+divFilter.offsetWidth+\\quot\\px\\quot\\;//crlf////tab//divCustom.style.top=intTop-intTopAdjust;//crlf////tab//divCustom.style.zIndex=3;//crlf////tab//setVisible(\\quot\\Customize\\quot\\+strWidgetID\\comma\\true);//crlf////tab//divCustom.style.height=(400+divCustomFields.offsetHeight)+\\quot\\px\\quot\\;//crlf////crlf////tab//if (e) {//crlf////tab////tab//var d=document.getElementById(\\quot\\Customize\\quot\\+strWidgetID);//crlf////tab////tab//var arXY=getPosition(e);//crlf////tab////tab//d.style.top=(arXY[1]+30-intTopAdjust)+\\quot\\px\\quot\\;//crlf////tab////tab////(arXY[1]>=20) ? d.style.top=(arXY[1]-20)+\\quot\\px\\quot\\ : d.style.top=\\quot\\0px\\quot\\;//crlf////tab////tab////d.style.left=0;//crlf////tab//};//crlf////tab////crlf////tab////divCustom.style.width=divContainer.offsetWidth;//crlf//};//crlf////crlf////Closes the dialog used to customize a display//crlf//function closeEditFilter(strWidgetID) {//crlf////tab//setVisible(\\quot\\Customize\\quot\\+strWidgetID\\comma\\false)//crlf//};//crlf////crlf///******************************************************************************//crlf//Displays a message on top of the display dialog.  Used to provide a consistent look//crlf//******************************************************************************///crlf//function showDisplayDialogMessage(sTableID\\comma\\msg)//crlf//{//crlf////tab//var dMsg=document.getElementById(\\quot\\Display_Dialog_Msg_\\quot\\+sTableID);//crlf////tab//if(dMsg) {//crlf////tab////tab//if((msg) //amp////amp// (msg.length>0)) {//crlf////tab////tab////tab//dMsg.innerHTML=msg;//crlf////tab////tab////tab//setVisible(dMsg\\comma\\true);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//setVisible(dMsg\\comma\\false);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///*************************************************************************//crlf//Called when a sort selection is made in the displays dialog//crlf//*************************************************************************///crlf//function selectSort(e\\comma\\TableID)//crlf//{//crlf////tab//validateSubtotalSelections(e\\comma\\TableID);//crlf//};//crlf////crlf///*************************************************************************//crlf//Called when a subtotal checkbox is clicked in the displays dialog//crlf//*************************************************************************///crlf//function selectSubtotal(e\\comma\\TableID)//crlf//{//crlf////tab//validateSubtotalSelections(e\\comma\\TableID);//crlf//};//crlf////crlf///*************************************************************************//crlf//Ensures that the sort and subtotal selectsions in the displays dialog are valid//crlf//*************************************************************************///crlf//function validateSubtotalSelections(e\\comma\\TableID)//crlf//{//crlf////tab//var eSort=new Array();//crlf////tab//eSort[0]=document.getElementById(\\quot\\SortBy1_\\quot\\+TableID);//crlf////tab//eSort[1]=document.getElementById(\\quot\\SortBy2_\\quot\\+TableID);//crlf////tab//eSort[2]=document.getElementById(\\quot\\SortBy3_\\quot\\+TableID);//crlf////tab//eSort[3]=document.getElementById(\\quot\\SortBy4_\\quot\\+TableID);//crlf////tab////crlf////tab//var eSubtotal=new Array();//crlf////tab//eSubtotal[0]=document.getElementById(\\quot\\Subtotal1_\\quot\\+TableID);//crlf////tab//eSubtotal[1]=document.getElementById(\\quot\\Subtotal2_\\quot\\+TableID);//crlf////tab//eSubtotal[2]=document.getElementById(\\quot\\Subtotal3_\\quot\\+TableID);//crlf////tab//eSubtotal[3]=document.getElementById(\\quot\\Subtotal4_\\quot\\+TableID);//crlf////crlf////tab//var eSubtotalsOnly=document.getElementById(\\quot\\SubtotalsOnly_\\quot\\+TableID);//crlf////tab//var eGrandtotalsOnly=document.getElementById(\\quot\\GrandtotalsOnly_\\quot\\+TableID);//crlf////crlf////tab//var cSubtotal=0;//crlf////tab//for(var i=0;i<4;i++) {//crlf////tab////tab//if(eSort[i].value==\\quot\\0\\quot\\) {//crlf////tab////tab////tab//eSubtotal[i].checked=false;//crlf////tab////tab////tab//eSubtotal[i].enabled=false;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//eSubtotal[i].enabled=true;//crlf////tab////tab//};//crlf////tab////tab//if(eSubtotal[i].checked) cSubtotal++;//crlf////tab//};//crlf////tab////tab////crlf////tab//if(cSubtotal==0) {//crlf////tab////tab//eSubtotalsOnly.checked=false;//crlf////tab////tab//eSubtotalsOnly.enabled=false;//crlf////tab////tab//eGrandtotalsOnly.checked=false;//crlf////tab////tab//eGrandtotalsOnly.enabled=false;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//eSubtotalsOnly.enabled=false;//crlf////tab////tab//eGrandtotalsOnly.enabled=false;//crlf////tab//};//crlf//};^
ID=208063|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///***********************************************************************************//crlf//Called by various widgets to refresh a widget or execute a command.  For example\\comma\\//crlf//called from the inventory maintenance debugging page when a button is pressed to//crlf//execute a command on the remote computer.//crlf//Params://crlf////tab//WidgetArgs - The widget to be retrieved e.g. source=xxx//amp//documentID=xxx...//crlf////tab//OutputID - Optional ID of the element to receive output from the widget//crlf////tab//ShowIcon - If true\\comma\\ a wait icon will be displayed in the OutputID //crlf//***********************************************************************************///crlf//function getEmbeddedWidget(WidgetArgs\\comma\\OutputID\\comma\\ShowIcon) {//crlf////tab//var sUrl=getServer()+\\quot\\/?network=greenlight//amp//id=getWidget//amp//\\quot\\+WidgetArgs;//crlf////tab//var e=null;//crlf////tab//if(OutputID) {//crlf////tab////tab//e=document.getElementById(OutputID);//crlf////tab////tab//if(ShowIcon) showStatusIcon(e);//crlf////tab//};//crlf////tab//asynchInclude(e\\comma\\sUrl\\comma\\\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\);//crlf//};//crlf////crlf///***********************************************************************//crlf//Evaluates an Aspect expression and records the result in the element//crlf//given by e.  Can be used to update content without having to create//crlf//a separate Aspect script to get the content.//crlf//***********************************************************************///crlf//function aspectEval(e\\comma\\Expression\\comma\\ShowIcon)//crlf//{//crlf////tab//if(ShowIcon) showStatusIcon(e);//crlf////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=getWidget\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em//amp//Widget=Notification Queries\\quot\\//crlf////tab//sUrl +=\\quot\\//amp//query=evaluateExpression//amp//Expression=\\quot\\+replaceAllSubstrings(Expression\\comma\\\\quot\\ \\quot\\\\comma\\\\quot\\\\x20\\quot\\);//crlf////tab//var sFunc=\\quot\\aspect(''\\comma\\s)\\quot\\;//crlf////tab//asynchInclude(e\\comma\\sUrl);//crlf//};//crlf////crlf///***********************************************************************************//crlf//opens a document using the default viewer//crlf//***********************************************************************************///crlf//function openDocument(Filename\\comma\\HashID)//crlf//{//crlf////tab//var sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget\\quot\\;//crlf////tab//sUrl+=\\quot\\//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em//amp//Widget=Notification Container//amp//ContainerItemID=543755\\quot\\;//crlf////tab//sUrl+=\\quot\\//amp//Action=openDocument//amp//Filename=\\quot\\+Filename;//crlf////tab//if(HashID) sUrl +=\\quot\\//amp//Source=\\quot\\+HashID;//crlf////tab//asynchInclude(null\\comma\\sUrl);//crlf//};//crlf////crlf///***********************************************************************************//crlf//Opens the given file in the default viewer for the file type.//crlf//Called by the \\quot\\view\\quot\\ field in the greenlight generic filespec driver//crlf//***********************************************************************************///crlf//function launchFileViewer(e\\comma\\CustomerID\\comma\\Filename\\comma\\top\\comma\\Result)//crlf//{//crlf////tab//var left=400;//crlf////crlf////tab//if(Result) {//crlf////tab////tab//showDialog();//crlf////tab////tab//if(Result.toUpperCase().startsWith(\\quot\\ERROR\\quot\\)) {//crlf////tab////tab////tab//showDialog(\\quot\\msg=\\quot\\+Result+\\quot\\<br><br>//amp//fnok=close//amp//left=\\quot\\+left+\\quot\\//amp//top=\\quot\\+top);//crlf////tab////tab//};//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var xy=getPosition2012(e\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab//var top=xy[1];//crlf////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//Source={AspectHashID}\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//DocumentID=CExis5b6ybLmITZ2wF7XmGwk//amp//Widget=Notification Queries\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//query=launchViewerForRemoteFile//amp//CustomerID=\\quot\\+CustomerID+\\quot\\//amp//RemoteFilename=\\quot\\+Filename;//crlf////tab//showDialog(\\quot\\icon=true//amp//msg=Opening \\quot\\+Filename+\\quot\\ from \\quot\\+CustomerID+\\quot\\//amp//left=\\quot\\+left+\\quot\\//amp//top=\\quot\\+top);//crlf////tab//var sFunc=\\quot\\launchFileViewer(null\\comma\\\x22\\quot\\+CustomerID+\\quot\\\x22\\comma\\\x22\\quot\\+Filename+\\quot\\\x22\\comma\\\\quot\\+top+\\quot\\\\comma\\s)\\quot\\;//crlf//  asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf//function getTextDocumentForEditing(DialogID)//crlf//{//crlf////tab//var d=document.getElementById(DialogID);//crlf////tab//var sHashID=d.getAttribute(\\quot\\aspecthashid\\quot\\);//crlf////crlf////tab////get the filename from the span element containing it//crlf////tab//var sFlename=\\quot\\\\quot\\;//crlf////tab//var arSpan=d.getElementsByTagName(\\quot\\span\\quot\\);//crlf////tab//for (var i=0;i<arSpan.length;i++) {//crlf////tab////tab//if(arSpan[i].getAttribute(\\quot\\name\\quot\\).equalsIgnoreCase(\\quot\\filename\\quot\\)) //crlf////tab////tab//{//crlf////tab////tab////tab//sFilename=arSpan[i].innerHTML;//crlf////tab////tab////tab//var eContent=document.getElementById(\\quot\\statecontent\\quot\\+DialogID);//crlf////crlf////tab////tab////tab//var bIsDirectory=false;//crlf////tab////tab////tab//var e=document.getElementById(\\quot\\RemoteIsDirectory\\quot\\+DialogID);//crlf////tab////tab////tab//if(e) {//crlf////tab////tab////tab////tab//if(e.value.equalsIgnoreCase(\\quot\\true\\quot\\)) {//crlf////tab////tab////tab////tab////tab//bIsDirectory=true;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//e=document.getElementById(\\quot\\RemoteIsDirectory\\quot\\+DialogID);//crlf////tab////tab////tab////tab////tab//if(e) {//crlf////tab////tab////tab////tab////tab////tab//if(e.value.equalsIgnoreCase(\\quot\\true\\quot\\)) bIsDirectory=true;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if(!bIsDirectory) //crlf////tab////tab////tab//{//crlf////tab////tab////tab////tab////show status icon.  Add some padding to the bottom of it so the dialog doesn't //crlf////tab////tab////tab////tab////noticeably shrink and expand in height in an annoying way.//crlf////tab////tab////tab////tab//var img=new Image();//crlf////tab////tab////tab////tab//img.src=imageStatusActive.src;//crlf////tab////tab////tab////tab//img.style.paddingBottom=\\quot\\1000px\\quot\\;//crlf////tab////tab////tab////tab//eContent.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab//eContent.appendChild(img);//crlf////tab////tab////tab////tab//eContent.appendChild(document.createTextNode(\\quot\\ Loading...\\quot\\));//crlf////tab////crlf////tab////tab////tab////tab////make a request to load the document into the content div//crlf////tab////tab////tab////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=getWidget//amp//Source=\\quot\\+sHashID+\\quot\\//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em//amp//Widget=Notification Queries\\quot\\;//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//query=fileGetContent//amp//filename=\\quot\\+sFilename;//crlf////tab////tab////tab////tab////appendToLog(\\quot\\sUrl=\\quot\\+sUrl\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab//asynchInclude(eContent\\comma\\sUrl);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//eContent.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************************//crlf//Called by clicking the run icon in the scheduled tasks table//crlf//***********************************************************************************///crlf//function runAspectTask(e\\comma\\CustomerID\\comma\\DriverID\\comma\\TaskName\\comma\\top\\comma\\left\\comma\\Result)//crlf//{//crlf////crlf////tab//if(Result) {//crlf////tab////tab//showDialog(\\quot\\msg=\\quot\\+Result+\\quot\\<br><br>//amp//fnok=close//amp//left=\\quot\\+left+\\quot\\//amp//top=\\quot\\+top);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var xy=getPosition2012(e\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab//var top=xy[1];//crlf////tab//var left=xy[0];//crlf////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+CustomerID;//crlf////tab//sUrl +=\\quot\\//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em//amp//Widget=Notification Queries\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//query=execScheduledTask//amp//TaskDriverID=\\quot\\+DriverID+\\quot\\//amp//TaskName=\\quot\\+TaskName;//crlf////tab//showDialog(\\quot\\icon=true//amp//msg=Executing \\quot\\+TaskName+\\quot\\ on \\quot\\+CustomerID+\\quot\\//amp//left=\\quot\\+left+\\quot\\//amp//top=\\quot\\+top);//crlf////tab//var sFunc=\\quot\\runAspectTask(null\\comma\\\x22\\quot\\+CustomerID+\\quot\\\x22\\comma\\\x22\\quot\\+DriverID+\\quot\\\x22\\comma\\\x22\\quot\\+TaskName+\\quot\\\x22\\comma\\\\quot\\+top+\\quot\\\\comma\\\\quot\\+left+\\quot\\\\comma\\s)\\quot\\;//crlf//  asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf//^
ID=80555|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************************************//crlf//Videos//crlf//******************************************************************************************************///crlf////Plays the video with the given ID//crlf////Right now\\comma\\ the ID represents a youtube video ID.  In the future\\comma\\ it could be changed to indicate a file on another server//crlf//function playVideo(strVideoID) //crlf//{//crlf////tab////get the div that will display the video//crlf////tab//var div=document.getElementById(\\quot\\video_display\\quot\\);//crlf////tab////crlf////tab////add a div if one has not been included on the page//crlf////tab//if (!div) {//crlf////tab////tab//div=document.createElement('div');//crlf////tab////tab//div.className=\\quot\\play_video\\quot\\;//crlf////tab////tab//div.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\play_video\\quot\\);//crlf////tab////tab//div.id=\\quot\\video_display\\quot\\;//crlf////tab////tab//div.style.position=\\quot\\absolute\\quot\\;//crlf////tab////tab//div.style.top=\\quot\\50px\\quot\\;//crlf////tab////tab//div.style.left=\\quot\\0px\\quot\\; //crlf////tab////tab//div.style.width=\\quot\\1024px\\quot\\;//crlf////tab////tab//div.style.height=\\quot\\596px\\quot\\;//crlf////tab////tab//div.style.borderStyle=\\quot\\solid\\quot\\;//crlf////tab////tab//div.style.borderWidth=\\quot\\1px\\quot\\;//crlf////tab////tab//div.style.padding=\\quot\\0px\\quot\\;//crlf////tab////tab//div.style.margin=\\quot\\0px\\quot\\;//crlf////tab////tab//div.style.backgroundColor=\\quot\\white\\quot\\;//crlf////tab////tab//div.style.zIndex=99;//crlf////tab////tab//document.body.appendChild(div);//crlf////tab//};//crlf////crlf////tab//var str=\\quot\\<div class='close_video'><a href='//pound//home' onClick='setVisible(\x22video_display\x22\\comma\\false)'>Close this window</a></div>\\quot\\;//crlf////tab//str +=\\quot\\<object ID='embedded_video'>\\quot\\;//crlf////tab//str +=\\quot\\<embed src=http://www.youtube.com/v/\\quot\\+strVideoID+\\quot\\?fs=1//amp//amp;hl=en_US type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='1024' height='576'>\\quot\\;//crlf////tab//str +=\\quot\\</object>\\quot\\;//crlf////tab//div.innerHTML=str;//crlf////tab//setVisible(\\quot\\video_display\\quot\\\\comma\\true);//crlf//};//crlf////crlf//// This function does not work in IE.  Errors are thrown in the appendChild functions//crlf//function playVideo1(strVideoID) //crlf//{//crlf////tab////create the embed object//crlf////tab//var obj=document.createElement('object');//crlf////tab//obj.setAttribute(\\quot\\ID\\quot\\\\comma\\\\quot\\embedded_video\\quot\\);//crlf////crlf////tab////set the parameters//crlf////tab//var param=document.createElement('param');//crlf////tab//param.setAttribute(\\quot\\allowFullScreen\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab//param.setAttribute(\\quot\\allowscriptaccess\\quot\\\\comma\\\\quot\\always\\quot\\);//crlf////tab//param.setAttribute(\\quot\\name\\quot\\\\comma\\\\quot\\movie\\quot\\);//crlf////tab//obj.appendChild(param);//crlf////crlf////tab//var param=document.createElement('embed');//crlf////tab//param.setAttribute(\\quot\\src\\quot\\\\comma\\\\quot\\http://www.youtube.com/v/\\quot\\+strVideoID+\\quot\\?fs=1//amp//amp;hl=en_US\\quot\\);  //crlf////tab//param.setAttribute(\\quot\\type\\quot\\\\comma\\\\quot\\application/x-shockwave-flash\\quot\\);//crlf////tab//param.setAttribute(\\quot\\allowscriptaccess\\quot\\\\comma\\\\quot\\always\\quot\\);//crlf////tab//param.setAttribute(\\quot\\allowfullscreen\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab//param.setAttribute(\\quot\\width\\quot\\\\comma\\\\quot\\1024\\quot\\);//crlf////tab//param.setAttribute(\\quot\\height\\quot\\\\comma\\\\quot\\576\\quot\\);//crlf////tab//obj.appendChild(param);//crlf////crlf////tab////get the div that will display the video//crlf////tab//var div=document.getElementById(\\quot\\video_display\\quot\\);//crlf////tab////crlf////tab////add a div if one has not been included on the page//crlf////tab//if (!div) {//crlf////tab////tab//div=document.createElement('div');//crlf////tab////tab//div.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\play_video\\quot\\);//crlf////tab////tab//div.setAttribute(\\quot\\id\\quot\\\\comma\\\\quot\\video_display\\quot\\);//crlf////tab////tab//var divClose=document.createElement('div');//crlf////tab////tab//divClose.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\close_video\\quot\\);//crlf////tab////tab//var a=document.createElement('a');//crlf////tab////tab//a.setAttribute(\\quot\\href\\quot\\\\comma\\\\quot\\javascript:setVisible('video_display'\\comma\\false)\\quot\\);//crlf////tab////tab//a.onclick=Function(\\quot\\setVisible('video_display'\\comma\\false)\\quot\\);//crlf////tab////tab//a.innerHTML=\\quot\\Close this window\\quot\\;//crlf////tab////tab//divClose.appendChild(a);//crlf////tab////tab//div.appendChild(divClose);//crlf////tab////tab////crlf////tab////tab//document.body.appendChild(div);//crlf////tab//};//crlf////crlf////tab////remove any existing video from the div//crlf////tab//var v=document.getElementById(\\quot\\embedded_video\\quot\\);//crlf////tab//if (v) div.removeChild(v);//crlf////tab////crlf////tab////add the new video//crlf////tab//div.appendChild(obj);//crlf////tab//setVisible(\\quot\\video_display\\quot\\\\comma\\true);//crlf//};//crlf////crlf//^
ID=902418|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************************************//crlf//ComboBox//crlf//******************************************************************************************************///crlf//function comboBox(aFormName\\comma\\aInputName\\comma\\aSelectName)//crlf//{//crlf////alert(\\quot\\initializing comboBox(\\quot\\+aFormName+\\quot\\\\comma\\\\quot\\+aInputName+\\quot\\\\comma\\\\quot\\+aSelectName+\\quot\\)\\quot\\);//crlf//appendToLog(\\quot\\initialize combobox(\\quot\\+aFormName+\\quot\\\\comma\\\\quot\\+aInputName+\\quot\\\\comma\\\\quot\\+aSelectName+\\quot\\)\\quot\\);//tab////crlf////tab////Array of options originally added to the select box//crlf////tab//this.arOptionName=new Array();//crlf////tab//this.arOptionValue=new Array();//crlf////tab////crlf////tab////Create an ID for the combobox and add it to the array of comboboxes//crlf////tab//if (!window.arComboBox) window.arComboBox=[];//crlf////tab//this.ID=window.arComboBox.length;//crlf////tab//window.arComboBox[this.ID]=this;//crlf////tab////crlf////tab//this.comboBoxShow=f_comboBoxShow;//crlf////tab//this.comboBoxHide=f_comboBoxHide;//crlf////tab//this.comboBoxHideIfNotSelectFocused=f_comboBoxHideIfNotSelectFocused;//crlf////tab//this.comboBoxToggle=f_comboBoxToggle;//crlf////tab//this.comboBoxUpdateList=f_comboBoxUpdateList;//crlf////tab//this.comboBoxSetValue=f_comboBoxSetValue;//crlf////tab//this.comboBoxSelectHasFocus=f_comboBoxSelectHasFocus;//crlf////crlf////tab//eForm=document.forms[aFormName];//crlf////tab//if (eForm) {//crlf////tab////tab//this.eInput=eForm.elements[aInputName];//crlf////tab////tab//this.eSelect=eForm.elements[aSelectName];//crlf////tab////tab//if (!this.eInput) alert(\\quot\\Error initializing comboBox.  Input does not exist: \\quot\\+aInputName);//crlf////tab////tab//if (!this.eSelect) alert(\\quot\\Error initializing comboBox.  Select does not exist: \\quot\\+aSelectName);//crlf////tab////tab//if ((!this.eInput) ~~pipe~~~~pipe~~ (!this.eSelect)) return;//crlf////tab////tab////crlf////tab////tab//this.SelectHasFocus=false;//crlf////tab////tab////crlf////tab////tab////add functions to the input and select controls//crlf////tab////tab//this.eInput.onclick=Function(\\quot\\arComboBox['\\quot\\ + this.ID + \\quot\\'].comboBoxShow()\\quot\\);//crlf////tab////tab//this.eInput.onkeyup=Function(\\quot\\arComboBox['\\quot\\ + this.ID + \\quot\\'].comboBoxUpdateList()\\quot\\);//crlf////tab////tab//this.eInput.onblur=Function(\\quot\\arComboBox['\\quot\\ + this.ID + \\quot\\'].comboBoxHideIfNotSelectFocused()\\quot\\);//crlf////tab////tab//this.eSelect.onclick=Function(\\quot\\arComboBox['\\quot\\+ this.ID + \\quot\\'].comboBoxHide()\\quot\\);//crlf////tab////tab//this.eSelect.onfocus=Function(\\quot\\arComboBox['\\quot\\+ this.ID + \\quot\\'].comboBoxSelectHasFocus()\\quot\\);//crlf////tab////tab//this.eSelect.onblur=Function(\\quot\\arComboBox['\\quot\\+ this.ID + \\quot\\'].comboBoxHide()\\quot\\);//crlf////tab////tab////crlf////tab////tab////save a copy of the options defined in the select input//crlf////tab////tab//for (var i=0;i<this.eSelect.length;i++) {//crlf////tab////tab////tab//this.arOptionName[i]=this.eSelect.options[i].text;//crlf////tab////tab////tab//this.arOptionValue[i]=this.eSelect.options[i].value;//crlf////tab////tab////tab//if ((i==0) ~~pipe~~~~pipe~~ (this.eSelect.options[i].value==this.eSelect.value)) this.eInput.value=this.eSelect.options[i].text;//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//alert(\\quot\\Error initializing comboBox.  Form does not exist: \\quot\\+aFormName);//crlf////tab//};//crlf//};//crlf////crlf//function f_comboBoxSetValue() //crlf//{//crlf////tab//if ((this.eInput) //amp////amp// (this.eSelect)) {//crlf////tab////tab//for (var i=0;i<this.eSelect.length;i++) {//crlf////tab////tab////tab//if (this.eSelect.options[i].value.equalsIgnoreCase(this.eSelect.value)) {//crlf////tab////tab////tab////tab//this.eInput.value=this.eSelect.options[i].text.trim();//crlf////tab////tab////tab////tab//return;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function f_comboBoxUpdateList() //crlf//{//crlf////tab////clear the select box//crlf////tab//while (this.eSelect.length>0) this.eSelect.remove(0);//crlf////tab////crlf////tab////get the text displayed in the input box//crlf////tab//var str=this.eInput.value.toUpperCase();//crlf////tab////crlf////tab////add options that contain the text//crlf////tab//for (var i=0;i<this.arOptionName.length;i++) //crlf////tab//{//crlf////tab////tab//if ((str.length==0) ~~pipe~~~~pipe~~ (this.arOptionName[i].toUpperCase().indexOf(str)>=0))//crlf////tab////tab//{//crlf////tab////tab////tab//var eOption=document.createElement(\\quot\\option\\quot\\);//crlf////tab////tab////tab//eOption.text=this.arOptionName[i];//crlf////tab////tab////tab//eOption.value=this.arOptionValue[i];//crlf////tab////tab////tab//try {//crlf////tab////tab////tab////tab//this.eSelect.add(eOption\\comma\\null);//tab//// standards compliant; doesn't work in IE//crlf////tab////tab////tab//}//crlf////tab////tab////tab//catch(ex) {//crlf////tab////tab////tab////tab//this.eSelect.add(eOption);//tab//// IE only//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function f_comboBoxHideIfNotSelectFocused() {//crlf////tab//if (this.SelectHasFocus==false) this.comboBoxHide();//crlf//};//crlf////crlf//function f_comboBoxSelectHasFocus() {//crlf////tab//this.SelectHasFocus=true;//crlf//};//crlf////crlf//function f_comboBoxShow() {//crlf////tab//if (this.eSelect) {//crlf////tab////tab////position and size the select box//crlf////tab////tab//this.eSelect.style.left=this.eInput.offsetLeft;//crlf////tab////tab//this.eSelect.style.top=this.eInput.offsetTop+this.eInput.offsetHeight;//crlf////tab////tab//this.eSelect.style.zIndex=10000;//crlf////tab////tab//this.eSelect.style.width=this.eInput.offsetWidth;//crlf////tab////tab////crlf////tab////tab//this.eSelect.style.display=\\quot\\block\\quot\\;//crlf////tab//};//crlf//};//crlf////crlf//function f_comboBoxHide() {//crlf////tab//if (this.eSelect) {//crlf////tab////tab//this.comboBoxSetValue();//crlf////tab////tab//this.eSelect.style.display=\\quot\\none\\quot\\;//crlf////tab////tab//this.SelectHasFocus=false;//crlf////tab//};//crlf//};//crlf////crlf//function f_comboBoxToggle() {//crlf////tab////alert(\\quot\\toggle combobox\\quot\\);//crlf////tab//if (this.eSelect) {//crlf////tab////tab//if (this.eSelect.style.display==\\quot\\none\\quot\\) {//crlf////tab////tab////tab//this.comboBoxShow();//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//this.comboBoxHide();//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf//^
ID=69513|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//<include type:expression; expression:htmlConstant(\\quot\\BackgroundColor\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\if(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))\\comma\\\\quot\\black\\quot\\\\comma\\\\quot\\white\\quot\\))>//crlf//<include type:expression; expression:htmlConstant(\\quot\\ForegroundColor\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\if(boolean(indirect(getToken(\\quot\\UIReverseColors\\quot\\)))\\comma\\\\quot\\white\\quot\\\\comma\\\\quot\\black\\quot\\))>//crlf////crlf///****************************************************************************//crlf//Fields://crlf////tab//TableID//tab////tab////tab//- ID of table for which dawta is being submitted//crlf////tab//HashID//tab////tab////tab//- HashID//crlf////tab//DriverID//tab////tab//- Driver ID//crlf////tab//DriverParams//tab//- Driver params//crlf////tab//KeyExpression//tab//- Key Expression//crlf////tab//AllFieldID//tab////tab//- All Field ID's//crlf////tab//AllFieldType//tab//- All Field Types//crlf//****************************************************************************///crlf//var arTableMetadata=new Array();//crlf////crlf///****************************************************************************//crlf//Fields://crlf////tab//TableID//tab////tab////tab//- ID of table for which data is being submitted//crlf////tab//KeyValue//tab////tab//- Key value//crlf////tab//FieldID//tab////tab////tab//- Field ID of data//crlf////tab//Value//tab////tab////tab//- Value to be submitted//crlf////tab//Status//tab////tab////tab//- 0 - data has been added to the array.  This is the first step//crlf////tab////tab////tab////tab////tab//  1 - data has been submitted to the server//crlf////tab////tab////tab////tab////tab//  2 - data submission is complete//crlf////tab////tab////tab////tab////tab//  3 - data was replaced by new data before it was submitted//crlf////tab//IsNewRecord//tab////tab//- True if the data is being recorded for a new record//crlf////tab//IsDeletedRecord//tab//- True if the data is being recorded to delete a record//crlf////tab//tAdd//tab////tab////tab//- Time added//crlf////tab//tSubmit//tab////tab////tab//- Time submitted//crlf////tab//tComplete//tab////tab//- Time complete//crlf////tab//tConfirmed//tab////tab//- boolean value indicating that submission of the data to the server has been confirmed//crlf//****************************************************************************///crlf//var arPendingDataSubmissions=new Array();//crlf////crlf///****************************************************************************//crlf//This variable is used to turn debugging information on or off for all functions //crlf//related to submitting of data from a table//crlf//****************************************************************************///crlf//var bEnableSubmissionDebugging=false;//crlf////crlf///****************************************************************************//crlf//Start the data submission loop//crlf//****************************************************************************///crlf//initDataSubmissionLoop();//crlf////crlf//function initDataSubmissionLoop() {//crlf////tab//if(eval(\\quot\\typeof dataSubmissionLoop\\quot\\)==\\quot\\function\\quot\\) {//crlf////tab////tab//dataSubmissionLoop();//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//setTimeout(\\quot\\initDataSubmissionLoop()\\quot\\\\comma\\3000);//crlf//};//crlf////crlf///******************************************************************************//crlf//This function is called by clicking a checkbox in the UI settings in the support//crlf//home widget.  A div with the ID debugDataSubmissionWrapper is defined in the //crlf//Support Home 2015 widget.  This div contains a div with the ID debugDataSubmission_.//crlf//When the checkbox is clicked\\comma\\ the wrapper is made visible and the trailing underscore is //crlf//removed ID contained in the div.//crlf//******************************************************************************///crlf//function showDataSubmissionStatus(b) {//crlf////tab//var d=document.getElementById(\\quot\\debugDataSubmissionWrapper\\quot\\);//crlf////tab//if(!d) return;//crlf////crlf////tab//if(b) {//crlf////tab////tab//setVisible(d\\comma\\true);//crlf////tab////tab//bEnableSubmissionDebugging=true;//crlf////tab////tab//var d1=document.getElementById(\\quot\\debugDataSubmission_\\quot\\);//crlf////tab////tab//if(d1) d1.id=\\quot\\debugDataSubmission\\quot\\;//crlf////tab////tab//d1=document.getElementById(\\quot\\debugDataSubmissionLog_\\quot\\);//crlf////tab////tab//if(d1) d1.id=\\quot\\debugDataSubmissionLog\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//setVisible(d\\comma\\false);//crlf////tab////tab//bEnableSubmissionDebugging=false;//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Clears the data submission log contained in the div with the ID debugDataSubmissionLog //crlf//and clears the arPendingDataSubmissions array.  //crlf//******************************************************************************///crlf//function clearDatasubmissionLog() {//crlf////tab//var d=document.getElementById(\\quot\\debugDataSubmission\\quot\\);//crlf////tab//if(d) d.innerHTML=\\quot\\\\quot\\;//crlf////tab//d=document.getElementById(\\quot\\debugDataSubmissionLog\\quot\\);//crlf////tab//if(d) d.innerHTML=\\quot\\\\quot\\;//crlf////tab//arPendingDataSubmissions.length=0;//crlf//};//crlf////crlf//function appendToSubmitLog(s) {//crlf////tab//var d=document.getElementById(\\quot\\debugDataSubmissionLog\\quot\\);//crlf////tab//if(!d) return;//crlf////tab////crlf////tab//var s1=replaceAllSubstrings(replaceAllSubstrings(s\\comma\\\\quot\\<\\quot\\\\comma\\\\quot\\//amp//lt;\\quot\\)\\comma\\\\quot\\>\\quot\\\\comma\\\\quot\\//amp//gt;\\quot\\);//crlf////tab//var s1=replaceAllSubstrings(s1\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\@\\quot\\);//crlf////tab//s1=formatDate(new Date()\\comma\\\\quot\\HH:mm:ss:SSS\\quot\\)+\\quot\\ \\quot\\+s1;//crlf////tab//d.innerHTML+=s1+\\quot\\\r\n\\quot\\;//crlf////tab//if(console) console.log(s1);//crlf//};//crlf////crlf//function debugDataSubmission() {//crlf////tab//var div=document.getElementById(\\quot\\debugDataSubmission\\quot\\);//crlf////tab//if(!div) return;//crlf////tab//var arStatusDescription=new Array('New'\\comma\\'Submitted'\\comma\\'Complete'\\comma\\'Replaced');//crlf////tab//var sTable=\\quot\\\\quot\\;//crlf////tab//sTable=\\quot\\<table class='bordered'>\\quot\\;//crlf////tab//sTable +=\\quot\\<tr>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>n</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>TableID</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>Key</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>FieldID</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>Value</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>Status</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>Add</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>Submit</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>Submit Confirmed</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>Complete</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>New</th>\\quot\\;//crlf////tab//sTable +=\\quot\\<th align='left'>Delete</th>\\quot\\;//crlf////tab//sTable +=\\quot\\</tr>\\quot\\;//crlf////tab//for(var i=0;i<arPendingDataSubmissions.length;i++) {//crlf////tab////tab//sTable +=\\quot\\<tr>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+i+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+arPendingDataSubmissions[i].TableID+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+replaceAllSubstrings(arPendingDataSubmissions[i].KeyValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\ \\quot\\)+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+replaceAllSubstrings(arPendingDataSubmissions[i].FieldID\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\ \\quot\\)+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+replaceAllSubstrings(arPendingDataSubmissions[i].Value\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\ \\quot\\)+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+arPendingDataSubmissions[i].Status+\\quot\\-\\quot\\+arStatusDescription[arPendingDataSubmissions[i].Status]+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+arPendingDataSubmissions[i].tAdd+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+arPendingDataSubmissions[i].tSubmit+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+arPendingDataSubmissions[i].tConfirmed+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+arPendingDataSubmissions[i].tComplete+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+arPendingDataSubmissions[i].IsNewRecord+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\<td>\\quot\\+arPendingDataSubmissions[i].IsDeletedRecord+\\quot\\</td>\\quot\\;//crlf////tab////tab//sTable +=\\quot\\</tr>\\quot\\;//crlf////tab//};//crlf////tab//sTable +=\\quot\\</table>\\quot\\//crlf////tab//div.innerHTML=sTable;//crlf//};//crlf////crlf///******************************************************************************//crlf//This counter is used to determine if a call to submitTableData is active.  //crlf//The dataSubmissionLoop() will avoid removing completed records from the array //crlf//if a call is in progress.//crlf//******************************************************************************///crlf//var cSubmitTableData=0;//crlf////crlf///******************************************************************************//crlf//This function adds data to the arPendingDataSubmissions arrau.//crlf////tab//ATableID//tab//- ID of the table for which data is being submitted//crlf////tab//AKeyValue//tab//- Comma-delimited list of one or more key values.  //crlf////tab//AFieldID//tab//- Comma-delimited list of field ID's//crlf////tab//AValue//tab////tab//- Comma-delimited list of values.  Commas in the values must be tokenized//crlf////tab////tab////tab////tab//  using the word comma preceeded and followed by two forward slashes.  //crlf////tab////tab////tab////tab//  submitTableCell() and submitDialogCell() tokenize commas before calling //crlf////tab////tab////tab////tab//  this function.//crlf////tab////tab////tab////tab//  //crlf////tab//The number of FieldID's and Values must be the same.  The number of KeyValues must //crlf////tab//also equal the number of fields and values or it may be a single key value to record all //crlf////tab//data using the same key.//crlf////tab////crlf////tab//Note: Need to overwrite fields that already exist in the array but that have not been submitted yet//crlf//******************************************************************************///crlf//function submitTableData(ATableID\\comma\\AKeyValue\\comma\\AFieldID\\comma\\AValue\\comma\\AIsNewRecord\\comma\\AIsDeletedRecord) {//crlf////tab////increment the flag used to determine if this function is active//crlf////tab//cSubmitTableData++;//crlf////tab////crlf////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\submitTableData: ATableID:\\quot\\+ATableID+\\quot\\ AKeyValue:\\quot\\+AKeyValue+\\quot\\ AFieldID:\\quot\\+AFieldID+\\quot\\ AValue:\\quot\\+AValue+\\quot\\ AIsNewRecord:\\quot\\+AIsNewRecord);//crlf////tab//var arKeyValue=getSubStringArray(AKeyValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//var arFieldID=getSubStringArray(AFieldID\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//var arValue=getSubStringArray(AValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////crlf////tab////abort if the number of fields and number of values are not the same//crlf////tab//if(arFieldID.length!=arValue.length) {//crlf////tab////tab//appendToSubmitLog(\\quot\\Error: submitTableData: ATableID:\\quot\\+ATableID+\\quot\\ AKeyValue:\\quot\\+AKeyValue+\\quot\\ AFieldID:\\quot\\+AFieldID+\\quot\\ AValue:\\quot\\+AValue+\\quot\\ AIsNewRecord:\\quot\\+AIsNewRecord\\comma\\false\\comma\\true);//crlf////tab////tab//appendToSubmitLog(\\quot\\Error: submitTableData: Mismatched number of fieldID and values\\quot\\\\comma\\false\\comma\\true); //crlf////tab////tab//cSubmitTableData--;//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////add the fields to the array//crlf////tab//for(var i=0;i<arFieldID.length;i++) {//crlf////tab////tab//var sKeyValue=(arKeyValue.length>i) ? arKeyValue[i] : arKeyValue[0];//crlf////tab////tab//var NewDataSubmission={TableID:ATableID\\comma\\KeyValue:sKeyValue\\comma\\FieldID:arFieldID[i]\\comma\\Value:arValue[i]\\comma\\Status:0\\comma\\IsNewRecord:AIsNewRecord\\comma\\IsDeletedRecord:AIsDeletedRecord\\comma\\tAdd:formatDate(new Date()\\comma\\\\quot\\HH:mm:ss:SSS\\quot\\)\\comma\\tSubmit:\\quot\\\\quot\\\\comma\\tComplete:\\quot\\\\quot\\\\comma\\tConfirmed:false};//crlf////tab////tab//if(!AIsNewRecord) NewDataSubmission.IsNewRecord=false;//crlf////tab////tab//if(!AIsDeletedRecord) NewDataSubmission.IsDeletedRecord=false;//crlf////tab////tab////crlf////tab////tab////overwrite existng record if one exists that has not been submitted yet//crlf////tab////tab//var bFouncMatch=false;//crlf////tab////tab//for(var j=0;((!bFouncMatch) //amp////amp// (j<arPendingDataSubmissions.length));j++) {//crlf////tab////tab////tab//if(arPendingDataSubmissions[j].Status==0) {//crlf////tab////tab////tab////tab//if(arPendingDataSubmissions[j].TableID==ATableID) {//crlf////tab////tab////tab////tab////tab//if(arPendingDataSubmissions[j].KeyValue==sKeyValue) {//crlf////tab////tab////tab////tab////tab////tab//if(arPendingDataSubmissions[j].FieldID==arFieldID[i]) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(bEnableSubmissionDebugging) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//appendToSubmitLog(\\quot\\Replaced previous value: \\quot\\+arPendingDataSubmissions[j].Value+\\quot\\ with new value: \\quot\\+arValue[i]);//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//arPendingDataSubmissions[j].Status=3;//crlf////tab////tab////tab////tab////tab////tab////tab//arPendingDataSubmissions[j].tComplete=formatDate(new Date()\\comma\\\\quot\\HH:mm:ss:SSS\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//var r=arPendingDataSubmissions.length;//crlf////tab////tab////tab////tab////tab////tab////tab//arPendingDataSubmissions[r]=NewDataSubmission;//crlf////tab////tab////tab////tab////tab////tab////tab//bFouncMatch=true;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab////add a new record if a match was not found//crlf////tab////tab//if(!bFouncMatch) {//crlf////tab////tab////tab//var r=arPendingDataSubmissions.length;//crlf////tab////tab////tab//arPendingDataSubmissions[r]=NewDataSubmission;//crlf////tab////tab////tab//appendToSubmitLog(\\quot\\Added pending submission.  arPendingDataSubmissions len=\\quot\\+arPendingDataSubmissions.length);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////add informaiton about the table to the arTableMetadata array//crlf////tab////This is used by submitToServer to allow for the possibility that the table is closed before the data is submitted//crlf////tab//recordTableMetadata(ATableID);//crlf////tab////crlf////tab////update the debugging table//crlf////tab//debugDataSubmission();//crlf////crlf////tab//cSubmitTableData--;//crlf//};//crlf////crlf////This flag indicates whether there is an outstanding request to the server to get pending submissions//crlf//var WaitingForPendingSubmissions=false;//crlf////crlf///******************************************************************************//crlf//This function://crlf////tab//1.//tab//submits pending data to the server.  New data is not submitted to the server until //crlf////tab////tab//all pending submissions are cleared.//crlf////tab//2.//tab//updates the status of pending submissions by requesting information about pending//crlf////tab////tab//submissions from the server//crlf////tab////crlf//Mode has the following values://crlf////tab//0 - Submit any pending submissions//crlf////tab//1 - Update status of pending submissions//crlf//******************************************************************************///crlf//function dataSubmissionLoop() {//crlf////tab////appendToSubmitLog(\\quot\\dataSubmissionLoop started\\quot\\);//crlf////crlf////tab////abort if there are no records in the array//crlf////tab//if(arPendingDataSubmissions.length==0) {//crlf////tab////tab//setTimeout(\\quot\\dataSubmissionLoop()\\quot\\\\comma\\5000);//crlf////tab////tab//return; //crlf////tab//};//crlf////tab////crlf////tab///*//tab//get an array of information about each table in the array including the number//crlf////tab////tab//records with a status of 0 (new) and 1 (submitted).  Each element of the array//crlf////tab////tab//includes the fields: TableID\\comma\\ Status0\\comma\\ Status1.  Status0 and Status1 indicate//crlf////tab////tab//how many records there are with each status//tab//*///crlf////tab//var arTableSummary=getPendingSubmissionSummary();//crlf////tab////crlf////tab////abort if there are no new or incomplete submissions//crlf////tab//if(arTableSummary.length==0) {//crlf////tab////tab//if((cSubmitTableData==0) //amp////amp// (arPendingDataSubmissions.length>0)) {//crlf////tab////tab////tab////clear the array if it contains only completed items and debugging is not enabled//crlf////tab////tab////tab//if(!bEnableSubmissionDebugging)//tab//arPendingDataSubmissions.length=0;//crlf////tab////tab////tab//debugDataSubmission();//crlf////tab////tab//};//crlf////tab////tab//setTimeout(\\quot\\dataSubmissionLoop()\\quot\\\\comma\\5000);//crlf////tab////tab//return; //crlf////tab//};//crlf////tab////crlf////tab///* submit data for any tables with records having a status-0 which indicates //crlf////tab//data that has been added to the array but has not been submitted.  Do not //crlf////tab//submit data if there are any records for the table with a status of 1 which //crlf////tab//indicates data has been submitted but has not been recorded on the server//crlf////tab//This is important because new records must be fully initialized before additional//crlf////tab//data is submitted for the record.  It is also important that data is submitted //crlf////tab//in the order that it is edited.  Don't allow the possibility of a later edit overwriting//crlf////tab//an earlier one.  This is certainly a situation that needs to be checked for because submitToServer()//crlf////tab//will attempt to submit data again if the request fails.  A situation could arise in which submitToServer()//crlf////tab//fails for a set of data\\comma\\ additional data is submitted and the original submitToServer() request is made//crlf////tab//again because it failed.  In this case\\comma\\ the data would be out of order. *///crlf////tab//var bDataSubmitted=false;//crlf////tab//for(var i=0;i<arTableSummary.length;i++) {//crlf////tab////tab////check that there is data to submit and that there are no submissions still pending//crlf////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\dataSubmissionLoop: arTableSummary[\\quot\\+i+\\quot\\] TableID=\\quot\\+arTableSummary[i].TableID+\\quot\\ New:\\quot\\+arTableSummary[i].Status0+\\quot\\ Submitted:\\quot\\+arTableSummary[i].Status1);//crlf////tab////tab//if((arTableSummary[i].Status0>0) //amp////amp// (arTableSummary[i].Status1==0)) {//crlf////tab////tab////tab//var sTableID=arTableSummary[i].TableID;//crlf////tab////tab////tab//var arKeyValue=new Array();//crlf////tab////tab////tab//var arFieldID=new Array();//crlf////tab////tab////tab//var arValue=new Array();//crlf////tab////tab////tab//var n=0;//crlf////tab////tab////tab//for(var i=0;i<arPendingDataSubmissions.length;i++) {//crlf////tab////tab////tab////tab//if((arPendingDataSubmissions[i].TableID==sTableID) //amp////amp// (arPendingDataSubmissions[i].Status==0)) {//crlf////tab////tab////tab////tab////tab//arKeyValue[n]=arPendingDataSubmissions[i].KeyValue;//crlf////tab////tab////tab////tab////tab//arFieldID[n]=arPendingDataSubmissions[i].FieldID;//crlf////tab////tab////tab////tab////tab//arValue[n]=arPendingDataSubmissions[i].Value;//crlf////crlf////tab////tab////tab////tab////tab////set the status to 1 to indicate the record has been submitted//crlf////tab////tab////tab////tab////tab////This means that the data has been handed off to the submitToServer() function\\comma\\ not that//crlf////tab////tab////tab////tab////tab////it has actually made it to the server yet.  The submitToServer function will call itself again if //crlf////tab////tab////tab////tab////tab////the request to the server is not successful.  It is possible that the data gets handed from here//crlf////tab////tab////tab////tab////tab////and then has to wait to be successfully submitted to the server.  Setting the status to 1 here //crlf////tab////tab////tab////tab////tab////causes further calls to submitToServer to be postponed until the data is successfully submitted.//crlf////tab////tab////tab////tab////tab//arPendingDataSubmissions[i].Status=1;//crlf////tab////tab////tab////tab////tab//arPendingDataSubmissions[i].tSubmit=formatDate(new Date()\\comma\\\\quot\\HH:mm:ss:SSS\\quot\\);//crlf////tab////tab////tab////tab////tab//n++;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if(n>0) {//crlf////tab////tab////tab////tab//var table=document.getElementById(sTableID);//crlf////tab////tab////tab////tab//var sHashID=null;//crlf////tab////tab////tab////tab//var sDriverID=null;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////allow for the possibility that the table has been closed//crlf////tab////tab////tab////tab//if(table) {//crlf////tab////tab////tab////tab////tab//var sHashID=table.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab////tab////tab////tab////tab//var sDriverID=table.getAttribute(\\quot\\aspectDriver\\quot\\);//crlf////crlf////tab////tab////tab////tab////tab////call listener function if defined.  //crlf////tab////tab////tab////tab////tab//var s=\\quot\\tableDataSubmitted\\quot\\+sTableID;//crlf////tab////tab////tab////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Calling \\quot\\+s);//crlf////tab////tab////tab////tab////tab////tab//eval(s+\\quot\\('\\quot\\+sTableID+\\quot\\')\\quot\\);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Listener not defined: \\quot\\+s);//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////call listener functions for each field //crlf////tab////tab////tab////tab////tab//for (var i=0;i<arFieldID.length;i++) {//crlf////tab////tab////tab////tab////tab////tab////note: periods in field ID's are removed.  Periods appear in field ID's when a structure is included in another structure.//crlf////tab////tab////tab////tab////tab////tab//var sFieldID=replaceAllSubstrings(arFieldID[i]\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\22\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//sFieldID=replaceAllSubstrings(arFieldID[i]\\comma\\\\quot\\.\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\checking for listener: dataSubmittedListener\\quot\\+sFieldID);//crlf////tab////tab////tab////tab////tab////tab//try {//crlf////tab////tab////tab////tab////tab////tab////tab//if(eval('typeof dataSubmittedListener'+sFieldID)==\\quot\\function\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var sValue=replaceAllSubstrings(arValue[i]\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\22\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var sValue=replaceAllSubstrings(arValue[i]\\comma\\\\quot\\\x2C\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var sEval=\\quot\\dataSubmittedListener\\quot\\+sFieldID+\\quot\\(\x22\\quot\\+sHashID+\\quot\\\x22\\comma\\\x22\\quot\\+sTableID+\\quot\\\x22\\comma\\\x22\\quot\\+sDriverID+\\quot\\\x22\\comma\\\x22\\quot\\+arKeyValue[i]+\\quot\\\x22\\comma\\\x22\\quot\\+sValue+\\quot\\\x22)\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\calling listener: dataSubmittedListener\\quot\\+sFieldID);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\eval: \\quot\\+sEval);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//eval(sEval); //crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//catch(ex) {//crlf////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\Error executing listener: \\quot\\+sEval+\\quot\\ error: \\quot\\+ex);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////flag  select boxes for update//crlf////tab////tab////tab////tab////tab//var arSelect=document.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab////tab////tab////tab////tab//for(var i=0;i<arSelect.length;i++) {//crlf////tab////tab////tab////tab////tab////tab//var CollectionSource=arSelect[i].getAttribute(\\quot\\Source\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//if((CollectionSource) //amp////amp// (CollectionSource.equalsIgnoreCase(sHashID))) {//crlf////tab////tab////tab////tab////tab////tab////tab//var CollectionDriverID=arSelect[i].getAttribute(\\quot\\DriverID\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//if((CollectionDriverID) //amp////amp// (CollectionDriverID.equalsIgnoreCase(sDriverID))) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//arSelect[i].setAttribute(\\quot\\update\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\dataSubmissionLoop: calling submitToServer\\quot\\);//crlf////tab////tab////tab////tab//submitToServer(sTableID\\comma\\arKeyValue.toString()\\comma\\arFieldID.toString()\\comma\\arValue.toString())//crlf////tab////tab////tab////tab//bDataSubmitted=true;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////if no data was submitted\\comma\\ invoke the function used to get a list of pending submissions from the server//crlf////tab////and update the status of records in arPendingDataSubmissions.  //crlf////tab////if((!bDataSubmitted) //amp////amp// (!WaitingForPendingSubmissions)) {//crlf////tab////crlf////tab///* This needs to work differently depending on whether the table is remote or not.  If the table is local\\comma\\//crlf////tab////tab//the data will have been saved immediately and the pending submissions can be requested.  Otherwise\\comma\\ it //crlf////tab////tab//may take a few seconds for the data to be received by the server. //crlf////tab////tab////crlf////tab////tab//If the table is local\\comma\\ this still has no useful effect because the values in arTableSummary will not have//crlf////tab////tab//been updated and the count of new and submitted fields will not reflect that data was submitted above.//crlf////tab////tab//Therefore\\comma\\ a call will not be made since arTableSummary[i].Status1 will still be 0 unless there are previously//crlf////tab////tab//submitted records//crlf////tab//*///crlf////tab//if(!WaitingForPendingSubmissions) {//crlf////tab////tab//var arHashID=new Array();//crlf////tab////tab//var arTableID=new Array();//crlf////tab////tab//var arDriverID=new Array();//crlf////tab////tab//var arDriverParams=new Array();//crlf////tab////tab//n=0;//crlf////tab////tab//for(var i=0;i<arTableSummary.length;i++) {//crlf////tab////tab////tab//if(arTableSummary[i].Status1>0) {//crlf////tab////tab////tab////tab//var sTableID=arTableSummary[i].TableID;//crlf////tab////tab////tab////tab//var table=document.getElementById(sTableID);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////allow for the possibility that the view has been closed and the table no longer exists.//crlf////tab////tab////tab////tab//if(table) {//crlf////appendToLog(\\quot\\dataSubmissionLoop getAttribute5\\quot\\)//crlf////tab////tab////tab////tab////tab//arHashID[n]=table.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab////tab////tab////tab////tab//arTableID[n]=sTableID;//crlf////appendToLog(\\quot\\dataSubmissionLoop getAttribute6\\quot\\)//crlf////tab////tab////tab////tab////tab//arDriverID[n]=table.getAttribute(\\quot\\aspectDriver\\quot\\);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////Note: This needs to use the original driver params\\comma\\ so TCache can locate the object//crlf////tab////tab////tab////tab////tab////it is not necessary to pass external params//crlf////tab////tab////tab////tab////tab////var sParams=getTableDriverParams(sTableID);//crlf////appendToLog(\\quot\\dataSubmissionLoop getAttribute7\\quot\\)//crlf////tab////tab////tab////tab////tab//var sParams=document.getElementById(sTableID).getAttribute(\\quot\\aspectParamsActive\\quot\\);//crlf////tab////tab////tab////tab////tab//if(!sParams) sParams=getTableDriverParams(sTableID); //for compatibility before aspectParamsActive is posted//crlf////tab////tab////tab////tab////tab//arDriverParams[n]=sParams;//crlf////tab////tab////tab////tab////tab//n++;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var sHashID=\\quot\\\\quot\\;//crlf////tab////tab////tab//var sTableID=\\quot\\\\quot\\;//crlf////tab////tab////tab//var sDriverID=\\quot\\\\quot\\;//crlf////tab////tab////tab//var sDriverParams=\\quot\\\\quot\\;//crlf////tab////tab////tab//for(var i=0;i<n;i++) {//crlf////tab////tab////tab////tab//if(i>0) {//crlf////tab////tab////tab////tab////tab//sHashID+=\\quot\\//power//\\quot\\;//crlf////tab////tab////tab////tab////tab//sTableID+=\\quot\\//power//\\quot\\;//crlf////tab////tab////tab////tab////tab//sDriverID+=\\quot\\//power//\\quot\\;//crlf////tab////tab////tab////tab////tab//sDriverParams+=\\quot\\//power//\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//sHashID+=arHashID[i];//crlf////tab////tab////tab////tab//sTableID+=arTableID[i];//crlf////tab////tab////tab////tab//sDriverID+=arDriverID[i];//crlf////tab////tab////tab////tab////sDriverParams+=arDriverParams[i];//crlf////tab////tab////tab////tab//sDriverParams+=replaceAllSubstrings(arDriverParams[i]\\comma\\\\quot\\//power//\\quot\\\\comma\\\\quot\\//pound//\\quot\\+\\quot\\23\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//var sServer=getServer();//crlf////tab////tab////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=getPendingDataSubmissions\\quot\\;//crlf////tab////tab////tab//sUrl +=\\quot\\//amp//SourceHashID=\\quot\\+sHashID+\\quot\\//amp//DriverID=\\quot\\+sDriverID+\\quot\\//amp//TableID=\\quot\\+sTableID+\\quot\\//amp//DriverParams=\\quot\\+sDriverParams;//crlf////tab////tab////tab//sUrl +=\\quot\\//amp//multiple=true\\quot\\;//crlf////tab////tab////tab//sFunc=\\quot\\updatePendingSubmissions(s)\\quot\\;//crlf////tab////tab////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////update the debugging table//crlf////tab//debugDataSubmission();//crlf////tab////crlf////tab////call this function again//crlf////tab//setTimeout(\\quot\\dataSubmissionLoop()\\quot\\\\comma\\3000);//crlf////tab//return;//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns an array of objects containind summary data about each table in the //crlf//array.  Records are not included if they have a status of 2 (complete).//crlf////crlf//Fields are://crlf////tab//Status0 - Number of records with a status of 0 (new submissions)//crlf////tab//Status1 - Number of records with a status of 1 (data has been submitted)//crlf//******************************************************************************///crlf//function getPendingSubmissionSummary() {//crlf////tab////appendToSubmitLog(\\quot\\getPendingSubmissionSummary arPendingDataSubmissions.length=\\quot\\+arPendingDataSubmissions.length);//crlf////crlf////crlf////tab////get an array of table ID's in the array//crlf////tab//var arTableID=new Array();//crlf////tab//var arSummary=new Array();//crlf////tab//for(var i=0;i<arPendingDataSubmissions.length;i++) {//crlf////tab////tab////ignore records that have already been recorded (status=2)//crlf////tab////tab////appendToSubmitLog(\\quot\\getPendingSubmissionSummary: arPendingDataSubmissions[i].Status=\\quot\\+arPendingDataSubmissions[i].Status);//crlf////tab////tab//if(arPendingDataSubmissions[i].Status<2) {//crlf////tab////tab////tab////get index of table ID in array.  Add the table if necessary//crlf////tab////tab////tab//var sTableID=arPendingDataSubmissions[i].TableID;//crlf////tab////tab////tab//var n=arTableID.indexOf(sTableID);//crlf////tab////tab////tab//if(n<0) {//crlf////tab////tab////tab////tab//n=arTableID.length;//crlf////tab////tab////tab////tab//arTableID[n]=sTableID;//crlf////tab////tab////tab////tab//var oSummary={TableID:sTableID\\comma\\Status0:0\\comma\\Status1:0};//crlf////tab////tab////tab////tab//arSummary[n]=oSummary;//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//switch(arPendingDataSubmissions[i].Status) {//crlf////tab////tab////tab////tab//case 0: arSummary[n].Status0++; break;//crlf////tab////tab////tab////tab//case 1: arSummary[n].Status1++; break;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//return(arSummary);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns a count of records with a status of 0 or 1 for the given table ID and //crlf//KeyValue.  AKeyValue and AFieldID are optional.  For example\\comma\\ this function may //crlf//be called with //crlf////tab//countPendingSubmissions(TableID)//crlf////tab//countPendingSubmissions(TableID\\comma\\KeyValue)//crlf////tab//countPendingSubmissions(TableID\\comma\\KeyValue\\comma\\FieldID)//crlf//******************************************************************************///crlf//function countPendingSubmissions(ATableID\\comma\\AKeyValue\\comma\\AFieldID) {//crlf////tab//var c=0;//crlf////tab//for(var i=0;i<arPendingDataSubmissions.length;i++) {//crlf////tab////tab//if(arPendingDataSubmissions[i].Status<2) {//crlf////tab////tab////tab//if((!ATableID) ~~pipe~~~~pipe~~ (arPendingDataSubmissions[i].TableID==ATableID)) {//crlf////tab////tab////tab////tab//if((!AKeyValue) ~~pipe~~~~pipe~~ (arPendingDataSubmissions[i].KeyValue==AKeyValue)) {//crlf////tab////tab////tab////tab////tab//if((!AFieldID) ~~pipe~~~~pipe~~ (arPendingDataSubmissions[i].FieldID==AFieldID)) {//crlf////tab////tab////tab////tab////tab////tab//c++;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(c); //crlf//};//crlf////crlf///******************************************************************************//crlf//Submits data to a server.  Multiple fields and values may be submitted by//crlf//separating them with commas.  Any commas contained in the data should be replaced//crlf//with \\quot\\comma\\quot\\ surrounded by \\quot\\//\\quot\\ before calling this function.//crlf////crlf//Note: This could be modified to send data directly via a notification.  The//crlf//return value could then be used to update the table row.  Right now\\comma\\ data is//crlf//added to the cache using TWriteBuffer and a response is not available.  Another//crlf//notification is sent when pending data is written to get all values in the record//crlf//to update the table row.//crlf//******************************************************************************///crlf//function submitToServer(ATableID\\comma\\AKeyValue\\comma\\AFieldID\\comma\\AValue) {//crlf////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\submitToServer: TableID=\\quot\\+ATableID+\\quot\\ KeyValue=\\quot\\+AKeyValue+\\quot\\ FieldID=\\quot\\+AFieldID+\\quot\\ Value=\\quot\\+AValue);//crlf////tab////appendToLog(\\quot\\submitToServer: TableID=\\quot\\+ATableID+\\quot\\ KeyValue=\\quot\\+AKeyValue+\\quot\\ FieldID=\\quot\\+AFieldID+\\quot\\ Value=\\quot\\+AValue);//crlf////crlf////tab//var sServer=getServer();//crlf////crlf////tab///*****************************************************************//crlf////tab//var table=document.getElementById(ATableID);//crlf////tab//var sHashID=table.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab//var sDriverID=table.getAttribute(\\quot\\aspectDriver\\quot\\);//crlf////tab//var sKeyExpression=table.getAttribute(\\quot\\aspectKeyExpression\\quot\\);//crlf////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldID\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//var arFieldType=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldType\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////crlf////tab////These need to use the driver params in place when the table was created//crlf////tab////var sParams=getTableDriverParams(ATableID);//crlf////tab//var sParams=document.getElementById(ATableID).getAttribute(\\quot\\aspectParamsActive\\quot\\);//crlf////tab//if(!sParams) sParams=getTableDriverParams(ATableID); //for compatibility before posting aspectParamsActive//crlf////tab//*****************************************************************///crlf////tab////crlf////tab////get the table metadata//crlf////tab//var n=-1;//crlf////tab//for(var i=0;i<arTableMetadata.length;i++) {//crlf////tab////tab//if(arTableMetadata[i].TableID.equalsIgnoreCase(ATableID)) n=i;//crlf////tab//};//crlf////tab////crlf////tab//if(n>=0) {//crlf////tab////tab//var sHashID=arTableMetadata[n].HashID;//crlf////tab////tab//var sDriverID=arTableMetadata[n].DriverID;//crlf////tab////tab//var sKeyExpression=arTableMetadata[n].KeyExpression;//crlf////tab////tab//var arFieldID=getSubStringArray(arTableMetadata[n].AllFieldID\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true); //crlf////tab////tab//var arFieldType=getSubStringArray(arTableMetadata[n].AllFieldType\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true); //crlf////tab////tab//var sParams=arTableMetadata[n].DriverParams;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//console.log(\\quot\\Could not find table metadata for table: \\quot\\+ATableID);//crlf////tab////tab//showDialog(\\quot\\msg=Error: Unable to save changes.  Please reload the page.<br><br>//amp//fnOk=close\\quot\\);//crlf////tab//};//crlf////tab////crlf////tab////make a comma-delimited array of field types for fields being submitted.  //crlf////tab//var arSubmitFieldID=getSubStringArray(AFieldID\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////tab//var sFieldIndex=\\quot\\\\quot\\;//crlf////tab//for (var i=0;i<arSubmitFieldID.length;i++) {//crlf////tab////tab//var n=getFieldIndex(arSubmitFieldID[i]\\comma\\arFieldID);//crlf////tab////tab//if(sFieldIndex.length>0) sFieldIndex +=\\quot\\\\comma\\\\quot\\;//crlf////tab////tab//sFieldIndex +=arFieldType[n];//crlf////tab//};//crlf////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=putDriverData\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//SourceHashID=\\quot\\+sHashID+\\quot\\//amp//TableID=\\quot\\+ATableID+\\quot\\//amp//DriverID=\\quot\\+sDriverID+\\quot\\//amp//KeyExpression=\\quot\\+sKeyExpression;//crlf////tab//sUrl +=\\quot\\//amp//DriverParams=\\quot\\+sParams+\\quot\\//amp//KeyValue=\\quot\\+AKeyValue+\\quot\\//amp//FieldID=\\quot\\+AFieldID;//crlf////tab//sUrl +=\\quot\\//amp//FieldType=\\quot\\+sFieldIndex;//crlf////tab////crlf////tab//var s=replaceAllSubstrings(AValue\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\//am\\quot\\+\\quot\\p//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\r\n\\quot\\\\comma\\\\quot\\//cr\\quot\\+\\quot\\lf//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\r\\quot\\\\comma\\\\quot\\//cr\\quot\\+\\quot\\lf//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\n\\quot\\\\comma\\\\quot\\//cr\\quot\\+\\quot\\lf//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\t\\quot\\\\comma\\\\quot\\//ta\\quot\\+\\quot\\b//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\//qu\\quot\\+\\quot\\ote//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\22\\quot\\\\comma\\\\quot\\//qu\\quot\\+\\quot\\ote//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//po\\quot\\+\\quot\\und//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\x25\\quot\\\\comma\\\\quot\\//pc\\quot\\+\\quot\\nt//\\quot\\);//crlf////tab////crlf////tab////don't replace commas here because it interferes with field delimiters.  For example\\comma\\ when adding a new record\\comma\\//crlf////tab////a set of empty values will be converted from a sequence of commas to a sequence of comma tokens//crlf////tab////s=replaceAllSubstrings(s\\comma\\\\quot\\\x2C\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\);//crlf////tab////crlf////tab//sUrl +=\\quot\\//amp//Value=\\quot\\+s; //crlf////tab//appendToSubmitLog(\\quot\\submitToServer url=\\quot\\+sUrl\\comma\\false\\comma\\true);//crlf////crlf////tab////set the error function so if the call fails it will be tried again//crlf////tab//var sFuncOk=\\quot\\submitToServerOk(\x22\\quot\\+ATableID+\\quot\\\x22\\comma\\\x22\\quot\\+AKeyValue+\\quot\\\x22\\comma\\\x22\\quot\\+AFieldID+\\quot\\\x22\\comma\\\x22\\quot\\+s+\\quot\\\x22\\comma\\s)\\quot\\;//crlf////tab//var sFuncErr=\\quot\\submitToServer(\x22\\quot\\+ATableID+\\quot\\\x22\\comma\\\x22\\quot\\+AKeyValue+\\quot\\\x22\\comma\\\x22\\quot\\+AFieldID+\\quot\\\x22\\comma\\\x22\\quot\\+s+\\quot\\\x22)\\quot\\;//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFuncOk\\comma\\sFuncErr);//crlf////crlf////tab////update the hidden value(s) in the table row.  This is necessary so a dialog is initialized properly if it is opened//crlf////tab////after values have been edited.  Check to make sure the table exists first.//crlf////tab//if(document.getElementById(ATableID)) {//crlf////tab////tab//setFieldValueInRow(ATableID\\comma\\AKeyValue\\comma\\AFieldID\\comma\\AValue);//crlf////tab//};//crlf//};//crlf////crlf//function old_submitToServer(ATableID\\comma\\AKeyValue\\comma\\AFieldID\\comma\\AValue) {//crlf////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\submitToServer: TableID=\\quot\\+ATableID+\\quot\\ KeyValue=\\quot\\+AKeyValue+\\quot\\ FieldID=\\quot\\+AFieldID+\\quot\\ Value=\\quot\\+AValue);//crlf////tab////appendToLog(\\quot\\submitToServer: TableID=\\quot\\+ATableID+\\quot\\ KeyValue=\\quot\\+AKeyValue+\\quot\\ FieldID=\\quot\\+AFieldID+\\quot\\ Value=\\quot\\+AValue);//crlf////crlf////tab//var table=document.getElementById(ATableID);//crlf////tab//var sServer=getServer();//crlf////tab//var sHashID=table.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab//var sDriverID=table.getAttribute(\\quot\\aspectDriver\\quot\\);//crlf////tab//var sKeyExpression=table.getAttribute(\\quot\\aspectKeyExpression\\quot\\);//crlf////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldID\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//var arFieldType=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldType\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////crlf////tab////These need to use the driver params in place when the table was created//crlf////tab////var sParams=getTableDriverParams(ATableID);//crlf////tab//var sParams=document.getElementById(ATableID).getAttribute(\\quot\\aspectParamsActive\\quot\\);//crlf////tab//if(!sParams) sParams=getTableDriverParams(ATableID); //for compatibility before posting aspectParamsActive//crlf////crlf////tab////make a comma-delimited array of field types for fields being submitted.  //crlf////tab//var arSubmitFieldID=getSubStringArray(AFieldID\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////tab//var sFieldIndex=\\quot\\\\quot\\;//crlf////tab//for (var i=0;i<arSubmitFieldID.length;i++) {//crlf////tab////tab//var n=getFieldIndex(arSubmitFieldID[i]\\comma\\arFieldID);//crlf////tab////tab//if(sFieldIndex.length>0) sFieldIndex +=\\quot\\\\comma\\\\quot\\;//crlf////tab////tab//sFieldIndex +=arFieldType[n];//crlf////tab//};//crlf////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=putDriverData\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//SourceHashID=\\quot\\+sHashID+\\quot\\//amp//TableID=\\quot\\+ATableID+\\quot\\//amp//DriverID=\\quot\\+sDriverID+\\quot\\//amp//KeyExpression=\\quot\\+sKeyExpression;//crlf////tab//sUrl +=\\quot\\//amp//DriverParams=\\quot\\+sParams+\\quot\\//amp//KeyValue=\\quot\\+AKeyValue+\\quot\\//amp//FieldID=\\quot\\+AFieldID;//crlf////tab//sUrl +=\\quot\\//amp//FieldType=\\quot\\+sFieldIndex;//crlf////tab////crlf////tab//var s=replaceAllSubstrings(AValue\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\//am\\quot\\+\\quot\\p//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\r\n\\quot\\\\comma\\\\quot\\//cr\\quot\\+\\quot\\lf//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\r\\quot\\\\comma\\\\quot\\//cr\\quot\\+\\quot\\lf//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\n\\quot\\\\comma\\\\quot\\//cr\\quot\\+\\quot\\lf//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\t\\quot\\\\comma\\\\quot\\//ta\\quot\\+\\quot\\b//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\//qu\\quot\\+\\quot\\ote//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\22\\quot\\\\comma\\\\quot\\//qu\\quot\\+\\quot\\ote//\\quot\\);//crlf////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//po\\quot\\+\\quot\\und//\\quot\\);//crlf////tab////crlf////tab////don't replace commas here because it interferes with field delimiters.  For example\\comma\\ when adding a new record\\comma\\//crlf////tab////a set of empty values will be converted from a sequence of commas to a sequence of comma tokens//crlf////tab////s=replaceAllSubstrings(s\\comma\\\\quot\\\x2C\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\);//crlf////tab////crlf////tab//sUrl +=\\quot\\//amp//Value=\\quot\\+s; //crlf////tab//appendToSubmitLog(\\quot\\submitToServer url=\\quot\\+sUrl\\comma\\false\\comma\\true);//crlf////crlf////tab////set the error function so if the call fails it will be tried again//crlf////tab//var sFuncOk=\\quot\\submitToServerOk(\x22\\quot\\+ATableID+\\quot\\\x22\\comma\\\x22\\quot\\+AKeyValue+\\quot\\\x22\\comma\\\x22\\quot\\+AFieldID+\\quot\\\x22\\comma\\\x22\\quot\\+s+\\quot\\\x22\\comma\\s)\\quot\\;//crlf////tab//var sFuncErr=\\quot\\submitToServer(\x22\\quot\\+ATableID+\\quot\\\x22\\comma\\\x22\\quot\\+AKeyValue+\\quot\\\x22\\comma\\\x22\\quot\\+AFieldID+\\quot\\\x22\\comma\\\x22\\quot\\+s+\\quot\\\x22)\\quot\\;//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFuncOk\\comma\\sFuncErr);//crlf////crlf////tab////update the hidden value(s) in the table row.  This is necessary so a dialog is initialized properly if it is opened//crlf////tab////after values have been edited//crlf////tab//setFieldValueInRow(ATableID\\comma\\AKeyValue\\comma\\AFieldID\\comma\\AValue);//crlf//};//crlf////crlf//function submitToServerOk(ATableID\\comma\\AKeyValue\\comma\\AFieldID\\comma\\AValue\\comma\\s) {//crlf////tab//var s=\\quot\\\\comma\\\\quot\\+AFieldID+\\quot\\\\comma\\\\quot\\;//crlf////tab//var sDebug=\\quot\\\\quot\\;//crlf////tab//for(var i=0;(i<arPendingDataSubmissions.length);i++) {//crlf////tab////tab//if(arPendingDataSubmissions[i].TableID==ATableID) {//crlf////tab////tab////tab//if(AFieldID.indexOf(arPendingDataSubmissions[i].FieldID)>=0) {//crlf////tab////tab////tab////tab//if(arPendingDataSubmissions[i].Status==1) {//crlf////tab////tab////tab////tab////tab//arPendingDataSubmissions[i].tConfirmed=true;//crlf////tab////tab////tab////tab////tab//if(sDebug.length>0) sDebug+=\\quot\\\\comma\\\\quot\\;//crlf////tab////tab////tab////tab////tab//sDebug+=arPendingDataSubmissions[i].FieldID;//crlf////tab////tab////tab////tab////tab////appendToSubmitLog(\\quot\\submitToServerok confirm submission of \\quot\\+arPendingDataSubmissions[i].FieldID+\\quot\\ in table \\quot\\+arPendingDataSubmissions[i].TableID);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//if(sDebug.length>0) {//crlf////tab////tab//appendToSubmitLog(\\quot\\submitToServerok confirmed submission of \\quot\\+sDebug+\\quot\\ in table \\quot\\+ATableID);//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Updates attributes of cells that have been recorded by the server.  result is a pipe-delimited array//crlf//in the form://crlf////crlf//HashID//power//TableID//power//DriverID//power//KeyValue//power//FieldID ~~pipe~~ //crlf//HashID//power//TableID//power//DriverID//power//KeyValue//power//FieldID ~~pipe~~ //crlf//...//crlf////crlf//The array includes any data submissions that have not yet been recorded.  Any submissions in //crlf//arPendingDataSubmissions with a status of 1 that do not appear in the result have been saved //crlf//by the server and are flagged as complete in the arPendingDataSubmissions array. (see next paragraph)//crlf////crlf//0300902017 - Modified this by adding a tConfirmed value to the arPendingDataSubmissions array.//crlf//A problem can occur if data is submitted and the status is set to 1 and then pending submissions are //crlf//read before the data has been added to TCacheWriteBuffer.  If would appear as if data has been submitted//crlf//and there are no pending submissions.  Now\\comma\\ the tConfirmed value is set to false initially and is set to //crlf//true by submitToServerOk.//crlf////crlf//If the call to getPendingSubmissions fails\\comma\\ the result will be null or an empty string and //crlf//no action is taken and the status of records in arPendingDataSubmissions is unchanged.//crlf////crlf//The job of this function is to://crlf////tab//1.//tab//Update the status of records in arPendingDataSubmissions from 1 to 2 to indicate that data//crlf////tab////tab//has been saved on the server.//crlf////tab////tab////crlf////tab//2.//tab//Update the pending submission style for fields in dialogs.  These need to be enabled or disabled//crlf////tab////tab//depending on the key value that is active in the dialog.  For example\\comma\\ the dialog may be opened//crlf////tab////tab//for another record while data is still pending for a previous record.  The cells in the second//crlf////tab////tab//dialog should not be highlighted//crlf////tab//3.//tab//Turn off the pending submission style for cells in a table//crlf////tab////crlf////tab//4.//tab//Refresh records in a table when there are no remaining pending submissions.  This should probably //crlf////tab////tab//also require that there not be any new submissions waiting to be made for the record.//crlf////tab//5.//tab//Remove rows from the table that have been deleted//crlf////tab//6.//tab//Clear the status message indicating that records are being deleted//crlf////tab//7.//tab//Call the tableDataSubmissionCompleteTABLEID function if defined//crlf////tab//8.//tab//Refresh the table if RefreshOnDataSubmit is true.  This is done to update subtotals//crlf//******************************************************************************///crlf//function updatePendingSubmissions(result) {//crlf////tab//WaitingForPendingSubmissions=false;//crlf////tab////crlf////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\updatePendingSubmissions: Pending submissions:\\quot\\+result);//crlf////tab////crlf////tab//if((!result) ~~pipe~~~~pipe~~ (result.trim().length==0) ~~pipe~~~~pipe~~ (result.equalsIgnoreCase(\\quot\\error\\quot\\))) {//crlf////tab////tab//appendToSubmitLog(\\quot\\Error: updatePendingSubmissions: result:\\quot\\+result);//crlf////tab////tab//return; //crlf////tab//};//crlf////tab////crlf////tab///*//tab//get an array of information about each table in the array including the number//crlf////tab////tab//records with a status of 0 (new) and 1 (submitted).  Each element of the array//crlf////tab////tab//includes the fields: TableID\\comma\\ Status0\\comma\\ Status1.  Status0 and Status1 indicate//crlf////tab////tab//how many records there are with each status//tab//*///crlf////tab//var arTableSummary=getPendingSubmissionSummary();//crlf////crlf////tab//for(var i=0;i<arTableSummary.length;i++) {//crlf////tab////tab////only include tables for which data has been submitted //crlf////tab////tab////appendToSubmitLog(\\quot\\updatePendingSubmissions arTableSummary[\\quot\\+i+\\quot\\].Status1=\\quot\\+arTableSummary[i].Status1);//crlf////tab////tab//if(arTableSummary[i].Status1>0) {//crlf////tab////tab////tab//var sTableID=arTableSummary[i].TableID;//crlf////tab////tab////tab//var table=document.getElementById(sTableID);//crlf////tab////tab////tab////crlf////tab////tab////tab////allow for the possibility that the view has been closed and the table no longer exists//crlf////tab////tab////tab//if(table) {//crlf////tab////tab////tab////tab//var sHashID=table.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab////tab////tab////tab//var sDriverID=table.getAttribute(\\quot\\aspectDriver\\quot\\);//crlf////tab////tab////tab////tab//var sDialogID=table.getAttribute(\\quot\\EditDialogID\\quot\\);//crlf////tab////tab////tab////tab//var eDialog=document.getElementById(sDialogID);//crlf////tab////tab////tab////tab//var sDialogKeyValue=(eDialog) ? eDialog.getAttribute(\\quot\\KeyValue\\quot\\) : \\quot\\\\quot\\;//crlf////tab////tab////tab////tab//var bCanSelect=(table.getAttribute(\\quot\\aspectCanSelect\\quot\\).equalsIgnoreCase(\\quot\\true\\quot\\));//crlf////tab////tab////tab////tab//var cSelectIndex=(bCanSelect) ? getTableRecordSelectIndex(sTableID) : -1;//crlf////tab////tab////tab////tab//var sFields=table.getAttribute(\\quot\\aspectFields\\quot\\);//crlf////tab////tab////tab////tab//var arFields=getSubStringArray(sFields\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab//var sAllFields=table.getAttribute(\\quot\\aspectallfieldid\\quot\\);//crlf////tab////tab////tab////tab//var arAllFields=getSubStringArray(sAllFields\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////get an array of key values for the table.  //crlf////tab////tab////tab////tab//var arKeyValue=new Array();//crlf////tab////tab////tab////tab//for(var j=0;j<arPendingDataSubmissions.length;j++) {//crlf////tab////tab////tab////tab////tab//if((arPendingDataSubmissions[j].TableID==sTableID) //amp////amp// (arPendingDataSubmissions[j].Status==1)) {//crlf////tab////tab////tab////tab////tab////tab//if(arKeyValue.indexOf(arPendingDataSubmissions[j].KeyValue)<0) {//crlf////tab////tab////tab////tab////tab////tab////tab//arKeyValue[arKeyValue.length]=arPendingDataSubmissions[j].KeyValue;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////appendToSubmitLog(\\quot\\updatePendingSubmissions arKeyValue=\\quot\\+arKeyValue.toString());//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab//var arRecordsToRefresh=new Array();//crlf////tab////tab////tab////tab//var arPendingFieldID=new Array();//crlf////tab////tab////tab////tab//var arCompleteFieldID=new Array();//crlf////crlf////tab////tab////tab////tab////process all records in arPendingDataSubmissions by KeyValue for the current table//crlf////tab////tab////tab////tab//for(var j=0;j<arKeyValue.length;j++) {//crlf////tab////tab////tab////tab////tab////appendToSubmitLog(\\quot\\updatePendingSubmissions processing KeyValue=\\quot\\+arKeyValue[j]);//crlf////tab////tab////tab////tab////tab////These arrays are used to accumulate the field ID's that are still pending and those//crlf////tab////tab////tab////tab////tab////that are complete for the given table and key value.  The length is set to 0 to //crlf////tab////tab////tab////tab////tab////avoid creating a new array each time.  This might help with memory.//crlf////tab////tab////tab////tab////tab//arPendingFieldID.length=0;//crlf////tab////tab////tab////tab////tab//arCompleteFieldID.length=0;//crlf////tab////tab////tab////tab////tab//var bIsDelete=false;//crlf////tab////tab////tab////tab////tab//for(var k=0;k<arPendingDataSubmissions.length;k++) {//crlf////tab////tab////tab////tab////tab////tab////appendToSubmitLog(\\quot\\updatePendingSubmissions: arPendingDataSubmissions[\\quot\\+k+\\quot\\] TableID=\\quot\\+arPendingDataSubmissions[k].TableID+\\quot\\ KeyValue=\\quot\\+arPendingDataSubmissions[k].KeyValue+\\quot\\ Status=\\quot\\+arPendingDataSubmissions[k].Status);//crlf////tab////tab////tab////tab////tab////tab//if((arPendingDataSubmissions[k].TableID==sTableID) //amp////amp// (arPendingDataSubmissions[k].KeyValue==arKeyValue[j])) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(arPendingDataSubmissions[k].Status==1) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////at this point\\comma\\ the record belongs to the current table and keyvalue and has a status of 1//crlf////tab////tab////tab////tab////tab////tab////tab////tab////See if the field is still pending and update the arrays and status accordingly//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var s=sHashID+\\quot\\//power//\\quot\\+sTableID+\\quot\\//power//\\quot\\+sDriverID+\\quot\\//power//\\quot\\+arKeyValue[j]+\\quot\\//power//\\quot\\+arPendingDataSubmissions[k].FieldID;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var bIsPending=(result.toUpperCase().indexOf(s.toUpperCase())>=0) ~~pipe~~~~pipe~~ (arPendingDataSubmissions[k].tConfirmed==false);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////appendToSubmitLog(\\quot\\updatePendingSubmissions: FieldID:\\quot\\+arPendingDataSubmissions[k].FieldID+\\quot\\ Pending:\\quot\\+bIsPending);//crlf////console.log(\\quot\\updatePendingSubmissions: \\quot\\+arKeyValue[j]+\\quot\\ FieldID:\\quot\\+arPendingDataSubmissions[k].FieldID+\\quot\\ Pending:\\quot\\+bIsPending+\\quot\\ tConfirmed=\\quot\\+arPendingDataSubmissions[k].tConfirmed);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(bIsPending) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arPendingFieldID[arPendingFieldID.length]=arPendingDataSubmissions[k].FieldID;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arCompleteFieldID[arCompleteFieldID.length]=arPendingDataSubmissions[k].FieldID;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arPendingDataSubmissions[k].Status=2;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arPendingDataSubmissions[k].tComplete=formatDate(new Date()\\comma\\\\quot\\HH:mm:ss:SSS\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(arPendingDataSubmissions[k].IsDeletedRecord) bIsDelete=true;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////add record to array of records to be refreshed if there are fields with a status of complete and //crlf////tab////tab////tab////tab////tab////no fields waiting to be recorded//crlf////tab////tab////tab////tab////tab//if(arPendingFieldID.length==0) {//crlf////tab////tab////tab////tab////tab////tab////don't update table records that are being deleted//crlf////tab////tab////tab////tab////tab////tab//if(!bIsDelete) {//crlf////tab////tab////tab////tab////tab////tab////tab//arRecordsToRefresh[arRecordsToRefresh.length]=arKeyValue[j];//crlf////console.log(\\quot\\adding record \\quot\\+arKeyValue[j]+\\quot\\ to be updated\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////update pending submission styles in dialog//crlf////tab////tab////tab////tab////tab//if(arKeyValue[j]==sDialogKeyValue) {//crlf////tab////tab////tab////tab////tab////tab//updatePendingSubmissionStylesForDialog(eDialog\\comma\\arAllFields\\comma\\arPendingFieldID);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////update pending submission styles in table row.  Or\\comma\\ if the row is being deleted\\comma\\ remove it if there//crlf////tab////tab////tab////tab////tab////are no remaining submissions//crlf////tab////tab////tab////tab////tab//var eTableRow=getTableRow(table\\comma\\arKeyValue[j]);//crlf////tab////tab////tab////tab////tab//if(eTableRow) {//crlf////tab////tab////tab////tab////tab////tab//var attr=(cSelectIndex>=0) ? eTableRow.cells[cSelectIndex].getAttribute(\\quot\\AspectSubmissionPending\\quot\\) : \\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//if((attr) //amp////amp// (attr.equalsIgnoreCase(\\quot\\newdelete\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(arPendingFieldID.length==0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//eTableRow.parentNode.removeChild(eTableRow);//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//updatePendingSubmissionStylesForTableRow(sTableID\\comma\\eTableRow\\comma\\arFields\\comma\\arPendingFieldID);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////clear pending submission styles in dialog if the dialog was not updated by a call when the keyvalues //crlf////tab////tab////tab////tab////were processed//crlf////tab////tab////tab////tab//if(sDialogKeyValue.length>0) {//crlf////tab////tab////tab////tab////tab//if(arKeyValue.indexOf(sDialogKeyValue)<0) {//crlf////tab////tab////tab////tab////tab////tab//updatePendingSubmissionStylesForDialog(eDialog\\comma\\arAllFields\\comma\\null);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////refresh table if RefreshOnDataSubmit is true and there are no remaining pending submissions//crlf////tab////tab////tab////tab////Otherwise\\comma\\ refresh individual records//crlf////tab////tab////tab////tab//var sRefreshOnDataSubmit=table.getAttribute(\\quot\\RefreshOnDataSubmit\\quot\\);//crlf////tab////tab////tab////tab//if((sRefreshOnDataSubmit) //amp////amp// (sRefreshOnDataSubmit.equalsIgnoreCase(\\quot\\true\\quot\\))) {//crlf////tab////tab////tab////tab////tab//if(countPendingSubmissions(sTableID)==0) {//crlf////tab////tab////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\updatePendingSubmissions: calling refreshTableOnInterval\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//refreshTableOnInterval(sTableID);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\updatePendingSubmissions: skipping call to refreshTableOnInterval because there are outstanding submissions\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////refresh any records for which data has been submitted//crlf////tab////tab////tab////tab////tab//if((bEnableSubmissionDebugging) //amp////amp// (arRecordsToRefresh.length>0)) {//crlf////tab////tab////tab////tab////tab////tab//appendToSubmitLog(\\quot\\updatePendingSubmissions: refreshing \\quot\\+arRecordsToRefresh.length+\\quot\\ records\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//for(var j=0;j<arRecordsToRefresh.length;j++) {//crlf////tab////tab////tab////tab////tab////tab//var cPendingSubmissions=countPendingSubmissions(sTableID\\comma\\arRecordsToRefresh[j]);//crlf////tab////tab////tab////tab////tab////tab//if(cPendingSubmissions==0) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\updatePendingSubmissions: calling updateTableRecord\\quot\\);//crlf////console.log(\\quot\\updatePendingSubmissions calling updateTableRecord for : \\quot\\+arRecordsToRefresh[j]);//crlf////tab////tab////tab////tab////tab////tab////tab//updateTableRecord(sTableID\\comma\\arRecordsToRefresh[j]);//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////console.log(\\quot\\updatePendingSubmissions cPendingSubmissions=\\quot\\+cPendingSubmissions);//crlf////tab////tab////tab////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\updatePendingSubmissions: skipping updateTableRecord for key=\\quot\\+arRecordsToRefresh[j]+\\quot\\ because there are outstanding submissions\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////call listener function if defined.  //crlf////tab////tab////tab////tab//var s=\\quot\\tableDataSubmissionComplete\\quot\\+sTableID;//crlf////tab////tab////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) {//crlf////tab////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\updatePendingSubmissions calling \\quot\\+s+\\quot\\('\\quot\\+sTableID+\\quot\\')\\quot\\);//crlf////tab////tab////tab////tab////tab//eval(s+\\quot\\('\\quot\\+sTableID+\\quot\\')\\quot\\);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////update select boxes//crlf////tab////11-27-2017 Modified this to only update select boxes when there are no remaining submissions.  This cuts down on the //crlf////tab////number of calls.  It was creating too many notifications when logged in through the server//crlf////tab//if(countPendingSubmissions()==0) {//crlf////tab////tab////11-27-2017: do not update options unless working from the local server.  Otherwise\\comma\\ too many //crlf////tab////tab////notifications will be generated when logged into a computer through the server.  A separate notification //crlf////tab////tab////is generated for each select box and there can be many\\comma\\ as when editing a recipe.  This needs to be //crlf////tab////tab////handled more efficiently.//crlf////tab////tab//if(getServer().indexOf(\\quot\\127.0.0.1\\quot\\)>=0) {//crlf////tab////tab////tab//updateSelectBoxes();//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////update the debugging table//crlf////tab//debugDataSubmission();//crlf//};//crlf////crlf///******************************************************************************//crlf//Updates the pending submission styles for fields in a dialog//crlf//******************************************************************************///crlf//function updatePendingSubmissionStylesForDialog(eDialog\\comma\\arAllFields\\comma\\arPendingFieldID) {//crlf////appendToLog(\\quot\\updatePendingSubmissionStylesForDialog Dialog ID=\\quot\\+eDialog.id+\\quot\\ arAllFields=\\quot\\+arAllFields.toString()+\\quot\\ arPendingFieldID=\\quot\\+arPendingFieldID.toString());//crlf////tab//var arNodes=new Array();//crlf////tab//getAllInputNodes(eDialog\\comma\\arNodes);//crlf////crlf////tab//for (var i=0;i<arNodes.length;i++) {//crlf////tab////tab//var sName=arNodes[i].getAttribute(\\quot\\name\\quot\\);//crlf////crlf////tab////tab////if it's an input for a datalist\\comma\\ get the name from the hidden element used to submit data//crlf////tab////tab//if(arNodes[i].getAttribute(\\quot\\List\\quot\\)) {//crlf////tab////tab////tab//var sDataListID=arNodes[i].getAttribute(\\quot\\List\\quot\\);//crlf////tab////tab////tab////confirm that it's a datalist input by checking the ID.  It should be the ID of //crlf////tab////tab////tab////the datalist plus _input//crlf////tab////tab////tab//if(arNodes[i].id.equalsIgnoreCase(sDataListID+\\quot\\_input\\quot\\)) {//crlf////tab////tab////tab////tab////get the name from the input used to submit the data//crlf////tab////tab////tab////tab//var eSubmit=document.getElementById(sDataListID+\\quot\\_input_submit\\quot\\);//crlf////tab////tab////tab////tab//if(eSubmit) sName=eSubmit.getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab//if(sName) {//crlf////tab////tab////tab//var sFieldID=sName.toUpperCase();//crlf////tab////tab////tab////crlf////tab////tab////tab////only update fields that belong to the table.  This is necessary when two tables share a single dialog//crlf////tab////tab////tab////as in the registration page.  If all fields were updated\\comma\\ one table would turn off fields because they//crlf////tab////tab////tab////didn't appear to be pending and the other table would turn them back on because they are pending and//crlf////tab////tab////tab////it would blink like a christmas tree//crlf////tab////tab////tab//if(arAllFields.indexOf(sFieldID)>=0)//crlf////tab////tab////tab//{//crlf////tab////tab////tab////tab//var eParent=arNodes[i].parentNode;//crlf////tab////tab////tab////tab//if((eParent.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)) ~~pipe~~~~pipe~~ (eParent.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\)))//crlf////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab//var bIsPending=(arPendingFieldID) ? (arPendingFieldID.indexOf(sFieldID)>=0) : false;//crlf////tab////tab////tab////tab////tab//if(bIsPending==true) {//crlf////tab////tab////tab////tab////tab////tab//setPendingSubmissionStyle(arNodes[i]\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//eParent.setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\pending\\quot\\);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//setPendingSubmissionStyle(arNodes[i]\\comma\\false\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab//eParent.setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\false\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Updates the pending submission styles for cells in a table row.  Removes row from//crlf//table if record has been deleted//crlf//******************************************************************************///crlf//function updatePendingSubmissionStylesForTableRow(ATableID\\comma\\eTableRow\\comma\\arFields\\comma\\arPendingFieldID) {//crlf////tab//for(var cell=0;cell<eTableRow.cells.length;cell++) {//crlf////tab////tab//var attr=eTableRow.cells[cell].getAttribute(\\quot\\AspectSubmissionPending\\quot\\);//crlf////tab////tab//if((attr) //amp////amp// (attr.length>0))//crlf////tab////tab//{//crlf////tab////tab////tab//if(attr.equalsIgnoreCase(\\quot\\new\\quot\\)) {//crlf////tab////tab////tab////tab//var sKeyValue=eTableRow.getAttribute(\\quot\\KeyValue\\quot\\).toUpperCase();//crlf////tab////tab////tab////tab//var sCellIndex=eTableRow.cells[cell].getAttribute(\\quot\\CellIndex\\quot\\);//crlf////tab////tab////tab////tab//if(sCellIndex) {//crlf////tab////tab////tab////tab////tab//var iCellIndex=parseInt(sCellIndex);//crlf////tab////tab////tab////tab////tab//var sFieldID=arFields[iCellIndex].toUpperCase();//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab//if(countPendingSubmissions(ATableID\\comma\\sKeyValue\\comma\\sFieldID)==0) {//crlf////tab////tab////tab////tab////tab////tab//var bIsPending=(arPendingFieldID) ? (arPendingFieldID.indexOf(sFieldID)>=0) : false;//crlf////crlf////tab////tab////tab////tab////tab////tab//if(!bIsPending) {//crlf////tab////tab////tab////tab////tab////tab////tab//setPendingSubmissionStyle(eTableRow.cells[cell].childNodes[0]\\comma\\true\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab////tab//eTableRow.cells[cell].style.backgroundColor=\\quot\\__BackgroundColor__\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab//eTableRow.cells[cell].setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\false\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};  //crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab//};//crlf//};//crlf////crlf///********************************************************************//crlf//Updates a record in a table by making a request to the server for new values.  The//crlf//function is called again with sValues defined when a response is received.//crlf//KeyValue is a comma-delimited list of key values for which records will be updated//crlf//CallbackFunc can be used to specify a function to be called when the update is complete.//crlf//********************************************************************///crlf//function updateTableRecord(ATableID\\comma\\KeyValue\\comma\\CallbackFunc\\comma\\sValues\\comma\\n) { //crlf////tab//appendToSubmitLog(\\quot\\updateTableRecord: TableID:\\quot\\+ATableID+\\quot\\ KeyValue:\\quot\\+KeyValue+\\quot\\ sValues:\\quot\\+sValues+\\quot\\ n:\\quot\\+n);//crlf////tab//var table=document.getElementById(ATableID);//crlf////tab//if(!table) return; //can happen if a page is refreshed immediately after a request has been made for record values//crlf////tab//var sKeyDescription=table.getAttribute(\\quot\\aspectkeydescription\\quot\\);//crlf////crlf////tab////Got values.  Update the record.//crlf////tab//if(sValues)//crlf////tab//{//crlf////console.log(\\quot\\updateTableRecord got values: \\quot\\+sValues);//crlf////tab////tab////abort if there are pending submissions for the record//crlf////tab////tab//if(countPendingSubmissions(ATableID\\comma\\KeyValue)>0) {//crlf////tab////tab////tab//appendToSubmitLog(\\quot\\updateTableRecord aborted because there are pending submissions for keyvalue=\\quot\\+KeyValue);//crlf////console.log(\\quot\\updateTableRecord aborted because there are pending submissions for keyvalue=\\quot\\+KeyValue);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//var arRecord=getSubStringArray(sValues\\comma\\\\quot\\\n\\quot\\\\comma\\true);//crlf////appendToSubmitLog(\\quot\\updateTableRecord got values for \\quot\\+arRecord.length+\\quot\\ records\\quot\\);//crlf////appendToSubmitLog(\\quot\\Values=\\quot\\+sValues);//crlf////crlf////tab////tab////get the select box containing key descriptions in the edit dialog//crlf////tab////tab//var eSelect=null;//crlf////tab////tab//var sDialogID=table.getAttribute(\\quot\\aspecteditdialogid\\quot\\);//crlf////tab////tab//if(sDialogID) {//crlf////tab////tab////tab//var eDialog=document.getElementById(sDialogID);//crlf////tab////tab////tab//if(eDialog) eSelect=getTableDialogHeaderSelectKeyControl(eDialog);//crlf////tab////tab//};//crlf////crlf////tab////tab//for(var i=0;i<arRecord.length;i++) {//crlf////tab////tab////tab//var a=getSubStringArray(arRecord[i]\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////tab////tab//if(a) {//crlf////tab////tab////tab////tab//var sKeyValue=a[0];//crlf////tab////tab////tab////tab//var sAllValues=a[1];//crlf////tab////tab////tab////tab//var sKeyDescription=a[2];//crlf////tab////tab////tab////tab////appendToLog(\\quot\\updateTableRecord updating values for Key=\\quot\\+sKeyValue);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab/////NOTE: 03-17-2013 Html values are now included as a 4th element in the value returned by a call to getRecordValues()//crlf////tab////tab////tab////tab////There was a conflict between the data recorded in the aspectallvalues attribute and the values needed to update a //crlf////tab////tab////tab////tab////row in the table after data had been edited.  Table cells initially contain html values (using getFieldForHtml.  When//crlf////tab////tab////tab////tab////a record is edited and new values are gotten from the server\\comma\\ data from getField() needs to be recorded in the aspectallvalues//crlf////tab////tab////tab////tab////attribute so dialogs can be initialized properly after data is edited.  But data from getFieldForHtml also needs to be//crlf////tab////tab////tab////tab////included so table cells can be displayed properly since they may use html to format the field.//crlf////tab////tab////tab////tab////The solution is to return values from both getField() and getFieldForHtml().  Data returned by getFieldForHtml is recorded//crlf////tab////tab////tab////tab////in a new attribute named aspecthtmlvalues.  This attribute is used to update cells in tables.  It is not available until//crlf////tab////tab////tab////tab////a record has been edited.//crlf////tab////tab////tab////tab//var sHtmlValues=\\quot\\\\quot\\;//crlf////crlf////tab////tab////tab////tab////restore any pipes contained in the values.  Pipes are tokenized by TAspectDriver.getRecordValues because//crlf////tab////tab////tab////tab////that function returns a string delimited by pipes//crlf////tab////tab////tab////tab//sAllValues=replaceAllSubstrings(sAllValues\\comma\\\\quot\\\\percent\\\\percent\\pi\\quot\\+\\quot\\pe\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab////tab////tab////tab//sAllValues=replaceAllSubstrings(sAllValues\\comma\\\\quot\\\\percent\\\\percent\\line\\quot\\+\\quot\\feed\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\\n\\quot\\);//crlf////crlf////tab////tab////tab////tab//if(a.length>3) {//crlf////tab////tab////tab////tab////tab//sHtmlValues=a[3];//crlf////tab////tab////tab////tab////tab//sHtmlValues=replaceAllSubstrings(sHtmlValues\\comma\\\\quot\\\\percent\\\\percent\\pi\\quot\\+\\quot\\pe\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab////tab////tab////tab////tab//sHtmlValues=replaceAllSubstrings(sHtmlValues\\comma\\\\quot\\\\percent\\\\percent\\line\\quot\\+\\quot\\feed\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\\n\\quot\\);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////locate row containing keyvalue//crlf////tab////tab////tab////tab//var row=getTableRowContainingKey(table\\comma\\sKeyValue);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////set attributes used for inspect menu//crlf////tab////tab////tab////tab//if(a.length>4) {//crlf////tab////tab////tab////tab////tab////locate the td containing the inspect menu icon//crlf////tab////tab////tab////tab////tab//if(table.rows[row]) {//crlf////tab////tab////tab////tab////tab////tab//for(var cell=0;cell<table.rows[row].cells.length;cell++) {//crlf////tab////tab////tab////tab////tab////tab////tab//var s=table.rows[row].cells[cell].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\inspectrecord\\quot\\))) //crlf////tab////tab////tab////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab////tab////tab////tab////attributes are in element 4 in the form name=value//power//name=value//power//name=value//crlf////tab////tab////tab////tab////tab////tab////tab////tab//arInspectAttributes=getSubStringArray(a[4]\\comma\\\\quot\\//power//\\quot\\\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//for(var j=0;j<arInspectAttributes.length;j++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var s=replaceAllSubstrings(replaceAllSubstrings(arInspectAttributes[j]\\comma\\\\quot\\\\percent\\\\percent\\pi\\quot\\+\\quot\\pe\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\~~pipe~~\\quot\\)\\comma\\\\quot\\\\percent\\\\percent\\line\\quot\\+\\quot\\feed\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\\n\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var n=s.indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(n>0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sName=s.substring(0\\comma\\n);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sValue=s.substring(n+1);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//table.rows[row].cells[cell].setAttribute(sName\\comma\\sValue);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab//if(row>=0)//crlf////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab////update the attribute containing all values//crlf////tab////tab////tab////tab////tab//setAttr(table.rows[row]\\comma\\\\quot\\aspectAllValues\\quot\\\\comma\\sAllValues);//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\updateTableRecord setting Key=\\quot\\+sKeyValue+\\quot\\ AllValues=\\quot\\+sAllValues);//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////update the attribute containing html values//crlf////tab////tab////tab////tab////tab//if(sHtmlValues.length>0) table.rows[row].setAttribute(\\quot\\aspecthtmlvalues\\quot\\\\comma\\sHtmlValues);//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////update the cells in the table row//crlf////tab////tab////tab////tab////tab//updateCellsInRecord(table\\comma\\sKeyValue);//crlf////crlf////tab////tab////tab////tab////tab////update values in the dialog if the dialog is visible and the record is currently selected//crlf////tab////tab////tab////tab////tab//var sDialogID=table.getAttribute(\\quot\\EditDialogID\\quot\\);//crlf////tab////tab////tab////tab////tab//var eDialog=document.getElementById(sDialogID);//crlf////tab////tab////tab////tab////tab//if(eDialog) {//crlf////tab////tab////tab////tab////tab////tab//var sDialogKeyValue=eDialog.getAttribute(\\quot\\keyvalue\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//if((sDialogKeyValue) //amp////amp// (sDialogKeyValue==sKeyValue)) {//crlf////tab////tab////tab////tab////tab////tab////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldID\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab//var arValues=getSubStringArray(getAttr(table.rows[row]\\comma\\\\quot\\aspectAllValues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab//for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i]\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab////tab//setDialogValues(ATableID\\comma\\eDialog\\comma\\arFieldID\\comma\\arValues\\comma\\true\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//appendToSubmitLog(\\quot\\updateTableRecord: Could not find row for key value \\quot\\+sKeyValue);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////update the key description in the dialog header's drop-down list//crlf////tab////tab////tab////tab//var bDialogHeader=table.getAttribute(\\quot\\aspectdialogheader\\quot\\);//crlf////tab////tab////tab////tab//if((bDialogHeader) //amp////amp// (bDialogHeader.equalsIgnoreCase(\\quot\\true\\quot\\)) //amp////amp// (eSelect)) {//crlf////tab////tab////tab////tab////tab//if(sKeyDescription.length>0)//crlf////tab////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab////tab//var bFound=false;//crlf////tab////tab////tab////tab////tab////tab//for (var j=0;(bFound==false) //amp////amp// (j<eSelect.options.length);j++) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(eSelect.options[j].value.equalsIgnoreCase(sKeyValue)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//eSelect.options[j].text=sKeyDescription;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//bFound=true;//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////add the description if the key value was not found in the list//crlf////tab////tab////tab////tab////tab////tab//if(bFound==false) {//crlf////tab////tab////tab////tab////tab////tab////tab//var n=0;//crlf////tab////tab////tab////tab////tab////tab////tab//while((n<eSelect.options.length) //amp////amp// (eSelect.options[n].text.toUpperCase()<sKeyDescription.toUpperCase())) n++;//crlf////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab//var eNewOption=document.createElement('option');//crlf////tab////tab////tab////tab////tab////tab////tab//eNewOption.text=sKeyDescription;//crlf////tab////tab////tab////tab////tab////tab////tab//eNewOption.value=sKeyValue;//crlf////tab////tab////tab////tab////tab////tab////tab//if(n==eSelect.length) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//eSelect.options[eSelect.options.length]=eNewOption;//crlf////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//try {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eSelect.add(eNewOption\\comma\\eSelect.options[n]); // standards compliant; doesn't work in IE//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eSelect.selectedIndex=n;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//catch(ex) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eSelect.selectedIndex=n;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//eSelect.add(eNewOption\\comma\\eSelect.selectedIndex); // IE only//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//appendToSubmitLog(\\quot\\updateTableRecord: Error: Could not get values for keyvalue=\\quot\\+KeyValue+\\quot\\ in table:\\quot\\+ATableID\\comma\\false\\comma\\true);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////appendToLog(\\quot\\CallbackFunc=\\quot\\+CallbackFunc);//crlf////tab////tab//if(CallbackFunc.length>0) eval(CallbackFunc);//crlf////crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var Attempts=1;//crlf////tab//if(n) {//crlf////tab////tab//Attempts=n+1;//crlf////tab////tab//if(Attempts>9) {//crlf////tab////tab////tab//appendToSubmitLog(\\quot\\updateTableRecord: Error: Aborting updateTableRecord because error getting values Attempts=\\quot\\+n\\comma\\false\\comma\\true);//crlf////tab////tab////tab//return;//crlf////tab////tab//}//crlf////crlf////tab////tab//appendToSubmitLog(\\quot\\updateTableRecord: Error: updateTableRecord got no values.  Attempts=\\quot\\+Attempts);//crlf////tab//};//crlf////tab////crlf////tab//appendToSubmitLog(\\quot\\updateTableRecord: updateTableRecord requesting values for Key=\\quot\\+KeyValue+\\quot\\ Attempt=\\quot\\+Attempts);//crlf////crlf////tab////get values//crlf////tab//var sHashID=table.getAttribute(\\quot\\aspecthashid\\quot\\);//crlf////tab//var sDriverID=table.getAttribute(\\quot\\aspectdriver\\quot\\);//crlf////tab//var sInspectMenu=table.getAttribute(\\quot\\aspectInspectMenu\\quot\\);//crlf////crlf////tab////These need to use the driver params in place when the table was created//crlf////tab////var sDriverParams=getTableDriverParams(ATableID);//crlf////tab//var sDriverParams=table.getAttribute(\\quot\\aspectParamsActive\\quot\\);//crlf////tab//if(!sDriverParams) sDriverParams=getTableDriverParams(ATableID); //for compatibility before posting aspectParamsActive//crlf////crlf////tab//var sEmbedValues=table.getAttribute(\\quot\\aspectembedvalues\\quot\\);//crlf////crlf////tab////make a request for values//crlf////tab//var sUrl=getServer()+\\quot\\/?Network=greenlight//amp//ID=getWidget\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em//amp//Widget=Notification Queries\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//query=getRecordValues\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//source=\\quot\\+sHashID;//crlf////tab//sUrl +=\\quot\\//amp//Driver_ID=\\quot\\+sDriverID;//crlf////tab//sUrl +=\\quot\\//amp//Driver_Params=\\quot\\+sDriverParams;//crlf////tab//sUrl +=\\quot\\//amp//EmbedValues=\\quot\\+sEmbedValues;//crlf////tab//sUrl +=\\quot\\//amp//KeyValues=\\quot\\+KeyValue;//crlf////tab//sUrl +=\\quot\\//amp//KeyDescription=\\quot\\+sKeyDescription;//crlf////tab//if(sInspectMenu!=null) sUrl +=\\quot\\//amp//InspectMenu=\\quot\\+sInspectMenu;//crlf////crlf////tab//var sCallbackFunc=(CallbackFunc) ? CallbackFunc : \\quot\\\\quot\\;//crlf////tab//var sFunc=\\quot\\updateTableRecord(\x22\\quot\\+ATableID+\\quot\\\x22\\comma\\\x22\\quot\\+KeyValue+\\quot\\\x22\\comma\\\x22\\quot\\+sCallbackFunc+\\quot\\\x22\\comma\\req.responseText\\comma\\\\quot\\+Attempts+\\quot\\)\\quot\\;//crlf////tab////appendToLog(\\quot\\sFunc=\\quot\\+sFunc);//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///***********************************************************************************//crlf//Called by insertTableRecord() to initialize the template with a new set of values //crlf//after it has been used to initialize a new record.//crlf////crlf//The result is created by a call to driverGetNewRecordDefaults() in TFormulaEvaluator.//crlf//The result is a pipe-delimited string in the form://crlf////tab//KeyValue~~pipe~~Value1\\comma\\Value2\\comma\\Value3...~~pipe~~IsLookup\\comma\\IsLookup\\comma\\IsLookup...~~pipe~~NextVirtualIndex//crlf//***********************************************************************************///crlf//function initializeNewRecordTemplate(ATableID\\comma\\sValues) {//crlf////crlf////tab///*//tab//if this is the initial call\\comma\\ don't make the request until all submissions for the table//crlf////tab////tab//are complete.  When a record is inserted\\comma\\ the record needs to be recorded on the server//crlf////tab////tab//before requesting values for a new record in order for the virtual index value to be //crlf////tab////tab//correct for the new record//crlf////tab////tab////crlf////tab////tab//11-24-16: Note: This causes a significant delay when inserting records.  Instead of waiting //crlf////tab////tab//until all submissions are complete\\comma\\ request the new record and increment the virtual index.//crlf////tab////tab//If it is necessary to implement the delay below\\comma\\ at least change it so it only waits if there//crlf////tab////tab//are pending submissions for a NEW record\\comma\\ not edits for an existing record//crlf////tab//*///crlf////tab//if((false) //amp////amp// (!sValues)) {//crlf////tab////tab//var c=0;//crlf////tab////tab//for(var i=0;i<arPendingDataSubmissions.length;i++) {//crlf////tab////tab////tab//if(arPendingDataSubmissions[i].TableID==ATableID) {//crlf////tab////tab////tab////tab//if(arPendingDataSubmissions[i].Status<2) {//crlf////tab////tab////tab////tab////tab//if(arPendingDataSubmissions[i].IsNewRecord) {//crlf////tab////tab////tab////tab////tab////tab////if (bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\initializeNewRecordTemplate: Postponing request for new record template for tableID=\\quot\\+ATableID);//crlf////tab////tab////tab////tab////tab////tab//setTimeout(\\quot\\initializeNewRecordTemplate(\\\quot\\\\quot\\+ATableID+\\quot\\\\\quot\\)\\quot\\\\comma\\1000);//crlf////tab////tab////tab////tab////tab////tab//return;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//var table=document.getElementById(ATableID);//crlf////crlf////tab//var RowIndex=-1;//crlf////tab//var RowTemplate=null;//crlf////tab//for (var i=0;((RowIndex<0) //amp////amp// (i<table.rows.length));i++) {//crlf////tab////tab//var s=table.rows[i].getAttribute(\\quot\\ID\\quot\\);//crlf////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\InsertTemplate\\quot\\+ATableID))) {//crlf////tab////tab////tab//RowTemplate=table.rows[i];//crlf////tab////tab////tab//RowIndex=i;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//if(RowIndex<0) {//crlf////tab////tab//alert(\\quot\\Cannot locate template for new record\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////got values.  Update the template//crlf////tab//if(sValues) {//crlf////tab////tab//if (bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\initializeNewRecordTemplate got values: \\quot\\+sValues);//crlf////tab////tab////don't flag the record as initialized if no values were returned.  This would leave the new record//crlf////tab////tab////using the same key expression as the previous one.  A counter could be implemented here to //crlf////tab////tab////try 2 or 3 times if an error occurs//crlf////tab////tab//if(sValues.length==0) {//crlf////tab////tab////tab//alert(\\quot\\Error initializing defaults for new record\\quot\\);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////crlf////tab////tab////The driverGetNewRecordDefaults() function returns a string in the form://crlf////tab////tab////keyvalue~~pipe~~value1\\comma\\value2\\comma\\value3...~~pipe~~isLookup1\\comma\\isLookup2\\comma\\isLookupn...//crlf////tab////tab////The third element in the string is used to determine if the field is a lookup.  //crlf////tab////tab////Values for lookups are not displayed in new records until the record is added //crlf////tab////tab////to the driver by submitting the fields contained in it.//crlf////tab////tab//var a=getSubStringArray(sValues\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\false);//crlf////crlf////tab////tab////update attributes//crlf////tab////tab//RowTemplate.setAttribute(\\quot\\keyvalue\\quot\\\\comma\\a[0]);//crlf////tab////tab//RowTemplate.setAttribute(\\quot\\aspectAllValues\\quot\\\\comma\\a[1]);//crlf////tab////tab////setAttr(RowTemplate\\comma\\\\quot\\aspectAllValues\\quot\\\\comma\\a[1]);//crlf////crlf////tab////tab////update cells//crlf////tab////tab//var arAllFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectallfieldid\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////tab////tab//var arAllValue=getSubStringArray(a[1]\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////tab////tab//var arTableFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectfields\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////crlf////tab////tab////get array of boolean values indicating whether each value is a lookup.  Values for lookups//crlf////tab////tab////are not displayed in the table when a new record is added since only the key is available //crlf////tab////tab////and not the actual value//crlf////tab////tab//var arIsLookup=null;//crlf////tab////tab//if(a.length>=3) {//crlf////tab////tab////tab//arIsLookup=getSubStringArray(a[2]\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab////tab//};//crlf////crlf////tab////tab////get next virtual index field.  This is used when records are added to the end of the table//crlf////tab////tab//var NextVirtualIndex=0;//crlf////tab////tab//if(a.length>=4) {//crlf////tab////tab////tab//var sInsertPosition=table.getAttribute(\\quot\\InsertPosition\\quot\\);//crlf////tab////tab////tab//if((sInsertPosition) //amp////amp// (sInsertPosition.equalsIgnoreCase(\\quot\\bottom\\quot\\))) {//crlf////tab////tab////tab////tab//table.rows[RowIndex].setAttribute(\\quot\\virtualindex\\quot\\\\comma\\parseInt(a[3])+1);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//table.rows[RowIndex].setAttribute(\\quot\\virtualindex\\quot\\\\comma\\\\quot\\0\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//var sDebug=\\quot\\\\quot\\;//crlf////tab////tab//for (var cell=0;cell<table.rows[RowIndex].cells.length;cell++) {//crlf////tab////tab////tab//var s=table.rows[RowIndex].cells[cell].getAttribute(\\quot\\cellindex\\quot\\);//crlf////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab//var iCellIndex=parseInt(s);//crlf////tab////tab////tab////tab//var sFieldID=arTableFieldID[iCellIndex];//crlf////tab////tab////tab////tab//var Done=false;//crlf////tab////tab////tab////tab//sDebug +=\\quot\\ Cell=\\quot\\+iCellIndex+\\quot\\ FieldID=\\quot\\+sFieldID;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab//for (var i=0;((Done==false) //amp////amp// (i<arAllFieldID.length));i++) //crlf////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab////note: need to allow for full ID in arAllFieldID when looking for a match//crlf////tab////tab////tab////tab////tab//if((arAllFieldID[i].equalsIgnoreCase(sFieldID)) ~~pipe~~~~pipe~~ (arAllFieldID[i].toUpperCase().indexOf(\\quot\\.\\quot\\+sFieldID.toUpperCase())>=0)) {//crlf////tab////tab////tab////tab////tab////tab//sDebug+=\\quot\\childNodes=\\quot\\+table.rows[RowIndex].cells[cell].childNodes.length;//crlf////tab////tab////tab////tab////tab////tab//if(table.rows[RowIndex].cells[cell].childNodes.length==0) {//crlf////tab////tab////tab////tab////tab////tab////tab//table.rows[RowIndex].cells[cell].innerHTML=arAllValue[i];//crlf////tab////tab////tab////tab////tab////tab////tab//sDeubg+=\\quot\\ set Innerhtml\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//for (var Child=0;Child<table.rows[RowIndex].cells[cell].childNodes.length;Child++) //crlf////tab////tab////tab////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var e=table.rows[RowIndex].cells[cell].childNodes[Child];//crlf////tab////tab////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ e[\\quot\\+Child+\\quot\\].type=\\quot\\+e.type+\\quot\\ e[\\quot\\+Child+\\quot\\].nodeName=\\quot\\+e.nodeName;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(e.nodeName.equalsIgnoreCase(\\quot\\select\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//e.value=arAllValue[i];//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set select\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else if(e.type=='checkbox') {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//e.checked=(arAllValue[i].equalsIgnoreCase(\\quot\\true\\quot\\));//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set checkbox\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else if(e.nodeName.equalsIgnoreCase(\\quot\\input\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//e.value=arAllValue[i];//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set input\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else if(e.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) {//tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(arIsLookup) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if((arIsLookup.length>i) //amp////amp// (arIsLookup[i].equalsIgnoreCase(\\quot\\t\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//e.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//e.innerHTML=arAllValue[i];//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//e.innerHTML=arAllValue[i];//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set text\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else if(e.nodeName.equalsIgnoreCase(\\quot\\password\\quot\\)) {//tab////crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//e.innerHTML=arAllValue[i];//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set password\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ did not set\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//Done=true;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//sDebug +=\\quot\\\r\n\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////appendToLog(sDebug\\comma\\false\\comma\\true);//crlf////tab////tab//table.rows[RowIndex].setAttribute(\\quot\\IsInitialized\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////crlf////tab////tab////change the ID of the TD cell containing the inspect menu and update the onClick function //crlf////tab////tab////used to display the menu//crlf////tab////tab//for (var cell=0;cell<table.rows[RowIndex].cells.length;cell++) {//crlf////tab////tab////tab//var sName=table.rows[RowIndex].cells[cell].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab////tab//if(sName) {//crlf////tab////tab////tab////tab//if(sName.equalsIgnoreCase(\\quot\\inspectrecord\\quot\\)) {//crlf////tab////tab////tab////tab////tab//var sNewID=getSalt(4);//crlf////tab////tab////tab////tab////tab//appendToLog(\\quot\\Setting ID for inspect menu to \\quot\\+sNewID+\\quot\\ ATableID=\\quot\\+ATableID);//crlf////tab////tab////tab////tab////tab//table.rows[RowIndex].cells[cell].id=sNewID;//crlf////tab////tab////tab////tab////tab//var e=table.rows[RowIndex].cells[cell].childNodes[0];//crlf////tab////tab////tab////tab////tab//if(e) {//crlf////tab////tab////tab////tab////tab////tab//var sFunc=\\quot\\showInspectMenu('\\quot\\+sNewID+\\quot\\'\\comma\\'\\quot\\+ATableID+\\quot\\')\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//e.setAttribute(\\quot\\onclick\\quot\\\\comma\\sFunc);//tab////this works for firefox//crlf////tab////tab////tab////tab////tab////tab//e.onclick=Function(sFunc);//tab////tab////this works for IE//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////make a request to get values for the new record//crlf////tab//var sHashID=table.getAttribute(\\quot\\aspecthashid\\quot\\);//crlf////tab//var sDriverID=table.getAttribute(\\quot\\aspectdriver\\quot\\);//crlf////crlf////tab////These need to use the driver params in place when the table was created//crlf////tab////var sDriverParams=getTableDriverParams(ATableID);//crlf////tab//var sDriverParams=table.getAttribute(\\quot\\aspectParamsActive\\quot\\);//crlf////crlf////tab//var sEmbedValues=table.getAttribute(\\quot\\aspectembedvalues\\quot\\);//crlf////crlf////tab////make a request for a new set of default values//crlf////tab//var sUrl=getServer()+\\quot\\/?Network=greenlight//amp//ID=getWidget\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em//amp//Widget=Notification Queries\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//query=getNewRecordDefaults\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//source=\\quot\\+sHashID;//crlf////tab//sUrl +=\\quot\\//amp//Driver_ID=\\quot\\+sDriverID;//crlf////tab//sUrl +=\\quot\\//amp//Driver_Params=\\quot\\+sDriverParams;//crlf////tab//sUrl +=\\quot\\//amp//EmbedValues=\\quot\\+sEmbedValues;//crlf////tab//sUrl +=\\quot\\//amp//KeyDescription=\\quot\\+table.getAttribute(\\quot\\aspectkeydescription\\quot\\);//crlf////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\initializeNewRecordTemplate: requesting new record defaults\\quot\\);//crlf////tab//var sFunc=\\quot\\initializeNewRecordTemplate(\x22\\quot\\+ATableID+\\quot\\\x22\\comma\\req.responseText)\\quot\\;//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///******************************************************************************//crlf//Submits data edited in a table.  e is the element used to edit the data (e.g. input\\comma\\ checkbox\\comma\\ select)//crlf//******************************************************************************///crlf//function submitTableCell(e) {//crlf////appendToSubmitLog(\\quot\\submitTableCell: \\quot\\+e.id\\comma\\false\\comma\\true);//crlf////tab//var td=e.parentNode;//crlf////crlf////tab////look for text tag and go one more level up//crlf////tab//if(td.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)==false) td=td.parentNode;//crlf////crlf////tab//var tr=td.parentNode;//crlf////tab//var tbody=tr.parentNode;//crlf////tab//var table=tbody.parentNode;//crlf////crlf////tab//if(table.nodeName.equalsIgnoreCase(\\quot\\table\\quot\\)==false) {//crlf////tab////tab//alert(\\quot\\Error reading driver information\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var sTableID=table.getAttribute(\\quot\\id\\quot\\);//crlf////tab////crlf////tab////format the cell//crlf////tab//if(e.type!=\\quot\\checkbox\\quot\\) e.value=formatField(sTableID\\comma\\e);//crlf////tab////crlf////tab////set the background color of the cell and the attribute indicating it's saving//crlf////tab//setPendingSubmissionStyle(e\\comma\\true\\comma\\true);//crlf////tab////td.style.backgroundColor=PendingSubmissionBackgroundColor;//crlf////tab//td.setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\new\\quot\\);//crlf////crlf////tab////get the FieldID of the cell//crlf////tab//var iCellIndex=parseInt(td.getAttribute(\\quot\\CellIndex\\quot\\));//crlf////tab//var arFields=getSubStringArray(table.getAttribute(\\quot\\aspectFields\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//var sFieldID=arFields[iCellIndex];//crlf////tab////crlf////tab////get the key value for the record//crlf////tab//var sKeyValue=tr.getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab////crlf////tab////get the value of the cell//crlf////tab//var sValue=(e.type==\\quot\\checkbox\\quot\\) ? e.checked : e.value;//crlf////crlf////tab////appendToSubmitLog(\\quot\\submitTableCell KeyValue=\\quot\\+sKeyValue+\\quot\\ FieldID=\\quot\\+sFieldID+\\quot\\ Value=\\quot\\+sValue);//crlf////crlf////tab////update the corresponding cell in the edit dialog if there is one//crlf////tab//var d=document.getElementById(table.getAttribute(\\quot\\EditDialogID\\quot\\));//crlf////tab//if(d) {//crlf////tab////tab//var Control=getDialogControl(d\\comma\\sKeyValue\\comma\\sFieldID);//crlf////tab////tab//if(Control) {//crlf////tab////tab////tab//(Control.type==\\quot\\checkbox\\quot\\) ? Control.checked=sValue : Control.value=sValue;//crlf////tab////tab////tab////crlf////tab////tab////tab//var eParent=Control.parentNode;//crlf////tab////tab////tab//if((eParent.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)) ~~pipe~~~~pipe~~ (eParent.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\))){//crlf////tab////tab////tab////tab//setPendingSubmissionStyle(Control\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab//eParent.setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\new\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////var s=\\quot\\\\quot\\;//crlf////tab////(sValue instanceof String) ? s=replaceAllSubstrings(sValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\) : s=sValue.toString();//crlf////tab//var s=sValue.toString();//crlf////tab//s=replaceAllSubstrings(sValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\);//crlf////tab//submitTableData(table.getAttribute(\\quot\\ID\\quot\\)\\comma\\sKeyValue\\comma\\sFieldID\\comma\\s);//crlf////crlf////tab//if(LastKeyPress==13) {//crlf////tab////tab//LastKeyPress=0;//crlf////tab////tab//advanceToNextInput(e);//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Submits data edited in a dialog.  The TableID and KeyExpression are recorded as attributes in the//crlf//dialog when it is displayed.  //crlf////crlf//The ADialogID parameter is not required.  The parent dialog will//crlf//be determined by checking the parent nodes of e until a dialog div is found.  However\\comma\\ ADialogID//crlf//can be passed to explicitly indicate the parent dialog div.  This can be used when a dialog contains//crlf//a 2nd dialog inside of it with data from another driver (e.g. the BackOffice registration container).//crlf//The format might be//crlf//[div dialog1]//crlf////tab//field from 1//crlf////tab//[div dialog2]//crlf////tab////tab//field from 2//crlf////tab//[/div]//crlf////tab//field from 1//crlf//[/div]//crlf////crlf//02-11-2017: Modified this to call submitDialogCellSub after a delay to work around a conflict that //crlf//occurs when onChange and onKeyDown are defined for a dialog cell.  The onChange function causes the //crlf//input to advance 2 times instead of just to the next field when the enter key is pressed and the //crlf//data in the field has changed.//crlf//******************************************************************************///crlf//function submitDialogCell(e\\comma\\ADialogID) {//crlf////tab////console.log(\\quot\\submitDialogCell: \\quot\\+e.getAttribute(\\quot\\name\\quot\\));//crlf////tab//if(ADialogID) {//crlf////tab////tab//setTimeout(function() {submitDialogCellSub(e\\comma\\ADialogID);}\\comma\\500);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//setTimeout(function() {submitDialogCellSub(e);}\\comma\\500);//crlf////tab//};//crlf//};//crlf////crlf//function submitDialogCellSub(e\\comma\\ADialogID) {//crlf////tab////console.log(\\quot\\submitDialogCellSub: \\quot\\+e.getAttribute(\\quot\\name\\quot\\));//crlf////tab////crlf////tab//if(!ADialogID) {//crlf////tab////tab////go up the parent list until the dialog div is located.  This is the first div with a TableID attribute //crlf////tab////tab//var div=null;//crlf////tab////tab//var node=e;//crlf////tab////tab////while((node!=null) //amp////amp// (div==null) //amp////amp// (e.parentNode)) {//crlf////tab////tab//while((node!=null) //amp////amp// (div==null) //amp////amp// (node.parentNode)) {//crlf////tab////tab////tab//if((node.getAttribute) //amp////amp// (node.getAttribute(\\quot\\TableID\\quot\\))) {//crlf////tab////tab////tab////tab//div=node;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//node=node.parentNode;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//div=document.getElementById(ADialogID);//crlf////tab//};//crlf////crlf////tab//if(div==null) {//crlf////tab////tab////This can happen during development when editing a dialog that is to be used in a table //crlf////tab////tab////since there is no table\\comma\\ just the dialog//crlf////tab////tab////alert(\\quot\\could not locate dialog div.\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////set the background color of the cell and the attribute indicating it's saving//crlf////tab//var eParent=e.parentNode;//crlf////tab//if((eParent.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)) ~~pipe~~~~pipe~~ (eParent.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\))) {//crlf////tab////tab////appendToLog(\\quot\\submitDialogCell setting pending status for \\quot\\+eParent+\\quot\\ Name=\\quot\\+e.getAttribute(\\quot\\name\\quot\\));;//crlf////tab////tab//setPendingSubmissionStyle(e\\comma\\false\\comma\\true);//crlf////tab////tab////eParent.style.backgroundColor=PendingSubmissionBackgroundColor;//crlf////tab////tab//eParent.setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\new\\quot\\);//crlf////tab//};//crlf////tab////crlf////tab////get the table ID from the dialog div//crlf////tab//var sTableID=div.getAttribute(\\quot\\TableID\\quot\\);//crlf////tab//var sKeyValue=div.getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab//var sFieldID=e.getAttribute(\\quot\\name\\quot\\);//crlf////tab//var sValue=\\quot\\\\quot\\;//crlf////tab//if (e.type==\\quot\\select-multiple\\quot\\) {//crlf////tab////tab//for (var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab//if(e.options[i].selected) {//crlf////tab////tab////tab////tab//if(sValue.length>0) sValue +=\\quot\\~~pipe~~\\quot\\;//crlf////tab////tab////tab////tab//sValue +=e.options[i].value;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//sValue=(e.type==\\quot\\checkbox\\quot\\) ? e.checked : e.value;//crlf////tab//};//crlf////tab////crlf////tab////format the contents of the cell//crlf////tab////if it's a date input\\comma\\ allow for 2 digit year//crlf////tab//if(e.type==\\quot\\date\\quot\\) {//crlf////tab////tab//if(sValue.length==10) {//crlf////tab////tab////tab////Look for two digit year in a date formatted as yyyy-MM-dd.  This will happen if a user enters a two digit year//crlf////tab////tab////tab////in an html5 date input.  if a two digit year was entered\\comma\\ it will start with 00.  Convert it to a four digit year.//crlf////tab////tab////tab//if((sValue.charAt(4)==\\quot\\-\\quot\\) //amp////amp// (sValue.charAt(7)==\\quot\\-\\quot\\)) {//crlf////tab////tab////tab////tab//var sYear=sValue.substring(0\\comma\\4);//crlf////tab////tab////tab////tab//if(sYear.substring(0\\comma\\2)==\\quot\\00\\quot\\) {//crlf////tab////tab////tab////tab////tab//sYear=\\quot\\20\\quot\\+sYear.substring(2);//crlf////tab////tab////tab////tab////tab//sValue=sYear+sValue.substring(4);//crlf////tab////tab////tab////tab////tab//e.value=sValue;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//if((e.type!=\\quot\\select-one\\quot\\) //amp////amp// (e.type!=\\quot\\select-multiple\\quot\\) //amp////amp// (e.type!=\\quot\\checkbox\\quot\\) //amp////amp// (e.type!=\\quot\\datetime-local\\quot\\)) e.value=formatField(sTableID\\comma\\e);//crlf////tab//};//crlf////crlf////tab////update the corresponding cell in the table if there is one.  Setting the value of the control//crlf////tab////in the table does not cause the onChange event to fire so the data is not submitted twice//crlf////tab//var table=document.getElementById(sTableID);//crlf////tab//var Control=getTableCellControl(table\\comma\\sKeyValue\\comma\\sFieldID);//crlf////crlf////tab//var sDebug=\\quot\\\\quot\\;//crlf////tab//if(Control!=null) {//crlf////tab////tab//sDebug=\\quot\\setting table cell e.type=\\quot\\+e.type+\\quot\\ type=\\quot\\+Control.type+\\quot\\ nodename=\\quot\\+Control.nodeName;//crlf////tab////tab//if((Control.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) ~~pipe~~~~pipe~~ (Control.nodeName.equalsIgnoreCase(\\quot\\date\\quot\\)) ~~pipe~~~~pipe~~ (Control.nodeName.equalsIgnoreCase(\\quot\\password\\quot\\))) {//crlf////tab////tab////tab//if(e.type==\\quot\\select-one\\quot\\) {//crlf////tab////tab////tab////tab////set the table cell to the description of the lookup\\comma\\ not the value//crlf////tab////tab////tab////tab//for (var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab////tab//if(e.options[i].value.equalsIgnoreCase(e.value)) Control.innerHTML=e.options[i].innerHTML;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//sDebug +=\\quot\\ set select-one\\quot\\//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(e.type==\\quot\\select-muliple\\quot\\) {//crlf////tab////tab////tab////tab////set the table cell to the description of the lookup\\comma\\ not the value//crlf////tab////tab////tab////tab//Control.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab//for (var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab////tab//if(e.options[i].selected) Control.innerHTML +=e.options[i].innerHTML;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//sDebug +=\\quot\\ set select-multiple\\quot\\//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if((e.nodeName.equalsIgnoreCase(\\quot\\input\\quot\\)) //amp////amp// (e.getAttribute(\\quot\\list\\quot\\)!=null)) {//crlf////tab////tab////tab////tab////set the table cell to the value of the datalist\\comma\\ not the value//crlf////tab////tab////tab////tab//var sListID=e.getAttribute(\\quot\\list\\quot\\);//crlf////tab////tab////tab////tab//if(sListID) {//crlf////tab////tab////tab////tab////tab//var eDatalistInput=document.getElementById(sListID+\\quot\\_input\\quot\\);//crlf////tab////tab////tab////tab////tab//if(eDatalistInput) {//crlf////tab////tab////tab////tab////tab////tab//Control.innerHTML=eDatalistInput.value;//crlf////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set value from list: \\quot\\+sListID+\\quot\\_input value:\\quot\\+eDatalistInput.value;//crlf////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ confirm:\\quot\\+Control.innerHTML;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//sDebug +=\\quot\\ unable to locate list with ID: \\quot\\+sListID+\\quot\\_input\\quot\\;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//sDebug +=\\quot\\ unable to get list ID from element with ID: \\quot\\+e.id;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//if(Control.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) {//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\submitDialogCell: e.type=\\quot\\+e.type+\\quot\\ e.value=\\quot\\+e.value);//crlf////tab////tab////tab////tab////tab//if(e.type.equalsIgnoreCase(\\quot\\datetime-local\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////look for yyyy-MM-ddTHH:mm format//crlf////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\submitDialogCell e.value.indexOf(T)=\\quot\\+e.value.indexOf(\\quot\\T\\quot\\));//crlf////tab////tab////tab////tab////tab////tab//if(e.value.indexOf(\\quot\\T\\quot\\)==10) {//crlf////tab////tab////tab////tab////tab////tab////tab//var s=replaceAllSubstrings(e.value\\comma\\\\quot\\T\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\submitDialogCell s=\\quot\\+s);//crlf////tab////tab////tab////tab////tab////tab////tab//var dt=parseTime(s);//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\submitDialogCell dt=\\quot\\+dt);//crlf////tab////tab////tab////tab////tab////tab////tab//var sPattern=getFieldPattern(sTableID\\comma\\sFieldID);//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\submitDialogCell sPattern=\\quot\\+sPattern+\\quot\\ formatDate=\\quot\\+formatDate(dt\\comma\\sPattern));//crlf////tab////tab////tab////tab////tab////tab////tab//Control.innerHTML=formatDate(dt\\comma\\sPattern);//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//Control.innerHTML=e.value;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else if(e.type==\\quot\\date\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////look for yyyy-MM-dd and reformat it as MM-dd-yyyy before displaying it in the table//crlf////tab////tab////tab////tab////tab////tab//if(e.value.charAt(4)==\\quot\\-\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab//var s=e.value.substring(5)+\\quot\\-\\quot\\+e.value.substring(0\\comma\\4);//crlf////tab////tab////tab////tab////tab////tab////tab//Control.innerHTML=s;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//Control.innerHTML=e.value;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set other innerHTML\\quot\\//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//Control.value=e.value;//crlf////tab////tab////tab////tab////tab//sDebug +=\\quot\\ set other value\\quot\\//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//(Control.type==\\quot\\checkbox\\quot\\) ? Control.checked=sValue : Control.value=e.value;//crlf////tab////tab////tab//sDebug +=\\quot\\ set checkbox\\quot\\//crlf////tab////tab//};//crlf////crlf////tab////tab//var td=Control.parentNode;//crlf////tab////tab//if(td.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)) {//crlf////tab////tab////tab//setPendingSubmissionStyle(Control\\comma\\true\\comma\\true);//crlf////tab////tab////tab////td.style.backgroundColor=PendingSubmissionBackgroundColor;//crlf////tab////tab////tab//td.setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\new\\quot\\);//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//sDebug=\\quot\\submitDialogCell setting table cell control was null\\quot\\;//crlf////tab//};//crlf////crlf////tab////appendToLog(\\quot\\submitDialogCell: \\quot\\+sDebug\\comma\\false\\comma\\true); //crlf////tab////crlf////tab////var s=\\quot\\\\quot\\;//crlf////tab////appendToLog(\\quot\\submitDialogCell: sValue=\\quot\\+sValue);//crlf////tab////((typeof sValue)==\\quot\\boolean\\quot\\) ? s=sValue.toString() : s=replaceAllSubstrings(sValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\);//crlf////console.log(\\quot\\submitDialogCell: submitTableData.  TableID:\\quot\\+sTableID+\\quot\\ KeyValue:\\quot\\+sKeyValue+\\quot\\ FieldID:\\quot\\+sFieldID+\\quot\\ Value=\\quot\\+s);//crlf////tab//var s=sValue.toString();//crlf////tab//s=replaceAllSubstrings(sValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\);//crlf////tab//submitTableData(sTableID\\comma\\sKeyValue\\comma\\sFieldID\\comma\\s);//crlf//};//crlf////crlf///****************************************************************************//crlf//This function creates a arTableMetadata entry for the given table.  It records the //crlf//table ID\\comma\\ DriverID\\comma\\ HashID and other information required to submit data for the table.//crlf//This is done so that data can be submitted even if a table is closed before the submission//crlf//takes place.//crlf////crlf//This function is called from submitTableData() and also from showTableEditDialogForRow() //crlf//and showTableEditDialog().//crlf////crlf//The calls from showTableEditDialogForRow() and showTableEditDialog() are required in case the //crlf//view is closed while the dialog is still opened.//crlf//****************************************************************************///crlf//function recordTableMetadata(ATableID) {//crlf////tab//var n=-1;//crlf////tab//for(var i=0;i<arTableMetadata.length;i++) {//crlf////tab////tab//if(arTableMetadata[i].TableID.equalsIgnoreCase(ATableID)) n=i;//crlf////tab//};//crlf////tab//if(n<0) n=arTableMetadata.length;//crlf////tab////crlf////tab//var table=document.getElementById(ATableID);//crlf////tab//if(!table) return;//crlf////tab////crlf////tab//var sHashID=table.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab//var sDriverID=table.getAttribute(\\quot\\aspectDriver\\quot\\);//crlf////tab//var sKeyExpression=table.getAttribute(\\quot\\aspectKeyExpression\\quot\\);//crlf////tab//var sAllFieldID=table.getAttribute(\\quot\\aspectAllFieldID\\quot\\);//crlf////tab//var sAllFieldType=table.getAttribute(\\quot\\aspectAllFieldType\\quot\\); //crlf////tab//var sDriverParams=document.getElementById(ATableID).getAttribute(\\quot\\aspectParamsActive\\quot\\);//crlf////tab//if(!sDriverParams) sDriverParams=getTableDriverParams(ATableID); //for compatibility before posting aspectParamsActive//crlf////crlf////tab//arTableMetadata[n]={TableID:ATableID\\comma\\HashID:sHashID\\comma\\DriverID:sDriverID\\comma\\KeyExpression:sKeyExpression\\comma\\AllFieldID:sAllFieldID\\comma\\AllFieldType:sAllFieldType\\comma\\DriverParams:sDriverParams};//crlf////tab////crlf////tab////remove any records for which there are no pending submissions and for which the table does not currently exist//crlf////tab//n=0;//crlf////tab//while(n<arTableMetadata.length) {//crlf////tab////tab//if((arTableMetadata[n].TableID.equalsIgnoreCase(ATableID)) ~~pipe~~~~pipe~~ (document.getElementById(arTableMetadata[n].TableID))) {//crlf////tab////tab////tab//n++//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//arTableMetadata.splice(n\\comma\\1);//crlf////tab////tab//};//crlf////tab//};//crlf//};^
ID=801274|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************//crlf//Displays attributes for the element with the given ID//crlf//******************************************************************************///crlf//function debugAttributes(sID)//crlf//{//crlf////tab//if(sID.length==0) {//crlf////tab////tab//alert(\\quot\\No ID in debugAttributes\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var d=document.getElementById(\\quot\\TableInfo\\quot\\+sID.toLowerCase());//crlf////tab//if(!d) {//crlf////tab////tab////create a new div for the table info//crlf////tab////tab//d=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//d.className=\\quot\\TableInfo\\quot\\;//crlf////tab////tab//d.setAttribute(\\quot\\ID\\quot\\\\comma\\\\quot\\TableInfo\\quot\\+sID);//crlf////tab////tab//d.id=\\quot\\TableInfo\\quot\\+sID;//crlf////tab////tab////crlf////tab////tab////add the table info div to the div containing the table//crlf////tab////tab//document.getElementById(\\quot\\div\\quot\\+sID.toLowerCase()).appendChild(d);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////clear the already existing div//crlf////tab////tab//d.innerHTML=\\quot\\\\quot\\;//crlf////tab//};//crlf////tab////crlf////tab//var eTable=document.getElementById(sID);//crlf////crlf////tab//var xy=getPosition(eTable\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementById(\\quot\\div\\quot\\+sID.toLowerCase()));//crlf////tab////d.style.top=xy[1]+\\quot\\px\\quot\\;//crlf////tab//d.style.top=\\quot\\20px\\quot\\;//crlf////tab//d.style.left=xy[0]+\\quot\\px\\quot\\;//crlf////crlf////tab////create a title for the div//crlf////tab//var divTitle=document.createElement(\\quot\\div\\quot\\);//crlf////tab//var h1=document.createElement(\\quot\\h1\\quot\\);//crlf////tab//h1.appendChild(document.createTextNode(\\quot\\Information\\quot\\));//crlf////tab//divTitle.appendChild(h1);//crlf////tab////crlf////tab////create a close icon for the div - it will float right//crlf////tab//var divCloseIcon=document.createElement(\\quot\\div\\quot\\);//crlf////tab//divCloseIcon.className=\\quot\\TableInfoCloseIcon\\quot\\;//crlf////tab//var s=\\quot\\setVisible('TableInfo\\quot\\+sID+\\quot\\'\\comma\\false)\\quot\\;//crlf////tab//divCloseIcon.setAttribute(\\quot\\onclick\\quot\\\\comma\\s);//tab////this works for firefox//crlf////tab//divCloseIcon.onclick=Function(s);//tab////tab////this works for IE//crlf////tab////crlf////tab////add the title\\comma\\ close icon and an hr to the div//crlf////tab//var divTitleContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//divTitleContainer.style.overflow=\\quot\\auto\\quot\\;//crlf////tab//divTitleContainer.appendChild(divCloseIcon);//crlf////tab//divTitleContainer.appendChild(divTitle);//crlf////tab//d.appendChild(divTitleContainer);//crlf////tab//d.appendChild(document.createElement(\\quot\\hr\\quot\\));//crlf////crlf////tab////create a table for general information that will be visible to users//crlf////tab//var h1=document.createElement(\\quot\\h1\\quot\\);//crlf////tab//h1.appendChild(document.createTextNode(\\quot\\General\\quot\\));//crlf////tab//d.appendChild(h1);//crlf////tab//var table=document.createElement(\\quot\\table\\quot\\);//crlf////tab//table.className=\\quot\\TableInfoGeneral\\quot\\;//crlf////tab////crlf////tab////add the table ID//crlf////tab//row=document.createElement(\\quot\\tr\\quot\\);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(\\quot\\Table ID\\quot\\));//crlf////tab//row.appendChild(td);//crlf////tab//td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(sID));//crlf////tab//row.appendChild(td);//crlf////tab//table.appendChild(row);//crlf////tab////crlf////tab////add the time updated//crlf////tab//row=document.createElement(\\quot\\tr\\quot\\);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(\\quot\\Updated\\quot\\));//crlf////tab//row.appendChild(td);//crlf////tab//td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//var eTimestamp=document.getElementById(\\quot\\table_updated_\\quot\\+sID.toLowerCase());//crlf////tab//td.innerHTML=(eTimestamp) ? eTimestamp.innerHTML : \\quot\\//amp//nbsp;\\quot\\;//crlf////tab//row.appendChild(td);//crlf////tab//table.appendChild(row);//crlf////crlf////tab////add the source computer//crlf////tab//row=document.createElement(\\quot\\tr\\quot\\);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(\\quot\\Computer\\quot\\));//crlf////tab//row.appendChild(td);//crlf////tab//td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.innerHTML=eTable.getAttribute(\\quot\\AspectHashID\\quot\\);//crlf////tab//row.appendChild(td);//crlf////tab//table.appendChild(row);//crlf////crlf////tab////add the table to the table info div//crlf////tab//d.appendChild(table);//crlf////tab////crlf////tab////get a list of all attributes for the table beginning with \\quot\\aspect\\quot\\//crlf////tab//var e=document.getElementById(sID);//crlf////tab//var a=new Array();//crlf////tab//for (var i=0;i<e.attributes.length;i++) {//crlf////tab////tab//var sName=e.attributes.item(i).nodeName;//crlf////tab////tab//if(sName.startsWith(\\quot\\aspect\\quot\\)) {//crlf////tab////tab////tab//a[a.length]=sName.substring(6)+\\quot\\=\\quot\\+ e.attributes.item(i).nodeValue+\\quot\\\n\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////tab//a.sort();//crlf////crlf////tab////get a string containing all fields used in the table dialog - This list can be used to create a list of embedded fields to speed things up//crlf////tab////Specifying embedded fields will cause only those fields to be included in the hidden fields associated with the record//crlf////tab////in the table.  Using embedded fields also avoids including unneeded calculated fields//crlf////tab//var arAlreadyAdded=new Array();//crlf////tab//var eDialog=document.getElementById(eTable.getAttribute(\\quot\\EditDialogID\\quot\\));//crlf////tab//var s=\\quot\\\\quot\\;//crlf////tab//if(eDialog) {//crlf////tab////tab//var arFieldID=getSubStringArray(eTable.getAttribute(\\quot\\aspectallfieldid\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab////tab//var arNodes=new Array();//crlf////tab////tab//getAllChildNodes(eDialog\\comma\\arNodes);//crlf////tab////tab//for(var i=0;i<arNodes.length;i++) {//crlf////tab////tab////tab//if(arNodes[i].nodeName.indexOf(\\quot\\\x23\\quot\\)<0) {//crlf////tab////tab////tab////tab//var sName=arNodes[i].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab////tab////tab//if(sName) {//crlf////tab////tab////tab////tab////tab//var n=getFieldIndex(sName\\comma\\arFieldID);//crlf////tab////tab////tab////tab////tab//if(n>=0) {//crlf////tab////tab////tab////tab////tab////tab//if(arAlreadyAdded.indexOf(sName)<0) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(s.length>0) s +=\\quot\\\\comma\\ \\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab//s+=sName;//crlf////tab////tab////tab////tab////tab////tab////tab//arAlreadyAdded[arAlreadyAdded.length]=sName;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//if(s.length==0) s=\\quot\\No fields found in dialog.\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//s=\\quot\\No dialog defined\\quot\\;//crlf////tab//};//crlf////tab////crlf////tab////create another table for debugging  information//crlf////tab//var h1=document.createElement(\\quot\\h1\\quot\\);//crlf////tab//h1.appendChild(document.createTextNode(\\quot\\Debugging\\quot\\));//crlf////tab//d.appendChild(h1);//crlf////tab//var table=document.createElement(\\quot\\table\\quot\\);//crlf////tab//table.className=\\quot\\TableInfoDebug\\quot\\;//crlf////tab////crlf////tab//row=document.createElement(\\quot\\tr\\quot\\);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(\\quot\\Dialog Fields\\quot\\));//crlf////tab//row.appendChild(td);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(s))//crlf////tab//row.appendChild(td);//crlf////tab//table.appendChild(row);//crlf////tab////crlf////tab////screen width//crlf////tab//row=document.createElement(\\quot\\tr\\quot\\);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(\\quot\\Screen Width\\quot\\));//crlf////tab//row.appendChild(td);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(getViewportWidth()))//crlf////tab//row.appendChild(td);//crlf////tab//table.appendChild(row);//crlf////tab////crlf////tab////screen height//crlf////tab//row=document.createElement(\\quot\\tr\\quot\\);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(\\quot\\Screen Height\\quot\\));//crlf////tab//row.appendChild(td);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(getViewportHeight()))//crlf////tab//row.appendChild(td);//crlf////tab//table.appendChild(row);//crlf////crlf////tab////add node type (make sure it's a table)//crlf////tab//row=document.createElement(\\quot\\tr\\quot\\);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(\\quot\\Node Type\\quot\\));//crlf////tab//row.appendChild(td);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(table.nodeType))//crlf////tab//row.appendChild(td);//crlf////tab//table.appendChild(row);//crlf////tab////crlf////tab////add table ID//crlf////tab//row=document.createElement(\\quot\\tr\\quot\\);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(\\quot\\Table ID\\quot\\));//crlf////tab//row.appendChild(td);//crlf////tab//var td=document.createElement(\\quot\\td\\quot\\);//crlf////tab//td.appendChild(document.createTextNode(sID))//crlf////tab//row.appendChild(td);//crlf////tab//table.appendChild(row);//crlf////crlf////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab//var n=a[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//var sName=a[i].substring(0\\comma\\n);//crlf////tab////tab//var sValue=a[i].substring(n+1);//crlf////tab////tab//row=document.createElement(\\quot\\tr\\quot\\);//crlf////tab////tab//td=document.createElement(\\quot\\td\\quot\\);//crlf////tab////tab//td.appendChild(document.createTextNode(sName));//crlf////tab////tab//row.appendChild(td);//crlf////tab////tab//td=document.createElement(\\quot\\td\\quot\\);//crlf////tab////tab////td.appendChild(document.createTextNode(replaceAllSubstrings(sValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\//amp////pound//48; \\quot\\)));//crlf////tab////tab//var s=replaceAllSubstrings(sValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\~@~\\quot\\);//crlf////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\~@~\\quot\\\\comma\\\\quot\\\\comma\\ \\quot\\);//crlf////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\\\quot\\~@~\\quot\\);//crlf////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\~@~\\quot\\\\comma\\\\quot\\~~pipe~~ \\quot\\);//crlf////tab////tab//td.appendChild(document.createTextNode(s));//crlf////tab////tab//row.appendChild(td);//crlf////tab////tab//table.appendChild(row);//crlf////tab//};//crlf////tab////crlf////tab////wrap the debugging table in a div container//crlf////tab//var tableContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//tableContainer.className=\\quot\\TableInfoDebugContainer\\quot\\;//crlf////tab//tableContainer.appendChild(table);//crlf////tab//d.appendChild(tableContainer);//crlf////tab////crlf////tab//setVisible(d\\comma\\true);//crlf////crlf////tab////position the dialog horizontally//crlf////tab//d.style.left=0;//crlf////crlf////tab////center the dialog if the table width is greater than the dialog width//crlf////tab//var maxwidth=Math.min(documentWidth()\\comma\\eTable.tBodies[0].offsetWidth);//crlf////tab//if(maxwidth>d.offsetWidth) {//crlf////tab////tab////don't shift the dialog toward the center if the left position will be small.//crlf////tab////tab////Otherwise\\comma\\ a small (e.g. 9px) margin can be introduced for small screens.//crlf////tab////tab////Might have something to do with the scroll bar//crlf////tab////tab//var left=Math.min(250\\comma\\(maxwidth-d.offsetWidth)/2);//crlf////tab////tab//if(left>20) d.style.left=left;//crlf////tab//};//crlf//};//crlf////crlf//^
ID=538055|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf// //crlf//function tableRowClicked(e) {//crlf////tab//if(e.getAttribute(\\quot\\borderon\\quot\\)) {//crlf////tab////tab//e.style.borderWidth=0;//crlf////tab////tab//e.style.borderStyle=\\quot\\none\\quot\\;//crlf////tab////tab//e.removeAttribute(\\quot\\borderon\\quot\\);//crlf////tab////tab//console.log(\\quot\\set border off\\quot\\);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//e.style.borderWidth=\\quot\\5px\\quot\\;//crlf////tab////tab//e.style.borderStyle=\\quot\\solid\\quot\\;//crlf////tab////tab//e.setAttribute(\\quot\\borderon\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab//console.log(\\quot\\set border on\\quot\\);//crlf////tab//};//crlf//};//crlf////crlf//function getSinicrollBarWidth() {//crlf////tab//var inner=document.createElement('p');//crlf////tab//inner.style.width=\\quot\\100\\percent\\\\quot\\;//crlf////tab//inner.style.height=\\quot\\200px\\quot\\;//crlf////crlf////tab//var outer=document.createElement('div');//crlf////tab//outer.style.position=\\quot\\absolute\\quot\\;//crlf////tab//outer.style.top=\\quot\\0px\\quot\\;//crlf////tab//outer.style.left=\\quot\\0px\\quot\\;//crlf////tab//outer.style.visibility=\\quot\\hidden\\quot\\;//crlf////tab//outer.style.width=\\quot\\200px\\quot\\;//crlf////tab//outer.style.height=\\quot\\150px\\quot\\;//crlf////tab//outer.style.overflow=\\quot\\hidden\\quot\\;//crlf////tab//outer.appendChild (inner);//crlf////crlf////tab//document.body.appendChild (outer);//crlf////tab//var w1=inner.offsetWidth;//crlf////tab//outer.style.overflow='scroll';//crlf////tab//var w2=inner.offsetWidth;//crlf////tab//if (w1==w2) w2=outer.clientWidth;//crlf////crlf////tab//document.body.removeChild (outer);//crlf////crlf////tab//return (w1 - w2);//crlf//};//crlf////crlf///*******************************************************************//crlf//03-28-2016//crlf//Moves a table row up or down one row in a table.  A calculated field in//crlf//a structure can use this to display icons for moving up/down://crlf////crlf//=\\quot\\<span class='keyboard_arrow_up' onClick='moveTableRecordUp(this)'></span>//crlf////tab//<span class='keyboard_arrow_down' onClick='moveTableRecordDown(this)'></span>\\quot\\//crlf////crlf//See the \\quot\\Move\\quot\\ field in the Greenlight_UI_View_Common_Fields structure for//crlf//an example.//crlf////crlf//A virtual index field must be specified for a driver in order for this//crlf//function to work.//crlf////crlf//Error checking is done to determine if the move operation is valid (e.g. //crlf//can't move the first record in a table up).  It is also not possible to //crlf//move records past a section header\\comma\\ although the records could be moved if //crlf//the section header is removed from the display.  This is intentional for now.//crlf////crlf//e: The element click to initiate the move.  The parent TD\\comma\\ TR and Table//crlf////tab//are determined from this.//crlf//Direction: 1 to move down\\comma\\ -1 to move up//crlf//*******************************************************************///crlf//function moveTableRecord(e\\comma\\iDirection) {//crlf////tab//var td=e.parentNode;//crlf////tab//if(td.nodeName.equalsIgnoreCase(\\quot\\td\\quot\\)==false) td=td.parentNode;//crlf////crlf////tab//var tr=td.parentNode;//crlf////tab//var tbody=tr.parentNode;//crlf////tab//var table=tbody.parentNode;//crlf////crlf////tab//if(table.nodeName.equalsIgnoreCase(\\quot\\table\\quot\\)==false) {//crlf////tab////tab//alert(\\quot\\Error: moveTableRecord cannot locate table\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var VirtualIndexField=table.getAttribute(\\quot\\AspectVirtualIndex\\quot\\);//crlf////tab//if(!VirtualIndexField) {//crlf////tab////tab//alert(\\quot\\Error: moveTableRecord missing virtual index field\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var RowIndex1=tr.rowIndex;//crlf////tab//var RowIndex2=RowIndex1+iDirection;//crlf////crlf////tab////abort if trying to move the last row down//crlf////tab//if(RowIndex2>=table.rows.length) {//crlf////tab////tab//appendToLog(\\quot\\moveTableRecord: Cannot move row down\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var VirtualIndex1=table.rows[RowIndex1].getAttribute(\\quot\\virtualindex\\quot\\);//crlf////tab//var VirtualIndex2=table.rows[RowIndex2].getAttribute(\\quot\\virtualindex\\quot\\);//crlf////tab//var sKeyValue1=table.rows[RowIndex1].getAttribute(\\quot\\keyvalue\\quot\\);//crlf////tab//var sKeyValue2=table.rows[RowIndex2].getAttribute(\\quot\\keyvalue\\quot\\);//crlf////crlf////tab////abort if the previous row doesn't have a key value//crlf////tab//if(iDirection==-1) {//crlf////tab////tab//if(!sKeyValue2) {//crlf////tab////tab////tab//appendToLog(\\quot\\moveTableRecord: Missing key value for previous row\\quot\\);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////crlf////tab////tab//if(table.rows[RowIndex2].getAttribute(\\quot\\istemplate\\quot\\)) {//crlf////tab////tab////tab//appendToLog(\\quot\\moveTableRecord: Previous row is a tamplate\\quot\\);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////swap the virtual index values in the table rows//crlf////tab//table.rows[RowIndex1].setAttribute(\\quot\\virtualindex\\quot\\\\comma\\VirtualIndex2);//crlf////tab//table.rows[RowIndex2].setAttribute(\\quot\\virtualindex\\quot\\\\comma\\VirtualIndex1);//crlf////crlf////tab//var arKey=sKeyValue1+\\quot\\\\comma\\\\quot\\+sKeyValue2;//crlf////tab//var arFieldID=VirtualIndexField+\\quot\\\\comma\\\\quot\\+VirtualIndexField;//crlf////tab//var arValue=VirtualIndex2+\\quot\\\\comma\\\\quot\\+VirtualIndex1;//crlf////crlf////tab//submitTableData(table.id\\comma\\arKey\\comma\\arFieldID\\comma\\arValue);//crlf////crlf////tab////swap the rows//crlf////tab//var parentNode=table.rows[RowIndex1].parentNode;//crlf////tab//if(iDirection==1) {//crlf////tab////tab//parentNode.insertBefore(table.rows[RowIndex1]\\comma\\table.rows[RowIndex1 + 1].nextSibling)//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//parentNode.insertBefore(table.rows[RowIndex2]\\comma\\table.rows[RowIndex1].nextSibling)//crlf////tab//};//crlf//};//crlf////crlf//function moveTableRecordUp(e) {//crlf////tab//moveTableRecord(e\\comma\\-1);//crlf//};//crlf////crlf//function moveTableRecordDown(e) {//crlf////tab//moveTableRecord(e\\comma\\1);//crlf//};//crlf////crlf///****************************************************************************//crlf//Note: 07-18-2016 - It may be possible to improve the performance of this function //crlf//using the colgroup tab.  Some quick experiments were not successful.  The main //crlf//problem is that the tbody element is an inline element which means it's height cannot//crlf//be specified.  If it is converted to a block element\\comma\\ the width becomes a problem.//crlf////crlf//Creates a fixed table header.  //crlf//Called from initializeTables2012() and showTab().  The header cannot be fixed//crlf//until the table is visible.  This is why the call is made from showTab()//crlf////crlf//For tables to display properly\\comma\\ the table style should be float:left;width:auto.//crlf//Otherwise the column headers may not line up with the table columns and the //crlf//scrollbar may be forced far to the right since the table display is set to block//crlf//and it will attempt to take up the whole width.  To constrain the width of a //crlf//table\\comma\\ use width:auto on the table and wrap it in a container with a set width.//crlf//****************************************************************************///crlf//function makeScrollingTable()//crlf//{//crlf////tab//var arTable=document.getElementsByTagName(\\quot\\table\\quot\\);//crlf////tab//for(var i=0;i<arTable.length;i++) {//crlf////tab////tab//var MaxHeight=arTable[i].getAttribute(\\quot\\AspectMaxHeight\\quot\\);//crlf////tab////tab//var ScrollingInitialized=arTable[i].getAttribute(\\quot\\ScrollingInitialized\\quot\\);//crlf////tab////tab//if((MaxHeight) //amp////amp// (arTable[i].tBodies[0].rows.length>0) //amp////amp// (!ScrollingInitialized)) {//crlf////tab////tab////tab////don't update unless the table is visible//crlf////tab////tab////tab//if(arTable[i].offsetWidth>0) {//crlf////tab////tab////tab////tab//var Height=arTable[i].getAttribute(\\quot\\AspectHeight\\quot\\);//crlf////tab////tab////tab////tab//if(!Height) Height=\\quot\\auto\\quot\\;//crlf////crlf////tab////tab////tab////tab//arTable[i].style.display=\\quot\\block\\quot\\;//crlf////tab////tab////tab////tab//arTable[i].tBodies[0].style.boxSizing=\\quot\\content-box\\quot\\;//crlf////tab////tab////tab////tab//arTable[i].tBodies[0].style.height=Height;//crlf////tab////tab////tab////tab//arTable[i].tBodies[0].style.maxHeight=MaxHeight;//crlf////tab////tab////tab////tab//arTable[i].tBodies[0].style.display=\\quot\\block\\quot\\;//crlf////tab////tab////tab////tab//arTable[i].tBodies[0].style.overflowY=\\quot\\auto\\quot\\;//crlf////crlf////tab////tab////tab////tab//var arTHead=arTable[i].getElementsByTagName(\\quot\\thead\\quot\\);//crlf////crlf////tab////tab////tab////tab//var scrollbarwidth=0;//crlf////tab////tab////tab////tab//var scrollHeight=arTable[i].tBodies[0].scrollHeight;//crlf////tab////tab////tab////tab//var//tab//offsetHeight=arTable[i].tBodies[0].offsetHeight;//crlf////tab////tab////tab////tab//if(scrollHeight>offsetHeight) scrollbarwidth=getScrollBarWidth();//crlf////tab////crlf////tab////tab////tab////tab////these two lines have no effect in firefox on the desktop.//crlf////tab////tab////tab////tab////but are required for Chrome on the phone//crlf////tab////tab////tab////tab//arTHead[arTHead.length-1].style.display=\\quot\\block\\quot\\;//crlf////tab////tab////tab////tab//arTHead[arTHead.length-1].style.width=(arTable[i].tBodies[0].offsetWidth+scrollbarwidth)+\\quot\\px\\quot\\;//crlf////crlf////tab////tab////tab////tab//arTable[i].tBodies[0].style.width=(arTable[i].tBodies[0].offsetWidth+scrollbarwidth)+\\quot\\px\\quot\\;//crlf////crlf////tab////tab////tab////tab//for(var cell=0;cell<arTable[i].tBodies[0].rows[0].cells.length;cell++) {//crlf////tab////tab////tab////tab////tab//var w1=arTHead[arTHead.length-1].rows[0].cells[cell].offsetWidth;//crlf////tab////tab////tab////tab////tab//var w2=arTable[i].tBodies[0].rows[0].cells[cell].offsetWidth;//crlf////tab////tab////tab////tab////tab//var w=Math.max(w1\\comma\\w2);//crlf////crlf////tab////tab////tab////tab////tab//arTHead[arTHead.length-1].rows[0].cells[cell].style.width=w+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab////tab//arTable[i].tBodies[0].rows[0].cells[cell].style.width=w+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////This is for debugging.  Add a div to the page with the table ID + info to //crlf////tab////tab////tab////tab////put debugging information in the div//crlf////tab////tab////tab////tab//var eInfo=document.getElementById(arTable[i].id+\\quot\\info\\quot\\);//crlf////tab////tab////tab////tab//if(eInfo) {//crlf////tab////tab////tab////tab////tab//eInfo.innerHTML +=\\quot\\ scrollbarwidth=\\quot\\+scrollbarwidth+\\quot\\ scrollHeight=\\quot\\+scrollHeight+\\quot\\ offsetHeight=\\quot\\+offsetHeight;//crlf////tab////tab////tab////tab////tab//eInfo.innerHTML +=\\quot\\ THead w=\\quot\\+arTHead[arTHead.length-1].offsetWidth;//crlf////tab////tab////tab////tab////tab//eInfo.innerHTML +=\\quot\\ TBody w=\\quot\\+arTable[i].tBodies[0].offsetWidth;//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//arTable[i].setAttribute(\\quot\\ScrollingInitialized\\quot\\\\comma\\true);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function showTableMenu(e\\comma\\TableID) {//crlf////tab////appendToLog(\\quot\\showTableMenu: \\quot\\+TableID);//crlf////tab//var eMenu=document.getElementById(\\quot\\TableMenu\\quot\\+TableID.toLowerCase());//crlf////crlf////tab////if the menu is visible\\comma\\ hide it//crlf////tab//if(isVisible(eMenu)) {//crlf////tab////tab//setVisible(eMenu\\comma\\false);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////display the menu//crlf////tab//var xy=getPosition2012(e\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementById(\\quot\\div\\quot\\+TableID));//crlf////tab//eMenu.style.top=xy[1]+e.offsetHeight;//crlf////tab//setVisible(eMenu\\comma\\true);//crlf////crlf////tab////don't let the left coordinate be less than zero.  This can happen when//crlf////tab////there are few icons and the menu icon is close to the left of the screen//crlf////tab//eMenu.style.left=Math.max(0\\comma\\xy[0]+e.offsetWidth-eMenu.offsetWidth);//crlf////crlf////tab////appendToLog(\\quot\\x=\\quot\\+xy[0]+\\quot\\ e.offsetWidth=\\quot\\+e.offsetWidth+\\quot\\ eMenu.offsetWidth=\\quot\\+eMenu.offsetWidth);//crlf////tab////appendToLog(\\quot\\showTableMenu: \\quot\\+TableID+\\quot\\ showing top=\\quot\\+(xy[1]+e.offsetHeight)+\\quot\\ left=\\quot\\+Math.max(0\\comma\\xy[0]+e.offsetWidth-eMenu.offsetWidth));//crlf//};//crlf////crlf///**************************************************************//crlf//Hides all table menus.  Called when the browser is resized.//crlf//**************************************************************///crlf//function hideAllTableMenus() {//crlf////tab//var ar=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for(var i=0;i<ar.length;i++) {//crlf////tab////tab//if(ar[i].id) {//crlf////tab////tab////tab//if(ar[i].id.startsWith(\\quot\\TableMenu\\quot\\)) setVisible(ar[i]\\comma\\false);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function tableMenuitemSelected(FuncName\\comma\\TableID)//crlf//{//crlf////tab////hide the menu//crlf////tab//setVisible(\\quot\\TableMenu\\quot\\+TableID\\comma\\false);//crlf////crlf////tab//if(eval(\\quot\\typeof \\quot\\+FuncName)==\\quot\\function\\quot\\) {//crlf////tab////tab////execute the function//crlf////tab////tab//if(FuncName.equalsIgnoreCase(\\quot\\refreshTable\\quot\\)) {//crlf////tab////tab////tab//refreshTable(TableID\\comma\\\\quot\\refresh\\quot\\);//crlf////tab////tab//}//crlf////tab////tab//else if(FuncName.equalsIgnoreCase(\\quot\\openDisplayDialog\\quot\\)) {//crlf////tab////tab////tab//openDisplayDialog(TableID\\comma\\document.getElementById(\\quot\\display_\\quot\\+TableID));//crlf////tab////tab//}//crlf////tab////tab//else if(FuncName.equalsIgnoreCase(\\quot\\exportTable\\quot\\)) {//crlf////tab////tab////tab//exportTable(TableID.toLowerCase()\\comma\\''\\comma\\true);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//var s=FuncName+\\quot\\('\\quot\\+TableID+\\quot\\')\\quot\\;//crlf////tab////tab////tab//eval(s);//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////function is invalid//crlf////tab////tab//alert(\\quot\\Invalid function: \\quot\\+FuncName);//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Tokenize or de-tokenize a value for a cell in a table//crlf//******************************************************************************///crlf//function tokenizeTableValue(sValue\\comma\\bTokenize)//crlf//{//crlf////tab//if(bTokenize) {//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\\\percent\\\\percent\\com\\quot\\+\\quot\\ma\\percent\\\\percent\\\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\r\n\\quot\\\\comma\\\\quot\\\\percent\\\\percent\\cr\\quot\\+\\quot\\l\\quot\\+\\quot\\f\\percent\\\\percent\\\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\percent\\\\percent\\qu\\quot\\+\\quot\\ot\\percent\\\\percent\\\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\'\\quot\\\\comma\\\\quot\\\\percent\\\\percent\\ap\\quot\\+\\quot\\os\\percent\\\\percent\\\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\>\\quot\\\\comma\\\\quot\\\\percent\\\\percent\\g\\quot\\+\\quot\\t\\percent\\\\percent\\\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\<\\quot\\\\comma\\\\quot\\\\percent\\\\percent\\l\\quot\\+\\quot\\t\\percent\\\\percent\\\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\x7B\\quot\\\\comma\\\\quot\\\\percent\\\\percent\\l\\quot\\+\\quot\\eftbrace\\percent\\\\percent\\\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\x7D\\quot\\\\comma\\\\quot\\\\percent\\\\percent\\r\\quot\\+\\quot\\ightbrace\\percent\\\\percent\\\\quot\\);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\\percent\\\\percent\\com\\quot\\+\\quot\\ma\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\\percent\\\\percent\\cr\\quot\\+\\quot\\l\\quot\\+\\quot\\f\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\\r\n\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\\percent\\\\percent\\qu\\quot\\+\\quot\\ot\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\\x22\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\\percent\\\\percent\\ap\\quot\\+\\quot\\os\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\'\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\\percent\\\\percent\\g\\quot\\+\\quot\\t\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\>\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\\percent\\\\percent\\l\\quot\\+\\quot\\t\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\<\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\\percent\\\\percent\\l\\quot\\+\\quot\\eftbrace\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\\x7B\\quot\\);//crlf////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\\\percent\\\\percent\\r\\quot\\+\\quot\\ightbrace\\percent\\\\percent\\\\quot\\\\comma\\\\quot\\\x7D\\quot\\);//crlf////tab//};//crlf////tab//return(sValue);//crlf//};//crlf////crlf//function printTable(sTableID\\comma\\sWrapper)//crlf//{//crlf////tab////Look for a div with the ID print[tableid] and print the contents of that//crlf////tab////This allows for including content above or below the table//crlf////tab////If not defined\\comma\\ use the div surrounding the table//crlf////tab//var eTable=document.getElementById(sTableID);//crlf////tab//var eToPrint=document.getElementById(\\quot\\print\\quot\\+sTableID);//crlf////tab//if(!eToPrint) eToPrint=document.getElementById(\\quot\\div\\quot\\+sTableID);//crlf////tab//var eTable=document.getElementById(sTableID);//crlf////crlf////tab////abort if surrounding div is not found//crlf////tab//if(!eToPrint) {//crlf////tab////tab//alert(\\quot\\Cannot locate table div with ID=div\\quot\\+sTableID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////if the printer wrapper was retrieved\\comma\\ open the document in a new window//crlf////tab//if(sWrapper) {//crlf////tab////tab//sWrapper +=eToPrint.innerHTML;//crlf////tab////tab//sWrapper +=\\quot\\</body></html>\\quot\\//crlf////crlf////tab////tab////show message//crlf////tab////tab//showDialog(\\quot\\icon=true//amp//msg=Preparing report...\\quot\\);//crlf////crlf////tab////tab////apply overlay to disable table//crlf////tab////tab//applyOverlay(eToPrint\\comma\\\\quot\\overlay\\quot\\+sTableID);//crlf////tab////tab////crlf////tab////tab//var docprint=window.open(\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\\\comma\\\\quot\\toolbar=yes\\comma\\location=no\\comma\\directories=yes\\comma\\menubar=yes\\comma\\scrollbars=yes\\comma\\width=650\\comma\\ height=600\\comma\\ left=100\\comma\\ top=25\\quot\\); //crlf////tab////tab//docprint.document.open(); //crlf////tab////tab//docprint.document.write(sWrapper); //crlf////crlf////tab////tab////copy style elements//crlf////tab////tab//var arStyle=document.getElementsByTagName(\\quot\\style\\quot\\);//crlf////tab////tab//for(var i=0;i<arStyle.length;i++) {//crlf////tab////tab////tab//docprint.document.getElementsByTagName(\\quot\\head\\quot\\)[0].appendChild(arStyle[i].cloneNode(true));//crlf////tab////tab//};//crlf////crlf////tab////tab//var arTagNames=new Array(\\quot\\div\\quot\\\\comma\\\\quot\\form\\quot\\\\comma\\\\quot\\thead\\quot\\);//crlf////tab////tab//for (var i=0;i<arTagNames.length;i++) {//crlf////tab////tab////tab//var arTag=docprint.document.getElementsByTagName(arTagNames[i]);//crlf////tab////tab////tab//var j=0;//crlf////tab////tab////tab//while (j<arTag.length) {//crlf////tab////tab////tab////tab//var attr1=arTag[j].getAttribute(\\quot\\noprint\\quot\\);//crlf////tab////tab////tab////tab//var attr2=arTag[j].getAttribute(\\quot\\print\\quot\\);//crlf////tab////tab////tab////tab//if (((attr1) //amp////amp// (attr1.toString().equalsIgnoreCase(\\quot\\true\\quot\\))) ~~pipe~~~~pipe~~ ((attr2) //amp////amp// (attr2.toString().equalsIgnoreCase(\\quot\\false\\quot\\)))) {//crlf////tab////tab////tab////tab////tab//arTag[j].style.display=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab////tab//arTag[j].display=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab////tab//arTag[j].innerHTML=\\quot\\//amp//nbsp;\\quot\\;//crlf////tab////tab////tab////tab////tab//arTag[j].parentNode.removeChild(arTag[j]); //crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//j++;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////hide cells in tables used to select and edit records//crlf////tab////tab//var arCells=docprint.document.getElementsByName(\\quot\\selectrecord\\quot\\);//crlf////tab////tab//for(var i=0;i<arCells.length;i++) arCells[i].style.display=\\quot\\none\\quot\\;//crlf////crlf////tab////tab//var arCells=docprint.document.getElementsByName(\\quot\\editrecord\\quot\\);//crlf////tab////tab//for(var i=0;i<arCells.length;i++) arCells[i].style.display=\\quot\\none\\quot\\;//crlf////crlf////tab////tab//var arCells=docprint.document.getElementsByName(\\quot\\inspectrecord\\quot\\);//crlf////tab////tab//for(var i=0;i<arCells.length;i++) arCells[i].style.display=\\quot\\none\\quot\\;//crlf////tab////tab////crlf////tab////tab////remove script tags//crlf////tab////tab//var arTag=docprint.document.getElementsByTagName(\\quot\\script\\quot\\);//crlf////tab////tab//var n=0//crlf////tab////tab//do {//crlf////tab////tab////tab//if((arTag[n].id) //amp////amp// (arTag[n].id.equalsIgnoreCase(\\quot\\JSPrint\\quot\\))) {//crlf////tab////tab////tab////tab//n++;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//arTag[n].parentNode.removeChild(arTag[n]); //crlf////tab////tab////tab//};//crlf////tab////tab//} while(n<arTag.length);//crlf////crlf////tab////tab////hide message//crlf////tab////tab//showDialog();//crlf////crlf////tab////tab////remove overlay//crlf////tab////tab//var eOverlay=document.getElementById(\\quot\\overlay\\quot\\+sTableID);//crlf////tab////tab//eOverlay.parentNode.removeChild(eOverlay);//crlf////tab////tab////crlf////tab////tab//docprint.document.close(); //crlf////tab////tab//docprint.focus(); //crlf////tab////tab//return;//crlf////tab//}//crlf////tab////crlf////tab////get the printer wrapper//crlf////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=getCachedWidget//amp//DocumentID=77NaWu0FhKDKXL7C70JpnKmy//amp//Widget=Printer Wrapper\\quot\\;//crlf////tab//var sFunc=\\quot\\printTable(\x22\\quot\\+sTableID+\\quot\\\x22\\comma\\req.responseText)\\quot\\;//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///******************************************************************************//crlf//Formats the data in an input field.  arFieldID and arPattern are optional.  //crlf//******************************************************************************///crlf////function formatInputField(TableID\\comma\\e\\comma\\AarFieldID\\comma\\AarPattern)//crlf////crlf///******************************************************************************//crlf//Functions to move table rows//crlf//******************************************************************************///crlf//function getSelectedTableRow(eTable) {//crlf////tab//for (var r=0;r<eTable.rows.length;r++) {//crlf////tab////tab//if(eTable.rows[r].getAttribute(\\quot\\selected\\quot\\)==\\quot\\true\\quot\\) return(r);//crlf////tab//};//crlf////tab//return(-1);//crlf//};//crlf////tab////crlf//function moveTableRow(TableID\\comma\\iDirection) {//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//r=getSelectedTableRow(table);//crlf////tab//if((r+iDirection>=0) //amp////amp// (r+iDirection<table.rows.length)){//crlf////tab////tab//var sHtml1=table.rows[r+iDirection].innerHTML;//crlf////tab////tab//var sHtml2=table.rows[r].innerHTML;//crlf////tab////tab//var ckValue1=table.rows[r+iDirection].cells[0].firstChild.checked;//crlf////tab////tab//var ckValue2=table.rows[r].cells[0].firstChild.checked;//crlf////tab////tab//table.rows[r+iDirection].innerHTML=sHtml2;//crlf////tab////tab//table.rows[r].innerHTML=sHtml1;//crlf////tab////tab//table.rows[r+iDirection].cells[0].firstChild.checked=ckValue2;//crlf////tab////tab//table.rows[r].cells[0].firstChild.checked=ckValue1;//crlf////tab////tab//table.rows[r+iDirection].setAttribute(\\quot\\selected\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab//table.rows[r].setAttribute(\\quot\\selected\\quot\\\\comma\\\\quot\\false\\quot\\);//crlf////tab//};//crlf//};//crlf////crlf//function tableCellSelected(cell) {//crlf////tab//appendToLog(\\quot\\tableCellSelected\\quot\\);//crlf////tab//tableRowSelected(cell.parentNode);//crlf//};//crlf////crlf//var imgRowSelected=null;//crlf////crlf//function tableRowSelected(row) {//crlf////tab//appendToLog(\\quot\\tableRowSelected\\quot\\);//crlf////tab//var table=row.parentNode;//crlf////tab////crlf////tab//for (var r=0;r<table.rows.length;r++) {//crlf////tab////tab//table.rows[r].setAttribute(\\quot\\selected\\quot\\\\comma\\\\quot\\false\\quot\\);//crlf////tab////tab//var cell=table.rows[r].cells[2];//crlf////tab////tab//if(cell.childNodes.length>0) {//crlf////tab////tab////tab//cell.removeChild(cell.childNodes[0]);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////initialize image used to indicate selected row//tab////crlf////tab//if(imgRowSelected==null) {//crlf////tab////tab//imgRowSelected=new Image();//crlf////tab////tab//imgRowSelected.src=getServer()+\\quot\\/?Network=Greenlight//amp//Id=getImage//amp//filename={packageurl_greenlight}doc/images/leftarrowgreen12x12.png\\quot\\;//crlf////tab//};//crlf////tab////crlf////tab//row.setAttribute(\\quot\\selected\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab//var img=new Image();//crlf////tab//img.src=imgRowSelected.src;//crlf////tab//row.cells[2].appendChild(img);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns a count of the selected fields.  Used to ensure that at least one field is selected//crlf//******************************************************************************///crlf//function countSelectedFields(sTableID)//crlf//{//crlf////tab//var table=document.getElementById(\\quot\\FieldsSelected_\\quot\\+sTableID);//crlf////tab//var cSelected=0;//crlf////tab//for (var i=0;i<table.rows.length;i++) {//crlf////tab////tab//if(table.rows[i].cells[0].firstChild.checked) cSelected++;//crlf////tab//};//crlf////tab//return(cSelected);//crlf//};//crlf////crlf//function enableExternalFilters(TableID\\comma\\b)//crlf//{//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//if(!table) {//crlf////tab////tab//appendToLog(\\quot\\Error in enableExternalFilters.  Invalid table ID: \\quot\\+TableID\\comma\\false\\comma\\true);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab//var sExternalFilter=table.getAttribute(\\quot\\externalfilters\\quot\\);//crlf////tab//if((sExternalFilter) //amp////amp// (sExternalFilter.length>0)) {//crlf////tab////tab//var ar=getSubStringArray(sExternalFilter\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true)//crlf////tab////tab//for (var i=0;i<ar.length;i++) {//crlf////tab////tab////tab//var e=document.getElementById(ar[i]);//crlf////tab////tab////tab//if(e) e.disabled=!b;//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function enableExternalParams(TableID\\comma\\b)//crlf//{//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//if(!table) return;//crlf////tab////crlf////tab//var sExternalParam=table.getAttribute(\\quot\\externalparams\\quot\\);//crlf////tab//if((sExternalParam) //amp////amp// (sExternalParam.length>0)) {//crlf////tab////tab//var arExternalParam=getSubStringArray(sExternalParam\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab//for (var i=0;i<arExternalParam.length;i++) {//crlf////tab////tab////tab//var e=document.getElementById(arExternalParam[i]);//crlf////tab////tab////tab//if(e) e.disabled=!b;//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function getExternalFilters(TableID)//crlf//{//crlf////tab//var sContent=\\quot\\\\quot\\;//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//var sExternalFilter=table.getAttribute(\\quot\\externalfilters\\quot\\);//crlf////tab//if((sExternalFilter) //amp////amp// (sExternalFilter.length>0)) {//crlf////tab////tab//var ar=getSubStringArray(sExternalFilter\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true)//crlf////console.log(\\quot\\ar=\\quot\\+ar.toString());//crlf////tab////tab////if(ar==null) alert(\\quot\\ar=null in getExternalFilters\\quot\\);//crlf////tab////tab//for (var i=0;i<ar.length;i++) {//crlf////console.log(\\quot\\ar[\\quot\\+i+\\quot\\]=\\quot\\+ar[i]);//crlf////tab////tab////tab//var e=document.getElementById(ar[i]);//crlf////tab////tab////tab//if(e) {//crlf////tab////tab////tab////tab//var sExpression=e.getAttribute(\\quot\\Expression\\quot\\);//crlf////tab////tab////tab////tab//if(!sExpression) {//crlf////tab////tab////tab////tab////tab//sExpression=\\quot\\(true)\\quot\\;//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\Missing expression for filter with ID=\\quot\\+ar[i]\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////if the ID is the [tableID]ContainsText then set the expression automatically//crlf////tab////tab////tab////tab//if(ar[i].equalsIgnoreCase(TableID+\\quot\\ContainsText\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(sExpression==\\quot\\(true)\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab//var sFields=table.getAttribute(\\quot\\aspectfields\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//sFields=replaceAllSubstrings(sFields\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\+\\\quot\\ \\\quot\\+\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////sExpression=\\quot\\gte(pos('$value$'\\comma\\\\quot\\+sFields+\\quot\\)\\comma\\0\\comma\\n)\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//sExpression=\\quot\\keywordMatch('$value$'\\comma\\\\quot\\+sFields+\\quot\\\\comma\\'\\comma\\'\\comma\\true)\\quot\\;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////get the conditional expression which is used to determine if the expression should be included in the//crlf////tab////tab////tab////tab////driver filter.  This is used to speed up processing by eliminating filters that are not in use//crlf////tab////tab////tab////tab//var sCondition=e.getAttribute(\\quot\\Condition\\quot\\);//crlf////tab////tab////tab////tab//if(!sCondition) sCondition=\\quot\\(true)\\quot\\;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////get the operator//crlf////tab////tab////tab////tab//var sOperator=e.getAttribute(\\quot\\operator\\quot\\);//crlf////tab////tab////tab////tab//if(!sOperator) sOperator=\\quot\\and\\quot\\;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////if it's a datalist\\comma\\ get the value from the datalist's hidden element //crlf////tab////tab////tab////tab//if(e.nodeName==\\quot\\DATALIST\\quot\\) {//crlf////tab////tab////tab////tab////tab//var sValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab//e=document.getElementById(ar[i]+\\quot\\_input_submit\\quot\\);//crlf////tab////tab////tab////tab////tab//if(e) sValue=e.value;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(e.type==\\quot\\select-multiple\\quot\\) {//crlf////tab////tab////tab////tab////tab//var sValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab//for(var j=0;j<e.options.length;j++) {//crlf////tab////tab////tab////tab////tab////tab//if(e.options[j].selected) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(sValue.length>0) sValue+=\\quot\\\\comma\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab//sValue+=e.options[j].value;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//var sValue=(e.type==\\quot\\checkbox\\quot\\) ? sValue=(e.checked) : sValue=e.value;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//sContent +=\\quot\\~~pipe~~XFilter_\\quot\\+ar[i]+\\quot\\=\\quot\\+sExpression+\\quot\\//power//\\quot\\+sValue+\\quot\\//power//\\quot\\+sCondition+\\quot\\//power//\\quot\\+sOperator;//crlf////tab////tab////tab////tab////appendToLog(\\quot\\Adding external filter: \\quot\\+sExpression+\\quot\\//power//\\quot\\+sValue+\\quot\\//power//\\quot\\+sCondition);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//console.log(\\quot\\Cannot locate external filter with ID=\\quot\\+ar[i]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////console.log(\\quot\\tttgetexternalfilters: \\quot\\+sContent);//crlf////tab//return(sContent);//crlf//};//crlf////crlf///*****************************************************************************************************//crlf//Returns a pipe-delimited list of external params in the form://crlf//expression//power//value~~pipe~~expression//power//value //crlf//where expression is generally in the form xxx=$value$//crlf//*****************************************************************************************************///crlf//function getExternalDriverParams(TableID)//crlf//{//crlf////tab////console.log(\\quot\\getExternalDriverParams table=\\quot\\+TableID\\comma\\false\\comma\\true);//crlf////tab//var sContent=\\quot\\\\quot\\;//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//var sExternalParam=table.getAttribute(\\quot\\externalparams\\quot\\);//crlf////tab//if((sExternalParam) //amp////amp// (sExternalParam.length>0)) {//crlf////tab////tab//var arExternalParam=getSubStringArray(sExternalParam\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab//for (var j=0;j<arExternalParam.length;j++) {//crlf////tab////tab////tab//var eExternalParam=document.getElementById(arExternalParam[j]);//crlf////tab////tab////tab//if(eExternalParam) {//crlf////tab////tab////tab////tab//var sExpression=eExternalParam.getAttribute(\\quot\\param\\quot\\);//crlf////tab////tab////tab////tab//var sValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////if it's a datalist\\comma\\ get the value from the datalist's hidden element //crlf////tab////tab////tab////tab//if(eExternalParam.nodeName==\\quot\\DATALIST\\quot\\) {//crlf////tab////tab////tab////tab////tab//var e=document.getElementById(arExternalParam[j]+\\quot\\_input_submit\\quot\\);//crlf////tab////tab////tab////tab////tab//if(e) sValue=e.value;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(eExternalParam.type==\\quot\\select-multiple\\quot\\) {//crlf////tab////tab////tab////tab////tab//var sValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab//for(var i=0;i<eExternalParam.options.length;i++) {//crlf////tab////tab////tab////tab////tab////tab//if(eExternalParam.options[i].selected) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(sValue.length>0) sValue+=\\quot\\\\comma\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab//sValue+=eExternalParam.options[i].value;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//(eExternalParam.type==\\quot\\checkbox\\quot\\) ? sValue=(eExternalParam.checked) : sValue=eExternalParam.value;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////console.log(\\quot\\Driver param sValue=\\quot\\+sValue);//crlf////tab////tab////tab////tab//if(sContent.length>0) sContent +=\\quot\\~~pipe~~\\quot\\;//crlf////tab////tab////tab////tab//sContent +=sExpression+\\quot\\//power//\\quot\\+sValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//appendToLog(\\quot\\refreshTable cannot locate external driver param with ID=\\quot\\+arExternalParam[j]\\comma\\false\\comma\\true);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////appendToLog(\\quot\\getExternalDriverParams table=\\quot\\+TableID+\\quot\\ returns \\quot\\+sContent\\comma\\false\\comma\\true);//crlf////tab//return(sContent);//crlf//};//crlf////crlf//function getTableDriverParams(TableID\\comma\\bIncludeExternalParams)//crlf//{//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//var sParams=table.getAttribute(\\quot\\aspectParams\\quot\\);//crlf////tab//if(!bIncludeExternalParams) return(sParams);//crlf////tab////crlf////tab////add external params\\comma\\ overwriting the //crlf////tab//var sExternalParams=getExternalDriverParams(TableID);//crlf////tab//if(sExternalParams.length>0) {//crlf////tab////tab//var arExternalParams=getSubStringArray(sExternalParams\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////tab//for(var i=0;i<arExternalParams.length;i++) {//crlf////tab////tab////tab//var a=getSubStringArray(arExternalParams[i]\\comma\\\\quot\\//power//\\quot\\\\comma\\true);//crlf////tab////tab////tab//if(a.length==2) {//crlf////tab////tab////tab////tab//if(sParams.length>0) sParams +=\\quot\\~~pipe~~\\quot\\;//crlf////tab////tab////tab////tab//sParams +=replaceAllSubstrings(a[0]\\comma\\\\quot\\$value$\\quot\\\\comma\\a[1]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//appendToLog(\\quot\\getTableDriverParams returns \\quot\\+sParams\\comma\\false\\comma\\true);//crlf////tab//return(sParams);//crlf//};//crlf////crlf//function printIFrame(strElementID)//crlf//{ //crlf////tab//var iframe=document.getElementById(strElementID);//crlf////tab//if (!iframe) {//crlf////tab////tab//alert(\\quot\\No content defined for printing\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var strUrl=\\quot\\https://__server__/?Network=GreenLight//amp//ID=getCachedWidget//amp//DocumentID=77NaWu0FhKDKXL7C70JpnKmy//amp//Widget=Printer Wrapper\\quot\\;//crlf////tab//var strDoc=getxmlHttpRequest(strUrl);//crlf////tab////crlf////crlf////tab////strDoc +=\\quot\\<iframe src=\x22\\quot\\+iframe.src+\\quot\\\x22></iframe>\\quot\\//crlf////tab//strDoc +=window.frames[\\quot\\widget_iframe\\quot\\].document.body.innerHTML;//crlf////tab//strDoc +=\\quot\\</body></html>\\quot\\//crlf////tab//var eStyle=document.getElementsByTagName(\\quot\\style\\quot\\)[0];//crlf////tab//strDoc=replaceAllSubstrings(strDoc\\comma\\\\quot\\$style$\\quot\\\\comma\\eStyle.innerHTML);//crlf////crlf////tab//var docprint=window.open(\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\\\comma\\\\quot\\toolbar=yes\\comma\\location=no\\comma\\directories=yes\\comma\\menubar=yes\\comma\\scrollbars=yes\\comma\\width=650\\comma\\ height=600\\comma\\ left=100\\comma\\ top=25\\quot\\); //crlf////tab//docprint.document.open(); //crlf////tab//docprint.document.write(strDoc); //crlf////crlf////tab//var arTagNames=new Array(\\quot\\div\\quot\\\\comma\\\\quot\\form\\quot\\);//crlf////tab//for (var i=0;i<arTagNames.length;i++) {//crlf////tab////tab//var arTag=docprint.document.getElementsByTagName(arTagNames[i]);//crlf////tab////tab//var j=0;//crlf////tab////tab//while (j<arTag.length) {//crlf////tab////tab////tab//var attr1=arTag[j].getAttribute(\\quot\\noprint\\quot\\);//crlf////tab////tab////tab//var attr2=arTag[j].getAttribute(\\quot\\print\\quot\\);//crlf////alert(\\quot\\attr1=\\quot\\+attr1+\\quot\\ attr2=\\quot\\+attr2);//tab////tab////tab////crlf////tab////tab////tab//if (((attr1) //amp////amp// (attr1.toString().equalsIgnoreCase(\\quot\\true\\quot\\))) ~~pipe~~~~pipe~~ ((attr2) //amp////amp// (attr2.toString().equalsIgnoreCase(\\quot\\false\\quot\\)))) {//crlf////tab////tab////tab////tab//arTag[j].style.display=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab//arTag[j].display=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab//arTag[j].innerHTML=\\quot\\//amp//nbsp;\\quot\\;//crlf////tab////tab////tab////tab//arTag[j].parentNode.removeChild(arTag[j]); //crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//j++;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////remove script tags//crlf////tab//var arTag=docprint.document.getElementsByTagName(\\quot\\script\\quot\\);//crlf////tab//while (arTag.length>0) {//crlf////tab////tab//arTag[0].parentNode.removeChild(arTag[0]); //crlf////tab//};//crlf////crlf////tab//docprint.document.close(); //crlf////tab//docprint.focus(); //crlf//}//crlf////crlf//function printReport(strWidgetID)//crlf//{ //crlf////tab//var e=document.getElementById(\\quot\\Report_Content\\quot\\+strWidgetID);//crlf////tab//if (!e) {//crlf////tab////tab//alert(\\quot\\No content defined for printing\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab//var strContent=e.innerHTML; //crlf////tab//var disp_setting=\\quot\\toolbar=yes\\comma\\location=no\\comma\\directories=yes\\comma\\menubar=yes\\comma\\scrollbars=yes\\comma\\width=650\\comma\\ height=600\\comma\\ left=100\\comma\\ top=25\\quot\\; //crlf////crlf////tab//var strUrl=\\quot\\https://__server__/?Network=GreenLight//amp//ID=getCachedWidget//amp//DocumentID=77NaWu0FhKDKXL7C70JpnKmy//amp//Widget=Printer Wrapper\\quot\\;//crlf////tab//var strDoc=getxmlHttpRequest(strUrl);//crlf////tab//strDoc +=strContent;//crlf////tab//strDoc +=\\quot\\</body></html>\\quot\\//crlf////crlf////tab//var docprint=window.open(\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\\\comma\\disp_setting); //crlf////tab//docprint.document.open(); //crlf////tab////docprint.document.write('<html><head><title>Aspect Software</title>'); //crlf////tab////docprint.document.write('</head><body onLoad=\\quot\\self.print()\\quot\\><center>');          //crlf////tab////docprint.document.write(strContent);          //crlf////tab////docprint.document.write('</center></body></html>'); //crlf////tab//docprint.document.write(strDoc); //crlf////tab//docprint.document.close(); //crlf////tab//docprint.focus(); //crlf//}//crlf////crlf////Initializes all custom controls in a document by iterating through each form//crlf////An initialized attribute is used to determine if controls have already been initialized to avoid initializing them twice//crlf//function initializeCustomControls() //crlf//{//crlf////tab//for (var cntrForm=0;cntrForm<document.forms.length;cntrForm++) {//crlf////tab////tab//var f=document.forms[cntrForm];//crlf////tab////tab//for (var cntrNode=0;cntrNode<f.elements.length;cntrNode++) {//crlf////tab////tab////tab//var n=f.elements[cntrNode];//crlf////tab////tab////tab//var inputtype=n.getAttribute(\\quot\\control\\quot\\);//crlf////tab////tab////tab//var initialized=n.getAttribute(\\quot\\initialized\\quot\\);//crlf////tab////tab////tab////crlf////tab////tab////tab////04-24-2013 - Calendar icons are initialized a number of times when the page is loaded.  For some reason\\comma\\//crlf////tab////tab////tab////the control is not initialized properly until the last call.  This function has been modified to //crlf////tab////tab////tab////initialize the control during each call.  The previous icon is removed before a new one is created//crlf////tab////tab////tab////if ((inputtype) //amp////amp// (!initialized)) {//crlf////tab////tab////tab//if (inputtype){//crlf////tab////tab////tab////tab//if (inputtype.equalsIgnoreCase(\\quot\\date\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if((f.name) //amp////amp// (n.name) //amp////amp// (f.name.length>0) //amp////amp// (n.name.length>0)) {//crlf////tab////tab////tab////tab////tab////tab////remove the current icon if there is one//crlf////tab////tab////tab////tab////tab////tab//var sTcalicon=n.getAttribute(\\quot\\tcalicon\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//if(sTcalicon) {//crlf////tab////tab////tab////tab////tab////tab////tab//var eTcalicon=document.getElementById(sTcalicon);//crlf////tab////tab////tab////tab////tab////tab////tab//if(eTcalicon) eTcalicon.parentNode.removeChild(eTcalicon);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab//var t=new tcal({formname:f.name\\comma\\controlname:n.name});//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Initialize calendar form:\\quot\\+f.name+\\quot\\ name:\\quot\\+n.name+\\quot\\ id=\\quot\\+t.e_icon.id\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//n.setAttribute(\\quot\\tcalicon\\quot\\\\comma\\t.e_icon.id);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\Missing form or element name in date control\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if (inputtype.equalsIgnoreCase(\\quot\\combobox\\quot\\)) {//crlf////tab////tab////tab////tab////tab//new comboBox(f.name\\comma\\\\quot\\ComboBox\\quot\\+n.name\\comma\\n.name);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//n.setAttribute(\\quot\\initialized\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Shows or hides a table message//crlf//******************************************************************************///crlf//function showTableMessage(sTableID\\comma\\sMessage\\comma\\bShow)//crlf//{//crlf////tab//if(sTableID.length==0) {//crlf////tab////tab//alert(\\quot\\No TableID in showTableMessage\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var eDiv=document.getElementById(\\quot\\div\\quot\\+sTableID);//crlf////tab//var eTable=document.getElementById(sTableID);//crlf////crlf////tab////abort if messages are disabled for the table//crlf////tab//var s=eTable.getAttribute(\\quot\\aspectmessages\\quot\\);//crlf////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\false\\quot\\))) return;//crlf////tab////crlf////tab////don't display a message if the table is not visible.  //crlf////tab//if(eDiv.offsetWidth*eDiv.offsetHeight==0) return//crlf////crlf////tab//var divMessage=document.getElementById(sTableID+\\quot\\Message\\quot\\);//crlf////tab////crlf////tab//if(bShow==false) {//crlf////tab////tab//if(divMessage) setVisible(divMessage\\comma\\false);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////create the message div if it doesn't already exist//crlf////tab//if(!divMessage) {//crlf////tab////tab//divMessage=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//divMessage.id=sTableID+\\quot\\Message\\quot\\;//crlf////tab////tab//divMessage.className=\\quot\\tablemessage\\quot\\;//crlf////tab////tab//eDiv.appendChild(divMessage);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//divMessage.innerHTML=\\quot\\\\quot\\;//crlf////tab//};//crlf////crlf////tab//var t=document.createTextNode(sMessage);//crlf////tab//divMessage.appendChild(t);//crlf////crlf////tab////add progress bar//crlf////tab//var divProgressContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//var eProgress=document.createElement(\\quot\\Progress\\quot\\);//crlf////tab//eProgress.style.width=\\quot\\100\\percent\\\\quot\\;//crlf////tab//divProgressContainer.appendChild(eProgress);//crlf////tab//divMessage.appendChild(divProgressContainer);//crlf////crlf////tab//setVisible(divMessage\\comma\\true);//crlf////crlf////tab//var xy=getPosition2012(eTable\\comma\\\\quot\\absolute\\quot\\\\comma\\eDiv);//crlf////crlf////tab////position the message in the center of the table//crlf////tab////but not more than 200 px to the right of the left side of the table//crlf////tab//var Middle=eTable.offsetWidth/2;//crlf////tab//var Left=Middle - (divMessage.offsetWidth/2);//crlf////tab//Left=Math.min(Left\\comma\\200);//crlf////tab//divMessage.style.left=Left+\\quot\\px\\quot\\;//crlf////crlf////tab////position the message 40px down from the top of the table//crlf////tab//divMessage.style.top=(xy[1]+80)+\\quot\\px\\quot\\;//crlf//};//crlf////crlf////crlf///*******************************************************************************//crlf//Called to refresh records in a table at some interval.  Records are merged into the table//crlf//rather than refreshing the whole table.  Can also be used to refresh a table that does//crlf//not have an interval set.  For example\\comma\\ if a new record is added to a driver\\comma\\ this //crlf//function can be called to add the record to a table.//crlf//*******************************************************************************///crlf//function refreshTableOnInterval(TableID\\comma\\IsRefreshed) {//crlf////tab//var Debug=false;//crlf////tab////crlf////tab//var eTable=document.getElementById(TableID);//crlf////tab//if(!eTable) return;//crlf////crlf////tab////note: the interval may not be defined.  //tab////crlf////tab//var iInterval=parseInt(eTable.getAttribute(\\quot\\AspectActiveRefreshInterval\\quot\\));//crlf////tab//if(isNaN(iInterval)) iInterval=0;//crlf////crlf////tab//var bRefreshWhenHidden=false;//crlf////tab//if(eTable.getAttribute(\\quot\\AspectActiveRefreshWhenHidden\\quot\\)) {//crlf////tab////tab//bRefreshWhenHidden=eTable.getAttribute(\\quot\\AspectActiveRefreshWhenHidden\\quot\\).equalsIgnoreCase(\\quot\\true\\quot\\);//crlf////tab//};//crlf////crlf////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval started TableID=\\quot\\+TableID+\\quot\\ iInterval=\\quot\\+iInterval+\\quot\\ IsRefreshed=\\quot\\+IsRefreshed);//crlf////crlf////tab//if(IsRefreshed) {//crlf////tab////tab//var eDestTable=document.getElementById(TableID)//crlf////tab////tab//var eTable=document.getElementById(TableID+\\quot\\intervalrefresh\\quot\\);//crlf////tab////tab//if(!eTable) {//crlf////tab////tab////tab//if(Debug) appendToLog(\\quot\\Could not locate table: \\quot\\+TableID+\\quot\\intervalrefresh to refresh content\\quot\\);//crlf////tab////tab////tab//setTimeout(\\quot\\refreshTableOnInterval(\x22\\quot\\+TableID+\\quot\\\x22)\\quot\\\\comma\\iInterval);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab////tab////appendToLog(\\quot\\got refreshed content Len=\\quot\\+eTable.innerHTML.length);//crlf////tab////tab////for(var i=0;i<eTable.rows[2].cells.length;i++) {//crlf////tab////tab//////tab//appendToLog(\\quot\\Cell \\quot\\+i+\\quot\\=\\quot\\+eTable.rows[2].cells[i].innerHTML);//crlf////tab////tab////};//crlf////tab////tab////crlf////tab////tab//var bMerge=true;//crlf////tab////tab////crlf////tab////tab////don't merge if the table is  currently being refreshed//crlf////tab////tab//if(eDestTable.getAttribute(\\quot\\Loading\\quot\\)==\\quot\\true\\quot\\) bMerge=false;//crlf////tab////tab////crlf////tab////tab////don't merge if the crc value for the table has not changed//crlf////tab////tab//var SrcTableCRC=\\quot\\\\quot\\;//crlf////tab////tab//var eSrcTableCRC=document.getElementById(TableID+\\quot\\intervalrefreshCRC\\quot\\);//crlf////tab////tab//if((eSrcTableCRC) //amp////amp// (iInterval>0)) {//crlf////tab////tab////tab//SrcTableCRC=eSrcTableCRC.innerHTML;//crlf////tab////tab////tab//var DestTableCRC=eDestTable.getAttribute(\\quot\\TableCRC\\quot\\);//crlf////tab////tab////tab//if(DestTableCRC) {//crlf////tab////tab////tab////tab//if(SrcTableCRC==DestTableCRC) {//crlf////tab////tab////tab////tab////tab//if(Debug) appendToLog(\\quot\\Not updating table because CRC values match\\quot\\);//crlf////crlf////tab////tab////tab////tab////tab////update the span containing the time the table was generated//crlf////tab////tab////tab////tab////tab//setTableUpdateTime(eDestTable);//crlf////crlf////tab////tab////tab////tab////tab//eDestTable.setAttribute(\\quot\\TimeLastRefreshedOnInterval\\quot\\\\comma\\new Date().getTime());//crlf////tab////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval SrcTableCRC=\\quot\\+SrcTableCRC+\\quot\\ DestTableCRC=\\quot\\+DestTableCRC);//crlf////crlf////tab////tab////tab////tab////tab//if(iInterval>0) {//crlf////tab////tab////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval isRefreshed setting timeout because CRC matches\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//setTimeout(\\quot\\refreshTableOnInterval(\x22\\quot\\+TableID+\\quot\\\x22)\\quot\\\\comma\\iInterval);//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval returns from IsRefreshed section\\quot\\);//crlf////tab////tab////tab////tab////tab//return;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//if(Debug) appendToLog(\\quot\\CRC values are different for \\quot\\+TableID);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//if(Debug) appendToLog(\\quot\\Cannot locate crc for destination table\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if(Debug) appendToLog(\\quot\\Cannot locate table crc in \\quot\\+TableID+\\quot\\intervalrefreshCRC\\quot\\);//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab////don't merge if the crc for the  display options is different from those in the original table//crlf////tab////tab//var sCRCNow=eTable.getAttribute(\\quot\\aspectDisplayOptionsCRC\\quot\\);//crlf////tab////tab//var sCRCOriginal=eDestTable.getAttribute(\\quot\\aspectDisplayOptionsCRC\\quot\\);//crlf////tab////tab//if(sCRCNow!=sCRCOriginal) {//crlf////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval Not refreshing table because crc for display options is different\\quot\\);//crlf////tab////tab////tab//bMerge=false;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//if((bMerge) ~~pipe~~~~pipe~~ (iInterval==0)) {//crlf////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval Merging table\\quot\\);//crlf////tab////tab////tab//mergeTable2012(TableID\\comma\\TableID+\\quot\\intervalrefresh\\quot\\);//crlf////tab////tab////tab////crlf////tab////tab////tab////update the span containing the time the table was generated//crlf////tab////tab////tab//setTableUpdateTime(eDestTable);//crlf////crlf////tab////tab////tab//highlightSubtotals(eDestTable\\comma\\false);//crlf////crlf////tab////tab////tab////call the listener function if one is defined//crlf////tab////tab////tab//var s=\\quot\\tableRefreshedOnInterval\\quot\\+TableID;//crlf////tab////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) {//crlf////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval Calling listener function: \\quot\\+s);//crlf////tab////tab////tab////tab//eval(s+\\quot\\('\\quot\\+TableID+\\quot\\')\\quot\\);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval NOT Calling listener function: \\quot\\+s);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab//eDestTable.setAttribute(\\quot\\TableCRC\\quot\\\\comma\\SrcTableCRC);//crlf////tab////tab//eDestTable.setAttribute(\\quot\\TimeLastRefreshedOnInterval\\quot\\\\comma\\new Date().getTime());//crlf////crlf////tab////tab////only set the timeout if a refreshInterval is specified.  This function can also be called manually //crlf////tab////tab////to refresh a table and it should not continue to refresh if that is the case//crlf////tab////tab//if(iInterval>0) {//crlf////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval setting timeout for \\quot\\+TableID+\\quot\\ iInterval=\\quot\\+iInterval);//crlf////tab////tab////tab//setTimeout(\\quot\\refreshTableOnInterval(\x22\\quot\\+TableID+\\quot\\\x22)\\quot\\\\comma\\iInterval);//crlf////tab////tab//};//crlf////crlf////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval returns from IsRefreshed section\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//if((bRefreshWhenHidden) ~~pipe~~~~pipe~~ (isVisible(eTable))) //crlf////tab//{//crlf////tab////tab////make sure enough time has elapsed.  The javascript timer is unreliable//crlf////tab////tab//var iElapsed=(eTable.getAttribute(\\quot\\TimeLastRefreshedOnInterval\\quot\\)) ? new Date().getTime()-parseInt(eTable.getAttribute(\\quot\\TimeLastRefreshedOnInterval\\quot\\)) : iInterval;//crlf////tab////tab////appendToLog(\\quot\\iElapsed=\\quot\\+iElapsed+\\quot\\ iInterval=\\quot\\+iInterval);//crlf////tab////tab//if(iElapsed<iInterval) {//crlf////tab////tab////tab//if(Debug) appendToLog(\\quot\\Aborting refreshTableOnInterval because time elapsed=\\quot\\+new Date().getTime()-t<iInterval);//crlf////tab////tab////tab//setTimeout(\\quot\\refreshTableOnInterval(\x22\\quot\\+TableID+\\quot\\\x22)\\quot\\\\comma\\1000);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////crlf////tab////tab////appendToLog(\\quot\\Refreshing table: \\quot\\+TableID);//crlf////tab////tab/////if the table has already been refreshed\\comma\\ get the url that was calculated to do the refreshing//crlf////tab////tab//var sSavedUrl=eTable.getAttribute(\\quot\\RefreshOnIntervalUrl\\quot\\);//crlf////tab////tab///*//crlf////tab////tab//This is a good idea\\comma\\ but has problems.  For one thing\\comma\\ external driver params and filters are not reflected in the table//crlf////tab////tab//This was disabled on 7/24/15 because the Waste Count List table was not refreshing properly with it enabled.//crlf////tab////tab//*///crlf////tab////tab///**************//crlf////tab////tab//if(sSavedUrl) {//crlf////tab////tab////tab//var iStartRecord=parseInt(eTable.getAttribute(\\quot\\aspectstartrecord\\quot\\));//crlf////tab////tab////tab//sSavedUrl +=\\quot\\//amp//StartRecord=\\quot\\+iStartRecord;//crlf////tab////tab////tab//var sFunc=\\quot\\refreshTableOnInterval(\x22\\quot\\+TableID+\\quot\\\x22\\comma\\true)\\quot\\;//crlf////appendToLog(\\quot\\Updating table using saved url: \\quot\\+sSavedUrl);//crlf////tab////tab////tab//asynchInclude(document.getElementById(\\quot\\TableRefreshDiv\\quot\\+TableID)\\comma\\sSavedUrl\\comma\\sFunc\\comma\\sFunc);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab////tab//***************///crlf////crlf////tab////tab////add the start record.  This is not saved in the url//crlf////tab////tab//sUrl +=\\quot\\//amp//StartRecord=\\quot\\+iStartRecord;//crlf////tab////tab////crlf////tab////tab//var e=document.getElementById(\\quot\\SelectDisplay1\\quot\\+TableID);//crlf////tab////tab//ADisplayID=(e) ? e.value : \\quot\\\\quot\\;//crlf////crlf////tab////tab//var eDiv=document.getElementById(\\quot\\div\\quot\\+TableID);//crlf////tab////tab//var iMaxRecords=parseInt(eTable.getAttribute(\\quot\\aspectmaxrecords\\quot\\));//crlf////tab////tab//var iStartRecord=parseInt(eTable.getAttribute(\\quot\\aspectstartrecord\\quot\\));//crlf////crlf////tab////tab////construct a driver include tag to be processed by the server//crlf////tab////tab//var sHashID=eTable.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab////tab//var sDocumentID=\\quot\\\\quot\\;//crlf////tab////tab//var sWidget=\\quot\\\\quot\\;//crlf////crlf////tab////tab////The DriverID is recorded in the table as well as a DriverStructID.  The DriverStructID is the driver that was actually used in creating the table.//crlf////tab////tab////It is normally the same as the Driver ID.  However\\comma\\ it can be different if the driver is opened using a script driver.  The include tag used to create the table will //crlf////tab////tab////contain the original driver ID but TCacheDriver routine needs to know the structure used by the final driver so it can transfer and read/write data.//crlf////tab////tab//var sDriverID=\\quot\\\\quot\\;//crlf////tab////tab//var sDriverStructID=\\quot\\\\quot\\;//crlf////crlf////tab////tab////add the attributes for the table to an array.  The array will be sorted to avoid creating duplicate TCacheObj entries for the same display//crlf////tab////tab//var arParams=new Array();//crlf////tab////tab////crlf////tab////tab////add an attribute indicating that this is a call to refresh a table.  TAspectDriver.exportToHtml() uses this to avoid creating an edit dialog//crlf////tab////tab//arParams[arParams.length]=\\quot\\REFRESHONINTERVAL: \x22true\x22;\\quot\\;//crlf////tab////tab//var sState=\\quot\\\\quot\\;//crlf////tab////tab////crlf////tab////tab//var bSystemDriver=false;//crlf////tab////tab//var bKeepDriver=false;//crlf////tab////tab//var sParamsActive=\\quot\\\\quot\\;//crlf////tab////tab//for (var i=0;i<eTable.attributes.length;i++) {//crlf////tab////tab////tab//var sName=eTable.attributes.item(i).nodeName;//crlf////tab////tab////tab//if(sName.startsWith(\\quot\\aspect\\quot\\)) {//crlf////tab////tab////tab////tab//sName=sName.substring(6);//crlf////tab////tab////tab////tab//if((sName.equalsIgnoreCase(\\quot\\RefreshInterval\\quot\\)) ~~pipe~~~~pipe~~ (sName.equalsIgnoreCase(\\quot\\RefreshWhenHidden\\quot\\)) ~~pipe~~~~pipe~~//crlf////tab////tab////tab////tab////tab//(sName.equalsIgnoreCase(\\quot\\RefreshIntervalRemote\\quot\\)) ~~pipe~~~~pipe~~ (sName.equalsIgnoreCase(\\quot\\RefreshWhenHiddenRemote\\quot\\))) {//crlf////tab////tab////tab////tab////tab////ignore//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\FieldPattern\\quot\\)) {//crlf////tab////tab////tab////tab////tab////ignore //crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ID\\quot\\)) {//crlf////tab////tab////tab////tab////tab////don't pass the table ID to avoid creating unncessary TCacheObj//crlf////tab////tab////tab////tab////tab//// - Do need to pass the ID in case a specified ID is defined.  This may be necessary to avoid a conflict with another element's ID//crlf////tab////tab////tab////tab////tab//// since the driver ID is used when an ID is not specified and the driver ID could be the same as the ID of another html element//crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+TableID+\\quot\\intervalrefresh\\quot\\+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\DisplayID\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(ADisplayID.length==0) arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\Driver\\quot\\)) {//crlf////tab////tab////tab////tab////tab//sDriverID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\DriverStructID\\quot\\)) {//crlf////tab////tab////tab////tab////tab//sDriverStructID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\SystemDriver\\quot\\)) {//crlf////tab////tab////tab////tab////tab//bSystemDriver=boolVal(eTable.attributes.item(i).nodeValue);//crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\KeepDriver\\quot\\)) {//crlf////tab////tab////tab////tab////tab//bKeepDriver=boolVal(eTable.attributes.item(i).nodeValue);//crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if (sName.equalsIgnoreCase(\\quot\\StartRecord\\quot\\)) {//crlf////tab////tab////tab////tab////tab////arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+iStartRecord+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\DocumentID\\quot\\)) {//crlf////tab////tab////tab////tab////tab//sDocumentID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\Widget\\quot\\)) {//crlf////tab////tab////tab////tab////tab//sWidget=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ContainerItemID\\quot\\)) {//crlf////tab////tab////tab////tab////tab//sContainerItemID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab////tab////add the container ID to the include tag to maintain compatibility with the original//crlf////tab////tab////tab////tab////tab////Widget Container //crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\State\\quot\\)) {//crlf////tab////tab////tab////tab////tab//sState=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x27\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\27\\quot\\);//crlf////tab////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x23\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\23\\quot\\);//crlf////tab////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x28\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\28\\quot\\);//crlf////tab////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x29\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\29\\quot\\);//crlf////tab////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x2F\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\2F\\quot\\);//crlf////tab////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x5C\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\5C\\quot\\);//crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+sState+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ParamsActive\\quot\\)) {//crlf////tab////tab////tab////tab////tab//sParamsActive=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ExternalParams\\quot\\)) {//crlf////tab////tab////tab////tab////tab////include the original externalparams value//crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////add an XExternalParamXXX argument for each external parameter//crlf////tab////tab////tab////tab////tab//if(eTable.attributes.item(i).nodeValue!=null) {//crlf////tab////tab////tab////tab////tab////tab//if(eTable.attributes.item(i).nodeValue.length>0) {//crlf////tab////tab////tab////tab////tab////tab////tab//var arExternalParam=getSubStringArray(eTable.attributes.item(i).nodeValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab//if(arExternalParam!=null) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//for (var j=0;j<arExternalParam.length;j++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var eExternalParam=document.getElementById(arExternalParam[j]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eExternalParam) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sExternalParam=eExternalParam.getAttribute(\\quot\\param\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sExternalParamValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//(eExternalParam.type==\\quot\\checkbox\\quot\\) ? sExternalParamValue=(eExternalParam.checked) : sExternalParamValue=eExternalParam.value;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//arParams[arParams.length]=\\quot\\XExternalParam\\quot\\+arExternalParam[j]+\\quot\\: \x22\\quot\\+sExternalParam+\\quot\\//power//\\quot\\+sExternalParamValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Adding external param: \\quot\\+arParams[arParams.length-1]\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\Cannot locate external driver param with ID=\\quot\\+arExternalParam[j]+\\quot\\ in refreshTable()\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+replaceAllSubstrings(eTable.attributes.item(i).nodeValue\\comma\\\\quot\\\x23\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\)+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////Use the actual driver ID if one was supplied in DriverStructID.  This is to handle drivers opened using a script in which case the driver ID returned by the script//crlf////tab////tab////may be different than the original driver ID.  However\\comma\\ use the same ID if it's a system driver because the driver ID in the include tag and the actual driver ID//crlf////tab////tab////will always be different.//crlf////tab////tab////crlf////tab////tab////The KeepDriver argument can also be used to cause the original driver to be used instead of the one in DriverStructID.//crlf////tab////tab////An example of this is in the POS Viewer which uses Aspect_BackOffice_POSViewer as the driver.  Any number of other drivers might actually//crlf////tab////tab////be used to create the table depending on the pos and data type.  The KeepDriver argument is used to make sure that Aspect_BackOffice_POSViewer//crlf////tab////tab////is used as the driver when the table is refreshed.  This became an issue with the Micros E7 interface when temporary system drivers were//crlf////tab////tab////returned by the call to openDriver in the pos interface.  These system drivers are no longer available when the table is refreshed and//crlf////tab////tab////a call to Aspect_BackOffice_POSViewer is required.//crlf////tab////tab//((sDriverStructID.length>0) //amp////amp// (bSystemDriver==false) //amp////amp// (bKeepDriver==false) //amp////amp// (sDriverStructID.equalsIgnoreCase(\\quot\\ConsDriverVert\\quot\\)==false) //amp////amp// (sDriverStructID.equalsIgnoreCase(\\quot\\ConsDriverHorz\\quot\\)==false)) ? arParams[arParams.length]=\\quot\\Driver: \x22\\quot\\+sDriverStructID+\\quot\\\x22;\\quot\\ : arParams[arParams.length]=\\quot\\Driver: \x22\\quot\\+sDriverID+\\quot\\\x22;\\quot\\;//crlf////crlf////tab////tab////add current display settings//crlf////tab////tab//var bPreserveSettings=true;//crlf////tab////tab//if(bPreserveSettings) {//crlf////tab////tab////tab//var sFilterOptions=getDisplayFormValues(TableID);//crlf////tab////tab////tab//if(sFilterOptions.length>0) {//crlf////tab////tab////tab////tab//var arFilterOptions=getSubStringArray(sFilterOptions\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\false);//crlf////tab////tab////tab////tab//for(var i=0;i<arFilterOptions.length;i++) {//crlf////tab////tab////tab////tab////tab//var n=arFilterOptions[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab////tab//var sName=arFilterOptions[i].substring(0\\comma\\n);//crlf////tab////tab////tab////tab////tab//if(sName.toUpperCase().startsWith(\\quot\\FIELD_\\quot\\)) sName=sName.substring(6);//crlf////tab////tab////tab////tab////tab//var sValue=arFilterOptions[i].substring(n+1);//crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=\\quot\\XDisplay\\quot\\+sName+\\quot\\: \x22\\quot\\+replaceAllSubstrings(sValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\)+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////get external filters - These need to be included when a table is refreshed by pressing the refresh button //crlf////tab////tab////tab//var sExternalFilters=getExternalFilters(TableID);//crlf////tab////tab////tab//if(sExternalFilters.length>0) {//crlf////tab////tab////tab////tab//var arExternalFilters=getSubStringArray(sExternalFilters\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\false);//crlf////tab////tab////tab////tab//for(var i=0;i<arExternalFilters.length;i++) {//crlf////tab////tab////tab////tab////tab//var n=arExternalFilters[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab////tab//var sName=arExternalFilters[i].substring(0\\comma\\n);//crlf////tab////tab////tab////tab////tab//var sValue=arExternalFilters[i].substring(n+1);//crlf////tab////tab////tab////tab////tab//arParams[arParams.length]=\\quot\\XDisplay\\quot\\+sName+\\quot\\: \x22\\quot\\+replaceAllSubstrings(sValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\)+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab////add state tag//crlf////tab////tab////07-24-2015 - This was modified to set driver params before the state expression is evaluated.    This was necessary when dependent drivers//crlf////tab////tab////were introduced because the state tag of a dependent driver will often rely on values passed in the driver params like dates\\comma\\ store ID's and such.//crlf////tab////tab////The state expression now looks like://crlf////tab////tab//////tab//setConstant(Param1\\comma\\Value1)+setConstant(Param2\\comma\\Value2)+setConstant(Paramn\\comma\\Valuen)+State Expression//crlf////tab////tab////crlf////tab////tab//var s=\\quot\\\\quot\\;//crlf////tab////tab//if(sState.length>0) {//crlf////tab////tab////tab//s+=\\quot\\<\\quot\\+\\quot\\state\\quot\\+\\quot\\>\\quot\\;//crlf////tab////tab////tab//var sExpression=\\quot\\\\quot\\;//crlf////tab////tab////tab//if(sParamsActive.length>0) {//crlf////tab////tab////tab////tab//var a=getSubStringArray(sParamsActive\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\false);//crlf////tab////tab////tab////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab////tab////tab////tab//var n=a[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab////tab//if(n>=0) {//crlf////tab////tab////tab////tab////tab////tab//var sName=a[i].substring(0\\comma\\n);//crlf////tab////tab////tab////tab////tab////tab//var sValue=a[i].substring(n+1);//crlf////tab////tab////tab////tab////tab////tab//if(\\quot\\KEYEXPRESSION~~pipe~~CACHETTL~~pipe~~METADATA\\quot\\.indexOf(sName.toUpperCase())<0) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(sExpression.length>0) sExpression +=\\quot\\+\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab//sExpression +=\\quot\\setConstant(\x22//pound//\\quot\\+sName+\\quot\\\x22\\comma\\\x22\\quot\\+sValue+\\quot\\\x22)\\quot\\//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab//if(sExpression.length>0) sExpression +=\\quot\\+\\quot\\;//crlf////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\2B\\quot\\\\comma\\\\quot\\+\\quot\\);//crlf////tab////tab////tab//sExpression +=sState;//crlf////tab////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x27\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\27\\quot\\);//crlf////tab////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x23\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\23\\quot\\);//crlf////tab////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x28\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\28\\quot\\);//crlf////tab////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x29\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\29\\quot\\);//crlf////tab////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x2F\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\2F\\quot\\);//crlf////tab////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x5C\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\5C\\quot\\);//crlf////tab////tab////tab//s +=\\quot\\<\\quot\\+\\quot\\include type:expression; expression:\\quot\\+sExpression+\\quot\\>\r\n\\quot\\;//crlf//////tab////tab////tab//s+=\\quot\\Debug=true\r\n\\quot\\;//crlf////tab////tab////tab//s+=\\quot\\<\\quot\\+\\quot\\/state\\quot\\+\\quot\\>\\quot\\;//crlf////tab////tab//};//crlf////crlf////tab////tab//arParams.sort();//crlf////tab////tab//s+=\\quot\\<\\quot\\+\\quot\\include \\quot\\;//crlf////tab////tab//for(var i=0;i<arParams.length;i++) {//crlf////tab////tab////tab//s +=\\quot\\ \\quot\\+arParams[i]+\\quot\\\r\n\\quot\\;//crlf////tab////tab//};//crlf////tab////tab//s+=\\quot\\>\\quot\\;//crlf////crlf////tab////tab////appendToLog(\\quot\\Submitting include tag: \\quot\\+s\\comma\\true\\comma\\true);//crlf////tab////tab////for (var i=0;i<arParams.length;i++) appendToLog(\\quot\\Param[\\quot\\+i+\\quot\\]=\\quot\\+arParams[i]);//crlf////tab////tab////crlf////tab////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=processContainerItem//amp//Content=\\quot\\+s//crlf////tab////tab//sUrl=sUrl + \\quot\\//amp//DocumentID=\\quot\\+sDocumentID+\\quot\\//amp//Widget=\\quot\\+sWidget+\\quot\\//amp//ContainerItemID=\\quot\\+sContainerItemID;//crlf////tab////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+sHashID;//crlf////tab////tab//sUrl +=\\quot\\//amp//RefreshTableOnInterval=true\\quot\\//crlf////tab////tab////crlf////tab////tab////add a flag used to indicate this is a request to refresh a table on an interval.  This gives a chance to ignore the request//crlf////tab////tab////if Aspect is too busy.  //crlf////crlf////tab////tab////add params passed to the page when the driver was created.  These are recorded in a div when the table is created//crlf////tab////tab//var ePageArgs=document.getElementById(\\quot\\div\\quot\\+TableID+\\quot\\pageargs\\quot\\);//crlf////tab////tab//if(ePageArgs) {//crlf////tab////tab////tab//var sOmit=\\quot\\~~pipe~~NETWORK~~pipe~~ID~~pipe~~DOCUMENTID~~pipe~~WIDGET~~pipe~~CONTAINERITEMID~~pipe~~SOURCE\\quot\\;//crlf////tab////tab////tab//var arPageArgs=getSubStringArray(ePageArgs.innerHTML\\comma\\\\quot\\~\\quot\\\\comma\\false);//crlf////tab////tab////tab//for(var i=0;i<arPageArgs.length;i++) {//crlf////tab////tab////tab////tab//var n=arPageArgs[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab//if(n>=0) {//crlf////tab////tab////tab////tab////tab//var sName=arPageArgs[i].substring(0\\comma\\n);//crlf////tab////tab////tab////tab////tab//if(sOmit.indexOf(\\quot\\~~pipe~~\\quot\\+sName.toUpperCase())<0) {//crlf////tab////tab////tab////tab////tab////tab//sUrl +=\\quot\\//amp//\\quot\\+arPageArgs[i];//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Added pagearg: \\quot\\+arPageArgs[i]+\\quot\\ n=\\quot\\+n+\\quot\\ sName=\\quot\\+sName);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Omitted pagearg: \\quot\\+arPageArgs[i]);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab////create a div used to hold the refreshed table.  This is a hidden div.  The table will be updated by merging records from the//crlf////tab////tab////updated table in the hidden div into the original table//crlf////tab////tab//var sHiddenDivID=\\quot\\TableRefreshDiv\\quot\\+TableID;//crlf////tab////tab//var eRefreshDiv=document.getElementById(sHiddenDivID);//crlf////tab////tab//if(!eRefreshDiv) {//crlf////tab////tab////tab//eRefreshDiv=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//eRefreshDiv.setAttribute(\\quot\\id\\quot\\\\comma\\sHiddenDivID);//crlf////tab////tab////tab//eRefreshDiv.id=sHiddenDivID;//crlf////tab////tab////tab//eRefreshDiv.style.display=\\quot\\none\\quot\\;//crlf////tab////tab////tab//document.body.appendChild(eRefreshDiv);//crlf////tab////tab//};//crlf////tab////tab////crlf////var sDebug=replaceAllSubstrings(sUrl\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\<br>\\quot\\); //crlf////sDebug=replaceAllSubstrings(sDebug\\comma\\\\quot\\\r\n\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\); //crlf////sDebug=replaceAllSubstrings(sDebug\\comma\\\\quot\\<\\quot\\\\comma\\\\quot\\[\\quot\\); //crlf////sDebug=replaceAllSubstrings(sDebug\\comma\\\\quot\\>\\quot\\\\comma\\\\quot\\]\\quot\\); //crlf////showDialog('msg='+sDebug+\\quot\\//amp//fnOk=close//amp//width=800//amp//height=800\\quot\\);//crlf////crlf////tab////tab////record the url in the table attributes so it doesn't have to be created again the enxt time//crlf////tab////tab//eTable.setAttribute(\\quot\\RefreshOnIntervalUrl\\quot\\\\comma\\sUrl);//crlf////crlf////tab////tab////add the start record.  This is not saved in the url//crlf////tab////tab//sUrl +=\\quot\\//amp//StartRecord=\\quot\\+iStartRecord;//crlf////crlf////tab////tab//var sFunc=\\quot\\refreshTableOnInterval(\x22\\quot\\+TableID+\\quot\\\x22\\comma\\true)\\quot\\;//crlf////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval1 calling asynchinclude\\quot\\);//crlf////tab////tab//asynchInclude(eRefreshDiv\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//if(iInterval>0) {//crlf////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval first entry setting timeout because not visible\\quot\\);//crlf////tab////tab////tab//setTimeout(\\quot\\refreshTableOnInterval(\x22\\quot\\+TableID+\\quot\\\x22)\\quot\\\\comma\\iInterval);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if(bEnableSubmissionDebugging) appendToSubmitLog(\\quot\\refreshTableOnInterval first entry NOT setting timeout because interval=0\\quot\\);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Refreshes the table with the given ID.  This routine is called from a number of sources://crlf//- By paging buttons in the table controls (first\\comma\\ last\\comma\\ next and previous)//crlf//- By the refresh button next to the paging buttons//crlf//- When a new display is selected above the table//crlf//- When okay is pressed on the display dialog//crlf////crlf//The direction is prev\\comma\\ next\\comma\\ first\\comma\\ last when called by a paging button.  It is 'refresh' all other times.//crlf////crlf//The DisplayID is blank except when called due to a change in either the selection above the table//crlf//or when the okay button is pressed on the display dialog.//crlf////crlf//If bPreserveSettings is true\\comma\\ the options currently selected for the display//crlf//will remain in effect\\comma\\ overriding the saved display.  //crlf//******************************************************************************///crlf//function refreshTable(sTableID\\comma\\sDirection\\comma\\ADisplayID\\comma\\bPreserveSettings\\comma\\b\\comma\\RefreshID)//crlf//{//crlf////tab////appendToLog(\\quot\\refreshTable: \\quot\\+sTableID+\\quot\\ b=\\quot\\+b);//crlf////tab////if(!b) printStackTrace();//crlf////tab//var eTable=document.getElementById(sTableID);//crlf////crlf////tab////abort if table is not found//crlf////tab//if(!eTable) {//crlf////tab////tab//printStackTrace();//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var eDiv=document.getElementById(\\quot\\div\\quot\\+sTableID);//crlf////crlf////tab////abort if surrounding div is not found//crlf////tab//if(!eDiv) {//crlf////tab////tab//alert(\\quot\\refreshTable() cannot locate table div with ID=div\\quot\\+sTableID);//crlf////tab////tab//printStackTrace();//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//if(b) {//crlf////tab////tab//appendToLog(\\quot\\Setting display for table: \\quot\\+sTableID+\\quot\\=table-row-group\\quot\\);//crlf////tab////tab//eTable.tBodies[0].style.display=\\quot\\table-row-group\\quot\\;//crlf////tab////tab////appendToLog(\\quot\\Confirm display for table: \\quot\\+sTableID+\\quot\\=\\quot\\+eTable.style.display);//crlf////tab////tab////crlf////tab////tab//enableExternalFilters(sTableID\\comma\\true);//crlf////tab////tab//enableExternalParams(sTableID\\comma\\true);//crlf////tab////tab//initializeTabbedDialogs(); //initialize tabs in the display dialog//crlf////crlf////tab////tab////update the span containing the time the table was generated//crlf////tab////tab//setTableUpdateTime(eTable);//crlf////tab////tab////crlf////tab////tab////call the listener function if one is defined//crlf////tab////tab//var s=\\quot\\tableRefreshed\\quot\\+sTableID;//crlf////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) eval(s+\\quot\\('\\quot\\+sTableID+\\quot\\')\\quot\\);//crlf////crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////hide dialog//crlf////tab//var sDialogID=eTable.getAttribute(\\quot\\EditDialogID\\quot\\);//crlf////tab//if(sDialogID) setVisible(sDialogID\\comma\\false);//crlf////crlf////tab////remove existing chart if there is one.  This is necessary because the chart is moved from the original div and//crlf////tab////appended to the body when it is displayed.  If it is not removed\\comma\\ there will be two charts with the same ID //crlf////tab////after the table is refreshed//crlf////tab//var eChart=document.getElementById(\\quot\\chart\\quot\\+sTableID);//crlf////tab//if(eChart) eChart.parentNode.removeChild(eChart);//crlf////crlf////tab//var eGoogleChartData=document.getElementById(\\quot\\googlechartdata\\quot\\+sTableID);//crlf////tab//if(eGoogleChartData) eGoogleChartData.parentNode.removeChild(eGoogleChartData);//crlf////crlf////tab//var eGoogleChartOutputWrapper=document.getElementById(\\quot\\googlechartoutputwrapper\\quot\\+sTableID);//crlf////tab//if(eGoogleChartOutputWrapper) eGoogleChartOutputWrapper.parentNode.removeChild(eGoogleChartOutputWrapper);//crlf////crlf////tab//var eChartDiv=document.getElementById(sTableID+\\quot\\Chart\\quot\\);//crlf////tab//if(eChartDiv) setVisible(eChartDiv\\comma\\false);//crlf////crlf////tab////if sDirection and ADisplayID are not defined\\comma\\ assume it's from an external filter.  This is used below to get the filter options//crlf////tab////from the current display rather than loading the original display options\\comma\\ as if bPreserveSettings had been set to true//crlf////tab//var bUpdateFromExternalFilter=(!sDirection) //amp////amp// (!ADisplayID);//crlf////tab////crlf////tab////Get default values for direction and display ID if not specified.  This allows an external filter to refresh the//crlf////tab////table by calling refreshTable(TableID)//crlf////tab//if(!sDirection) sDirection=\\quot\\refresh\\quot\\;//crlf////tab//if(!ADisplayID) {//crlf////tab////tab//var e=document.getElementById(\\quot\\SelectDisplay1\\quot\\+sTableID);//crlf////tab////tab//ADisplayID=(e) ? e.value : \\quot\\\\quot\\;//crlf////tab//};//crlf////tab////crlf////tab////alert(\\quot\\refreshTable TableID=\\quot\\+sTableID+\\quot\\ Direction=\\quot\\+sDirection+\\quot\\ DisplayID=\\quot\\+ADisplayID);//crlf////crlf////tab////appendToLog(\\quot\\refreshTable \\quot\\+sTableID);//crlf////tab//if(sTableID.length==0) {//crlf////tab////tab//alert(\\quot\\No TableID in refreshTable\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////abort if table is not found//crlf////tab//if(!eTable) {//crlf////tab////tab//alert(\\quot\\Cannot locate table with ID=\\quot\\+sTableID);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab////abort if table is currently being refreshed//crlf///*//tab////crlf////tab//if(eTable.getAttribute(\\quot\\Loading\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////alert(\\quot\\Already loading.  Table ID: \\quot\\+sTableID);//crlf////tab////tab//var sFunc=\\quot\\\\quot\\;//crlf////tab////tab//if(bPreserveSettings!=undefined) {//crlf////tab////tab////tab//sFunc=\\quot\\refreshTable('\\quot\\+sTableID+\\quot\\'\\comma\\'\\quot\\+sDirection+\\quot\\'\\comma\\'\\quot\\+ADisplayID+\\quot\\'\\comma\\\\quot\\+bPreserveSettings+\\quot\\)\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else if(ADisplayID!=undefined) {//crlf////tab////tab////tab//sFunc=\\quot\\refreshTable('\\quot\\+sTableID+\\quot\\'\\comma\\'\\quot\\+sDirection+\\quot\\'\\comma\\'\\quot\\+ADisplayID+\\quot\\')\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else if(sDirection!=undefined) {//crlf////tab////tab////tab//sFunc=\\quot\\refreshTable('\\quot\\+sTableID+\\quot\\'\\comma\\'\\quot\\+sDirection+\\quot\\')\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//sFunc=\\quot\\refreshTable('\\quot\\+sTableID+\\quot\\')\\quot\\;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//appendToLog(\\quot\\already loading.  sFunc=\\quot\\+sFunc);//crlf////tab////tab//setTimeout(sFunc\\comma\\1000);//crlf////tab////tab//return;//crlf////tab//};//crlf//*///tab////crlf////crlf////tab////apply overlay//crlf////tab//applyOverlay(eDiv);//crlf////tab////applyOverlay(eTable);//crlf////tab////crlf////tab////show progress bar//crlf////tab////don't show progress bar if one has already been added to the table.  This is a quick fix//crlf////tab////for invoice details which appear to refresh the table twice when the invoice is opened//crlf////tab//if(eTable.getAttribute(\\quot\\Loading\\quot\\)!=\\quot\\true\\quot\\) { //crlf////tab////tab//var divProgressContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//divProgressContainer.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\table_refreshing\\quot\\);//crlf////tab////tab//var eProgress=document.createElement(\\quot\\Progress\\quot\\);//crlf////tab////tab//eProgress.style.width=\\quot\\250px\\quot\\;//crlf////tab////tab//divProgressContainer.appendChild(eProgress);//crlf////tab////tab//eDiv.insertBefore(divProgressContainer\\comma\\eDiv.childNodes[0]); //crlf////tab// };//crlf////tab// //crlf////tab//enableExternalFilters(sTableID\\comma\\false);//crlf////tab//enableExternalParams(sTableID\\comma\\false);//crlf////tab////crlf////tab////disable inputs in table cells//crlf////tab//eTable.setAttribute(\\quot\\Loading\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab//for(var row=1;row<eTable.rows.length;row++) {//crlf////tab////tab//var eRow=eTable.rows[row];//crlf////tab////tab//for(var col=0;col<eRow.cells.length;col++) {//crlf////tab////tab////tab//var eCell=eRow.cells[col];//crlf////tab////tab////tab////eCell.style.background=\\quot\\//pound//eeeeee\\quot\\;//crlf////tab////tab////tab//for(var child=0;child<eCell.childNodes.length;child++) {//crlf////tab////tab////tab////tab//var e=eCell.childNodes[child];//crlf////tab////tab////tab////tab//if(e.nodeName.equalsIgnoreCase(\\quot\\input\\quot\\)) {//crlf////tab////tab////tab////tab////tab//e.disabled=true;//crlf////tab////tab////tab////tab//};//tab////crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////set starting record//crlf////tab//var iStartRecord=0;//crlf////tab//if(sDirection) {//crlf////tab////tab//var iMaxRecords=parseInt(eTable.getAttribute(\\quot\\aspectmaxrecords\\quot\\));//crlf////tab////tab//var iStartRecord=parseInt(eTable.getAttribute(\\quot\\aspectstartrecord\\quot\\));//crlf////tab////tab//if(sDirection.equalsIgnoreCase(\\quot\\first\\quot\\)) {//crlf////tab////tab////tab//iStartRecord=0;//crlf////tab////tab//}//crlf////tab////tab//else if(sDirection.equalsIgnoreCase(\\quot\\prev\\quot\\)) {//crlf////tab////tab////tab//iStartRecord=iStartRecord -=iMaxRecords;//crlf////tab////tab////tab//if(iStartRecord<0) iStartRecord=0;//crlf////tab////tab//}//crlf////tab////tab//else if(sDirection.equalsIgnoreCase(\\quot\\next\\quot\\)) {//crlf////tab////tab////tab//iStartRecord +=iMaxRecords;//crlf////tab////tab//}//crlf////tab////tab//else if(sDirection.equalsIgnoreCase(\\quot\\last\\quot\\)) {//crlf////tab////tab////tab//iStartRecord=\\quot\\Last\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else if(sDirection.equalsIgnoreCase(\\quot\\refresh\\quot\\)) {//crlf////tab////tab////tab////start record remains the same//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////construct a driver include tag to be processed by the server//crlf////tab//var sHashID=eTable.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab//var sDocumentID=\\quot\\\\quot\\;//crlf////tab//var sWidget=\\quot\\\\quot\\;//crlf////crlf////tab////The DriverID is recorded in the table as well as a DriverStructID.  The DriverStructID is the driver that was actually used in creating the table.//crlf////tab////It is normally the same as the Driver ID.  However\\comma\\ it can be different if the driver is opened using a script driver.  The include tag used to create the table will //crlf////tab////contain the original driver ID but TCacheDriver routine needs to know the structure used by the final driver so it can transfer and read/write data.//crlf////tab//var sDriverID=\\quot\\\\quot\\;//crlf////tab//var sDriverStructID=\\quot\\\\quot\\;//crlf////crlf////tab////add the attributes for the table to an array.  The array will be sorted to avoid creating duplicate TCacheObj entries for the same display//crlf////tab//var arParams=new Array();//crlf////tab////crlf////tab////add a display ID if one was passed to this function.  This means a display was selected from above//crlf////tab////the table or Ok was pressed on the display dialog//crlf////tab//if(ADisplayID.length>0) arParams[arParams.length]=\\quot\\DisplayID:\x22\\quot\\+ADisplayID+\\quot\\\x22;\\quot\\;//crlf////crlf////tab//var sState=\\quot\\\\quot\\;//crlf////tab////crlf////tab//var bSystemDriver=false;//crlf////tab//var bKeepDriver=false;//crlf////tab//var sParamsActive=\\quot\\\\quot\\;//crlf////tab//for (var i=0;i<eTable.attributes.length;i++) {//crlf////tab////tab//var sName=eTable.attributes.item(i).nodeName;//crlf////tab////tab//if(sName.startsWith(\\quot\\aspect\\quot\\)) {//crlf////tab////tab////tab//sName=sName.substring(6);//crlf////tab////tab////tab//if(sName.equalsIgnoreCase(\\quot\\FieldPattern\\quot\\)) {//crlf////tab////tab////tab////tab////ignore //crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\FilterActive\\quot\\)) {//crlf////tab////tab////tab////tab////ignore //crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\allfieldid\\quot\\)) {//crlf////tab////tab////tab////tab////ignore //crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\allfieldpattern\\quot\\)) {//crlf////tab////tab////tab////tab////ignore //crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\allfieldtype\\quot\\)) {//crlf////tab////tab////tab////tab////ignore //crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\displayoptionscrc\\quot\\)) {//crlf////tab////tab////tab////tab////ignore //crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ID\\quot\\)) {//crlf////tab////tab////tab////tab////Passing the ID causes another TCacheObj to be created but needs to be done because//crlf////tab////tab////tab////tab////the ID is part of the driver include tag.//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\DisplayID\\quot\\)) {//crlf////tab////tab////tab////tab//if(ADisplayID.length==0) arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\Driver\\quot\\)) {//crlf////tab////tab////tab////tab//sDriverID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\DriverStructID\\quot\\)) {//crlf////tab////tab////tab////tab//sDriverStructID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\SystemDriver\\quot\\)) {//crlf////tab////tab////tab////tab//bSystemDriver=boolVal(eTable.attributes.item(i).nodeValue);//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\KeepDriver\\quot\\)) {//crlf////tab////tab////tab////tab//bKeepDriver=boolVal(eTable.attributes.item(i).nodeValue);//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if (sName.equalsIgnoreCase(\\quot\\StartRecord\\quot\\)) {//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+iStartRecord+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\DocumentID\\quot\\)) {//crlf////tab////tab////tab////tab//sDocumentID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\Widget\\quot\\)) {//crlf////tab////tab////tab////tab//sWidget=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ContainerItemID\\quot\\)) {//crlf////tab////tab////tab////tab//sContainerItemID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab////add the container ID to the include tag to maintain compatibility with the original//crlf////tab////tab////tab////tab////Widget Container //crlf////crlf////tab////tab////tab////tab////11-29-15: removed this because it //crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\State\\quot\\)) {//crlf////tab////tab////tab////tab//sState=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x27\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\27\\quot\\);//crlf////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x23\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\23\\quot\\);//crlf////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x28\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\28\\quot\\);//crlf////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x29\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\29\\quot\\);//crlf////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x2F\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\2F\\quot\\);//crlf////tab////tab////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\x5C\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\5C\\quot\\);//crlf////tab////tab////tab////tab////arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+sState+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ParamsActive\\quot\\)) {//crlf////tab////tab////tab////tab//sParamsActive=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ExternalParams\\quot\\)) {//crlf////tab////tab////tab////tab////include the original externalparams value//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////add an XExternalParamXXX argument for each external parameter//crlf////tab////tab////tab////tab//if(eTable.attributes.item(i).nodeValue!=null) {//crlf////tab////tab////tab////tab////tab//if(eTable.attributes.item(i).nodeValue.length>0) {//crlf////tab////tab////tab////tab////tab////tab//var arExternalParam=getSubStringArray(eTable.attributes.item(i).nodeValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//if(arExternalParam!=null) {//crlf////tab////tab////tab////tab////tab////tab////tab//for (var j=0;j<arExternalParam.length;j++) {//crlf////console.log(\\quot\\getting external param: \\quot\\+arExternalParam[j]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var eExternalParam=document.getElementById(arExternalParam[j]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(eExternalParam) {//crlf////console.log(\\quot\\found param\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sExternalParam=eExternalParam.getAttribute(\\quot\\param\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(!sExternalParam) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//console.log(\\quot\\ERROR: Param attribute not found for external param: \\quot\\+arExternalParam[j]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sExternalParamValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eExternalParam.nodeName==\\quot\\DATALIST\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var einput=document.getElementById(arExternalParam[j]+\\quot\\_input_submit\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(einput) sExternalParamValue=einput.value;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//else if(eExternalParam.type==\\quot\\select-multiple\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//for(var k=0;k<eExternalParam.options.length;k++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eExternalParam.options[k].selected) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sValue.length>0) sValue+=\\quot\\\\comma\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//sValue+=eExternalParam.options[k].value;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//sExternalParamValue=sValue;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//(eExternalParam.type==\\quot\\checkbox\\quot\\) ? sExternalParamValue=(eExternalParam.checked) : sExternalParamValue=eExternalParam.value;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arParams[arParams.length]=\\quot\\XExternalParam\\quot\\+arExternalParam[j]+\\quot\\: \x22\\quot\\+sExternalParam+\\quot\\//power//\\quot\\+sExternalParamValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////console.log(\\quot\\Adding external param: \\quot\\+arParams[arParams.length-1]\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//console.log(\\quot\\ERROR: Cannot locate external driver param with ID=\\quot\\+arExternalParam[j]+\\quot\\ in refreshTable()\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+replaceAllSubstrings(eTable.attributes.item(i).nodeValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\)+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////Use the actual driver ID if one was supplied in DriverStructID.  This is to handle drivers opened using a script in which case the driver ID returned by the script//crlf////tab////may be different than the original driver ID.  However\\comma\\ use the same ID if it's a system driver because the driver ID in the include tag and the actual driver ID//crlf////tab////will always be different.//crlf////tab////crlf////tab////The KeepDriver argument can also be used to cause the original driver to be used instead of the one in DriverStructID.//crlf////tab////An example of this is in the POS Viewer which uses Aspect_BackOffice_POSViewer as the driver.  Any number of other drivers might actually//crlf////tab////be used to create the table depending on the pos and data type.  The KeepDriver argument is used to make sure that Aspect_BackOffice_POSViewer//crlf////tab////is used as the driver when the table is refreshed.  This became an issue with the Micros E7 interface when temporary system drivers were//crlf////tab////returned by the call to openDriver in the pos interface.  These system drivers are no longer available when the table is refreshed and//crlf////tab////a call to Aspect_BackOffice_POSViewer is required.//crlf////tab//((sDriverStructID.length>0) //amp////amp// (bSystemDriver==false) //amp////amp// (bKeepDriver==false) //amp////amp// (sDriverStructID.equalsIgnoreCase(\\quot\\ConsDriverVert\\quot\\)==false) //amp////amp// (sDriverStructID.equalsIgnoreCase(\\quot\\ConsDriverHorz\\quot\\)==false)) ? arParams[arParams.length]=\\quot\\Driver: \x22\\quot\\+sDriverStructID+\\quot\\\x22;\\quot\\ : arParams[arParams.length]=\\quot\\Driver: \x22\\quot\\+sDriverID+\\quot\\\x22;\\quot\\;//crlf////crlf////tab////add current display settings//crlf////console.log(\\quot\\bPreserveSettings=\\quot\\+bPreserveSettings+\\quot\\ bUpdateFromExternalFilter=\\quot\\+bUpdateFromExternalFilter);//crlf////tab//if((bPreserveSettings) ~~pipe~~~~pipe~~ (bUpdateFromExternalFilter)) {//crlf////tab////tab//var sFilterOptions=getDisplayFormValues(sTableID);//crlf////tab////tab//if(sFilterOptions.length>0) {//crlf////tab////tab////tab//var arFilterOptions=getSubStringArray(sFilterOptions\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\false);//crlf////tab////tab////tab//for(var i=0;i<arFilterOptions.length;i++) {//crlf////tab////tab////tab////tab//var n=arFilterOptions[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab//var sName=arFilterOptions[i].substring(0\\comma\\n);//crlf////tab////tab////tab////tab//if(sName.toUpperCase().startsWith(\\quot\\FIELD_\\quot\\)) sName=sName.substring(6);//crlf////tab////tab////tab////tab//var sValue=arFilterOptions[i].substring(n+1);//crlf////tab////tab////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\);//crlf////tab////tab////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\//a\\quot\\+\\quot\\mp//\\quot\\);//crlf////tab////tab////tab////tab//arParams[arParams.length]=\\quot\\XDisplay\\quot\\+sName+\\quot\\: \x22\\quot\\+sValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab////arParams[arParams.length]=\\quot\\XDisplay\\quot\\+sName+\\quot\\: \x22\\quot\\+replaceAllSubstrings(sValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\)+\\quot\\\x22;\\quot\\;//crlf////console.log(\\quot\\Add param1: \\quot\\+arParams[arParams.length-1]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////get external filters - These need to be included when a table is refreshed by pressing the refresh button //crlf////tab////tab//var sExternalFilters=getExternalFilters(sTableID);//crlf////tab////tab//if(sExternalFilters.length>0) {//crlf////tab////tab////tab//var arExternalFilters=getSubStringArray(sExternalFilters\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\false);//crlf////tab////tab////tab//for(var i=0;i<arExternalFilters.length;i++) {//crlf////tab////tab////tab////tab//var n=arExternalFilters[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab//var sName=arExternalFilters[i].substring(0\\comma\\n);//crlf////tab////tab////tab////tab//var sValue=arExternalFilters[i].substring(n+1);//crlf////tab////tab////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\);//crlf////tab////tab////tab////tab//sValue=replaceAllSubstrings(sValue\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\//a\\quot\\+\\quot\\mp//\\quot\\);//crlf////tab////tab////tab////tab//arParams[arParams.length]=\\quot\\XDisplay\\quot\\+sName+\\quot\\: \x22\\quot\\+sValue+\\quot\\\x22;\\quot\\;//crlf//////tab////tab////tab////tab//arParams[arParams.length]=\\quot\\XDisplay\\quot\\+sName+\\quot\\: \x22\\quot\\+replaceAllSubstrings(sValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\)+\\quot\\\x22;\\quot\\;//crlf////console.log(\\quot\\Add param2: \\quot\\+arParams[arParams.length-1]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////add state tag//crlf////appendToLog(\\quot\\State=\\quot\\+sState);//tab////crlf////tab////06-26-2015 - This was modified to set driver params before the state expression is evaluated.    This was necessary when dependent drivers//crlf////tab////were introduced because the state tag of a dependent driver will often rely on values passed in the driver params like dates\\comma\\ store ID's and such.//crlf////tab////The state expression now looks like://crlf////tab//////tab//setConstant(Param1\\comma\\Value1)+setConstant(Param2\\comma\\Value2)+setConstant(Paramn\\comma\\Valuen)+State Expression//crlf////tab////crlf////tab//var s=\\quot\\\\quot\\;//crlf////tab//if(sState.length>0) {//crlf////tab////tab//s+=\\quot\\<\\quot\\+\\quot\\state\\quot\\+\\quot\\>\\quot\\;//crlf////tab////tab//var sExpression=\\quot\\\\quot\\;//crlf////tab////tab//if(sParamsActive.length>0) {//crlf////tab////tab////tab//var a=getSubStringArray(sParamsActive\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\false);//crlf////tab////tab////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab////tab////tab//var n=a[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab//if(n>=0) {//crlf////tab////tab////tab////tab////tab//var sName=a[i].substring(0\\comma\\n);//crlf////tab////tab////tab////tab////tab//var sValue=a[i].substring(n+1);//crlf////tab////tab////tab////tab////tab//if(\\quot\\KEYEXPRESSION~~pipe~~CACHETTL~~pipe~~METADATA\\quot\\.indexOf(sName.toUpperCase())<0) {//crlf////tab////tab////tab////tab////tab////tab//if(sExpression.length>0) sExpression +=\\quot\\+\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//sExpression +=\\quot\\setConstant(\x22//pound//\\quot\\+sName+\\quot\\\x22\\comma\\\x22\\quot\\+sValue+\\quot\\\x22)\\quot\\;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//if(sExpression.length>0) sExpression +=\\quot\\+\\quot\\;//crlf////tab////tab//sState=replaceAllSubstrings(sState\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\2B\\quot\\\\comma\\\\quot\\+\\quot\\);//crlf////tab////tab//sExpression +=sState;//crlf////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x27\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\27\\quot\\);//crlf////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x23\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\23\\quot\\);//crlf////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x28\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\28\\quot\\);//crlf////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x29\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\29\\quot\\);//crlf////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x2F\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\2F\\quot\\);//crlf////tab////tab//sExpression=replaceAllSubstrings(sExpression\\comma\\\\quot\\\x5C\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\5C\\quot\\);//crlf////tab////tab////crlf////tab////tab////03-09-17 - Modified this to include values for external filters and driver params.//crlf////tab////tab////This was done to address a problem with tables included in dialogs.  If an external param is used to //crlf////tab////tab////filter the dialog (e.g. filter invoice details to an invoice ID) the external param will not be correct//crlf////tab////tab////when moving from one dialog to another.  The invoice ID associated with the previous dialog would//crlf////tab////tab////still be included in the active driver params.//crlf////tab////tab////crlf////tab////tab////This state element is of little value for tables included in a dialog that use an external driver param.//crlf////tab////tab////The active driver params from the existing table will be included in the state when moving to a new dialog//crlf////tab////tab////with a new table.  For example\\comma\\ opening the dialog for record B after the dialog for record A has been opened//crlf////tab////tab////will include the active driver params from dialog A in the state expression for dialog B.  This doesn't hurt//crlf////tab////tab////anything since the current external params are also included below.  However\\comma\\ the cache will only have an //crlf////tab////tab////effect when dialog B is opened after dialog A.  Opening dialog B after dialog C will use a different state //crlf////tab////tab////expression.//crlf////tab////tab////crlf////tab////tab////In summary\\comma\\ adding the external driver params and filters serves the purpose of PREVENTING an invalid cache//crlf////tab////tab////operation.  The state element is useful for tables in general but it is less useful for tables included in //crlf////tab////tab////dialogs.  Prehaps this can be improved to make the state expression work better in dialogs.//crlf////tab////tab////crlf////tab////tab//s +=\\quot\\<\\quot\\+\\quot\\include type:expression; expression:\\quot\\+sExpression+\\quot\\>\r\n\\quot\\;//crlf////tab////tab//var sExternalFilters=getExternalFilters(sTableID);//crlf////tab////tab//sExternalFilters=replaceAllSubstrings(sExternalFilters\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\//a\\quot\\+\\quot\\mp//\\quot\\);//crlf////tab////tab//s +=\\quot\\Filters: \\quot\\+sExternalFilters+\\quot\\\r\n\\quot\\;//crlf////tab////tab//s +=\\quot\\DriverParams: \\quot\\+getExternalDriverParams(sTableID)+\\quot\\\r\n\\quot\\;//crlf////tab////tab//s+=\\quot\\<\\quot\\+\\quot\\/state\\quot\\+\\quot\\>\\quot\\;//crlf////tab////tab////console.log(\\quot\\state=\\quot\\+s);//crlf////tab//};//crlf////crlf////tab//arParams.sort();//crlf////tab//s+=\\quot\\<\\quot\\+\\quot\\include \\quot\\;//crlf////tab//for(var i=0;i<arParams.length;i++) {//crlf////tab////tab//s +=\\quot\\ \\quot\\+arParams[i]+\\quot\\\r\n\\quot\\;//crlf////tab//};//crlf////tab//s+=\\quot\\>\\quot\\;//crlf////crlf////tab////appendToLog(\\quot\\Submitting include tag: \\quot\\+s\\comma\\true\\comma\\true);//crlf////tab////for (var i=0;i<arParams.length;i++) appendToLog(\\quot\\Param[\\quot\\+i+\\quot\\]=\\quot\\+arParams[i]);//crlf////tab////crlf////tab////showTableMessage(sTableID\\comma\\\\quot\\Loading...\\quot\\\\comma\\true);//crlf//console.log(\\quot\\refreshTable getServer=\\quot\\+getServer());//crlf////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=processContainerItem//amp//Content=\\quot\\+s;//crlf////tab//sUrl=sUrl + \\quot\\//amp//DocumentID=\\quot\\+sDocumentID+\\quot\\//amp//Widget=\\quot\\+sWidget+\\quot\\//amp//ContainerItemID=\\quot\\+sContainerItemID;//crlf////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+sHashID;//crlf////tab////crlf////tab////add params passed to the page when the driver was created.  These are recorded in a div when the table is created//crlf////tab//var ePageArgs=document.getElementById(\\quot\\div\\quot\\+sTableID+\\quot\\pageargs\\quot\\);//crlf////tab//if(ePageArgs) {//crlf////tab////tab//var sOmit=new Array(\\quot\\USER-AGENT\\quot\\\\comma\\\\quot\\NETWORK\\quot\\\\comma\\\\quot\\ID\\quot\\\\comma\\\\quot\\DOCUMENTID\\quot\\\\comma\\\\quot\\WIDGET\\quot\\\\comma\\\\quot\\CONTAINERITEMID\\quot\\\\comma\\\\quot\\SOURCE\\quot\\);//crlf////tab////tab////appendToLog(\\quot\\innerhtml=\\quot\\+ePageArgs.innerHTML);//crlf////tab////tab//var arPageArgs=getSubStringArray(ePageArgs.innerHTML\\comma\\\\quot\\~\\quot\\\\comma\\false);//crlf////tab////tab//for(var i=0;i<arPageArgs.length;i++) {//crlf////tab////tab////tab//var n=arPageArgs[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab//var s=arPageArgs[i].substring(0\\comma\\n);//crlf////tab////tab////tab////appendToLog(\\quot\\s=\\quot\\+s);//crlf////tab////tab////tab//if(sOmit.indexOf(s)<0) {//crlf////tab////tab////tab////tab//sUrl +=\\quot\\//amp//\\quot\\+arPageArgs[i];//crlf////tab////tab////tab////tab////appendToLog(\\quot\\Added pagearg: \\quot\\+arPageArgs[i]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////sUrl=replaceAllSubstrings(sUrl\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\\\percent\\\\quot\\+\\quot\\22\\quot\\);//crlf////tab//var sDebug=replaceAllSubstrings(replaceAllSubstrings(sUrl\\comma\\\\quot\\<\\quot\\\\comma\\\\quot\\[\\quot\\)\\comma\\\\quot\\>\\quot\\\\comma\\\\quot\\]\\quot\\);//crlf//  //console.log(\\quot\\refreshDisplay sUrl=\\quot\\+sDebug\\comma\\false\\comma\\true);//crlf////tab////console.log(\\quot\\getServer=[\\quot\\+getServer()+\\quot\\]\\quot\\);//crlf////tab////console.log(\\quot\\sUrl=\\quot\\+sUrl);//crlf////tab////return;//crlf////crlf////tab//var sFunc=\\quot\\refreshTable(\x22\\quot\\+sTableID+\\quot\\\x22\\comma\\\x22\x22\\comma\\\x22\\quot\\+ADisplayID+\\quot\\\x22\\comma\\\\quot\\+bPreserveSettings+\\quot\\\\comma\\true)\\quot\\;//crlf////tab//asynchInclude(eDiv\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf//function exportTable(sTableID\\comma\\ADisplayID\\comma\\bPreserveSettings\\comma\\sOutput)//crlf//{//crlf////tab//if(sOutput) {//crlf////tab////tab//document.getElementById(sTableID).setAttribute(\\quot\\Exporting\\quot\\\\comma\\\\quot\\false\\quot\\);//crlf////tab////tab//showTableMessage(sTableID\\comma\\\\quot\\\\quot\\\\comma\\false);//crlf////tab////tab//if(true) {//crlf////tab////tab////tab//if (navigator.appName !='Microsoft Internet Explorer'){//crlf////tab////tab////tab////tab//window.open('data:text/csv;charset=utf-8\\comma\\' + escape(sOutput));//crlf////tab////tab////tab//}  else{//crlf////tab////tab////tab////tab//var popup=window.open(''\\comma\\'csv'\\comma\\'');//crlf////tab////tab////tab////tab//popup.document.write(sOutput);//crlf////tab////tab////tab//}//crlf////tab////tab//};//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var sDirection=\\quot\\first\\quot\\;//crlf////tab////crlf////tab//if(!ADisplayID) {//crlf////tab////tab//var e=document.getElementById(\\quot\\SelectDisplay1\\quot\\+sTableID);//crlf////tab////tab//ADisplayID=(e) ? e.value : \\quot\\\\quot\\;//crlf////tab//};//crlf////tab////crlf////tab//appendToLog(\\quot\\exportTable \\quot\\+sTableID);//crlf////tab//if(sTableID.length==0) {//crlf////tab////tab//alert(\\quot\\No TableID in exportTable\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var eDiv=document.getElementById(\\quot\\div\\quot\\+sTableID);//crlf////tab//var eTable=document.getElementById(sTableID);//crlf////crlf////tab////abort if surrounding div is not found//crlf////tab//if(!eDiv) {//crlf////tab////tab//alert(\\quot\\Cannot locate table div with ID=div\\quot\\+sTableID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////abort if table is not found//crlf////tab//if(!eTable) {//crlf////tab////tab//alert(\\quot\\Cannot locate table with ID=\\quot\\+sTableID);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab////abort if table is currently being exported//crlf////tab//if(eTable.getAttribute(\\quot\\Exporting\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab//alert(\\quot\\Already exporting.  Table ID: \\quot\\+sTableID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//eTable.setAttribute(\\quot\\Exporting\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////crlf////tab////set starting record//crlf////tab//var iStartRecord=0;//crlf////crlf////tab////construct a driver include tag to be processed by the server//crlf////tab//var sHashID=eTable.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab//var sDocumentID=\\quot\\\\quot\\;//crlf////tab//var sWidget=\\quot\\\\quot\\;//crlf////crlf////tab////The DriverID is recorded in the table as well as a DriverStructID.  The DriverStructID is the driver that was actually used in creating the table.//crlf////tab////It is normally the same as the Driver ID.  However\\comma\\ it can be different if the driver is opened using a script driver.  The include tag used to create the table will //crlf////tab////contain the original driver ID but TCacheDriver routine needs to know the structure used by the final driver so it can transfer and read/write data.//crlf////tab//var sDriverID=\\quot\\\\quot\\;//crlf////tab//var sDriverStructID=\\quot\\\\quot\\;//crlf////crlf////tab////add the attributes for the table to an array.  The array will be sorted to avoid creating duplicate TCacheObj entries for the same display//crlf////tab//var arParams=new Array();//crlf////tab////crlf////tab////add a display ID if one was passed to this function.  This means a display was selected from above//crlf////tab////the table or Ok was pressed on the display dialog//crlf////tab//if(ADisplayID.length>0) arParams[arParams.length]=\\quot\\DisplayID:\x22\\quot\\+ADisplayID+\\quot\\\x22;\\quot\\;//crlf////crlf////tab//var bSystemDriver=false;//crlf////tab//for (var i=0;i<eTable.attributes.length;i++) {//crlf////tab////tab//var sName=eTable.attributes.item(i).nodeName;//crlf////tab////tab//if(sName.startsWith(\\quot\\aspect\\quot\\)) {//crlf////tab////tab////tab//sName=sName.substring(6);//crlf////tab////tab////tab//if(sName.equalsIgnoreCase(\\quot\\FieldPattern\\quot\\)) {//crlf////tab////tab////tab////tab////ignore //crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ID\\quot\\)) {//crlf////tab////tab////tab////tab////don't pass the table ID to avoid creating unncessary TCacheObj//crlf////tab////tab////tab////tab//// - Do need to pass the ID in case a specified ID is defined.  This may be necessary to avoid a conflict with another element's ID//crlf////tab////tab////tab////tab//// since the driver ID is used when an ID is not specified and the driver ID could be the same as the ID of another html element//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\DisplayID\\quot\\)) {//crlf////tab////tab////tab////tab//if(ADisplayID.length==0) arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\Driver\\quot\\)) {//crlf////tab////tab////tab////tab//sDriverID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\DriverStructID\\quot\\)) {//crlf////tab////tab////tab////tab//sDriverStructID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\SystemDriver\\quot\\)) {//crlf////tab////tab////tab////tab//bSystemDriver=boolVal(eTable.attributes.item(i).nodeValue);//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if (sName.equalsIgnoreCase(\\quot\\StartRecord\\quot\\)) {//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+iStartRecord+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\DocumentID\\quot\\)) {//crlf////tab////tab////tab////tab//sDocumentID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\Widget\\quot\\)) {//crlf////tab////tab////tab////tab//sWidget=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ContainerItemID\\quot\\)) {//crlf////tab////tab////tab////tab//sContainerItemID=eTable.attributes.item(i).nodeValue;//crlf////tab////tab////tab////tab////add the container ID to the include tag to maintain compatibility with the original//crlf////tab////tab////tab////tab////Widget Container //crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(sName.equalsIgnoreCase(\\quot\\ExternalParams\\quot\\)) {//crlf////tab////tab////tab////tab////include the original externalparams value//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+eTable.attributes.item(i).nodeValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////add an XExternalParamXXX argument for each external parameter//crlf////tab////tab////tab////tab//if(eTable.attributes.item(i).nodeValue!=null) {//crlf////tab////tab////tab////tab////tab//if(eTable.attributes.item(i).nodeValue.length>0) {//crlf////tab////tab////tab////tab////tab////tab//var arExternalParam=getSubStringArray(eTable.attributes.item(i).nodeValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//if(arExternalParam!=null) {//crlf////tab////tab////tab////tab////tab////tab////tab//for (var j=0;j<arExternalParam.length;j++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var eExternalParam=document.getElementById(arExternalParam[j]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(eExternalParam) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sExternalParam=eExternalParam.getAttribute(\\quot\\param\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sExternalParamValue=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(eExternalParam.nodeName==\\quot\\DATALIST\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var einput=document.getElementById(arExternalParam[j]+\\quot\\_input_submit\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(einput) sExternalParamValue=einput.value;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//(eExternalParam.type==\\quot\\checkbox\\quot\\) ? sExternalParamValue=(eExternalParam.checked) : sExternalParamValue=eExternalParam.value;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arParams[arParams.length]=\\quot\\XExternalParam\\quot\\+arExternalParam[j]+\\quot\\: \x22\\quot\\+sExternalParam+\\quot\\//power//\\quot\\+sExternalParamValue+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Adding external param: \\quot\\+arParams[arParams.length-1]\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\Cannot locate external driver param with ID=\\quot\\+arExternalParam[j]+\\quot\\ in refreshTable()\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//arParams[arParams.length]=sName+\\quot\\: \x22\\quot\\+replaceAllSubstrings(eTable.attributes.item(i).nodeValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\)+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////Use the actual driver ID if one was supplied in DriverStructID.  This is to handle drivers opened using a script in which case the driver ID returned by the script//crlf////tab////may be different than the original driver ID.  However\\comma\\ use the same ID if it's a system driver because the driver ID in the include tag and the actual driver ID//crlf////tab////will always be different.//crlf////tab//((sDriverStructID.length>0) //amp////amp// (bSystemDriver==false) //amp////amp// (sDriverStructID.equalsIgnoreCase(\\quot\\ConsDriverVert\\quot\\)==false) //amp////amp// (sDriverStructID.equalsIgnoreCase(\\quot\\ConsDriverHorz\\quot\\)==false)) ? arParams[arParams.length]=\\quot\\Driver: \x22\\quot\\+sDriverStructID+\\quot\\\x22;\\quot\\ : arParams[arParams.length]=\\quot\\Driver: \x22\\quot\\+sDriverID+\\quot\\\x22;\\quot\\;//crlf////crlf////tab////add current display settings//crlf////tab//if(bPreserveSettings) {//crlf////tab////tab//var sFilterOptions=getDisplayFormValues(sTableID);//crlf////tab////tab//var arFilterOptions=getSubStringArray(sFilterOptions\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\false);//crlf////tab////tab//for(var i=0;i<arFilterOptions.length;i++) {//crlf////tab////tab////tab//var n=arFilterOptions[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab//var sName=arFilterOptions[i].substring(0\\comma\\n);//crlf////tab////tab////tab//if(sName.toUpperCase().startsWith(\\quot\\FIELD_\\quot\\)) sName=sName.substring(6);//crlf////tab////tab////tab//var sValue=arFilterOptions[i].substring(n+1);//crlf////tab////tab////tab//arParams[arParams.length]=\\quot\\XDisplay\\quot\\+sName+\\quot\\: \x22\\quot\\+replaceAllSubstrings(sValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\)+\\quot\\\x22;\\quot\\;//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////get external filters - These need to be included when a table is refreshed by pressing the refresh button //crlf////tab////tab//var sExternalFilters=getExternalFilters(sTableID);//crlf////tab////tab//if(sExternalFilters.length>0) {//crlf////tab////tab////tab//var arExternalFilters=getSubStringArray(sExternalFilters\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\false);//crlf////tab////tab////tab//for(var i=0;i<arExternalFilters.length;i++) {//crlf////tab////tab////tab////tab//var n=arExternalFilters[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab//var sName=arExternalFilters[i].substring(0\\comma\\n);//crlf////tab////tab////tab////tab//var sValue=arExternalFilters[i].substring(n+1);//crlf////tab////tab////tab////tab//arParams[arParams.length]=\\quot\\XDisplay\\quot\\+sName+\\quot\\: \x22\\quot\\+replaceAllSubstrings(sValue\\comma\\\\quot\\//pound//\\quot\\\\comma\\\\quot\\//ha\\quot\\+\\quot\\sh//\\quot\\)+\\quot\\\x22;\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////add the EXPORTTABLE argument.  This causes the export file to be generated when the include tag is processed//crlf////tab//arParams[arParams.length]=\\quot\\EXPORTTABLE: \x22true\x22;\\quot\\;//crlf////tab////crlf////tab////add the type of export (only csv is supported currently)//crlf////tab//arParams[arParams.length]=\\quot\\EXPORTFORMAT: \x22csv\x22;\\quot\\;//crlf////tab////tab////tab////tab////crlf////tab//arParams.sort();//crlf////tab//var s=\\quot\\<\\quot\\+\\quot\\include \\quot\\;//crlf////tab//for(var i=0;i<arParams.length;i++) s +=\\quot\\ \\quot\\+arParams[i];//crlf////tab//s+=\\quot\\>\\quot\\;//crlf////crlf////tab////appendToLog(\\quot\\Submitting include tag:\\quot\\\\comma\\true\\comma\\true);//crlf////tab////for (var i=0;i<arParams.length;i++) appendToLog(\\quot\\Param[\\quot\\+i+\\quot\\]=\\quot\\+arParams[i]);//crlf////tab////crlf////tab//showTableMessage(sTableID\\comma\\\\quot\\Exporting...\\quot\\\\comma\\true);//crlf////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=processContainerItemAsCsv//amp//Content=\\quot\\+s//crlf////tab//sUrl=sUrl + \\quot\\//amp//DocumentID=\\quot\\+sDocumentID+\\quot\\//amp//Widget=\\quot\\+sWidget+\\quot\\//amp//ContainerItemID=\\quot\\+sContainerItemID;//crlf////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+sHashID;//crlf////crlf////tab////console.log(\\quot\\sUrl=\\quot\\+sUrl);//crlf////tab////crlf////tab//var sFunc=\\quot\\exportTable(\x22\\quot\\+sTableID+\\quot\\\x22\\comma\\\x22\\quot\\+ADisplayID+\\quot\\\x22\\comma\\\\quot\\+bPreserveSettings+\\quot\\\\comma\\req.responseText)\\quot\\;//crlf////tab////crlf////tab//if(false) {//crlf////tab////tab//var doc=window.open(\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\\\comma\\\\quot\\toolbar=yes\\comma\\location=no\\comma\\directories=yes\\comma\\menubar=yes\\comma\\scrollbars=yes\\comma\\width=500\\comma\\ height=100\\comma\\ left=100\\comma\\ top=25\\quot\\); //crlf////tab////tab//doc.document.open(); //crlf////tab////tab//doc.document.write(\\quot\\Exporting...\\quot\\); //crlf////tab////tab//doc.document.location=sUrl;//crlf////tab////tab//doc.document.close(); //crlf////tab////tab//doc.focus(); //crlf////tab//};//crlf////crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///***********************************************************************************//crlf//Inserts a new record in a table.  Duplicates the hidden template row and requests a //crlf//new set of values from the server for the template.  Fields initialized in the new //crlf//record are submitted to the server with the associated key value to create the record.  //crlf//All fields are submitted simultaneously.  This is necessary to make sure that all //crlf//fields that might be included in the keyexpression are written at one time to avoid//crlf//creating more than one record.  More than one record would be created if each value //crlf//was sent separately and the keyexpression referenced more than one field.//crlf//***********************************************************************************///crlf//function insertTableRecord(ATableID) //crlf//{//crlf////tab//var table=document.getElementById(ATableID);//crlf////crlf////tab////abort if table is refreshing//crlf////tab//if(table.getAttribute(\\quot\\Loading\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab//appendToLog(\\quot\\Cannot insert record because table is currently loading\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////get the index of the template and add the new row//crlf////tab//var index=-1;//crlf////tab//for (var i=0;i<table.rows.length;i++) {//crlf////tab////tab//var s=table.rows[i].getAttribute(\\quot\\ID\\quot\\);//crlf////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\InsertTemplate\\quot\\+ATableID)))//crlf////tab////tab//{//crlf////tab////tab////tab//var RowTemplate=table.rows[i];//crlf////crlf////tab////tab////tab//var s=RowTemplate.getAttribute(\\quot\\IsInitialized\\quot\\);//crlf////tab////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\true\\quot\\))) {//crlf////tab////tab////tab////tab//RowTemplate.setAttribute(\\quot\\IsInitialized\\quot\\\\comma\\\\quot\\false\\quot\\);//crlf////tab////crlf////tab////tab////tab////tab////create a new row and make it visible//crlf////tab////tab////tab////tab//var RowNew=RowTemplate.cloneNode(true);//crlf////tab////tab////tab////tab//RowNew.setAttribute(\\quot\\ID\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab//RowNew.style.display=\\quot\\block\\quot\\;//crlf////tab////crlf////tab////tab////tab////tab////get the position to insert the row//crlf////tab////tab////tab////tab//var sInsertPosition=table.getAttribute(\\quot\\InsertPosition\\quot\\);//crlf////tab////tab////tab////tab//if(!sInsertPosition) sInsertPosition=\\quot\\top\\quot\\;//crlf////crlf////tab////tab////tab////tab//if(sInsertPosition.equalsIgnoreCase(\\quot\\bottom\\quot\\)) {//crlf////tab////tab////tab////tab////tab////insert the row at the bottom of the table//crlf////crlf////tab////tab////tab////tab////tab////add to the end of the table by default//crlf////tab////tab////tab////tab////tab//var iInsertAt=table.rows.length;//crlf////crlf////tab////tab////tab////tab////tab////if there are records in the table\\comma\\ add the record before any subtotals at the end //crlf////tab////tab////tab////tab////tab////of the table.  This is not the best solution\\comma\\ because there may be more than one level//crlf////tab////tab////tab////tab////tab////of subtotal.  The item may belong above a subtotal that appears earlier in the table.//crlf////tab////tab////tab////tab////tab////But since the item is not defined when it is first added\\comma\\ there's no way to know.//crlf////tab////tab////tab////tab////tab////The best approach for now is probably to control the environment (display options) //crlf////tab////tab////tab////tab////tab////when records are being added//crlf////tab////tab////tab////tab////tab//if(table.rows.length>0) {//crlf////tab////tab////tab////tab////tab////tab//var n=table.rows.length-1;//crlf////tab////tab////tab////tab////tab////tab//do {//crlf////tab////tab////tab////tab////tab////tab////tab//var sSubtotalLevel=table.rows[n].getAttribute(\\quot\\aspectsubtotallevel\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//var bIsSubtotal=((sSubtotalLevel) //amp////amp// (parseInt(sSubtotalLevel)>=0));//crlf////tab////tab////tab////tab////tab////tab////tab//var sDeleted=sSubtotalLevel=table.rows[n].getAttribute(\\quot\\deleted\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//var bIsDeleted=(sDeleted) //amp////amp// (sDeleted.equalsIgnoreCase(\\quot\\true\\quot\\));//crlf////tab////tab////tab////tab////tab////tab////tab//if((bIsSubtotal) ~~pipe~~~~pipe~~ (bIsDeleted)) iInsertAt--;//crlf////tab////tab////tab////tab////tab////tab////tab//n--;//crlf////tab////tab////tab////tab////tab////tab//} while((bIsSubtotal) ~~pipe~~~~pipe~~ (bIsDeleted));//crlf////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab//var iMinInsertAt=getFirstTableHeader(table);//crlf////tab////tab////tab////tab////tab////tab//iMinInsertAt=(iMinInsertAt<0) ? i : iMinInsertAt+1;//crlf////crlf////tab////tab////tab////tab////tab////tab//var iInsertAt=Math.max(iInsertAt\\comma\\iMinInsertAt);//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab//table.insertRow(iInsertAt);//crlf////tab////tab////tab////tab////tab//table.rows[iInsertAt].innerHTML=RowNew.innerHTML;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////insert the row after the first header//crlf////tab////tab////tab////tab////tab//var iInsertAt=getFirstTableHeader(table);//crlf////tab////tab////tab////tab////tab//iInsertAt=(iInsertAt<0) ? i : iInsertAt+1;//crlf////tab////tab////tab////tab////tab//table.insertRow(iInsertAt);//crlf////tab////tab////tab////tab////tab//table.rows[iInsertAt].innerHTML=RowNew.innerHTML;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////copy the attributes from the template//crlf////tab////tab////tab////tab//setAttr(table.rows[iInsertAt]\\comma\\\\quot\\aspectAllValues\\quot\\\\comma\\getAttr(RowNew\\comma\\\\quot\\aspectAllValues\\quot\\));//crlf////tab////tab////tab////tab//table.rows[iInsertAt].setAttribute(\\quot\\keyvalue\\quot\\\\comma\\RowNew.getAttribute(\\quot\\keyvalue\\quot\\));//crlf////tab////tab////tab////tab//table.rows[iInsertAt].setAttribute(\\quot\\aspectsubtotallevel\\quot\\\\comma\\RowNew.getAttribute(\\quot\\aspectsubtotallevel\\quot\\));//crlf////crlf////tab////tab////tab////tab////submit all values in the record//crlf////tab////tab////tab////tab//var sKeyValue=RowNew.getAttribute(\\quot\\keyvalue\\quot\\);//crlf////tab////tab////tab////tab//var sAllFieldID=table.getAttribute(\\quot\\aspectAllFieldID\\quot\\);//crlf////tab////tab////tab////tab//var sAllValue=getAttr(RowNew\\comma\\\\quot\\aspectAllValues\\quot\\);//crlf////crlf////tab////tab////tab////tab////add the virtual index field if one is defined//crlf////tab////tab////tab////tab//var sVirtualIndexField=table.getAttribute(\\quot\\AspectVirtualIndex\\quot\\);//crlf////tab////tab////tab////tab//if((sVirtualIndexField) //amp////amp// (sVirtualIndexField.length>0)) {//crlf////tab////tab////tab////tab////tab//table.rows[iInsertAt].setAttribute(\\quot\\virtualindex\\quot\\\\comma\\RowNew.getAttribute(\\quot\\virtualindex\\quot\\));//crlf////tab////tab////tab////tab////tab//sAllFieldID+=\\quot\\\\comma\\\\quot\\+sVirtualIndexField;//crlf////tab////tab////tab////tab////tab//sAllValue+=\\quot\\\\comma\\\\quot\\+table.rows[iInsertAt].getAttribute(\\quot\\virtualindex\\quot\\);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//submitTableData(ATableID\\comma\\sKeyValue\\comma\\sAllFieldID\\comma\\sAllValue\\comma\\true);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////set the background color and pending status of all cells being submitted//crlf////tab////tab////tab////tab//var arAllFieldID=getSubStringArray(sAllFieldID\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab//var arAllValue=getSubStringArray(sAllValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab//var arTableFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectfields\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\);//crlf////tab////tab////tab////tab//for (var cell=0;cell<table.rows[iInsertAt].cells.length;cell++) {//crlf////tab////tab////tab////tab////tab//var s=table.rows[iInsertAt].cells[cell].getAttribute(\\quot\\cellindex\\quot\\);//crlf////tab////tab////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab////tab////tab//var iCellIndex=parseInt(s);//crlf////tab////tab////tab////tab////tab////tab//var sFieldID=arTableFieldID[iCellIndex];//crlf////tab////tab////tab////tab////tab////tab//if(arAllFieldID.indexOf(sFieldID)>=0) {//crlf////tab////tab////tab////tab////tab////tab////tab//table.rows[iInsertAt].cells[cell].setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\new\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//var Done=false;//crlf////tab////tab////tab////tab////tab////tab////tab//for (var Child=0;(Done==false) //amp////amp// (Child<table.rows[iInsertAt].cells[cell].childNodes.length);Child++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var e=table.rows[iInsertAt].cells[cell].childNodes[Child];//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if((e.nodeName.equalsIgnoreCase(\\quot\\select\\quot\\)) ~~pipe~~~~pipe~~ (e.type=='checkbox') ~~pipe~~~~pipe~~ (e.nodeName.equalsIgnoreCase(\\quot\\input\\quot\\)) ~~pipe~~~~pipe~~ (e.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) ~~pipe~~~~pipe~~ (e.nodeName.equalsIgnoreCase(\\quot\\password\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//setPendingSubmissionStyle(e\\comma\\true\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//Done=true;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////resize dialog containing the table if there is one//crlf////tab////tab////tab////tab//adjustDialogHeight(table);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////show the edit dialog for the new record//crlf////tab////tab////tab////tab//showTableEditDialogForRow(table\\comma\\iInsertAt);//crlf////crlf////tab////tab////tab////tab////call function to initialize template with new values//crlf////tab////tab////tab////tab//initializeNewRecordTemplate(ATableID);//crlf////crlf////tab////tab////tab////tab////appendToLog(\\quot\\insertTableRecord: added new record row=\\quot\\+iInsertAt+\\quot\\ Key=\\quot\\+sKeyValue\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab//return(iInsertAt);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab////alert(\\quot\\An error occurred initializing the new record.  Try again.\\quot\\);//crlf////tab////tab////tab////tab//setTimeout(\\quot\\insertTableRecord(\\\quot\\\\quot\\+ATableID+\\quot\\\\\quot\\)\\quot\\);//crlf////tab////tab////tab////tab//return(-1);//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////call function to initialize template with new values//crlf////tab////tab////tab////[it looks like these lines would never be reached]//crlf////tab////tab////tab//initializeNewRecordTemplate(ATableID);//crlf////tab////tab////tab//return(-1);//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//alert(\\quot\\Unable to initialize new record.\\quot\\);//crlf////tab//return(-1);//crlf//};//crlf////crlf///**************************************************************************************//crlf//Gets the pattern used to format a field in the table//crlf//**************************************************************************************///crlf//function getFieldPattern(TableID\\comma\\FieldID) {//crlf////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectallfieldid\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab//var arPattern=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldPattern\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab//var n=getFieldIndex(FieldID\\comma\\arFieldID);//crlf////tab//if(n<0) return(\\quot\\\\quot\\);//crlf////tab//return(arPattern[n]);//crlf//};//crlf////crlf///**************************************************************************************//crlf//Applies a pattern to the value of a field.  //crlf//TableID//tab//- Table containing information about the field.  //crlf//e//tab////tab//- Control to be formatted.  It can be a form element or a span tag.  The name of the control must//crlf////tab////tab//  be a Field ID.  The field type and pattern are determined using metadata included in the table//crlf//sValue //tab//- An optional value to be formatted.  If a value is not specified\\comma\\ the current value of the control will//crlf////tab////tab//  be used.//crlf////crlf//AarFieldID\\comma\\AarFieldType\\comma\\AarPattern are optional arguments with the only purpose of avoiding calling the //crlf//getSubStringArray every time if many fields are to be formatted at one time by making successive calls to //crlf//this function.//crlf//**************************************************************************************///crlf//function formatField(TableID\\comma\\e\\comma\\sValue\\comma\\AarFieldID\\comma\\AarFieldType\\comma\\AarPattern)//crlf//{//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//if(!table) return;//crlf////tab////crlf////tab//var arFieldID=(AarFieldID) ? AarFieldID : getSubStringArray(table.getAttribute(\\quot\\aspectallfieldid\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab//var arFieldType=(AarFieldType) ? AarFieldType : getSubStringArray(table.getAttribute(\\quot\\aspectallfieldtype\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab//var arPattern=(AarPattern) ? AarPattern : getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldPattern\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////crlf////tab//if(arPattern==null) {//crlf////tab////tab////appendToLog(\\quot\\No patterns defined for table\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//return(sValue);//crlf////tab//};//crlf////tab////crlf////tab//var sFieldID=e.getAttribute(\\quot\\name\\quot\\);//crlf////tab//var sResult=\\quot\\\\quot\\;//crlf////tab////crlf////tab////NOTE: An empty string passed in sValue will be considered as not defined and the current value of the element will be used//crlf////tab////as the starting point.  This is a problem when called from setDialogValues() unless the field is set to the new value//crlf////tab////before calling this function//crlf////tab//if(sValue) {//crlf////tab////tab//sResult=sValue;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//sResult=((e.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) ~~pipe~~~~pipe~~ (e.nodeName.equalsIgnoreCase(\\quot\\password\\quot\\))) ? e.innerHTML : e.value;//crlf////tab////tab//if((!sResult) ~~pipe~~~~pipe~~ (sResult.equalsIgnoreCase(\\quot\\undefined\\quot\\))) sResult=\\quot\\\\quot\\;//crlf////tab//};//crlf////tab//if(sFieldID) {//crlf////tab////tab//var n=getFieldIndex(sFieldID\\comma\\arFieldID);//crlf////tab////tab//if(n>=0) {//crlf////tab////tab////tab//var iFieldType=arFieldType[n];//crlf////tab////tab////tab//var sPattern=arPattern[n];//crlf////tab////tab////tab////crlf////tab////tab////tab////if no pattern is defined\\comma\\ see if one is specified in the element//crlf////tab////tab////tab//if(e.getAttribute(\\quot\\pattern\\quot\\)) sPattern=e.getAttribute(\\quot\\pattern\\quot\\);//crlf////appendToLog(\\quot\\formatField ID=\\quot\\+sFieldID+\\quot\\ pattern=\\quot\\+sPattern+\\quot\\ FieldType=\\quot\\+iFieldType\\comma\\false\\comma\\true);//crlf////tab////tab////tab////crlf////tab////tab////tab//if(isNumberField(iFieldType)) {//crlf////tab////tab////tab////tab//if(sPattern.length==0) {//crlf////tab////tab////tab////tab////tab//if((iFieldType==8) ~~pipe~~~~pipe~~ (iFieldType==9) ~~pipe~~~~pipe~~ (iFieldType==12)) {//crlf////tab////tab////tab////tab////tab////tab//sPattern=\\quot\\999~~pipe~~999~~pipe~~999.00\\quot\\;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//sPattern=\\quot\\999~~pipe~~999~~pipe~~999\\quot\\;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//if(sResult.length==0) sResult=0;//crlf////appendToLog(\\quot\\formatNumber sResult=\\quot\\+sResult+\\quot\\ Pattern=\\quot\\+sPattern);//crlf////tab////tab////tab////tab//sResult=formatNumber(sResult\\comma\\sPattern);//crlf////appendToLog(\\quot\\Formatted result=\\quot\\+sResult);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(isTimeField(iFieldType)) {//crlf////tab////tab////tab////tab//if(sPattern.length==0) {//crlf////tab////tab////tab////tab////tab//if((iFieldType==13) ~~pipe~~~~pipe~~ (iFieldType==21)) {//crlf////tab////tab////tab////tab////tab////tab//sPattern=\\quot\\MM-dd-yyyy HH:mm:ss\\quot\\;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else if(iFieldType==10) {//crlf////tab////tab////tab////tab////tab////tab//sPattern=\\quot\\MM-dd-yyyy\\quot\\;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else if(iFieldType==18) {//crlf////tab////tab////tab////tab////tab////tab//sPattern=\\quot\\HH:mm:ss\\quot\\;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////prepare the string for parsing.  Dashes are not allowed and the //crlf////tab////tab////tab////tab////trailing milliseconds :000 must be removed//crlf////tab////tab////tab////tab////var s=replaceAllSubstrings(sResult\\comma\\\\quot\\-\\quot\\\\comma\\\\quot\\/\\quot\\);//crlf////tab////tab////tab////tab////if(s.length>19) s=s.substring(0\\comma\\19);//crlf////tab////tab////tab////tab//var dt=parseTime(sResult);//crlf////appendToLog(\\quot\\foematField dt=\\quot\\+dt+\\quot\\ Pattern=\\quot\\+sPattern\\comma\\false\\comma\\true);//crlf////alert(\\quot\\dt=\\quot\\+dt);//crlf////alert(\\quot\\formatDate=\\quot\\+formatDate(dt\\comma\\sPattern));//crlf////tab////tab////tab////tab//sResult=formatDate(dt\\comma\\sPattern);//crlf////appendToLog(\\quot\\formatField sResult=\\quot\\+sResult\\comma\\false\\comma\\true);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//return(sResult);//crlf//};//crlf////crlf///******************************************************************************************//crlf//Returns the select box in the dialog header containing the collection of key descriptions//crlf//******************************************************************************************///crlf//function getTableDialogHeaderSelectKeyControl(eDialog) { //crlf////tab//var arSelect=eDialog.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab//var Done=false;//crlf////tab//for (var i=0;(Done==false) //amp////amp// (i<arSelect.length);i++) {//crlf////tab////tab//var s=arSelect[i].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\selectKeyValue\\quot\\))) return(arSelect[i]);//crlf////tab//};//crlf//};//crlf////crlf//function initializeTableDialogHeader(TableID\\comma\\DialogID\\comma\\KeyValue)//crlf//{//crlf////tab////get the dialog//crlf////tab//var eDialog=document.getElementById(DialogID);//crlf////tab//if(!eDialog) return;//crlf////crlf////tab////determine if the dialog header should be hidden//crlf////tab//table=document.getElementById(TableID);//crlf////tab//var s=table.getAttribute(\\quot\\aspectdialogheader\\quot\\);//crlf////tab//var bShowHeader=((!s) ~~pipe~~~~pipe~~ (s.equalsIgnoreCase(\\quot\\true\\quot\\))) ? true : false;//crlf////crlf////tab////see if the header template exists//crlf////tab//var eHeader=document.getElementById(\\quot\\EditDialogHeaderTemplate\\quot\\+TableID);//crlf////tab//if(!eHeader) {//crlf////tab////tab//var e=document.getElementById(\\quot\\EditDialogHeader\\quot\\+TableID);//crlf////tab////tab//if(e) {//crlf////tab////tab////tab//var arSelect=eDialog.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab////tab////tab//if(arSelect) {//crlf////tab////tab////tab////tab//var Done=false;//crlf////tab////tab////tab////tab//for (var i=0;(Done==false) //amp////amp// (i<arSelect.length);i++) {//crlf////tab////tab////tab////tab////tab//var s=arSelect[i].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab////tab////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\selectKeyValue\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab//arSelect[i].value=KeyValue;//crlf////tab////tab////tab////tab////tab////tab//Done=true;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//setVisible(\\quot\\EditDialogHeader\\quot\\+TableID\\comma\\bShowHeader);//crlf////tab////tab//};//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////remove the copy if one exists//crlf////tab//var ePreviousHeader=document.getElementById(\\quot\\EditDialogHeader\\quot\\+TableID);//crlf////tab//if(ePreviousHeader) {//crlf////tab////tab//ePreviousHeader.parentNode.removeChild(ePreviousHeader);//crlf////tab//};//crlf////crlf////tab////copy the template to the dialog//crlf////tab//eHeader.id=\\quot\\EditDialogHeader\\quot\\+TableID;//crlf////tab//eHeader.setAttribute(\\quot\\id\\quot\\\\comma\\\\quot\\EditDialogHeader\\quot\\+TableID);//crlf////tab//eHeader.style.display=\\quot\\block\\quot\\;//crlf////tab//eHeader.parentNode.removeChild(eHeader);//crlf////tab//eDialog.insertBefore(eHeader\\comma\\eDialog.childNodes[0]);//crlf////crlf////tab//var arSelect=eDialog.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab//if(arSelect) {//crlf////tab////tab//var Done=false;//crlf////tab////tab//for (var i=0;(Done==false) //amp////amp// (i<arSelect.length);i++) {//crlf////tab////tab////tab//var s=arSelect[i].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\selectKeyValue\\quot\\))) {//crlf////tab////tab////tab////tab//arSelect[i].value=KeyValue;//crlf////tab////tab////tab////tab//Done=true;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//setVisible(\\quot\\EditDialogHeader\\quot\\+TableID\\comma\\bShowHeader);//crlf//};//crlf////crlf///***********************************************************************************************//crlf//Updates the select box in the dialog header so it reflects the records in the table.  //crlf//Called when records are inserted or deleted.  The KeyValue of the dialog is used to //crlf//set the current selection so it must be set before calling this function///crlf//***********************************************************************************************///crlf//function updateTableDialogHeader(TableID)//crlf//{//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//var eDialog=document.getElementById(table.getAttribute(\\quot\\EditDialogID\\quot\\));//crlf////tab//var eHeader=document.getElementById(\\quot\\EditDialogHeader\\quot\\+TableID);//crlf////tab////crlf////tab////make collection of all keyvalues in the table//crlf////tab//var arKeyValues=new Array();//crlf////tab//var arKeyDescription=new Array();//crlf////tab//for (var row=0;row<table.rows.length;row++) {//crlf////tab////tab//var s=table.rows[row].getAttribute(\\quot\\keyvalue\\quot\\);//crlf////tab////tab//if(s) {//crlf////tab////tab////tab//if((tableRowIsTemplate(table.rows[row])==false) //amp////amp// (tableRowIsDeleted(table.rows[row])==false)) {//crlf////tab////tab////tab////tab//arKeyValues[arKeyValues.length]=s;//crlf////tab////tab////tab////tab//arKeyDescription[arKeyDescription.length]=table.rows[row].getAttribute(\\quot\\keydescription\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////get the select box in the header.  Look for the first select box since there may be more than one//crlf////tab////if an edit dialog contains another table inside of it//crlf////tab//var eSelect=null;//crlf////tab//var arSelect=eHeader.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab//var Done=false;//crlf////tab//for (var i=0;(Done=false) //amp////amp// (i<arSelect.length);i++) {//crlf////tab////tab//var s=arSelect[i].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\selectKeyValue\\quot\\))) {//crlf////tab////tab////tab//eSelect=arSelect[i];//crlf////tab////tab////tab//Done=true;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////remove any options that no longer exist in the table and make an array of existing options//crlf////tab//var arOptionValue=new Array();//crlf////tab//var arOptionText=new Array();//crlf////tab//var iOption=0;//crlf////tab//while(iOption<eSelect.options.length) {//crlf////tab////tab//if(arKeyValues.indexOf(eSelect.options[iOption].value)<0) {//crlf////tab////tab////tab//eSelect.remove(iOption);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//arOptionValue[arOptionValue.length]=eSelect.options[iOption].value;//crlf////tab////tab////tab//arOptionText[arOptionText.length]=eSelect.options[iOption].text;//crlf////tab////tab////tab//iOption++;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////insert any elements that exist in the table but not in the select box//crlf////tab//for(var i=0;i<arKeyValues.length;i++) {//crlf////tab////tab//if(arOptionValue.indexOf(arKeyValues[i])<0) //crlf////tab////tab//{//crlf////tab////tab////tab////don't add the option if another option with the same key description exists.//crlf////tab////tab////tab////The list is initially created by the driver include which does not allow duplicates//crlf////tab////tab////tab////Adding them here would be confusing//crlf////tab////tab////tab//if(arOptionText.indexOf(arKeyDescription[i])<0) {//crlf////tab////tab////tab////tab//var eNewOption=document.createElement('option');//crlf////tab////tab////tab////tab//eNewOption.text=arKeyDescription[i];//crlf////tab////tab////tab////tab//eNewOption.value=arKeyValues[i];//crlf////tab////tab////tab////tab//if(eSelect.options.length==0) {//crlf////tab////tab////tab////tab////tab//try {//crlf////tab////tab////tab////tab////tab////tab//eSelectadd(eNewOption\\comma\\ null); // standards compliant; doesn't work in IE//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//catch(e1) {//crlf////tab////tab////tab////tab////tab////tab//eSelect.add(eNewOption); // IE only//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//var eFirstOption=eSelect.options[0];  //could use eSelect.selectedIndex//crlf////tab////tab////tab////tab////tab//try {//crlf////tab////tab////tab////tab////tab////tab//eSelect.add(eNewOption\\comma\\ eFirstOption); // standards compliant; doesn't work in IE//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//catch(ex) {//crlf////tab////tab////tab////tab////tab////tab//eSelect.add(eNewOption\\comma\\ 0); // IE only//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////set the selected option//crlf////tab//eSelect.value=eDialog.getAttribute(\\quot\\keyvalue\\quot\\);//crlf//};//crlf////crlf//function dialogRecordSelected(e)//crlf//{//crlf////tab//var eDialog=getDialogNode(e);//crlf////tab//if(eDialog==null) {//crlf////tab////tab//alert(\\quot\\Cannot locate dialog\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////get the table//crlf////tab//var sTableID=eDialog.getAttribute(\\quot\\TableID\\quot\\);//crlf////tab//var table=document.getElementById(sTableID);//crlf////tab////crlf////tab////get the value selected//crlf////tab//var sKeyValue=e.value;//crlf////crlf////tab////get the row containing the selected key value//crlf////tab//var iToDisplay=getTableRowContainingKey(table\\comma\\sKeyValue);//crlf////tab//if(iToDisplay>=0) {//crlf////tab////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldID\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab//var arValues=getSubStringArray(getAttr(table.rows[iToDisplay]\\comma\\\\quot\\aspectAllValues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab//for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i]\\comma\\false);//crlf////tab////tab//eDialog.setAttribute(\\quot\\keyvalue\\quot\\\\comma\\table.rows[iToDisplay].getAttribute(\\quot\\keyvalue\\quot\\));//crlf////tab////tab//var arRefresh=setDialogValues(sTableID\\comma\\eDialog\\comma\\arFieldID\\comma\\arValues);//crlf////crlf////tab////tab////call initialization function for dialog if one is defined//crlf////tab////tab//var sDialogID=table.getAttribute(\\quot\\editdialogid\\quot\\);//crlf////tab////tab//var s=\\quot\\initializeDialog\\quot\\+sDialogID;//crlf////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) eval(s+\\quot\\()\\quot\\);//crlf////tab////tab////crlf////tab////tab////look for initialization function in the aspectinit attribute of the div//crlf////tab////tab////This is used so a single function can be called even when the dialog ID is random//crlf////tab////tab////The ID of the dialog div is passed as an argument.  Additional arguments can be//crlf////tab////tab////made available to the function by including them in the dialog div's attributes or//crlf////tab////tab////as hidden inputs inside the dialog.//crlf////tab////tab//var s=eDialog.getAttribute(\\quot\\aspectinit\\quot\\);//crlf////tab////tab//if(s) {//crlf////tab////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) eval(s+\\quot\\('\\quot\\+sDialogID+\\quot\\')\\quot\\);//crlf////tab////tab//};//crlf////crlf////tab////tab////initialize calendar and other controls//crlf////tab////tab//initializeCustomControls();//crlf////crlf////tab////tab////refresh tables//crlf////tab////tab//if(arRefresh.length>0) {//crlf////tab////tab////tab//for(var i=0;i<arRefresh.length;i++) {//crlf////tab////tab////tab////tab////check to see if the table still exists.  This is necessary because a dialog might include a table that//crlf////tab////tab////tab////tab////is created on the fly by an initialization function when the dialog is loaded and the table may no longer exist.//crlf////tab////tab////tab////tab//if(document.getElementById(arRefresh[i])) refreshTable(arRefresh[i]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Climbs the parent tree for the given element to locate the dialog containing the element.//crlf//***********************************************************************///crlf//function getDialogNode(e) {//crlf////tab//if(e==null) {//crlf////tab////tab//appendToLog(\\quot\\Error: e is null in getDialogNode\\quot\\);//crlf////tab////tab//return(null);//crlf////tab//};//crlf////tab////crlf////tab//var eDialog=null;//crlf////tab//var node=e;//crlf////tab//while((eDialog==null) //amp////amp// (node.parentNode)) {//crlf////tab////tab//if(node.getAttribute) {//crlf////tab////tab////tab//if(node.getAttribute(\\quot\\TableID\\quot\\)) return(node);//crlf////tab////tab//};//crlf////tab////tab//node=node.parentNode;//crlf////tab//};//crlf////tab//return(null);//crlf//};//crlf////crlf///***********************************************************************//crlf//Returns the index of the row matching the given key value//crlf//***********************************************************************///crlf//function getTableRowContainingKey(table\\comma\\KeyValue)//crlf//{//crlf////tab//for (var i=0;i<table.rows.length;i++) {//crlf////tab////tab//var s=table.rows[i].getAttribute(\\quot\\keyvalue\\quot\\);//crlf////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(KeyValue))) return(i);//crlf////tab//};//crlf////tab//return(-1);//crlf//};//crlf////crlf///***********************************************************************//crlf//Returns the first row in the table containing a record detail or subtotal.   Does not include//crlf//the template used for new records or section headers//crlf//***********************************************************************///crlf//function getFirstTableRow(table\\comma\\bIncludeSubtotal\\comma\\StartIndex)//crlf//{//crlf////tab//var n=0;//crlf////tab//if(StartIndex) n=StartIndex;//crlf////tab//for (var i=n;i<table.rows.length;i++) {//crlf////tab////tab//if((tableRowIsTemplate(table.rows[i])==false) //amp////amp// (tableRowIsDeleted(table.rows[i])==false)) {//crlf////tab////tab////tab//var s=table.rows[i].getAttribute(\\quot\\AspectSubtotalLevel\\quot\\);//crlf////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab//if((parseInt(s)<0) ~~pipe~~~~pipe~~ (bIncludeSubtotal)) return(i);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(-1);//crlf//};//crlf////crlf///***********************************************************************//crlf//Returns the last row in the table containing a record detail or subtotal.   Does not include//crlf//the template used for new records or section headers//crlf//***********************************************************************///crlf//function getLastTableRow(table\\comma\\bIncludeSubtotal)//crlf//{//crlf////tab//for (var i=table.rows.length-1;i>=0;i--) {//crlf////tab////tab//if((tableRowIsTemplate(table.rows[i])==false) //amp////amp// (tableRowIsDeleted(table.rows[i])==false)) {//crlf////tab////tab////tab//var s=table.rows[i].getAttribute(\\quot\\AspectSubtotalLevel\\quot\\);//crlf////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab//if((parseInt(s)<0) ~~pipe~~~~pipe~~ (bIncludeSubtotal)) return(i);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(-1);//crlf//};//crlf////crlf///***********************************************************************//crlf//Returns the next row in the table containing a record detail or subtotal beginning with//crlf//StartIndex+1.   Does not include the template used for new records or section headers//crlf//***********************************************************************///crlf//function getNextTableRow(table\\comma\\StartIndex\\comma\\bIncludeSubtotal)//crlf//{//crlf////tab//for (var i=StartIndex+1;i<table.rows.length;i++) {//crlf////tab////tab//if((tableRowIsTemplate(table.rows[i])==false) //amp////amp// (tableRowIsDeleted(table.rows[i])==false)) {//crlf////tab////tab////tab//var s=table.rows[i].getAttribute(\\quot\\AspectSubtotalLevel\\quot\\);//crlf////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab//if((parseInt(s)<0) ~~pipe~~~~pipe~~ (bIncludeSubtotal)) return(i);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(-1);//crlf//};//crlf////crlf///***********************************************************************//crlf//Returns the previous row in the table containing a record detail or subtotal beginning with//crlf//StartIndex-1.   Does not include the template used for new records or section headers//crlf//***********************************************************************///crlf//function getPrevTableRow(table\\comma\\StartIndex\\comma\\bIncludeSubtotal)//crlf//{//crlf////tab//for (var i=StartIndex-1;i>=0;i--) {//crlf////tab////tab//if((tableRowIsTemplate(table.rows[i])==false) //amp////amp// (tableRowIsDeleted(table.rows[i])==false)) {//crlf////tab////tab////tab//var s=table.rows[i].getAttribute(\\quot\\AspectSubtotalLevel\\quot\\);//crlf////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab//if((parseInt(s)<0) ~~pipe~~~~pipe~~ (bIncludeSubtotal)) return(i);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(-1);//crlf//};//crlf////crlf//function updateDialogRecord(e\\comma\\Direction)//crlf//{//crlf////tab////get the dialog the element belongs to//crlf////tab//var eDialog=getDialogNode(e);//crlf////tab//if(eDialog==null) {//crlf////tab////tab//appendToLog(\\quot\\Error getting dialog in updateDialogRecord\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////get the table//crlf////tab//var sTableID=eDialog.getAttribute(\\quot\\TableID\\quot\\);//crlf////tab//var table=document.getElementById(sTableID);//crlf////crlf////tab////get the select box//crlf////tab//var eSelect=null;//crlf////tab//var arSelect=eDialog.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab//var Done=false;//crlf////tab//for (var i=0;(Done==false) //amp////amp// (i<arSelect.length);i++) {//crlf////tab////tab//var s=arSelect[i].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\selectKeyValue\\quot\\))) {//crlf////tab////tab////tab//eSelect=arSelect[i];//crlf////tab////tab////tab//Done=true;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////determine the row to be displayed//crlf////tab//var sNewKeyValue=\\quot\\\\quot\\;//crlf////tab//if(Direction.equalsIgnoreCase(\\quot\\first\\quot\\)) {//crlf////tab////tab//if(eSelect.options.length>0) sNewKeyValue=eSelect.options[0].value;//crlf////tab//}//crlf////tab//else if (Direction.equalsIgnoreCase(\\quot\\last\\quot\\)) {//crlf////tab////tab//if(eSelect.options.length>0) sNewKeyValue=eSelect.options[eSelect.length-1].value;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//for(var i=0;(sNewKeyValue.length==0) //amp////amp// (i<eSelect.options.length);i++) {//crlf////tab////tab////tab//if(eSelect.options[i].value.equalsIgnoreCase(eSelect.value)) {//crlf////tab////tab////tab////tab//if (Direction.equalsIgnoreCase(\\quot\\next\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(i<eSelect.options.length-1) sNewKeyValue=eSelect.options[i+1].value;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else if (Direction.equalsIgnoreCase(\\quot\\prev\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(i>0) sNewKeyValue=eSelect.options[i-1].value;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//if(sNewKeyValue.length>=0) {//crlf////tab////tab//var iNewRow=getTableRowContainingKey(table\\comma\\sNewKeyValue);//crlf////tab////tab//if(iNewRow>=0) //crlf////tab////tab//{//crlf////tab////tab////tab////update the keyvalue in the dialog attributes//crlf////tab////tab////tab//eDialog.setAttribute(\\quot\\keyvalue\\quot\\\\comma\\sNewKeyValue);//crlf////crlf////tab////tab////tab////update the select box//crlf////tab////tab////tab//eSelect.value=sNewKeyValue;//crlf////tab////tab////tab////crlf////tab////tab////tab////set the values in the dialog//crlf////tab////tab////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldID\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab//var arValues=getSubStringArray(getAttr(table.rows[iNewRow]\\comma\\\\quot\\aspectAllValues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab//for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i]\\comma\\false);//crlf////tab////tab////tab//var arRefresh=setDialogValues(sTableID\\comma\\eDialog\\comma\\arFieldID\\comma\\arValues);//crlf////crlf////tab////tab////tab////call initialization functino for dialog if one is defined//crlf////tab////tab////tab//var sDialogID=table.getAttribute(\\quot\\editdialogid\\quot\\);//crlf////tab////tab////tab//var s=\\quot\\initializeDialog\\quot\\+sDialogID;//crlf////tab////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) eval(s+\\quot\\()\\quot\\);//crlf////tab////tab////tab////crlf////tab////tab////tab////look for initialization function in the aspectinit attribute of the div//crlf////tab////tab////tab////This is used so a single function can be called even when the dialog ID is random//crlf////tab////tab////tab////The ID of the dialog div is passed as an argument.  Additional arguments can be//crlf////tab////tab////tab////made available to the function by including them in the dialog div's attributes or//crlf////tab////tab////tab////as hidden inputs inside the dialog.//crlf////tab////tab////tab//var s=eDialog.getAttribute(\\quot\\aspectinit\\quot\\);//crlf////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) eval(s+\\quot\\('\\quot\\+sDialogID+\\quot\\')\\quot\\);//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////initialize calendar and other controls//crlf////tab////tab////tab//initializeCustomControls();//crlf////crlf////tab////tab////tab////refresh tables//crlf////tab////tab////tab//if(arRefresh.length>0) {//crlf////tab////tab////tab////tab//for(var i=0;i<arRefresh.length;i++) {//crlf////tab////tab////tab////tab////tab////check to see if the table still exists.  This is necessary because a dialog might include a table that//crlf////tab////tab////tab////tab////tab////is created on the fly by an initialization function when the dialog is loaded and the table may no longer exist.//crlf////tab////tab////tab////tab////tab//if(document.getElementById(arRefresh[i])) refreshTable(arRefresh[i]);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function closeTableEditDialog(e)//crlf//{//crlf////tab//var eDialog=getDialogNode(e);//crlf////tab//if(eDialog) setVisible(eDialog\\comma\\false);//crlf//};//crlf////crlf///********************************************************************//crlf//Returns the index of the first row in the table containing headers//crlf//********************************************************************///crlf//function getFirstTableHeader(table)//crlf//{//crlf////tab////skip the first record which is table controls//crlf////tab//for (var i=1;i<table.rows.length;i++) {//crlf////tab////tab//if(table.rows[i].cells.length>0) {//crlf////tab////tab////tab//if(table.rows[i].cells[0].nodeName.equalsIgnoreCase(\\quot\\th\\quot\\)) return(i);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(-1);//crlf//};//crlf////crlf///********************************************************************//crlf//Displays a message in the dialog used to edit table records when the table contains//crlf//no records//crlf//********************************************************************///crlf//function disableTableDialog(ATableID) //crlf//{//crlf////tab////get the ID of the dialog//crlf////tab//var table=document.getElementById(ATableID);//crlf////tab//var eDialog=document.getElementById(table.getAttribute(\\quot\\EditDialogID\\quot\\));//crlf////tab////crlf////tab////abort if dialog does not exist.  This will happen if canEdit is false in the driver include.//crlf////tab//if(!eDialog) return;//crlf////tab////crlf////tab//var eHeader=document.getElementById(\\quot\\EditDialogHeader\\quot\\+ATableID);//crlf////tab//if(!eHeader) eHeader=document.getElementById(\\quot\\EditDialogHeaderTemplate\\quot\\+ATableID);//crlf////tab////crlf////tab////create a div and overlay it to hide the dialog contents//crlf////tab//var div=document.createElement(\\quot\\div\\quot\\);//crlf////tab//var sDivID=\\quot\\EditDialogDisable\\quot\\+ATableID;//crlf////tab//div.setAttribute(\\quot\\id\\quot\\\\comma\\sDivID);//crlf////tab//div.id=sDivID;//crlf////crlf////tab////size and position the div//crlf////tab//div.style.position=\\quot\\fixed\\quot\\;//crlf////tab//div.style.height=eDialog.offsetHeight;//crlf////tab//if(eHeader) div.style.height -=eHeader.offsetHeight;//crlf////tab//div.style.width=eDialog.offsetWidth;//crlf////tab//var xy=getPosition2012(eDialog\\comma\\\\quot\\fixed\\quot\\);//crlf////tab//div.style.top=(xy[1]+eHeader.offsetHeight)+\\quot\\px\\quot\\;//crlf////tab//div.style.left=xy[0]+\\quot\\px\\quot\\;//crlf////tab//div.style.zIndex=\\quot\\99\\quot\\;//crlf////tab//div.style.backgroundColor=\\quot\\white\\quot\\;//crlf////tab//div.innerHTML=\\quot\\Table is not initialized\\quot\\;//crlf////crlf////tab//eDialog.insertBefore(div\\comma\\eDialog.childNodes[0]);//crlf////tab//setVisible(div\\comma\\true);//crlf//};//crlf////crlf///********************************************************************//crlf//Initializes new tables.  Called by the widget container whenever content is loaded.//crlf//Initializes the edit dialog header and sets the dialog to the first record in the table//crlf//********************************************************************///crlf//function initializeTables2012()//crlf//{//crlf////tab////appendToLog(\\quot\\initializeTables2012: started\\quot\\);//crlf////tab//if(!bContainerLoaded) return;//crlf////crlf////tab//addScripts();//crlf////tab//addStyles();//crlf////tab//makeScrollingTable();//crlf////tab////show charts//crlf////tab//showCharts();//crlf////tab////crlf////tab////appendToLog(\\quot\\initializeTables2012 bContainerLoaded=\\quot\\+bContainerLoaded\\comma\\false\\comma\\true);//crlf////tab////create an array of ID's for all tables to be updated.  Can't just iterate through an//crlf////tab////array of tables and updating as they're found because table[n] changes to point//crlf////tab////to a new table when the dialog header is moved.  E.g. table[18] may become table[17]//crlf////tab////right in the middle of this function//crlf////tab//var arTable=document.getElementsByTagName(\\quot\\table\\quot\\);//crlf////tab//var arTableID=new Array();//crlf////tab//for (var i=0;i<arTable.length;i++) {//crlf////tab////tab////if((arTable[i].getAttribute(\\quot\\aspectAllFieldID\\quot\\)) //amp////amp// (arTable[i].getAttribute(\\quot\\id\\quot\\).toUpperCase().indexOf(\\quot\\INTERVALREFRESH\\quot\\)<0)) {//crlf////tab////tab//if((arTable[i].getAttribute(\\quot\\aspecttype\\quot\\)) //amp////amp// (arTable[i].getAttribute(\\quot\\id\\quot\\).toUpperCase().indexOf(\\quot\\INTERVALREFRESH\\quot\\)<0)) {//crlf////tab////tab////tab//var s=arTable[i].getAttribute(\\quot\\TableInitialized\\quot\\);//crlf////tab////tab////tab//if((!s) ~~pipe~~~~pipe~~ (s.equalsIgnoreCase(\\quot\\true\\quot\\)==false)) {//crlf////appendToLog(\\quot\\Initializing table \\quot\\+arTable[i].getAttribute(\\quot\\id\\quot\\));//crlf////tab////tab////tab////tab//arTableID[arTableID.length]=arTable[i].getAttribute(\\quot\\id\\quot\\);//crlf////crlf////tab////tab////tab////tab////update the span containing the time the table was generated//crlf////tab////tab////tab////tab////this only updates tables that haven't already been initialized//crlf////tab////tab////tab////tab//if(arTable[i].id) setTableUpdateTime(arTable[i]);//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////update the span containing the time the table was generated//crlf////tab////tab////tab////this is needed to update the time in tables that don't have an aspectAllFieldID//crlf////tab////tab////tab////when is not defined when the table is not editable//crlf////tab////tab////tab//if(arTable[i].id) {//crlf////tab////tab////tab////tab//if(!arTable[i].getAttribute(\\quot\\TimeInitialized\\quot\\)) {//crlf////tab////tab////tab////tab////tab//setTableUpdateTime(arTable[i]);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//if(arTableID.length==0) return;//crlf////tab////crlf////tab//for(var i=0;i<arTableID.length;i++) //crlf////tab//{//crlf////tab////tab//var table=document.getElementById(arTableID[i]);//crlf////tab////tab//var sDialogID=table.getAttribute(\\quot\\editdialogid\\quot\\);//crlf////tab////tab//var iFirstRow=getFirstTableRow(table\\comma\\false);//crlf////tab////tab//var sKeyValue=\\quot\\\\quot\\;//crlf////tab////tab//if(iFirstRow>=0) sKeyValue=table.rows[iFirstRow].getAttribute(\\quot\\keyvalue\\quot\\);//crlf////tab////tab//initializeTableDialogHeader(arTableID[i]\\comma\\sDialogID\\comma\\sKeyValue);//crlf////crlf////tab////tab////set the table ID and KeyValue in the dialog//crlf////tab////tab//if((sDialogID) //amp////amp// (sDialogID.length>0)) {//crlf////tab////tab////tab//var eDialog=document.getElementById(sDialogID);//crlf////tab////tab////tab//if(eDialog) {//crlf////tab////tab////tab////tab//eDialog.setAttribute(\\quot\\TableID\\quot\\\\comma\\arTableID[i]);//crlf////tab////tab////tab////tab//eDialog.setAttribute(\\quot\\KeyValue\\quot\\\\comma\\sKeyValue);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab////appendToLog(\\quot\\Invalid edit dialog ID in initializeTables2012().  TableID: \\quot\\+arTableID[i]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab//if(iFirstRow>=0) //crlf////tab////tab//{//crlf////tab////tab////tab////02-11-2017: Added the DialogOnly parameter to the driver include tag.  This is used to indicate that the table dialog//crlf////tab////tab////tab////is displayed by default and that the table is hidden.  If DialogOnly is true\\comma\\ the dialog will be initialized when //crlf////tab////tab////tab////the table is refreshed.  Otherwise\\comma\\ the dialog will NOT be initialized here and will only be initialized when the //crlf////tab////tab////tab////dialog is opened.  This avoids refreshing tables containing in the dialog until the dialog is opened.  This is a waste //crlf////tab////tab////tab////of time and tables included in the dialog are often not valid until the dialog is opened for a record.//crlf////tab////tab////tab//var attrDialogOnly=table.getAttribute(\\quot\\DialogOnly\\quot\\);//crlf////tab////tab////tab//if(attrDialogOnly) {//crlf////tab////tab////tab////tab//if(attrDialogOnly.equalsIgnoreCase(\\quot\\true\\quot\\)) {//crlf////tab////tab////tab////tab////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldID\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab//var arFieldType=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldType\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab//var arValues=getSubStringArray(getAttr(table.rows[iFirstRow]\\comma\\\\quot\\aspectAllValues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab//if(arValues!=null) {//crlf////tab////tab////tab////tab////tab////tab//for(var j=0;j<arValues.length;j++) arValues[j]=tokenizeTableValue(arValues[j]\\comma\\false);//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////set value of all elements in the dialog//crlf////tab////tab////tab////tab////tab////tab//if(eDialog) {//crlf////tab////tab////tab////tab////tab////tab////tab//var arRefresh=setDialogValues(arTableID[i]\\comma\\eDialog\\comma\\arFieldID\\comma\\arValues);//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////call initialization function for dialog if one is defined//crlf////tab////tab////tab////tab////tab////tab////tab//var s=\\quot\\initializeDialog\\quot\\+sDialogID;//crlf////tab////tab////tab////tab////tab////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) eval(s+\\quot\\()\\quot\\);//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////look for initialization function in the aspectinit attribute of the div//crlf////tab////tab////tab////tab////tab////tab////tab////This is used so a single function can be called even when the dialog ID is random//crlf////tab////tab////tab////tab////tab////tab////tab////The ID of the dialog div is passed as an argument.  Additional arguments can be//crlf////tab////tab////tab////tab////tab////tab////tab////made available to the function by including them in the dialog div's attributes or//crlf////tab////tab////tab////tab////tab////tab////tab////as hidden inputs inside the dialog.//crlf////tab////tab////tab////tab////tab////tab////tab//var s=eDialog.getAttribute(\\quot\\aspectinit\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(eval('typeof '+s)==\\quot\\function\\quot\\) eval(s+\\quot\\('\\quot\\+sDialogID+\\quot\\')\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//disableTableDialog(arTableID[i]);//crlf////tab////tab//};//crlf////tab////crlf////tab////tab////set the attribute indicating the table has been initialized//crlf////tab////tab//table.setAttribute(\\quot\\TableInitialized\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab//};//crlf////tab////crlf////tab////add javascript for tables.  When a table is generated\\comma\\ associated javascript (if any) is included with//crlf////tab////the table in a <script> element.  The ID of the script element is _JS[tableID].  This script element is//crlf////tab////moved to the <head> element and the underscore is removed from the ID.  If the table is loaded again\\comma\\//crlf////tab////the sceipt element is just deleted if it already exists in the head element//crlf////tab//for(var i=0;i<arTableID.length;i++) //crlf////tab//{//crlf////tab////tab//var e=document.getElementById(\\quot\\_js\\quot\\+arTableID[i]);//crlf////tab////tab//if(e) {//crlf////tab////tab////tab////a script element is included with the table.  Remove it and add it to the <head> element if it doesn't already exist//crlf////tab////tab////tab//e.parentNode.removeChild(e);//crlf////crlf////tab////tab////tab////remove the current javascript element from the head when in development mode so changes to the code are reflected during development//crlf////tab////tab////tab//if(\\quot\\{ExecMode}\\quot\\.equalsIgnoreCase(\\quot\\Development\\quot\\)) {//crlf////tab////tab////tab////tab//var eCurrent=document.getElementById(\\quot\\js\\quot\\+arTableID[i]);//crlf////tab////tab////tab////tab//if(eCurrent) eCurrent.parentNode.removeChild(eCurrent);//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if(!document.getElementById(\\quot\\js\\quot\\+arTableID[i])) {//crlf////tab////tab////tab////tab////add it to the <head> element//crlf////tab////tab////tab////tab//var eScript=document.createElement(\\quot\\script\\quot\\);//crlf////tab////tab////tab////tab//eScript.id=\\quot\\js\\quot\\+arTableID[i];//crlf////crlf////tab////tab////tab////tab////For IE\\comma\\ set the src of the script.  Another http request will be made to get the script//crlf////tab////tab////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)>=0) {//crlf////tab////tab////tab////tab////tab//var s=e.getAttribute(\\quot\\_url\\quot\\);//crlf////tab////tab////tab////tab////tab//eScript.setAttribute(\\quot\\src\\quot\\\\comma\\replaceAllSubstrings(s\\comma\\\\quot\\__Request\\quot\\+\\quot\\Server__\\quot\\\\comma\\getServer()));//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////otherwise\\comma\\ just include the script directly in the tag//crlf////tab////tab////tab////tab////tab//eScript.innerHTML=replaceAllSubstrings(e.innerHTML\\comma\\\\quot\\//amp//amp;\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//document.getElementsByTagName(\\quot\\head\\quot\\)[0].appendChild(eScript);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///******************************************************************************//crlf//Called to delete selected records//crlf//******************************************************************************///crlf//function deleteTableRecords(ATableID\\comma\\ARow) {//crlf////tab////un-check the select-all checkbox//crlf////tab//var eSelectAll=document.getElementById(\\quot\\SelectRecords\\quot\\+ATableID);//crlf////tab//if(eSelectAll) eSelectAll.checked=false;//crlf////tab////crlf////tab//var table=document.getElementById(ATableID);//crlf////crlf////tab////abort if table is refreshing//crlf////tab//if(table.getAttribute(\\quot\\Loading\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab//appendToLog(\\quot\\Cannot delete record because table is currently loading\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////close the dialog if it's open//crlf////tab//var sDialogID=table.getAttribute(\\quot\\editdialogid\\quot\\);//crlf////tab//if(document.getElementById(sDialogID)) setVisible(sDialogID\\comma\\false);//crlf////tab////crlf////tab//var iSelectedRow=(ARow) ? ARow : -1;//crlf////tab////crlf////tab////get the onDelete attribute for the table.  It contains field ID's and values to be written when//crlf////tab////a record is deleted in the form FieldID//power//Value~~pipe~~FieldID//power//Value//crlf////tab//var sOnDelete=table.getAttribute(\\quot\\aspectOnDelete\\quot\\);//crlf////tab//var arOnDelete=getSubStringArray(sOnDelete\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////crlf////tab////get separate arrays for the field ID's\\comma\\ types and values in the OnDelete attribute//crlf////tab//var arOnDeleteFieldID=new Array();//crlf////tab//var arOnDeleteFieldType=new Array();//crlf////tab//var arOnDeleteFieldValue=new Array();//crlf////tab//for (var i=0;i<arOnDelete.length;i++) {//crlf////tab////tab//var a=getSubStringArray(arOnDelete[i]\\comma\\\\quot\\//power//\\quot\\\\comma\\true);//crlf////tab////tab//arOnDeleteFieldID[i]=a[0];//crlf////tab////tab//arOnDeleteFieldType[i]=a[1];//crlf////tab////tab//arOnDeleteFieldValue[i]=a[2];//crlf////tab//};//crlf////crlf////tab//var arKeyValue=new Array();//crlf////tab//var arFieldID=new Array();//crlf////tab//var arFieldType=new Array();//crlf////tab//var arFieldValue=new Array();//crlf////crlf////tab////determine the cell that contains the select checkbox//crlf////tab//var c=getTableRecordSelectIndex(ATableID);//crlf////crlf////tab//var cSelected=0;//crlf////tab//for (var row=0;row<table.rows.length;row++) {//crlf////tab////tab//if(table.rows[row].cells[c]) {//crlf////tab////tab////tab//var sKeyValue=table.rows[row].getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab////tab////tab//if((sKeyValue) //amp////amp// (tableRowIsTemplate(table.rows[row])==false))//crlf////tab////tab////tab//{//crlf////tab////tab////tab////tab//var eCheckbox=table.rows[row].cells[c].firstChild;//crlf////tab////tab////tab////tab//var bDelete=(iSelectedRow>=0) ? (row==iSelectedRow) : eCheckbox.checked;//crlf////tab////tab////tab////tab//if(bDelete)//crlf////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab//cSelected++;//crlf////crlf////tab////tab////tab////tab////tab////set attributes to indicate data is being submitted//crlf////tab////tab////tab////tab////tab//setPendingSubmissionStyle(table.rows[row].cells[c].childNodes[0]\\comma\\true\\comma\\true);//crlf////tab////tab////tab////tab////tab////table.rows[row].cells[c].style.backgroundColor=PendingSubmissionBackgroundColor;//crlf////tab////tab////tab////tab////tab//table.rows[row].cells[c].setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\newdelete\\quot\\);//crlf////tab////tab////tab////tab////tab//table.rows[row].setAttribute(\\quot\\deleted\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////crlf////tab////tab////tab////tab////tab////create a data submission for each field in the onDelete attribute//crlf////tab////tab////tab////tab////tab//for (var i=0;i<arOnDeleteFieldID.length;i++) {//crlf////tab////tab////tab////tab////tab////tab//arKeyValue[arKeyValue.length]=sKeyValue;//crlf////tab////tab////tab////tab////tab////tab//arFieldID[arFieldID.length]=arOnDeleteFieldID[i];//crlf////tab////tab////tab////tab////tab////tab//arFieldType[arFieldType.length]=arOnDeleteFieldType[i];//crlf////tab////tab////tab////tab////tab////tab//arFieldValue[arFieldValue.length]=replaceAllSubstrings(arOnDeleteFieldValue[i]\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////abort if no records were selected//crlf////tab//if(cSelected==0) return;//crlf////crlf////tab//submitTableData(ATableID\\comma\\arKeyValue.toString()\\comma\\arFieldID.toString()\\comma\\arFieldValue.toString()\\comma\\false\\comma\\true);//crlf//};//crlf////crlf///******************************************************************************//crlf//OLD METHOD: Called to delete selected records//crlf//******************************************************************************///crlf//function olddeleteTableRecords(ATableID\\comma\\ARow)//crlf//{//crlf////tab//var table=document.getElementById(ATableID);//crlf////crlf////tab//var iSelectedRow=(ARow) ? ARow : -1;//crlf////tab////crlf////tab////get the onDelete attribute for the table.  It contains field ID's and values to be written when//crlf////tab////a record is deleted in the form FieldID//power//Value~~pipe~~FieldID//power//Value//crlf////tab//var sOnDelete=table.getAttribute(\\quot\\aspectOnDelete\\quot\\);//crlf////tab//var arOnDelete=getSubStringArray(sOnDelete\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab////crlf////tab////get separate arrays for the field ID's\\comma\\ types and values in the OnDelete attribute//crlf////tab//var arOnDeleteFieldID=new Array();//crlf////tab//var arOnDeleteFieldType=new Array();//crlf////tab//var arOnDeleteFieldValue=new Array();//crlf////tab//for (var i=0;i<arOnDelete.length;i++) {//crlf////tab////tab//var a=getSubStringArray(arOnDelete[i]\\comma\\\\quot\\//power//\\quot\\\\comma\\true);//crlf////tab////tab//arOnDeleteFieldID[i]=a[0];//crlf////tab////tab//arOnDeleteFieldType[i]=a[1];//crlf////tab////tab//arOnDeleteFieldValue[i]=a[2];//crlf////tab//};//crlf////crlf////tab//var arKeyValue=new Array();//crlf////tab//var arFieldID=new Array();//crlf////tab//var arFieldType=new Array();//crlf////tab//var arFieldValue=new Array();//crlf////crlf////tab////determine the cell that contains the select checkbox//crlf////tab//var c=getTableRecordSelectIndex(ATableID);//crlf////crlf////tab//var cSelected=0;//crlf////tab//for (var row=0;row<table.rows.length;row++) {//crlf////tab////tab//if(table.rows[row].cells[c]) {//crlf////tab////tab////tab//var sKeyValue=table.rows[row].getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab////tab////tab//if((sKeyValue) //amp////amp// (tableRowIsTemplate(table.rows[row])==false))//crlf////tab////tab////tab//{//crlf////tab////tab////tab////tab//var eCheckbox=table.rows[row].cells[c].firstChild;//crlf////tab////tab////tab////tab//var bDelete=(iSelectedRow>=0) ? (row==iSelectedRow) : eCheckbox.checked;//crlf////tab////tab////tab////tab//if(bDelete)//crlf////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab//cSelected++;//crlf////crlf////tab////tab////tab////tab////tab////set attributes to indicate data is being submitted//crlf////tab////tab////tab////tab////tab//setPendingSubmissionStyle(table.rows[row].cells[c].childNodes[0]\\comma\\true\\comma\\true);//crlf////tab////tab////tab////tab////tab////table.rows[row].cells[c].style.backgroundColor=PendingSubmissionBackgroundColor;//crlf////tab////tab////tab////tab////tab//table.rows[row].cells[c].setAttribute(\\quot\\AspectSubmissionPending\\quot\\\\comma\\\\quot\\newdelete\\quot\\);//crlf////tab////tab////tab////tab////tab//table.rows[row].setAttribute(\\quot\\deleted\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////crlf////tab////tab////tab////tab////tab////create a data submission for each field in the onDelete attribute//crlf////tab////tab////tab////tab////tab//for (var i=0;i<arOnDeleteFieldID.length;i++) {//crlf////tab////tab////tab////tab////tab////tab//arKeyValue[arKeyValue.length]=sKeyValue;//crlf////tab////tab////tab////tab////tab////tab//arFieldID[arFieldID.length]=arOnDeleteFieldID[i];//crlf////tab////tab////tab////tab////tab////tab//arFieldType[arFieldType.length]=arOnDeleteFieldType[i];//crlf////tab////tab////tab////tab////tab////tab//arFieldValue[arFieldValue.length]=replaceAllSubstrings(arOnDeleteFieldValue[i]\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\//co\\quot\\+\\quot\\mma//\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////abort if no records were selected//crlf////tab//if(cSelected==0) return;//crlf////crlf////tab////display a status message//crlf////tab//var s=\\quot\\Deleting \\quot\\+cSelected+\\quot\\ record\\quot\\;//crlf////tab//if(cSelected>1) s+=\\quot\\s\\quot\\;//crlf////tab//showTableMessage(ATableID\\comma\\s\\comma\\true);//crlf////crlf////tab//var sServer=getServer();//crlf////tab//var sHashID=table.getAttribute(\\quot\\aspectHashID\\quot\\);//crlf////tab//var sDriverID=table.getAttribute(\\quot\\aspectDriver\\quot\\);//crlf////tab//var sKeyExpression=table.getAttribute(\\quot\\aspectKeyExpression\\quot\\);//crlf////tab////crlf////tab////need to use params active when the table was created//crlf////tab////var sParams=getTableDriverParams(ATableID);//crlf////tab//var sParams=table.getAttribute(\\quot\\aspectParamsActive\\quot\\);//crlf////tab//if(!sParams) sParams=getTableDriverParams(ATableID); //for compatibility before aspectParamsActive is posted//crlf////crlf////tab//var submitKeyValue=arKeyValue.toString();//crlf////tab//var submitFieldID=arFieldID.toString();//crlf////tab//var submitFieldType=arFieldType.toString();//crlf////tab//var submitFieldValue=arFieldValue.toString();//crlf////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=putDriverData\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//SourceHashID=\\quot\\+sHashID+\\quot\\//amp//DriverID=\\quot\\+sDriverID+\\quot\\//amp//KeyExpression=\\quot\\+sKeyExpression;//crlf////tab//sUrl +=\\quot\\//amp//DriverParams=\\quot\\+sParams+\\quot\\//amp//KeyValue=\\quot\\+submitKeyValue+\\quot\\//amp//FieldID=\\quot\\+submitFieldID;//crlf////tab//sUrl +=\\quot\\//amp//FieldType=\\quot\\+submitFieldType+\\quot\\//amp//Value=\\quot\\+submitFieldValue;//crlf////crlf////tab////var sFunc=\\quot\\submitTableData(null\\comma\\req.responseText)\\quot\\;//crlf////tab//var sFunc=\\quot\\\\quot\\;//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the input control of the cell with the given KeyValue and Field ID//crlf//******************************************************************************///crlf//function getTableCellControl(table\\comma\\AKeyValue\\comma\\AFieldID)//crlf//{//crlf////appendToLog(\\quot\\getTableCellControl table=\\quot\\+table+\\quot\\ KeyValue=\\quot\\+AKeyValue+\\quot\\ FieldID=\\quot\\+AFieldID);//crlf////tab//var Cell=getTableCell(table\\comma\\AKeyValue\\comma\\AFieldID);//crlf////appendToLog(\\quot\\getTableCellControl Cell=\\quot\\+Cell);//crlf////tab//if(Cell==null) return(null);//crlf////crlf////tab//for (var i=0;i<Cell.childNodes.length;i++) {//crlf////tab////tab//var eChild=Cell.childNodes[i];//crlf////tab////tab//if((eChild.type==\\quot\\select-one\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\select-multiple\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\text\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\number\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\date\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\password\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\checkbox\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\textarea\\quot\\)) return(eChild);//crlf////tab////tab//if(eChild.nodeName.equalsIgnoreCase(\\quot\\textarea\\quot\\)) return(eChild);//crlf////tab////tab//if(eChild.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) return(eChild);//crlf////tab//};//crlf////appendToLog(\\quot\\getTableCellControl returning null\\quot\\);//crlf////tab//return(null);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the TD of the cell with the given KeyValue and Field ID//crlf//******************************************************************************///crlf//function getTableCell(table\\comma\\AKeyValue\\comma\\AFieldID)//crlf//{//crlf////appendToLog(\\quot\\getTableCell table=\\quot\\+table+\\quot\\ KeyValue=\\quot\\+AKeyValue+\\quot\\ FieldID=\\quot\\+AFieldID);//crlf////tab//var row=getTableRow(table\\comma\\AKeyValue);//crlf////tab//if(row==null) {//crlf////appendToLog(\\quot\\getTableCell row=null\\quot\\);//crlf////tab////tab//return(null);//crlf////tab//};//crlf////crlf////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectFields\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////appendToLog(\\quot\\getTableCell arFieldID=\\quot\\+arFieldID);//crlf////tab//for (var i=0;i<row.cells.length;i++) {//crlf////tab////tab//var sCellIndex=row.cells[i].getAttribute(\\quot\\CellIndex\\quot\\);//crlf////tab////tab//if(sCellIndex) {//crlf////tab////tab////tab//var iCellIndex=parseInt(sCellIndex);//crlf////tab////tab////tab//var sFieldID=arFieldID[iCellIndex];//crlf////tab////tab////tab//if(sFieldID) {//crlf////tab////tab////tab////tab//if(sFieldID.equalsIgnoreCase(AFieldID)) {//crlf////tab////tab////tab////tab////tab//return(row.cells[i]);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////appendToLog(\\quot\\getTableCell returning null\\quot\\);//crlf////tab//return(null);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the TR containing with given KeyValue//crlf//******************************************************************************///crlf//function getTableRow(table\\comma\\AKeyValue)//crlf//{//crlf////tab//if(!table) return(null);//crlf////tab////crlf////tab//for (var i=0;i<table.rows.length;i++) {//crlf////tab////tab//if(!table.rows[i].getAttribute(\\quot\\istemplate\\quot\\)) {//crlf////tab////tab////tab//var sKeyValue=table.rows[i].getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab////tab////tab//if((sKeyValue) //amp////amp// (sKeyValue.equalsIgnoreCase(AKeyValue))) return(table.rows[i]);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//return(null);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the value of the given KeyValue and FieldID//crlf//******************************************************************************///crlf//function getTableRowFieldValue(table\\comma\\AKeyValue\\comma\\AFieldID)//crlf//{//crlf////tab////get the index of the field in the aspectallfieldid attribute//crlf////tab//var arAllFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectallfieldid\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//var iFieldIndex=arAllFieldID.indexOf(AFieldID);//crlf////tab//if(iFieldIndex<0) {//crlf////tab////tab//appendToLog(\\quot\\Error in getTableRowFieldValue.  Cannot find field: \\quot\\+AFieldID\\comma\\false\\comma\\true);//crlf////tab////tab//return(null);//crlf////tab//};//crlf////crlf////tab////locate the row containing the key value//crlf////tab//var row=getTableRow(table\\comma\\AKeyValue);//crlf////tab//if(row==null) {//crlf////tab////tab//appendToLog(\\quot\\Error in getTableRowFieldValue.  Cannot locate row with keyvalue=\\quot\\+AKeyValue\\comma\\false\\comma\\true);//crlf////tab////tab//return(null);//crlf////tab//};//crlf////crlf////tab//var arValues=getSubStringArray(getAttr(row\\comma\\\\quot\\aspectAllValues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//if(iFieldIndex>=arValues.length) {//crlf////tab////tab//appendToLog(\\quot\\Error in getTableRowFieldValue.  Index out of range.\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//return(null);//crlf////tab//};//crlf////crlf////tab//return(arValues[iFieldIndex]);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the input control for the field with the given FieldID in the edit dialog//crlf//******************************************************************************///crlf//function getDialogControl(eDialog\\comma\\AKeyValue\\comma\\AFieldID) {//crlf////tab////abort if a key value has not been defined because the dialog has not been initialized or //crlf////tab////if the dialog is displaying fields for another record//crlf////tab//var sKeyValue=eDialog.getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab//if(!sKeyValue) return(null);//crlf////tab//if(sKeyValue.equalsIgnoreCase(AKeyValue)==false) return(null);//crlf////crlf////tab//var arNodes=new Array();//crlf////tab//getAllInputNodes(eDialog\\comma\\arNodes);//crlf////tab//for (var i=0;i<arNodes.length;i++) {//crlf////tab////tab//if((arNodes[i].type==\\quot\\select-one\\quot\\) ~~pipe~~~~pipe~~ (arNodes[i].type==\\quot\\select-multiple\\quot\\) ~~pipe~~~~pipe~~ (arNodes[i].type==\\quot\\text\\quot\\) ~~pipe~~~~pipe~~ (arNodes[i].type==\\quot\\password\\quot\\) ~~pipe~~~~pipe~~ (arNodes[i].type==\\quot\\checkbox\\quot\\) ~~pipe~~~~pipe~~ (arNodes[i].type==\\quot\\textarea\\quot\\)) {//crlf////tab////tab////tab//var s=arNodes[i].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab////tab//if((s) //amp////amp// (s.equalsIgnoreCase(AFieldID))) return(arNodes[i]);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(null);//crlf//};//crlf////crlf///******************************************************************************//crlf//Updates the value of a field in the attributes for a row.  This is necessary so//crlf//a dialog will be initialized with the correct values if data is edited in a //crlf//dialog and then the dialog is opened a 2nd time.  Operates on a single//crlf//Field ID and Value.  An array of values is not permitted.//crlf//******************************************************************************///crlf//function setFieldValueInRow(ATableID\\comma\\AKeyValue\\comma\\AFieldID\\comma\\AValue)//crlf//{//crlf////tab//var table=document.getElementById(ATableID);//crlf////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldID\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////appendToLog(\\quot\\setFieldValueInRow: TableID=\\quot\\+ATableID+\\quot\\ KeyValue=\\quot\\+AKeyValue+\\quot\\ FieldID=\\quot\\+AFieldID+\\quot\\ Value=\\quot\\+AValue\\comma\\false\\comma\\true);//crlf////tab//var arChangedKeyValue=getSubStringArray(AKeyValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab//var arChangedFieldID=getSubStringArray(AFieldID\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab////crlf////tab//if(AValue==\\quot\\\\quot\\) {//crlf////tab////tab//var arChangedValue=new Array(1);//crlf////tab////tab//arChangedValue[0]=\\quot\\\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//var arChangedValue=getSubStringArray(AValue\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab//};//crlf////tab////crlf////tab////locate the row containing the keyexpression//crlf////tab//for (var i=0;i<arChangedKeyValue.length;i++)//crlf////tab//{//crlf////tab////tab//var cUpdated=0;//crlf////tab////tab//for (var row=0;row<table.rows.length;row++) {//crlf////tab////tab////tab//var sKeyValue=table.rows[row].getAttribute(\\quot\\keyvalue\\quot\\);//crlf////tab////tab////tab//if((sKeyValue) //amp////amp// (sKeyValue.equalsIgnoreCase(arChangedKeyValue[i]))) {//crlf////tab////tab////tab////tab//var sSubtotalLevel=table.rows[row].getAttribute(\\quot\\AspectSubtotalLevel\\quot\\);//crlf////appendToLog(\\quot\\setFieldValueInRow: sSubtotalLevel=\\quot\\+sSubtotalLevel+\\quot\\ parseInt=\\quot\\+parseInt(sSubtotalLevel));//crlf////tab////tab////tab////tab//if((sSubtotalLevel) //amp////amp// (parseInt(sSubtotalLevel)<0)) {//crlf////tab////tab////tab////tab////tab//var arValues=getSubStringArray(getAttr(table.rows[row]\\comma\\\\quot\\aspectAllValues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab////tab//var n=getFieldIndex(arChangedFieldID[i]\\comma\\arFieldID);//crlf////tab////tab////tab////tab////tab//arValues[n]=arChangedValue[i];//crlf////tab////tab////tab////tab////tab//arValues[n]=tokenizeTableValue(arValues[n]\\comma\\true);//crlf////tab////tab////tab////tab////tab//setAttr(table.rows[row]\\comma\\\\quot\\aspectAllValues\\quot\\\\comma\\arValues.toString());//crlf////tab////tab////tab////tab////tab//cUpdated++;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//alert(\\quot\\Error: Missing subotalLevel attribute in setFieldValueInRow\\quot\\);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//if(cUpdated==0) {//crlf////tab////tab////tab////This can happen if RefreshOnDataSubmit is true for the table and the record no longer appears in the table after//crlf////tab////tab////tab////an edit.  For example\\comma\\ clicking the Complete checkbox in the New Customer Checklist table may cause a record to //crlf////tab////tab////tab////be filtered out when the data is submitted.//crlf////tab////tab////tab////alert(\\quot\\Error in setFieldValueInRow.  Could not update value for Key=\\quot\\+AKeyValue+\\quot\\ FieldID=\\quot\\+AFieldID+\\quot\\ Value=\\quot\\+AValue);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///********************************************************************************************************//crlf//Used to debug mergeTable2012 (need to un-hardwire table ID's)//crlf//********************************************************************************************************///crlf//function outputTables(DestID\\comma\\SrcID\\comma\\s)//crlf//{//crlf////tab//appendToLog(\\quot\\============================================\\quot\\);//crlf////tab//appendToLog(s);//crlf////tab//appendToLog(\\quot\\Source table ID: \\quot\\+SrcID);//crlf////tab//appendToLog(\\quot\\Dest table ID: \\quot\\+DestID);//crlf////tab//appendToLog(\\quot\\============================================\\quot\\);//crlf////tab//var tableSrc=document.getElementById(SrcID);//crlf////tab//var tableDest=document.getElementById(DestID);//crlf////tab//for (var i=0;i<20;i++) {//crlf////tab////tab//if(i<tableDest.rows.length) //tab//{//crlf////tab////tab////tab//var sSrcKey=getRowKey(tableSrc.rows[i]);//crlf////tab////tab////tab//var sDestKey=getRowKey(tableDest.rows[i]);//crlf////tab////tab////tab//var sMatch=(sSrcKey==sDestKey) ? \\quot\\\\quot\\ : \\quot\\Mismatch\\quot\\;//crlf////tab////tab////tab//appendToLog(\\quot\\row: \\quot\\+i+\\quot\\ SrcKey=\\quot\\+sSrcKey+\\quot\\ DestKey=\\quot\\+sDestKey+\\quot\\ \\quot\\+sMatch);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//appendToLog(\\quot\\============================================\\quot\\);//crlf//};//crlf////crlf///********************************************************************************************************//crlf//Called by mergeTable2012 to get the key for a row which depends on whether it's a record or //crlf//a section header//crlf//********************************************************************************************************///crlf//function getRowKey(row)//crlf//{//crlf////tab////look for table header//crlf////tab//if(row.getAttribute(\\quot\\istableheader\\quot\\)) {//crlf////tab////tab//return(row.getAttribute(\\quot\\headerid\\quot\\));//crlf////tab//};//crlf////tab////crlf////tab////look for section header//crlf////tab//if(row.getAttribute(\\quot\\issectionheader\\quot\\)) {//crlf////tab////tab//return(row.getAttribute(\\quot\\headerkey\\quot\\));//crlf////tab//};//crlf////crlf////tab//s=row.getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab//if(s) return(s);//crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf///********************************************************************************************************//crlf//Merges records from a source table into a destination table.  (see notifications in the control panel as an example).//crlf//A hidden table can be used as a buffer that is updated at some interval.  If a state element is used\\comma\\//crlf//it does not take much time.  The destination table can then be updated from the buffer when new//crlf//records become available//crlf//********************************************************************************************************///crlf//function mergeTable2012(DestID\\comma\\SrcID)//crlf//{//crlf////tab////appendToLog(\\quot\\mergeTable2012( dest=\\quot\\+DestID+\\quot\\ src=\\quot\\+SrcID);//crlf////tab//var tableSrc=document.getElementById(SrcID);//crlf////tab//var tableDest=document.getElementById(DestID);//crlf////crlf////tab//if(!tableSrc) {//crlf////tab////tab//appendToLog(\\quot\\Invalid source table in mergeTable2012: \\quot\\+SrcID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//if(!tableDest) {//crlf////tab////tab//appendToLog(\\quot\\Invalid destination table in mergeTable2012: \\quot\\+DestID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////make a collection of all records in the source and dest//crlf////tab////NOTE: Can't use getKeyValues() because section headers are not included//crlf////tab//var arSrcKey=new Array();//crlf////tab//for(var i=0;i<tableSrc.rows.length;i++) {//crlf////tab////tab//arSrcKey[arSrcKey.length]=getRowKey(tableSrc.rows[i]);//crlf////tab//};//crlf////tab////crlf////tab//var arDestKey=getKeyValues(DestID\\comma\\false);//crlf////tab//for(var i=0;i<tableDest.rows.length;i++) {//crlf////tab////tab//arDestKey[arDestKey.length]=getRowKey(tableDest.rows[i]);//crlf////tab//};//crlf////crlf////tab////appendToLog(\\quot\\Merging tables.  DestRows=\\quot\\+tableDest.rows.length+\\quot\\ SrcRows=\\quot\\+tableSrc.rows.length);//crlf////tab////delete any records from dest that are not in src//crlf////tab////outputTables(DestID\\comma\\SrcID\\comma\\\\quot\\Before delete\\quot\\);//crlf////tab//var n=1;//crlf////tab//while(n<tableDest.rows.length) //tab//{//crlf////tab////tab////don't merge the template used to insert new records//crlf////tab////tab//if(!tableDest.rows[n].getAttribute(\\quot\\istemplate\\quot\\)) {//crlf////tab////tab////tab//var sDestKey=getRowKey(tableDest.rows[n]);//crlf////tab////tab////tab//if(sDestKey.length>0) {//crlf////tab////tab////tab////tab//if(countPendingSubmissions(DestID\\comma\\sSrcKey)==0) {//crlf////tab////tab////tab////tab////tab//if(arSrcKey.indexOf(sDestKey)<0) {//crlf////tab////tab////tab////tab////tab////tab//var bDelete=true;//crlf////tab////tab////tab////tab////tab////tab//if(false) {//crlf////tab////tab////tab////tab////tab////tab////tab//for(var cell=0;cell<tableDest.rows[n].cells.length;cell++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var attr=tableDest.rows[n].cells[cell].getAttribute(\\quot\\AspectSubmissionPending\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if((attr) //amp////amp// ((attr==\\quot\\new\\quot\\) ~~pipe~~~~pipe~~ (attr==\\quot\\pending\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//bDelete=false;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////tab//if(bDelete) {//crlf////tab////tab////tab////tab////tab////tab////tab//tableDest.deleteRow(n);//crlf////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\mergeTable2012 deleted row: \\quot\\+n+\\quot\\ DestKey=\\quot\\+sDestKey\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\mergeTable2012 not deleting row: \\quot\\+n+\\quot\\ key=\\quot\\+sDestKey+\\quot\\ because it is a new record\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//n++;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//n++;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//n++;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//n++;//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//n++;//crlf////tab////tab//};//crlf////tab//};//crlf////tab////outputTables(DestID\\comma\\SrcID\\comma\\\\quot\\After delete\\quot\\);//crlf////crlf////tab//var cInsert=0;//crlf////tab//for (var i=1;i<tableSrc.rows.length;i++) //crlf////tab//{//crlf////tab////tab//if(!tableSrc.rows[i].getAttribute(\\quot\\istemplate\\quot\\)) {//crlf////tab////tab////tab//var bInsertRow=true;//crlf////tab////tab////tab//var sSrcKey=getRowKey(tableSrc.rows[i]);//crlf////tab////tab////tab////crlf////tab////tab////tab////don't merge the row if it has outstanding submissions.  This avoids overwriting data that//crlf////tab////tab////tab////has been edited but not saved yet//crlf////tab////tab////tab//if(countPendingSubmissions(DestID\\comma\\sSrcKey)==0) //crlf////tab////tab////tab//{//crlf////tab////tab////tab////tab////appendToLog(\\quot\\mergeTable2012: updating record \\quot\\+sSrcKey);//crlf////crlf////tab////tab////tab////tab//var sDestKey=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab//if(i<tableDest.rows.length) sDestKey=getRowKey(tableDest.rows[i]);//crlf////tab////tab////tab////tab////appendToLog(\\quot\\Adding row: \\quot\\+i+\\quot\\ SrcKey=\\quot\\+sSrcKey+\\quot\\ DestKey=\\quot\\+sDestKey);//tab////crlf////tab////tab////tab////tab//if((sSrcKey) //amp////amp// (sDestKey)) //crlf////tab////tab////tab////tab//{//crlf////tab////tab////tab////tab////tab//if(sSrcKey.equalsIgnoreCase(sDestKey)) {//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Found matching record\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////found a matching record//crlf////crlf////tab////tab////tab////tab////tab////tab////update the virtual index if defined//crlf////tab////tab////tab////tab////tab////tab//if(tableSrc.rows[i].getAttribute(\\quot\\virtualindex\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab//tableDest.rows[i].setAttribute(\\quot\\virtualindex\\quot\\\\comma\\tableSrc.rows[i].getAttribute(\\quot\\virtualindex\\quot\\));//crlf////tab////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////tab//var sSrcCRC=tableSrc.rows[i].getAttribute(\\quot\\crc\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//var sDestCRC=tableDest.rows[i].getAttribute(\\quot\\crc\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//if(sSrcCRC!=sDestCRC) {//crlf////tab////tab////tab////tab////tab////tab////tab//for(var j=0;j<tableSrc.rows[i].cells.length;j++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(tableDest.rows[i].cells[j]) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//tableDest.rows[i].cells[j].innerHTML=tableSrc.rows[i].cells[j].innerHTML;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//tableDest.rows[i].setAttribute(\\quot\\crc\\quot\\\\comma\\sSrcCRC);//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Updated record: Key=\\quot\\+sSrcKey+\\quot\\ row=\\quot\\+i+\\quot\\ SrcCRC=\\quot\\+sSrcCRC+\\quot\\ DestCRC=\\quot\\+sDestCRC);//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\record not modified: Key=\\quot\\+sSrcKey+\\quot\\ row=\\quot\\+i);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////see if the record exists anywhere in the destination table//crlf////tab////tab////tab////tab////tab////tab//var iDestRow=getTableRowContainingKey(tableDest\\comma\\sSrcKey);//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Looking for matching key.  iDestRow=\\quot\\+iDestRow);//crlf////tab////tab////tab////tab////tab////tab//if(iDestRow>=0) {//crlf////tab////tab////tab////tab////tab////tab////tab////the record was found elsewhere in the table//crlf////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab////update the virtual index if defined//crlf////tab////tab////tab////tab////tab////tab////tab//if(tableSrc.rows[i].getAttribute(\\quot\\virtualindex\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//tableDest.rows[iDestRow].setAttribute(\\quot\\virtualindex\\quot\\\\comma\\tableSrc.rows[i].getAttribute(\\quot\\virtualindex\\quot\\));//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab//var sSrcCRC=tableSrc.rows[i].getAttribute(\\quot\\crc\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//var sDestCRC=tableDest.rows[iDestRow].getAttribute(\\quot\\crc\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//if(sSrcCRC!=sDestCRC) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//for(var j=0;j<tableSrc.rows[i].cells.length;j++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(tableDest.rows[iDestRow].cells[j]) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//tableDest.rows[iDestRow].cells[j].innerHTML=tableSrc.rows[i].cells[j].innerHTML;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////add a new record//crlf////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\mergeTable2012 Insert row: \\quot\\+i+\\quot\\ SrcKey=\\quot\\+sSrcKey+\\quot\\ DestKey=\\quot\\+sDestKey);//crlf////tab////tab////tab////tab////tab////tab////tab//var clone=tableSrc.rows[i].cloneNode(true);//crlf////tab////tab////tab////tab////tab////tab////tab//var tbody=null;//crlf////tab////tab////tab////tab////tab////tab////tab//for(var j=0;j<tableDest.childNodes.length;j++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(tableDest.childNodes[j].nodeName.toUpperCase()==\\quot\\TBODY\\quot\\) tbody=tableDest.childNodes[j];//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//if(i<tableDest.rows.length-1) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//tbody.insertBefore(clone\\comma\\tableDest.rows[i]);//crlf////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//tbody.appendChild(clone);//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////outputTables(DestID\\comma\\SrcID\\comma\\\\quot\\After insert\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//cInsert++;//crlf////tab////tab////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab////tab////tab//arDestKey=getKeyValues(DestID\\comma\\false);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////add a new record//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\Insert row: \\quot\\+i+\\quot\\ SrcKey=\\quot\\+sSrcKey+\\quot\\ DestKey=\\quot\\+sDestKey);//crlf////tab////tab////tab////tab////tab//var clone=tableSrc.rows[i].cloneNode(true);//crlf////tab////tab////tab////tab////tab//var tbody=null;//crlf////tab////tab////tab////tab////tab//for(var j=0;j<tableDest.childNodes.length;j++) {//crlf////tab////tab////tab////tab////tab////tab//if(tableDest.childNodes[j].nodeName.toUpperCase()==\\quot\\TBODY\\quot\\) tbody=tableDest.childNodes[j];//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//tbody.appendChild(clone);//crlf////crlf////tab////tab////tab////tab////tab////outputTables(DestID\\comma\\SrcID\\comma\\\\quot\\After insert\\quot\\);//crlf////tab////tab////tab////tab////tab//cInsert++;//crlf////tab////tab////tab////tab////tab//arDestKey=getKeyValues(DestID\\comma\\false);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//appendToLog(\\quot\\mergeTable2012: Not updating record \\quot\\+sSrcKey+\\quot\\ because there are outstanding submissions\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////appendToLog(\\quot\\mergeTable2012 complete\\quot\\);//crlf//};//crlf////crlf///**********************************************************************//crlf//Returns an array of keyvalues from the given table.  if bSelectedOnly is true\\comma\\ only returns//crlf//values for which the select checkbox is clicked.  Returns null if the table does not exist.//crlf//**********************************************************************///crlf//function getKeyValues(tableid\\comma\\bSelectedOnly)//crlf//{//crlf////tab//var eTable=document.getElementById(tableid);//crlf////tab//if(!eTable) {//crlf////tab////tab//appendToLog(\\quot\\getKeyValues cannot locate table with ID=\\quot\\+tableid\\comma\\false\\comma\\true);//crlf////tab////tab//return(null);//crlf////tab//};//crlf////crlf////tab////determine the cell that contains the select checkbox//crlf////tab//var iSelectCell=-1;//crlf////tab//if(bSelectedOnly) {//crlf////tab////tab//iSelectCell=getTableRecordSelectIndex(tableid);//crlf////tab//};//crlf////crlf////tab//var arKeyValue=new Array();//crlf////crlf////tab//for (var row=0;row<eTable.rows.length;row++) {//crlf////tab////tab//var bInclude=true;//crlf////tab////tab////don't include section headers and table headers//crlf////tab////tab//if(eTable.rows[row].getAttribute(\\quot\\keyvalue\\quot\\)) {//crlf////tab////tab////tab//if(bSelectedOnly) {//crlf////tab////tab////tab////tab//if((iSelectCell>=0) //amp////amp// (eTable.rows[row].cells[iSelectCell])) {//crlf////tab////tab////tab////tab////tab//bInclude=eTable.rows[row].cells[iSelectCell].firstChild.checked;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//bInclude=false;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//bInclude=false;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//if(bInclude) arKeyValue[arKeyValue.length]=eTable.rows[row].getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab//};//crlf////crlf////tab///*****************************//crlf////tab//9/1/2014 - Don't know why this 2nd pass is here.  Could have been for debugging.//crlf////tab//*****************************///crlf////tab//if(arKeyValue.length==0) {//crlf////tab////tab////appendToLog(\\quot\\getKeyValues: No records selected in table \\quot\\+tableid+\\quot\\. Rows=\\quot\\+eTable.rows.length+\\quot\\ iSelectCell=\\quot\\+iSelectCell\\comma\\false\\comma\\true);//crlf////tab////tab//for (var row=0;row<eTable.rows.length;row++) {//crlf////tab////tab////tab//var bInclude=true;//crlf////tab////tab////tab//if(eTable.rows[row].getAttribute(\\quot\\keyvalue\\quot\\)) {//crlf////tab////tab////tab////tab//if(bSelectedOnly) {//crlf////tab////tab////tab////tab////tab//if((iSelectCell>=0) //amp////amp// (eTable.rows[row].cells[iSelectCell])) {//crlf////tab////tab////tab////tab////tab////tab//bInclude=eTable.rows[row].cells[iSelectCell].firstChild.checked;//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\row[\\quot\\+row+\\quot\\] child=\\quot\\+eTable.rows[row].cells[iSelectCell].firstChild+\\quot\\ checked=\\quot\\+eTable.rows[row].cells[iSelectCell].firstChild.checked+\\quot\\ included=\\quot\\+bInclude\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//bInclude=false;//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\row[\\quot\\+row+\\quot\\] not included.  iSelectCell=\\quot\\+iSelectCell+\\quot\\ cell=\\quot\\+eTable.rows[row].cells[iSelectCell]+\\quot\\\r\n\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//bInclude=false;//crlf////tab////tab////tab////tab////appendToLog(\\quot\\row[\\quot\\+row+\\quot\\] keyvalue not defined\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//if(bInclude) arKeyValue[arKeyValue.length]=eTable.rows[row].getAttribute(\\quot\\KeyValue\\quot\\);//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//return(arKeyValue);//crlf//};//crlf////crlf///*********************************************************************************//crlf//Shows/hides table rows for a given section.  Called when a section header is clicked.//crlf//*********************************************************************************///crlf//function toggleTableRows(TableID\\comma\\HeaderID)//crlf//{//crlf////tab////get the table//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//if(!table) {//crlf////tab////tab//alert(\\quot\\cannot find table: \\quot\\+TableID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//////crlf////tab//for(var i=0;i<table.rows.length;i++) {//crlf////tab////tab//var sHeaderID=table.rows[i].getAttribute(\\quot\\headerid\\quot\\);//crlf////tab////tab//if((sHeaderID) //amp////amp// (sHeaderID==HeaderID)) {//crlf////tab////tab////tab//if(!table.rows[i].getAttribute(\\quot\\headerkey\\quot\\)) {//crlf////tab////tab////tab////tab//toggleVisible(table.rows[i]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///********************************************************************//crlf//Sets the date/time in the table header//crlf//********************************************************************///crlf//function setTableUpdateTime(Table)//crlf//{//crlf////tab//if(!Table) return;//crlf////tab//if(Table.id.length>0) {//crlf////tab////tab//var e=document.getElementById(\\quot\\table_updated_\\quot\\+Table.id);//crlf////tab////tab//if(e) {//crlf////tab////tab////tab//e.innerHTML=formatDate(new Date()\\comma\\\\quot\\MM-dd-yyyy HH:mm:ss\\quot\\);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//Table.setAttribute(\\quot\\TimeInitialized\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf//};//crlf////crlf///********************************************************************//crlf//Sets the style of a control to indicate that data submission is pending or complete//crlf//********************************************************************///crlf//function setPendingSubmissionStyle(e\\comma\\bIsTableCell\\comma\\bPending)//crlf//{//crlf////tab//var sDebugName=(e.getAttribute) ? e.getAttribute(\\quot\\name\\quot\\) : \\quot\\undefined\\quot\\;//crlf////tab////appendToLog(\\quot\\setPendingSubmissionStyle e=\\quot\\+e+\\quot\\ IsTableCell=\\quot\\+bIsTableCell+\\quot\\ Pending=\\quot\\+bPending+\\quot\\ Name=\\quot\\+sDebugName\\comma\\false\\comma\\true);//crlf////tab//var eToSet=e;//crlf////tab//if(eToSet.type==\\quot\\checkbox\\quot\\) eToSet=eToSet.parentNode;//crlf////crlf////tab////if it's a hidden input associated with a datalist\\comma\\ change the element to the visible //crlf////tab////one used to get the input//crlf////tab//if((eToSet.type) //amp////amp// (eToSet.type.equalsIgnoreCase(\\quot\\hidden\\quot\\))) {//crlf////tab////tab//var sDataListID=eToSet.getAttribute(\\quot\\List\\quot\\);//crlf////tab////tab////appendToLog(\\quot\\eToSet.type=\\quot\\+eToSet.type+\\quot\\ sDataListID=\\quot\\+sDataListID);//crlf////tab////tab//if(sDataListID) {//crlf////tab////tab////tab//eToSet=document.getElementById(sDataListID+\\quot\\_input\\quot\\);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////alert(\\quot\\Error: setPendingSubmissionStyle: Datalist input with ID=\\quot\\+sDataListID+\\quot\\_input not found\\quot\\);//crlf////tab////tab//};//crlf////tab//};//crlf////tab////tab////crlf////tab//if(bPending) {//crlf////tab////tab//if(eToSet.style) {//crlf////tab////tab////tab//var c=getComputedStyle(eToSet).backgroundColor;//crlf////tab////tab////tab//if(!eToSet.getAttribute(\\quot\\NonPendingBackgoundColor\\quot\\)) {//crlf////tab////tab////tab////tab//eToSet.setAttribute(\\quot\\NonPendingBackgoundColor\\quot\\\\comma\\c);//crlf////tab////tab////tab////tab////appendToLog(\\quot\\Saving background color: \\quot\\+c\\comma\\false\\comma\\true);//crlf////tab////tab////tab//};//crlf////tab////tab////tab//eToSet.style.backgroundColor=PendingSubmissionBackgroundColor;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//appendToLog(\\quot\\Cannot set style for type=\\quot\\+e.type+\\quot\\ nodeName=\\quot\\+e.nodeName\\comma\\false\\comma\\true);//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//if(eToSet.style) {//crlf////tab////tab////tab////eToSet.style.backgroundColor=\\quot\\white\\quot\\;//crlf////tab////tab////tab//var c=eToSet.getAttribute(\\quot\\NonPendingBackgoundColor\\quot\\);//crlf////appendToLog(\\quot\\Setting background color to \\quot\\+c\\comma\\false\\comma\\true);//crlf////tab////tab////tab//if(c) {//crlf////tab////tab////tab////tab//eToSet.style.backgroundColor=c;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//eToSet.style.backgroundColor=\\quot\\white\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//appendToLog(\\quot\\Cannot set style for type=\\quot\\+e.type+\\quot\\ nodeName=\\quot\\+e.nodeName\\comma\\false\\comma\\true);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///********************************************************************//crlf//Sets the background color of subtotal records.  Called by gotPendingSubmissions() //crlf//when a table is about to be refreshed because data has been submitted and by //crlf//refreshTableOnInterval() to reset the background after the table has been refreshed.//crlf//********************************************************************///crlf//function highlightSubtotals(table\\comma\\b) {//crlf////tab//for(var i=0;i<table.rows.length;i++) {//crlf////tab////tab//var s=table.rows[i].getAttribute(\\quot\\aspectsubtotallevel\\quot\\);//crlf////tab////tab//if(s) {//crlf////tab////tab////tab//if(parseInt(s)>=0) {//crlf////tab////tab////tab////tab//setPendingSubmissionStyle(table.rows[i]\\comma\\false\\comma\\b);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///********************************************************************//crlf//Returns the index of the given FieldID in the given array of Field ID's.//crlf//Takes into account that the FieldID may not be the full ID//crlf//********************************************************************///crlf//function getFieldIndex(FieldID\\comma\\arFieldID)//crlf//{//crlf////tab//if(!arFieldID) {//crlf////tab////tab//appendToLog(\\quot\\arFieldID is null in getFieldIndex\\quot\\);//crlf////tab////tab//return(-1);//crlf////tab//};//crlf////tab////crlf////tab//var n=arFieldID.indexOf(FieldID);//crlf////tab////crlf////tab///**************************************************************//crlf////tab//The following section is just to test for problems with FullID vs ID//crlf////tab//When debugged\\comma\\ only the above line is required//crlf////tab//**************************************************************///crlf////tab//var sID=FieldID;//crlf////tab//var Match=-1;//crlf////tab//while(sID.indexOf(\\quot\\.\\quot\\)>=0) sID=sID.substring(sID.indexOf(\\quot\\.\\quot\\)+1);//crlf////tab//for(var i=0;((Match<0) //amp////amp// (i<arFieldID.length));i++) {//crlf////tab////tab//var s=arFieldID[i];//crlf////tab////tab//while(s.indexOf(\\quot\\.\\quot\\)>=0) s=s.substring(s.indexOf(\\quot\\.\\quot\\)+1);//crlf////tab////tab//if(sID.equalsIgnoreCase(s)) Match=i;//crlf////tab//};//crlf////crlf////tab//if(n!=Match) {//crlf////tab////tab//if(Match>=0) {//crlf////tab////tab////tab//appendToLog(\\quot\\getFieldIndex error n=\\quot\\+n+\\quot\\ Match=\\quot\\+Match+\\quot\\ For FieldID=\\quot\\+FieldID+\\quot\\ Match=\\quot\\+arFieldID[Match]+\\quot\\ Fields=\\quot\\+arFieldID);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//appendToLog(\\quot\\getFieldIndex error n=\\quot\\+n+\\quot\\ Match=\\quot\\+Match+\\quot\\ For FieldID=\\quot\\+FieldID+\\quot\\ Fields=\\quot\\+arFieldID);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(Match);//crlf//};//crlf////crlf///********************************************************************//crlf//Updates all cells in a table row to reflect the values in the aspectallvalues attribute.//crlf//Called after data has been edited and when new data is requested from the driver.//crlf//if AExcludeInputs is true\\comma\\ input fields will be excluded from the update.  This is//crlf//done to avoid overwriting changes to fields that may not have been submitted yet.  This//crlf//can be a problem if several fields are edited successively.//crlf//********************************************************************///crlf//function updateCellsInRecord(table\\comma\\AKeyValue\\comma\\AExcludeInputs)//crlf//{//crlf////tab//var bExcludeInputs=((AExcludeInputs) //amp////amp// (AExcludeInputs==true));//crlf////tab////crlf////tab////appendToLog(\\quot\\updateCellsInRecord AKeyValue=\\quot\\+AKeyValue);//crlf////tab////crlf////tab////check for aspectallfieldid attribute.  This attribute will not be defined if editing is not enabled for the table.//crlf////tab//if(!table.getAttribute(\\quot\\aspectallfieldid\\quot\\)) {//crlf////tab////tab//appendToLog(\\quot\\Error in updateCellsInRecord(): aspectallfieldid not defined.  Make sure that editing is enabled for the table\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var arAllFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectallfieldid\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab//var arAllFieldType=getSubStringArray(table.getAttribute(\\quot\\aspectallfieldtype\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////tab//var arAllPattern=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldPattern\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\false);//crlf////crlf////tab//var arTableFields=getSubStringArray(table.getAttribute(\\quot\\aspectfields\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectallfieldid\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//var row=getTableRowContainingKey(table\\comma\\AKeyValue);//crlf////tab//var arValues=getSubStringArray(getAttr(table.rows[row]\\comma\\\\quot\\aspectAllValues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab//for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i]\\comma\\false);//crlf////crlf////tab////The aspecthtmlvalues attribute is set after a record has been edited using values returned from getRecordValues.//crlf////tab////The aspectallvalues attribute contains data read using getField().  The aspecthtmlvalues attribute contains data//crlf////tab////read using getFieldForHtml.  It should be used to set the value of table cells if it's available.//crlf////tab//var arHtmlValues=null;//crlf////tab//if(table.rows[row].getAttribute(\\quot\\aspecthtmlvalues\\quot\\)) {//crlf////tab////tab//arHtmlValues=getSubStringArray(table.rows[row].getAttribute(\\quot\\aspecthtmlvalues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab//for(var i=0;i<arHtmlValues.length;i++) arHtmlValues[i]=tokenizeTableValue(arHtmlValues[i]\\comma\\false);//crlf////tab//};//crlf////tab////crlf////tab//for (var cell=0;cell<table.rows[row].cells.length;cell++) //crlf////tab//{//crlf////tab////tab////or some reason\\comma\\ IE returns a value of 0 or 1 for the columns containing the select checkbox and edit icon.//crlf////tab////tab////get the name to deal with this.  The name should be null for every cell except those two.//crlf////tab////tab//var s=table.rows[row].cells[cell].getAttribute(\\quot\\cellIndex\\quot\\);//crlf////tab////tab//var sName=table.rows[row].cells[cell].getAttribute(\\quot\\name\\quot\\);//crlf////tab////tab//if((!sName) //amp////amp// (s)) {//crlf////tab////tab////tab//var iCellIndex=parseInt(s);//crlf////tab////tab////tab//var sFieldID=arTableFields[iCellIndex];//crlf////tab////tab////tab//var n=getFieldIndex(sFieldID\\comma\\arFieldID);//crlf////tab////tab////tab//if((n>=0) //amp////amp// (n<arValues.length))//crlf////tab////tab////tab//{//crlf////tab////tab////tab////tab////get the control contained in the cell and determine if it is active//crlf////tab////tab////tab////tab//var bIsActiveElement=false;//crlf////tab////tab////tab////tab//if(document.activeElement) {//crlf////tab////tab////tab////tab////tab//var arInput=table.rows[row].cells[cell].getElementsByTagName(\\quot\\input\\quot\\);//crlf////tab////tab////tab////tab////tab//if(!arInput) arInput=table.rows[row].cells[cell].getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab////tab////tab////tab////tab//if(arInput) {//crlf////tab////tab////tab////tab////tab////tab//bIsActiveElement=(document.activeElement==arInput[0]);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//if(!bIsActiveElement) {//crlf////tab////tab////tab////tab////tab//var sValue=(arHtmlValues==null) ? arValues[n] : arHtmlValues[n];//crlf////tab////tab////tab////tab////tab//table.rows[row].cells[cell].innerHTML=sValue;//crlf////appendToLog(\\quot\\updateCellsInRecord updating cell=\\quot\\+iCellIndex+\\quot\\ FieldID=\\quot\\+sFieldID+\\quot\\ n=\\quot\\+n+\\quot\\ value=\\quot\\+arValues[n]+\\quot\\ htmlValue=\\quot\\+arHtmlValues[n]\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////alert(\\quot\\skipping active element\\quot\\);//crlf////appendToLog(\\quot\\updateCellsInRecord skipping active element cell=\\quot\\+iCellIndex+\\quot\\ FieldID=\\quot\\+sFieldID+\\quot\\ n=\\quot\\+n+\\quot\\ value=\\quot\\+arValues[n]+\\quot\\ htmlValue=\\quot\\+arHtmlValues[n]\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//if(sValue)//crlf////tab////tab////tab////tab//{//crlf///************************************************//crlf////tab////tab////tab////tab////tab//var Control=null;//crlf////tab////tab////tab////tab////tab//for (var i=0;(Control==null) //amp////amp// (i<table.rows[row].cells[cell].childNodes.length);i++) {//crlf////tab////tab////tab////tab////tab////tab//var eChild=table.rows[row].cells[cell].childNodes[i];//crlf////tab////tab////tab////tab////tab////tab//if((eChild.type==\\quot\\select-one\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\select-multiple\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\text\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\password\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\checkbox\\quot\\) ~~pipe~~~~pipe~~ (eChild.type==\\quot\\textarea\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab//Control=eChild;//tab////crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else//tab//if(eChild.nodeName.equalsIgnoreCase(\\quot\\textarea\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab//Control=eChild;//tab////crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else if(eChild.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab//Control=eChild;//tab////crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab////tab//if(Control!=null) {//crlf////tab////tab////tab////tab////tab////tab//if(Control.type==\\quot\\checkbox\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(!bExcludeInputs) Control.checked=(sValue.equalsIgnoreCase(\\quot\\true\\quot\\));//crlf////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab//if((Control.nodeName.equalsIgnoreCase(\\quot\\text\\quot\\)) ~~pipe~~~~pipe~~ (Control.nodeName.equalsIgnoreCase(\\quot\\password\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(sValue!=null) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//Control.innerHTML=sValue; //need to set the value of the control first to properly handle empty strings (see note in formatField)//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var s=formatField(table.getAttribute(\\quot\\id\\quot\\)\\comma\\Control\\comma\\sValue\\comma\\arAllFieldID\\comma\\arAllFieldType\\comma\\arAllPattern);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//Control.innerHTML=s;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//appendToLog(\\quot\\updateCellsInRecord sValue=null for \\quot\\+sFieldID\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(!bExcludeInputs) Control.value=sValue;//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf//**************************************************///tab////tab////tab////tab////tab////crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//if(n<0) {//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\updateCellsInRecord skipped FieldID=\\quot\\+sFieldID+\\quot\\ n=\\quot\\+n+\\quot\\ Make sure it is included in the embedded fields.  arFieldID=\\quot\\+arFieldID\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\updateCellsInRecord skipped FieldID=\\quot\\+sFieldID+\\quot\\ n=\\quot\\+n+\\quot\\ values len=\\quot\\+arValues.length\\comma\\false\\comma\\true);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////appendToLog(\\quot\\updateCellsInRecord skipped cellIndex=\\quot\\+s+\\quot\\ sName=\\quot\\+sName\\comma\\false\\comma\\true);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function tableRowIsDeleted(TR)//crlf//{//crlf////tab//var s=TR.getAttribute(\\quot\\deleted\\quot\\);//crlf////tab//if(!s) return(false);//crlf////tab//if(s.equalsIgnoreCase(\\quot\\true\\quot\\)) return(true);//crlf////tab//return(false);//crlf//};//crlf////crlf//function tableRowIsTemplate(TR)//crlf//{//crlf////tab//var s=TR.getAttribute(\\quot\\ID\\quot\\);//crlf////tab//if(!s) return(false);//crlf////tab//if(s.toUpperCase().startsWith(\\quot\\InsertTemplate\\quot\\)) return(true);//crlf////tab//return(false);//crlf//};//crlf////crlf///***********************************************************************//crlf//Called when a record is added from within the edit dialog.  e is the control clicked to make//crlf//the call.//crlf//***********************************************************************///crlf//function addDialogRecord(e)//crlf//{//crlf////tab////appendToLog(\\quot\\addDialogRecord\\quot\\\\comma\\true);//crlf////crlf////tab////get the div containing the dialog//crlf////tab//var eDialog=getDialogNode(e);//crlf////tab//if(!eDialog) {//crlf////tab////tab//appendToLog(\\quot\\Unable to locate dialog containing element in addDialogRecord\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////get the table//crlf////tab//var sTableID=eDialog.getAttribute(\\quot\\TableID\\quot\\);//crlf////tab//var table=document.getElementById(sTableID);//crlf////tab////crlf////tab//var iNewRow=insertTableRecord(sTableID);//crlf////tab//if(iNewRow>=0) {//crlf////tab////tab////hide the disable div //crlf////tab////tab//if(document.getElementById(\\quot\\EditDialogDisable\\quot\\+sTableID)) setVisible(\\quot\\EditDialogDisable\\quot\\+sTableID\\comma\\false);//crlf////crlf////tab////tab////set the keyvalue of the dialog//crlf////tab////tab//var sKeyValue=table.rows[iNewRow].getAttribute(\\quot\\keyvalue\\quot\\);//crlf////tab////tab//eDialog.setAttribute(\\quot\\keyvalue\\quot\\\\comma\\sKeyValue);//crlf////crlf////tab////tab////set the values in the dialog//crlf////tab////tab//var arFieldID=getSubStringArray(table.getAttribute(\\quot\\aspectAllFieldID\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab//var arValues=getSubStringArray(getAttr(table.rows[iNewRow]\\comma\\\\quot\\aspectAllValues\\quot\\)\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\true);//crlf////tab////tab//for(var i=0;i<arValues.length;i++) arValues[i]=tokenizeTableValue(arValues[i]\\comma\\false);//crlf////tab////tab//setDialogValues(sTableID\\comma\\eDialog\\comma\\arFieldID\\comma\\arValues);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//appendToLog(\\quot\\Unable to create new table record\\quot\\);//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Called when a record is deleted from within the edit dialog.  e is the control clicked to make//crlf//the call.//crlf//***********************************************************************///crlf//function deleteDialogRecord(e)//crlf//{//crlf////tab////appendToLog(\\quot\\deleteDialogRecord\\quot\\\\comma\\true);//crlf////crlf////tab////get the div containing the dialog//crlf////tab//var eDialog=getDialogNode(e);//crlf////tab//if(!eDialog) {//crlf////tab////tab//appendToLog(\\quot\\Unable to locate dialog containing element in addDialogRecord\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////get the table//crlf////tab//var sTableID=eDialog.getAttribute(\\quot\\TableID\\quot\\);//crlf////tab//var table=document.getElementById(sTableID);//crlf////crlf////tab////get the keyvalue of the record being edited//tab////crlf////tab//var sKeyValue=eDialog.getAttribute(\\quot\\keyvalue\\quot\\);//crlf////crlf////tab////locate the row containing the keyvalue of the record being edited//crlf////tab//var rCurrent=getTableRowContainingKey(table\\comma\\sKeyValue)//crlf////tab//if(rCurrent<0) {//crlf////tab////tab//appendToLog(\\quot\\Could not locate row containing key value \\quot\\+sKeyValue);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////focus on the next record in the table//crlf////tab//updateDialogRecord(e\\comma\\\\quot\\next\\quot\\);//crlf////crlf////tab////delete the record//crlf////tab//deleteTableRecords(sTableID\\comma\\rCurrent);//crlf////crlf////tab////remove the option from the dialog header's select box//crlf////tab//updateTableDialogHeader(sTableID);//crlf////crlf////tab////disable dialog if no records are left//crlf////tab////appendToLog(\\quot\\first record=\\quot\\+getFirstTableRow(table\\comma\\false));//crlf////tab//if(getFirstTableRow(table\\comma\\false)<0) disableTableDialog(sTableID);//crlf//};//crlf////crlf///******************************************************************************//crlf//Returns the cell index (column) of the table cell containing the \\quot\\Select\\quot\\ checkbox//crlf//It may be in 0 or 1 depending on whether editing is enabled//crlf//******************************************************************************///crlf//function getTableRecordSelectIndex(ATableID)//crlf//{//crlf////tab//var table=document.getElementById(ATableID);//crlf////tab//var c=-1;//crlf////tab//for (var row=0;((c<0) //amp////amp// (row<table.rows.length));row++) {//crlf////tab////tab//if((table.rows[row].cells[0]) //amp////amp// (table.rows[row].cells[0].firstChild.type==\\quot\\checkbox\\quot\\)) {//crlf////tab////tab////tab//c=0;//crlf////tab////tab//}//crlf////tab////tab//else if((table.rows[row].cells[1]) //amp////amp// (table.rows[row].cells[1].firstChild.type==\\quot\\checkbox\\quot\\)) {//crlf////tab////tab////tab//c=1;//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(c);//crlf//};//crlf////crlf///******************************************************************************//crlf//Called when the checkbox used to select all/none records is clicked//crlf//******************************************************************************///crlf//function selectTableRecords(ATableID\\comma\\e\\comma\\HeaderID)//crlf//{//crlf////tab//var table=document.getElementById(ATableID);//crlf////tab////crlf////tab////abort if table not found//crlf////tab//if(!table) {//crlf////tab////tab//alert(\\quot\\table not found: \\quot\\+ATableID);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab////the \\quot\\select\\quot\\ checkbox might be in the 1st or 2nd column depending on whether an edit icon ia displayed//crlf////tab//var c=getTableRecordSelectIndex(ATableID);//crlf////tab//if(c>=0) {//crlf////tab////tab//for (var row=0;row<table.rows.length;row++) {//crlf////tab////tab////tab//if(table.rows[row].cells[c]) {//crlf////tab////tab////tab////tab//var sRowHeaderID=table.rows[row].getAttribute(\\quot\\headerid\\quot\\);//crlf////tab////tab////tab////tab//var bSelect=((sRowHeaderID) //amp////amp// (sRowHeaderID.equalsIgnoreCase(HeaderID)));//crlf////tab////tab////tab////tab//if(!bSelect) bSelect=((!sRowHeaderID) //amp////amp// (HeaderID.equalsIgnoreCase(\\quot\\NoHeaders\\quot\\)));//crlf////tab////tab////tab////tab//if(bSelect) {//crlf////tab////tab////tab////tab////tab//var eCheck=table.rows[row].cells[c].firstChild;//crlf////tab////tab////tab////tab////tab//if((eCheck) //amp////amp// (eCheck.type==\\quot\\checkbox\\quot\\)) eCheck.checked=e.checked;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};^
ID=715444|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///********************************************************************//crlf//Adds scripts included in widgets to the document's head element.//crlf//Called by initializeTables2012() whenever content is loaded//crlf//********************************************************************///crlf//function addScripts() {//crlf////tab//var arScript=document.body.getElementsByTagName(\\quot\\script\\quot\\);//crlf////tab//if(arScript) {//crlf////tab////tab//for(var i=0;i<arScript.length;i++) //crlf////tab////tab//{//crlf////tab////tab////tab//if(!arScript[i].getAttribute(\\quot\\aspectinitialized\\quot\\))//crlf////tab////tab////tab//{//crlf////tab////tab////tab////tab////add an ID to the script if it doesn't have one//crlf////tab////tab////tab////tab//if(arScript[i].id.length==0) {//crlf////tab////tab////tab////tab////tab//arScript[i].id=getSalt(4);//crlf////tab////tab////tab////tab////tab//appendToLog(\\quot\\Added ID to script: \\quot\\+arScript[i].id);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//var ScriptID=\\quot\\$$JS\\quot\\+arScript[i].id;//crlf////tab////tab////tab////tab////crlf////tab////tab////tab////tab////remove the current javascript element from the head when in development mode so changes to the code are reflected during development//crlf////tab////tab////tab////tab////if(\\quot\\{ExecMode}\\quot\\.equalsIgnoreCase(\\quot\\Development\\quot\\)) {//crlf////tab////tab////tab////tab////tab//var eCurrent=document.getElementById(ScriptID);//crlf////tab////tab////tab////tab////tab//if(eCurrent) {//crlf////tab////tab////tab////tab////tab////tab//eCurrent.parentNode.removeChild(eCurrent);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////};//crlf////crlf////tab////tab////tab////tab//if(!document.getElementById(ScriptID)) {//crlf////tab////tab////tab////tab////tab////add it to the <head> element//crlf////tab////tab////tab////tab////tab//var eScript=document.createElement(\\quot\\script\\quot\\);//crlf////tab////tab////tab////tab////tab//eScript.id=ScriptID;//crlf////crlf////tab////tab////tab////tab////tab////For IE\\comma\\ set the src of the script.  Another http request will be made to get the script//crlf////tab////tab////tab////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)>=0) {//crlf////tab////tab////tab////tab////tab////tab//var s=arScript[i].getAttribute(\\quot\\_url\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//eScript.setAttribute(\\quot\\src\\quot\\\\comma\\replaceAllSubstrings(s\\comma\\\\quot\\__Request\\quot\\+\\quot\\Server__\\quot\\\\comma\\getServer()));//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////otherwise\\comma\\ just include the script directly in the tag//crlf////tab////tab////tab////tab////tab////tab//eScript.innerHTML=replaceAllSubstrings(arScript[i].innerHTML\\comma\\\\quot\\//amp//amp;\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//document.getElementsByTagName(\\quot\\head\\quot\\)[0].appendChild(eScript);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//arScript[i].setAttribute(\\quot\\aspectinitialized\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab////appendToLog(\\quot\\Already initialized script: \\quot\\+arScript[i].id);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///********************************************************************//crlf//Adds styles included in widgets to the document's head element.//crlf//Called by initializeTables2012() whenever content is loaded//crlf//********************************************************************///crlf//function addStyles() {//crlf////tab//var arStyle=document.body.getElementsByTagName(\\quot\\style\\quot\\);//crlf////tab//if(arStyle) {//crlf////tab////tab//for(var i=0;i<arStyle.length;i++) {//crlf////tab////tab////tab//var StyleID=\\quot\\$$JS\\quot\\+arStyle[i].id;//crlf////tab////tab////tab////crlf////tab////tab////tab////remove the current javascript element from the head when in development mode so changes to the code are reflected during development//crlf////tab////tab////tab//if(\\quot\\{ExecMode}\\quot\\.equalsIgnoreCase(\\quot\\Development\\quot\\)) {//crlf////tab////tab////tab////tab//var eCurrent=document.getElementById(StyleID);//crlf////tab////tab////tab////tab//if(eCurrent) {//crlf////tab////tab////tab////tab////tab//eCurrent.parentNode.removeChild(eCurrent);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if(!document.getElementById(StyleID)) {//crlf////tab////tab////tab////tab////add it to the <head> element//crlf////tab////tab////tab////tab//var eStyle=document.createElement(\\quot\\style\\quot\\);//crlf////tab////tab////tab////tab//eStyle.id=StyleID;//crlf////crlf////tab////tab////tab////tab////For IE\\comma\\ set the src of the style.  Another http request will be made to get the style//crlf////tab////tab////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)>=0) {//crlf////tab////tab////tab////tab////tab//var s=arStyle.getAttribute(\\quot\\_url\\quot\\);//crlf////tab////tab////tab////tab////tab//eStyle.setAttribute(\\quot\\src\\quot\\\\comma\\replaceAllSubstrings(s\\comma\\\\quot\\__Request\\quot\\+\\quot\\Server__\\quot\\\\comma\\getServer()));//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////otherwise\\comma\\ just include the style directly in the tag//crlf////tab////tab////tab////tab////tab//eStyle.innerHTML=replaceAllSubstrings(arStyle[i].innerHTML\\comma\\\\quot\\//amp//amp;\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//document.getElementsByTagName(\\quot\\head\\quot\\)[0].appendChild(eStyle);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf////crlf////crlf//^
ID=655411|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///******************************************************************************************************//crlf//Debugging//crlf//******************************************************************************************************///crlf//var EnableConsole=false;//crlf//var EnableConsoleRemote=\\quot\\{EnableBrowserConsoleRemote}\\quot\\;//crlf////crlf//function appendToLog(msg\\comma\\boolClear\\comma\\bAddToActivityLog) //crlf//{//crlf////tab//if((EnableConsole) ~~pipe~~~~pipe~~ (EnableConsoleRemote.equalsIgnoreCase(\\quot\\true\\quot\\))) {//crlf////tab////tab//var strMsg=replaceAllSubstrings(replaceAllSubstrings(msg\\comma\\\\quot\\<\\quot\\\\comma\\\\quot\\//amp//lt;\\quot\\)\\comma\\\\quot\\>\\quot\\\\comma\\\\quot\\//amp//gt;\\quot\\);//crlf////tab////tab//var strMsg=replaceAllSubstrings(msg\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\@\\quot\\);//crlf////tab////crlf////tab////tab////add the message to the Aspect activity log//crlf////tab////tab////var strUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=appendToLog//amp//msg=Browser: \\quot\\+strMsg;//crlf////tab////tab////asynchInclude(null\\comma\\strUrl); //crlf////tab////tab////crlf////tab////tab//strMsg=formatDate(new Date()\\comma\\\\quot\\HH:mm:ss\\quot\\)+\\quot\\ \\quot\\+strMsg;//crlf////tab////tab//var e=document.getElementById(\\quot\\debug_console\\quot\\);//crlf////tab////tab//if (e) {//crlf////tab////tab////tab//(boolClear) ? e.innerHTML=strMsg+\\quot\\<br>\\quot\\ : e.innerHTML+=strMsg+\\quot\\<br>\\quot\\;//crlf////tab////tab//};//crlf////tab////crlf////tab////tab//if(console) console.log(strMsg);//crlf////tab//};//crlf//};//crlf////crlf///****************************************************************//crlf//Displays an alert message containing a stack trace.  Only works in //crlf//Firefox.  Could be modified like printStackTrace() to work in all//crlf//browsers.//crlf//*****************************************************************///crlf//function alertStackTrace() {//crlf////tab//var callstack=[];//crlf////tab//try {//crlf////tab////tab//i.dont.exist+=0; //doesn't exist- that's the point//crlf////tab//} //crlf////tab//catch(e) {//crlf////tab////tab//alert(e.stack);//crlf////tab//};//crlf//};//crlf////crlf///*********************************************************************************//crlf//Call to output a stack trace to the debug window.  This is probably more complicated//crlf//than necessary.  The match function causes all lines to be excluded.  The Firefox//crlf//method is very simple - e.stack is just a line-feed delimited array//crlf//*********************************************************************************///crlf//function printStackTrace() {//crlf////tab//var callstack=[];//crlf////tab//var isCallstackPopulated=false;//crlf////tab//try {//crlf////tab////tab//i.dont.exist+=0; //doesn't exist- that's the point//crlf////tab//} catch(e) {//crlf////tab////tab//if (e.stack) { //Firefox//crlf////tab////tab////tab//var lines=e.stack.split('\n');//crlf////tab////tab////tab//for (var i=0\\comma\\ len=lines.length; i<len; i++) {//crlf////tab////tab////tab////tab////if (lines[i].match(///power//\s*[A-Za-z0-9\-_\$]+\(/)) {//crlf////tab////tab////tab////tab////tab//callstack.push(lines[i]);//crlf////tab////tab////tab////tab////}//crlf////tab////tab////tab//}//crlf////tab////tab////tab////Remove call to printStackTrace()//crlf////tab////tab////tab//callstack.shift();//crlf////tab////tab////tab//isCallstackPopulated=true;//crlf////tab////tab//}//crlf////tab////tab//else if (window.opera //amp////amp// e.message) { //Opera//crlf////tab////tab////tab//var lines=e.message.split('\n');//crlf////tab////tab////tab//for (var i=0\\comma\\ len=lines.length; i<len; i++) {//crlf////tab////tab////tab////tab//if (lines[i].match(///power//\s*[A-Za-z0-9\-_\$]+\(/)) {//crlf////tab////tab////tab////tab////tab//var entry=lines[i];//crlf////tab////tab////tab////tab////tab////Append next line also since it has the file info//crlf////tab////tab////tab////tab////tab//if (lines[i+1]) {//crlf////tab////tab////tab////tab////tab////tab//entry +=\\quot\\ at \\quot\\ + lines[i+1];//crlf////tab////tab////tab////tab////tab////tab//i++;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//callstack.push(entry);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab//}//crlf////tab////tab////tab////Remove call to printStackTrace()//crlf////tab////tab////tab//callstack.shift();//crlf////tab////tab////tab//isCallstackPopulated=true;//crlf////tab////tab//}//crlf////tab//}//crlf////tab//if (!isCallstackPopulated) { //IE and Safari//crlf////tab////tab//var currentFunction=arguments.callee.caller;//crlf////tab////tab//while (currentFunction) {//crlf////tab////tab////tab//var fn=currentFunction.toString();//crlf////tab////tab////tab//var fname=fn.substring(fn.indexOf(\\quot\\function\\quot\\) + 8\\comma\\ fn.indexOf('')) ~~pipe~~~~pipe~~ 'anonymous';//crlf////tab////tab////tab//callstack.push(fname);//crlf////tab////tab////tab//currentFunction=currentFunction.caller;//crlf////tab////tab//}//crlf////tab//}//crlf////crlf////tab//console.log(\\quot\\stack trace:\\quot\\\\comma\\false\\comma\\true);//crlf////tab//var s=\\quot\\\\quot\\;//crlf////tab//for(var i=0;i<callstack.length;i++) s +=callstack[i]+\\quot\\//power//\r\n\\quot\\;//crlf////tab//console.log(s\\comma\\false\\comma\\true);//crlf//};//crlf////crlf//^
ID=433893|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///*********************************************************************************//crlf//Sets the display attribute for an element.  The element (aitem) may be passed as//crlf//an ID or as an html element.  If an interval is specified\\comma\\ the element's interval//crlf//attribute is updated as follows//crlf////tab//- If the item is being hidden\\comma\\ interval is set to -1 regardless of the Interval value//crlf////tab//- If the item is being shown\\comma\\ interval is set to the Interval value //crlf////tab////tab//EXCEPT when Interval=0.  If Interval=0\\comma\\ then the interval is set to 0 if//crlf////tab////tab//the item hasn't already been updated by an asynchinclude.//crlf////tab////tab////crlf//The interval argument allows an item to be displayed and for it to refresh at a given//crlf//interval.  It also allows for the content of an item to be updated only once\\comma\\ even//crlf//if it is displayed or hidden multiple times.  The idea is to allow many elements //crlf//on a page\\comma\\ to only get the content for an element when it is displayed and to avoid//crlf//getting the content again if the item is hidden and displayed again.//crlf//*********************************************************************************///crlf//function setVisible(aitem\\comma\\boolVisible\\comma\\Interval\\comma\\ShowStatusIcon\\comma\\Msg)//crlf//{//crlf////tab//var e=document.getElementById(aitem);//crlf////tab//if(!e) e=aitem;//crlf////tab//if(!e) return;//crlf////tab//if(!e.nodeName) {//crlf////tab////tab////appendToLog(\\quot\\Error in setVisible: \\quot\\+aitem+\\quot\\ bVisible=\\quot\\+boolVisible);//crlf////tab////tab////printStackTrace();//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//if (e) {//crlf////tab////tab//var strOn=\\quot\\block\\quot\\;//crlf////tab////tab//var strOff=\\quot\\none\\quot\\;//crlf////tab////tab////crlf////tab////tab////if it's a table row\\comma\\ need to use inline or table-row//crlf////tab////tab//if (e.nodeName.equalsIgnoreCase(\\quot\\tr\\quot\\)) {//crlf////tab////tab////tab//strOn=\\quot\\inline\\quot\\;//crlf////tab////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\NETSCAPE\\quot\\)>=0) strOn=\\quot\\table-row\\quot\\;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab////if it's a span\\comma\\ use inline//crlf////tab////tab//if(e.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\)) strOn=\\quot\\inline\\quot\\;//crlf////tab////tab////crlf////tab////tab////set the display on/off//crlf////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)>=0) {//crlf////tab////tab////tab////Internet Explorer//crlf////tab////tab////tab//if (boolVisible) {//crlf////tab////tab////tab////tab//e.style.display=strOn;//crlf////tab////tab////tab////tab//e.display=strOn;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//e.style.display=strOff;//crlf////tab////tab////tab////tab//e.display=strOff;//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////Everything else//crlf////tab////tab////tab//(boolVisible) ? e.style.display=strOn : e.style.display=strOff;//crlf////tab////tab//};//crlf////tab////tab//if(boolVisible) setDimensions(e);//crlf////tab////tab////crlf////tab////tab////if the element contains a table of tabs\\comma\\ also show or hide tabs belonging to the table//crlf////tab////tab//var arTable=e.getElementsByTagName(\\quot\\table\\quot\\);//crlf////tab////tab//if(arTable) {//crlf////tab////tab////tab//for (var i=0;i<arTable.length;i++) {//crlf////tab////tab////tab////tab//var sClass=arTable[i].getAttribute(\\quot\\class\\quot\\);//crlf////tab////tab////tab////tab//if((sClass) //amp////amp// (sClass.equalsIgnoreCase(\\quot\\tabdialog\\quot\\))) {//crlf////tab////tab////tab////tab////tab//if(boolVisible) {//crlf////tab////tab////tab////tab////tab////tab////show the last tab selected//crlf////tab////tab////tab////tab////tab////tab//s=arTable[i].getAttribute(\\quot\\SelectedTab\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab////tab////tab////tab//var ar=getSubStringArray(s\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////if(ar==null) alert(\\quot\\ar=null in setVisible\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//for (var j=0;j<ar.length;j++) setVisible(ar[j]\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////hide all tabs associated with the table//crlf////tab////tab////tab////tab////tab////tab//hideTabElements(arTable[i]);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////if an interval is defined\\comma\\ set the interval attribute of the item//crlf////tab////tab//if(Interval!=null) {//crlf////tab////tab////tab//if(boolVisible) {//crlf////tab////tab////tab////tab////only set the interval if it's greater than zero or if the element has not yet been updated//crlf////tab////tab////tab////tab////by an asynchinclude.  This allows a 0 interval to be specified to update the item only once\\comma\\//crlf////tab////tab////tab////tab////even if it is shown and hidden multiple times.//crlf////tab////tab////tab////tab//var bIsLoaded=false;//crlf////tab////tab////tab////tab//if(e.getAttribute(\\quot\\AspectASynchInclude\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(e.getAttribute(\\quot\\AspectASynchInclude\\quot\\).trim().length>0) bIsLoaded=true;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//if((parseInt(Interval)>0) ~~pipe~~~~pipe~~ (!bIsLoaded)) {//crlf////tab////tab////tab////tab////tab//e.setAttribute(\\quot\\interval\\quot\\\\comma\\Interval);//crlf////tab////tab////tab////tab////tab//if((ShowStatusIcon) ~~pipe~~~~pipe~~ (Msg)) {//crlf////tab////tab////tab////tab////tab////tab//e.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//if(ShowStatusIcon) {//crlf////tab////tab////tab////tab////tab////tab////tab//var eProgress=document.createElement(\\quot\\progress\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//e.appendChild(eProgress);//crlf////tab////tab////tab////tab////tab////tab////tab////var img=document.createElement(\\quot\\img\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////img.src=imageStatusActive.src;//crlf////tab////tab////tab////tab////tab////tab////tab////e.appendChild(img);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//if(Msg) {//crlf////tab////tab////tab////tab////tab////tab////tab//e.innerHTML +=\\quot\\//amp//nbsp;\\quot\\+Msg;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//if(Interval==0) refreshWidgets();//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//e.setAttribute(\\quot\\interval\\quot\\\\comma\\\\quot\\-1\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function isVisible(aitem) {//crlf////tab//var e=document.getElementById(aitem);//crlf////tab//if(!e) e=aitem;//crlf////tab//if(!e) return(false);//crlf////tab//if(!e.nodeName) return(false);//crlf////crlf////tab////if no display style is defined\\comma\\ consider it visible//crlf////tab//if(!e.style) return(true);//crlf////tab//if(!e.style.display) return(true);//crlf////tab//if(e.style.display.length==0) return(true);//crlf////crlf////tab//if (e) {//crlf////tab////tab//var strOn=\\quot\\block\\quot\\;//crlf////tab////tab//var strOff=\\quot\\none\\quot\\;//crlf////tab////tab////crlf////tab////tab////if it's a table row\\comma\\ need to use inline or table-row//crlf////tab////tab//if (e.nodeName.equalsIgnoreCase(\\quot\\tr\\quot\\)) {//crlf////tab////tab////tab//strOn=\\quot\\inline\\quot\\;//crlf////tab////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\NETSCAPE\\quot\\)>=0) strOn=\\quot\\table-row\\quot\\;//crlf////tab////tab//};//crlf////crlf////tab////tab////get the current display status//crlf////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)>=0) {//crlf////tab////tab////tab////Internet Explorer//crlf////tab////tab////tab//if ((e.style.display.length==0) ~~pipe~~~~pipe~~ (e.style.display.equalsIgnoreCase(strOff))) {return(false);} else {return(true);};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////Everything else//crlf////tab////tab////tab//if ((e.style.display.length==0) ~~pipe~~~~pipe~~ (e.style.display.equalsIgnoreCase(strOff))) {return(false);}//tab//else {return(true);};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//alert(\\quot\\Error: isVisible cannot find element with ID=\\quot\\+aitem);//crlf////tab//};//crlf//};//crlf////crlf///*********************************************************************************//crlf//Shows or hides an element.  The element may be specified using an ID or as an//crlf//html element.  The optional interval argument is passed to setVisible() so the//crlf//content of an item may be updated when it is made visible.//crlf//*********************************************************************************///crlf//function toggleVisible(aitem\\comma\\Interval\\comma\\ShowStatusIcon\\comma\\Msg) {//crlf////tab//var e=document.getElementById(aitem);//crlf////tab//if(!e) e=aitem;//crlf////tab//if(!e.nodeName) return;//crlf////tab////crlf////tab//if (e) {//crlf////tab////tab//var strOn=\\quot\\block\\quot\\;//crlf////tab////tab//var strOff=\\quot\\none\\quot\\;//crlf////tab////tab////crlf////tab////tab////if it's a table row\\comma\\ need to use inline or table-row//crlf////tab////tab//if (e.nodeName.equalsIgnoreCase(\\quot\\tr\\quot\\)) {//crlf////tab////tab////tab//strOn=\\quot\\inline\\quot\\;//crlf////tab////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\NETSCAPE\\quot\\)>=0) {//crlf////tab////tab////tab////tab//strOn=\\quot\\table-row\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//var bIsHidden=(e.style.display==strOff) ~~pipe~~~~pipe~~ ((e.offsetWidth==0) //amp////amp// (e.offsetHeight==0));//crlf////tab////tab////appendToLog(\\quot\\bIsHidden=\\quot\\+bIsHidden+\\quot\\ e.style.display=\\quot\\+e.style.display+\\quot\\ strOff=\\quot\\+strOff+\\quot\\ e.offsetWidth=\\quot\\+e.offsetWidth+\\quot\\ e.offsetHeight=\\quot\\+e.offsetHeight);//crlf////crlf////tab////tab////get the current display status//crlf////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)>=0) {//crlf////tab////tab////tab////Internet Explorer//crlf////tab////tab////tab////(Interval!=null) ? setVisible(aitem\\comma\\(e.style.display==strOff)\\comma\\Interval\\comma\\ShowStatusIcon\\comma\\Msg) : setVisible(aitem\\comma\\(e.style.display==strOff));//crlf////tab////tab////tab//(Interval!=null) ? setVisible(aitem\\comma\\(e.style.display==strOff)\\comma\\Interval\\comma\\ShowStatusIcon\\comma\\Msg) : setVisible(aitem\\comma\\bIsHidden);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////Everything else//crlf////tab////tab////tab////(Interval!=null) ? setVisible(aitem\\comma\\(e.style.display==strOff)\\comma\\Interval\\comma\\ShowStatusIcon\\comma\\Msg) : setVisible(aitem\\comma\\(e.style.display==strOff));//crlf////tab////tab////tab//(Interval!=null) ? setVisible(aitem\\comma\\(e.style.display==strOff)\\comma\\Interval\\comma\\ShowStatusIcon\\comma\\Msg) : setVisible(aitem\\comma\\bIsHidden);//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////alert(\\quot\\Error: toggleVisible cannot find element with ID=\\quot\\+strID);//crlf////tab//};//crlf//};//crlf////crlf///*********************************************************************************//crlf//*********************************************************************************///crlf//function setInterval(aitem\\comma\\Interval\\comma\\ShowStatusIcon\\comma\\Msg)//crlf//{//crlf////tab//var e=document.getElementById(aitem);//crlf////tab//if(!e) e=aitem;//crlf////tab//if(!e.nodeName) {//crlf////tab////tab//appendToLog(\\quot\\Error in setInterval: \\quot\\+aitem+\\quot\\ not found\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//e.setAttribute(\\quot\\interval\\quot\\\\comma\\Interval);//crlf////tab//if((ShowStatusIcon) ~~pipe~~~~pipe~~ (Msg)) {//crlf////tab////tab//e.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab//if(ShowStatusIcon) {//crlf////tab////tab////tab//var eProgress=document.createElement(\\quot\\progress\\quot\\);//crlf////tab////tab////tab//e.appendChild(eProgress);//crlf////tab////tab//};//crlf////tab////tab//if(Msg) {//crlf////tab////tab////tab//e.innerHTML +=\\quot\\//amp//nbsp;\\quot\\+Msg;//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//if(Interval==0) refreshWidgets();//crlf//};//crlf////tab//^
ID=913848|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//[!------------------------------------------------------------------------//crlf//Datalists://crlf////crlf//When a datalist is created using an include tag\\comma\\ an ID is specified.  An ID//crlf//is generated automatically when the tag is processed if one is not specified.//crlf////crlf//Three elements are created when the tag is processed - the visible element in //crlf//which data is edited\\comma\\ the hidden element used to submit the data and the datalist//crlf//containing the options.  //crlf////crlf//The ID's for these elements are://crlf////crlf////tab//Visible element: <ID>_input//crlf////tab//Hidden element: <ID>_input_submit//crlf////tab//Datalist: <ID>//crlf////crlf//Functions associated with datalists should use add _submit to the ID of the //crlf//visible input to get the ID of the hidden input.  They should use  //crlf//getAttribute(\\quot\\list\\quot\\) to get the ID of the datalist.  It is possible for the //crlf//list ID to be modified to point to another datalist\\comma\\ so the ID of the list//crlf//may change.//crlf//--------------------------------------------------------------------------]//crlf////crlf//[!------------------------------------------------------------------------//crlf//returns the text of the option in the selectbox e with the value of ID//crlf//returns null if e is not valid or if the value is not found//crlf//--------------------------------------------------------------------------]//crlf//function getOptionValue(_e\\comma\\_ID) {//crlf////tab//if(!_e) reutrn(null);//crlf////tab//for(var i=0;i<_e.options.length;i++) {//crlf////tab////tab//if(_e.options[i].value.equalsIgnoreCase(_ID)) return(_e.options[i].text);//crlf////tab//};//crlf////tab//return(null);//crlf//};//crlf////crlf//[!------------------------------------------------------------------------//crlf//Called to associate the visible input of a datalist with another list.//crlf//e is the visible input element.  If bKeepSelection is true\\comma\\ the option selected //crlf//in the current list will be added to the new list if it does not already exist//crlf//--------------------------------------------------------------------------]//crlf//function setDatalist(e\\comma\\NewListID\\comma\\bKeepSelection) {//crlf////tab////abort if the new list does not exist//crlf////tab//if(!document.getElementById(NewListID)) {//crlf////tab////tab//alert(\\quot\\Error in setList: List not found: \\quot\\+NewListID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////get the current and new lists//crlf////tab//var eCurrentList=document.getElementById(e.getAttribute(\\quot\\list\\quot\\));//crlf////tab//if(!eCurrentList) eCurrentList=document.getElementById(e.getAttribute(\\quot\\_list\\quot\\));//crlf////tab//var eNewList=document.getElementById(NewListID);//crlf////crlf////tab////set the attribute of the visible element to use the new list//crlf////tab////The _list attribute is used when enforcing a minimum character limit before opening the list//crlf////tab////see invoice details for an example.//crlf////tab//e.setAttribute(\\quot\\list\\quot\\\\comma\\NewListID);//crlf////tab//e.setAttribute(\\quot\\_list\\quot\\\\comma\\NewListID);//crlf////crlf////tab////see if the current input is valid for the new datalist//crlf////tab//bInputIsValid=isDatalistSelectionValid(e.value\\comma\\eNewList);//crlf////crlf////tab////if it is valid\\comma\\ then exit//crlf////tab//if(bInputIsValid) return;//crlf////tab////crlf////tab////otherwise\\comma\\ if bKeepSelection is true\\comma\\ then add the value to the new list//crlf////tab//if(bKeepSelection) {//crlf////tab////tab////get the value and the AspectID of the current selection//crlf////tab////tab//var sKeepValue=e.value;//crlf////tab////tab//var sKeepAspectID=getDatalistAspectID(sKeepValue\\comma\\eCurrentList);//crlf////crlf////tab////tab////create a new innerHTML value for the datalist\\comma\\ adding the new value alphabetically//crlf////tab////tab//var sInnerHTML=\\quot\\\\quot\\;//crlf////tab////tab//var bAdded=false;//crlf////tab////tab//for(var i=0;i<eNewList.options.length;i++) {//crlf////tab////tab////tab//var sValue=eNewList.options[i].value;//crlf////tab////tab////tab//var sAspectID=eNewList.options[i].getAttribute(\\quot\\AspectID\\quot\\);//crlf////crlf////tab////tab////tab////add the new option at the appropriate location in the list//crlf////tab////tab////tab//if(!bAdded) {//crlf////tab////tab////tab////tab//if(sValue.toUpperCase>sKeepValue.toUpperCase()) {//crlf////tab////tab////tab////tab////tab//sInnerHTML+=\\quot\\<option AspectID=\\\quot\\\\quot\\+sKeepAspectID+\\quot\\\\\quot\\ value=\\\quot\\\\quot\\+sKeepValue+\\quot\\\\\quot\\>\\quot\\;//crlf////tab////tab////tab////tab////tab//bAdded=true;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////add the existing option//crlf////tab////tab////tab//sInnerHTML+=\\quot\\<option AspectID=\\\quot\\\\quot\\+sAspectID+\\quot\\\\\quot\\ value=\\\quot\\\\quot\\+sValue+\\quot\\\\\quot\\>\\quot\\;//crlf////tab////tab//};//crlf////tab////tab//eNewList.innerHTML=sInnerHTML;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////set the value to the first item in the new list and submit the data//crlf////crlf////tab////tab////determine if data should be submitted using submitDialogCell//crlf////tab////tab//var s=e.getAttribute(\\quot\\submitdialogcell\\quot\\);//crlf////tab////tab//bSubmit=((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\true\\quot\\)));//crlf////crlf////tab////tab////get the hidden input used to submit the data//crlf////tab////tab//var eInputSubmit=document.getElementById(e.id+\\quot\\_submit\\quot\\);//crlf////crlf////tab////tab////if the new datalist is empty\\comma\\ just clear the values and return since there//crlf////tab////tab////is no default//crlf////tab////tab//if(eNewList.options.length==0) {//crlf////tab////tab////tab//e.value=\\quot\\\\quot\\;//crlf////tab////tab////tab//eInputSubmit.value=\\quot\\\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//e.value=eNewList.options[0].value;//crlf////tab////tab////tab//eInputSubmit.value=eNewList.options[0].getAttribute(\\quot\\AspectID\\quot\\);//crlf////tab////tab//};//crlf////tab////tab//if(bSubmit) submitDialogCell(eInputSubmit);//crlf////tab//};//crlf//};//crlf////crlf//[!------------------------------------------------------------------------//crlf//This function returns true if the string given by s exists as a value in //crlf//the given datalist element.//crlf//--------------------------------------------------------------------------]//crlf//function isDatalistSelectionValid(s\\comma\\eList) {//crlf////tab//for(var i=0;i<eList.options.length;i++) {//crlf////tab////tab//if(eList.options[i].value.equalsIgnoreCase(s)) return(true);//crlf////tab//};//crlf////tab//return(false);//crlf//};//crlf////crlf//[!------------------------------------------------------------------------//crlf//Returns the AspectID associated with the given value in the given datalist//crlf//--------------------------------------------------------------------------]//crlf//function getDatalistAspectID(s\\comma\\eList) {//crlf////tab//for(var i=0;i<eList.options.length;i++) {//crlf////tab////tab//if(eList.options[i].value.equalsIgnoreCase(s)) {//crlf////tab////tab////tab//return(eList.options[i].getAttribute(\\quot\\AspectID\\quot\\));//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(null);//crlf//};//crlf////crlf//[!------------------------------------------------------------------------//crlf//Called when data is modified in an input associated with a datalist.//crlf//This function verifies that the data in the input is valid.  Data is //crlf//valid if it matches one of the values in the datalist.  //crlf////crlf//If the data is valid\\comma\\ the value of the hidden input used to submit data//crlf//for the field is set to the AspectID associated with the value in the //crlf//dattalist and the field is submitted.//crlf////crlf//If the data is invalid or blank\\comma\\ the input is set to the value of the first value //crlf//in the datalist.  This might be a --select-- string.//crlf//--------------------------------------------------------------------------]//crlf//function dataListInputChanged(e) {//crlf////tab////get the value of the input//crlf////tab//var sValue=e.value.trim();//crlf////crlf////tab////determine if data should be submitted using submitDialogCell//crlf////tab//var s=e.getAttribute(\\quot\\submitdialogcell\\quot\\);//crlf////tab//bSubmit=((s) //amp////amp// (s.equalsIgnoreCase(\\quot\\true\\quot\\)));//crlf////crlf////tab////get the hidden input used to submit the data//crlf////tab//var sInputSubmitID=e.id+\\quot\\_submit\\quot\\;//crlf////tab//var eInputSubmit=document.getElementById(sInputSubmitID);//crlf////tab////tab////crlf////tab////abort if the submit input does not exist//crlf////tab//if(!eInputSubmit) {//crlf////tab////tab//alert(\\quot\\dataListInputChanged Cannot locate submit element: \\quot\\+sInputSubmitID+\\quot\\ for input: \\quot\\+e.id);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////get the datalist associated with the input//crlf////tab//if(e.getAttribute(\\quot\\list\\quot\\)) {//crlf////tab////tab//var sDataListID=e.getAttribute(\\quot\\list\\quot\\);//crlf////tab//}//crlf////tab//else if(e.getAttribute(\\quot\\_list\\quot\\)) {//crlf////tab////tab//var sDataListID=e.getAttribute(\\quot\\_list\\quot\\);//crlf////tab//};//crlf////crlf////tab//var eDataList=document.getElementById(sDataListID);//crlf////tab//if(!eDataList) {//crlf////tab////tab//eDataList=document.getElementById(replaceAllSubstrings(e.id\\comma\\\\quot\\_input\\quot\\\\comma\\\\quot\\\\quot\\));//crlf////tab//};//crlf////crlf////tab////abort if the datalist does not exist//crlf////tab//if(!eDataList) {//crlf////tab////tab//alert(\\quot\\dataListInputChanged Cannot locate datalist with ID=\\quot\\+sDataListID+\\quot\\ for input: \\quot\\+e.id);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////clear the value if the datalist contains no elements//crlf////tab//if(eDataList.options.length==0) {//crlf////tab////tab//e.value=\\quot\\\\quot\\;//crlf////tab////tab//console.log(\\quot\\Error: Datalist contains no values\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////get the default value and ID.  This is the first value in the datalist.  //crlf////tab//var sDefaultValue=eDataList.options[0].value;//crlf////tab//var sDefaultAspectID=eDataList.options[0].getAttribute(\\quot\\AspectID\\quot\\);//crlf////crlf////tab////if the cell is empty\\comma\\ set the value to the first value in the datalist and //crlf////tab////submit the data//crlf////tab//if(sValue.length==0) {//crlf////tab////tab//e.value=sDefaultValue;//crlf////tab////tab//eInputSubmit.value=sDefaultAspectID;//crlf////tab////tab////console.log(\\quot\\dataListInputChanged set default value: \\quot\\+sDefaultValue+\\quot\\=\\quot\\+sDefaultAspectID+\\quot\\ bSubmit=\\quot\\+bSubmit);//crlf////tab////tab//if(bSubmit) submitDialogCell(eInputSubmit);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////verify that the data is valid//crlf////tab////appendToLog(\\quot\\verifying datalist Value=\\quot\\+sValue\\comma\\false\\comma\\true);//crlf////tab//for(var i=0;i<eDataList.options.length;i++) {//crlf////tab////tab//if(eDataList.options[i].value.equalsIgnoreCase(sValue)) {//crlf////tab////tab////tab//var sAspectID=eDataList.options[i].getAttribute(\\quot\\AspectID\\quot\\);//crlf////tab////tab////tab//eInputSubmit.value=sAspectID;//crlf////tab////tab////tab////console.log(\\quot\\dataListInputChanged validated value: \\quot\\+sValue+\\quot\\=\\quot\\+sAspectID+\\quot\\ bSubmit=\\quot\\+bSubmit);//crlf////tab////tab////tab//if(bSubmit) {//crlf////tab////tab////tab////tab////console.log(\\quot\\dataListInputChanged calling submitDialogCell name=\\quot\\+eInputSubmit.getAttribute(\\quot\\name\\quot\\));//crlf////tab////tab////tab////tab//submitDialogCell(eInputSubmit);//crlf////tab////tab////tab//};//crlf////tab////tab////tab////appendToLog(\\quot\\Found match.  Set value of \\quot\\+eInputSubmit.id+\\quot\\=\\quot\\+sAspectID+\\quot\\ Submit=\\quot\\+bSubmit\\comma\\false\\comma\\true);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////if the data was not valid\\comma\\ then clear the input and submit a blank value//crlf////tab////appendToLog(\\quot\\Data not valid\\quot\\\\comma\\false\\comma\\true);//crlf////tab////e.value=sDefaultValue;//crlf////tab//if(sDefaultValue.toUpperCase().startsWith(\\quot\\-- SELECT\\quot\\)) {//crlf////tab////tab////console.log(\\quot\\dataListInputChanged cleared invalid value: \\quot\\+e.value);//crlf////tab////tab//e.value=\\quot\\\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////console.log(\\quot\\dataListInputChanged set invalid value: \\quot\\+sDefaultValue);//crlf////tab////tab//e.value=sDefaultValue;//crlf////tab//};//crlf////tab//eInputSubmit.value=sDefaultAspectID;//crlf////tab////console.log(\\quot\\dataListInputChanged: \\quot\\+e.value+\\quot\\=\\quot\\+eInputSubmit.value+\\quot\\ bSubmit=\\quot\\+bSubmit);//crlf////tab////appendToLog(\\quot\\Set datalist input value=[\\quot\\+e.value+\\quot\\] Set submit value=[\\quot\\+eInputSubmit.value+\\quot\\]\\quot\\);//crlf////tab//if(bSubmit) submitDialogCell(eInputSubmit);//crlf//};//crlf////crlf///******************************************************************//crlf//Refreshes the collections for all select boxes that have the \\quot\\update\\quot\\ attribute//crlf//set to true.  This attribute is set by submitTableData() when data is submitted for a table.//crlf//******************************************************************///crlf//function updateSelectBoxes()//crlf//{//crlf////tab//var arSelect=document.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab//for(var i=0;i<arSelect.length;i++) {//crlf////tab////tab//var sUpdate=arSelect[i].getAttribute(\\quot\\update\\quot\\);//crlf////tab////tab//if((sUpdate) //amp////amp// (sUpdate.equalsIgnoreCase(\\quot\\true\\quot\\))) {//crlf////tab////tab////tab//if(arSelect[i].id.length==0) arSelect[i].id=getSalt(4);//crlf////tab////tab////tab////appendToLog(\\quot\\updateSelectBoxes updating \\quot\\+arSelect[i].id);//crlf////tab////tab////tab//updateOptions(arSelect[i].id);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//var arDataList=document.getElementsByTagName(\\quot\\DataList\\quot\\);//crlf////tab//for(var i=0;i<arDataList.length;i++) {//crlf////tab////tab//var sUpdate=arDataList[i].getAttribute(\\quot\\update\\quot\\);//crlf////tab////tab//if((sUpdate) //amp////amp// (sUpdate.equalsIgnoreCase(\\quot\\true\\quot\\))) {//crlf////tab////tab////tab//if(arDataList[i].id.length==0) arDataList[i].id=getSalt(4);//crlf////tab////tab////tab//updateOptions(arDataList[i].id);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///****************************************************************************************************//crlf//Updates the options in a select box or DataList by making a call to the request server to get //crlf//a current list of options.  Relies on select boxes generated by htmlSelect which include a //crlf//source\\comma\\ filter\\comma\\ driver params and system driver name in the select tag.//crlf////crlf//If the optional Selected value is specified\\comma\\ the value of the updated select box will be set//crlf//to the given value.//crlf////crlf//If the optional AEnable paramter is specified\\comma\\ the updated select box will be enabled or //crlf//disabled accordingly.  This allows a select box to be disabled while is it being updated and //crlf//then enabled when the update is complete.//crlf////crlf//The optional CallBackFunction can be used to call a function when the update is complete.//crlf//This can be used when updateOptions is called explicitly in a script to continue with//crlf//further processing when the update is complete.//crlf////crlf//The IsComplete parrameter is used to indicate that the update is complete and to avoid//crlf//looping continuously if s is undefined due to an error getting the collection//crlf//****************************************************************************************************///crlf//function updateOptions(ID\\comma\\Selected\\comma\\AEnable\\comma\\CallbackFunction\\comma\\IsComplete\\comma\\s)//crlf//{//tab////crlf////tab////alert(\\quot\\updateOptions ID=\\quot\\+ID+\\quot\\ Selected=\\quot\\+Selected+\\quot\\ AEnable=\\quot\\+AEnable+\\quot\\ IsComplete=\\quot\\+IsComplete);//crlf////tab//var e=document.getElementById(ID);//crlf////tab//if(!e) {//crlf////tab////tab//appendToLog(\\quot\\Error: updateOptions() cannot locate select with ID=\\quot\\+ID);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var bIsDataList=(e.nodeName==\\quot\\DATALIST\\quot\\);//crlf////crlf////tab//if(IsComplete) {//crlf////tab////tab//setOptions(e\\comma\\s);//crlf////crlf////tab////tab////enable the select box//crlf////tab////tab//if(AEnable) e.disabled=!AEnable;//crlf////crlf////tab////tab//if(bIsDataList) {//crlf////tab////tab////tab////get the input associated with the datalist.  It uses the same ID\\comma\\ but without //crlf////tab////tab////tab////DataList at the beginning//crlf////tab////tab////tab//var sInputID=e.id.substring(8);//crlf////tab////tab////tab//var eInput=document.getElementById(sInputID);//crlf////tab////tab////tab//if(eInput) {//crlf////tab////tab////tab////tab//for(var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab////tab//var sAspectID=e.options.getAttribute(\\quot\\AspectID\\quot\\);//crlf////tab////tab////tab////tab////tab//if(sAspectID.equalsIgnoreCase(\\quot\\Selected\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab//eInput.value=e.options.value;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////appendToLog(\\quot\\setting selected value to: \\quot\\+Selected);//crlf////tab////tab////tab//for(var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab//if(e.options[i].value.equalsIgnoreCase(Selected)) {//crlf////tab////tab////tab////tab////tab//e.selectedIndex=i;//crlf////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////execute the callback if defined//crlf////tab////tab//if((CallbackFunction) //amp////amp// (CallbackFunction.length>0)) {//crlf////tab////tab////tab//setTimeout(CallbackFunction\\comma\\0);//crlf////tab////tab//};//crlf////crlf////tab////tab//return;//crlf////tab//}//crlf////tab////crlf////tab//var sCollectionID=e.getAttribute(\\quot\\CollectionID\\quot\\);//crlf////tab//var sSource=e.getAttribute(\\quot\\source\\quot\\);//crlf////tab//var sFilter=e.getAttribute(\\quot\\filter\\quot\\);//crlf////tab//var sParams=e.getAttribute(\\quot\\params\\quot\\);//crlf////tab//var sSysDriverName=e.getAttribute(\\quot\\SysDriverName\\quot\\);//crlf////tab////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em//amp//Widget=Notification Queries\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//query=getHtmlSelectOptions\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//CollectionID=\\quot\\+sCollectionID;//crlf////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+sSource;//crlf////tab//sUrl +=\\quot\\//amp//Filter=\\quot\\+sFilter;//crlf////tab//sUrl +=\\quot\\//amp//DriverParams=\\quot\\+sParams;//crlf////tab//sUrl +=\\quot\\//amp//SystemDriverName=\\quot\\+sSysDriverName;//crlf////tab////appendToLog(\\quot\\updateOptions URL: \\quot\\+sUrl);//crlf////crlf////tab////get current selection//crlf////tab//var SelectValue=\\quot\\\\quot\\;//crlf////tab//if(bIsDataList) {//crlf////tab////tab////get the input associated with the datalist.  It uses the same ID\\comma\\ but without //crlf////tab////tab////DataList at the beginning//crlf////tab////tab//var sInputID=e.id.substring(8);//crlf////tab////tab//var eInput=document.getElementById(sInputID);//crlf////tab////tab//if((eInput) //amp////amp// (eInput.value.length>0)) {//crlf////tab////tab////tab//for(var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab//var sOptionValue=e.options[i].value;//crlf////tab////tab////tab////tab//if(sOptionValue.equalsIgnoreCase(eInput.value)) {//crlf////tab////tab////tab////tab////tab//var SelectValue=e.options[i].getAttribute(\\quot\\AspectID\\quot\\);//crlf////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//var SelectValue=e.value;//crlf////tab//};//crlf////tab//if(Selected) SelectValue=Selected;//crlf////crlf////tab//var bEnable=false;//crlf////tab//if(AEnable) bEnable=AEnable;//crlf////crlf////tab//var sCallbackFunc=\\quot\\\\quot\\;//crlf////tab//if(CallbackFunction) sCallbackFunc=CallbackFunction;//crlf////crlf////tab//var sFunc=\\quot\\updateOptions(\\\quot\\\\quot\\+ID+\\quot\\\\\quot\\\\comma\\\\\quot\\\\quot\\+SelectValue+\\quot\\\\\quot\\\\comma\\\\quot\\+bEnable+\\quot\\\\comma\\\\\quot\\\\quot\\+sCallbackFunc+\\quot\\\\\quot\\\\comma\\true\\comma\\s)\\quot\\;//crlf////tab////appendToLog(\\quot\\updateOptions: sFunc=\\quot\\+sFunc);//crlf////tab////appendToLog(\\quot\\updateOptions: sUrl=\\quot\\+sUrl);//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///* Sets the contents of a select box given a string of options in the form option1=value1~~pipe~~option2=value2 *///crlf//function setOptions(eSelect\\comma\\strOptions) {//crlf////tab////appendToLog(\\quot\\setOptions: \\quot\\+strOptions);//crlf////tab//if(eSelect==null) {//crlf////tab////tab//appendToLog(\\quot\\eSelect is null in setOptions.  Options=\\quot\\+strOptions\\comma\\false\\comma\\true);//crlf////tab////tab//printStackTrace();//crlf////tab//};//crlf////tab////crlf////tab//var bIsDataList=(eSelect.nodeName==\\quot\\DATALIST\\quot\\);//crlf////crlf////tab////save the current selection.  It will be restored if it is in the new set of options.//crlf////tab//var Selection=\\quot\\\\quot\\;//crlf////tab//var bKeepSelection=false;//crlf////tab//if(bIsDataList) {//crlf////tab////tab//var eInput=document.getElementById(eSelect.id+\\quot\\_input\\quot\\);//crlf////tab////tab//if(eInput) {//crlf////tab////tab////tab//for(var i=0;i<eSelect.options.length;i++) {//crlf////tab////tab////tab////tab//if(eSelect.options[i].value.equalsIgnoreCase(eInput.value)) {//crlf////tab////tab////tab////tab////tab//Selection=eSelect.options[i].getAttribute(\\quot\\AspectID\\quot\\);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//Selection=eSelect.value;//crlf////tab//};//crlf////crlf////tab//eSelect.options.length=0;//crlf////tab//if(bIsDataList) eSelect.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab////use the split function instead of getSubStringArray to avoid problems that occur//crlf////tab////if the data contains quotes.//crlf////tab////arCollection=getSubStringArray(strOptions\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab//arCollection=strOptions.split(\\quot\\~~pipe~~\\quot\\);//crlf////crlf////tab//if(arCollection!=null) {//crlf////tab////tab//if(bIsDataList) {//crlf////tab////tab////tab//var sOptions=\\quot\\\\quot\\;//crlf////tab////tab////tab//var sInputValue=\\quot\\\\quot\\;//crlf////tab////tab////tab//for(var i=0;i<arCollection.length;i++) {//crlf////tab////tab////tab////tab//arPair=getSubStringArray(arCollection[i]\\comma\\\\quot\\=\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab//if((arPair) //amp////amp// (arPair.length>1)) {//crlf////tab////tab////tab////tab////tab//sOptions+=\\quot\\<option AspectID=\\\quot\\\\quot\\+arPair[0]+\\quot\\\\\quot\\ value=\\\quot\\\\quot\\+arPair[1]+\\quot\\\\\quot\\>\\quot\\;//crlf////tab////tab////tab////tab////tab//if(arPair[0].equalsIgnoreCase(Selection)) sInputValue=arPair[1];//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//eSelect.innerHTML=sOptions;//crlf////crlf////tab////tab////tab//var eInput=document.getElementById(eSelect.id+\\quot\\_input\\quot\\);//crlf////tab////tab////tab//if(eInput) eInput.value=sInputValue;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//for(var i=0;i<arCollection.length;i++) {//crlf////tab////tab////tab////tab//arPair=getSubStringArray(arCollection[i]\\comma\\\\quot\\=\\quot\\\\comma\\true);//crlf////tab////tab////tab////tab//if((arPair) //amp////amp// (arPair.length>1)) {//crlf////tab////tab////tab////tab////tab//eSelect.options[eSelect.options.length]=new Option(arPair[1]\\comma\\arPair[0]\\comma\\false\\comma\\false);//crlf////tab////tab////tab////tab////tab//if(arPair[0].equalsIgnoreCase(Selection)) bKeepSelection=true;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab//if(bKeepSelection) eSelect.value=Selection;//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//appendToLog(\\quot\\Error in setOptions.  Options is empty.\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//printStackTrace();//crlf////tab//};//crlf//};//crlf////crlf//function oldupdateOptions(ID\\comma\\Selected\\comma\\AEnable\\comma\\CallbackFunction\\comma\\IsComplete\\comma\\s)//crlf//{//tab////crlf////tab////appendToLog(\\quot\\updateOptions ID=\\quot\\+ID+\\quot\\ Selected=\\quot\\+Selected+\\quot\\ AEnable=\\quot\\+AEnable+\\quot\\ s=\\quot\\+s);//crlf////tab//var e=document.getElementById(ID);//crlf////tab//if(!e) {//crlf////tab////tab//appendToLog(\\quot\\Error: updateOptions() cannot locate select with ID=\\quot\\+ID);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var sList=e.getAttribute(\\quot\\list\\quot\\);//crlf////tab//var bIsDataList=(sList) ? true : false;//crlf////crlf////tab//if(IsComplete) {//crlf////tab////tab//setOptions(e\\comma\\s);//crlf////crlf////tab////tab////enable the select box//crlf////tab////tab//if(AEnable) e.disabled=!AEnable;//crlf////crlf////tab////tab//if((!bIsDataList) //amp////amp// (Selected)) {//crlf////tab////tab////tab////appendToLog(\\quot\\setting selected value to: \\quot\\+Selected);//crlf////tab////tab////tab//for(var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab//if(e.options[i].value.equalsIgnoreCase(Selected)) {//crlf////tab////tab////tab////tab////tab//e.selectedIndex=i;//crlf////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////execute the callback if defined//crlf////tab////tab//if((CallbackFunction) //amp////amp// (CallbackFunction.length>0)) {//crlf////tab////tab////tab//setTimeout(CallbackFunction\\comma\\0);//crlf////tab////tab//};//crlf////crlf////tab////tab//return;//crlf////tab//}//crlf////tab////crlf////tab//var sCollectionID=e.getAttribute(\\quot\\CollectionID\\quot\\);//crlf////tab//var sSource=e.getAttribute(\\quot\\source\\quot\\);//crlf////tab//var sFilter=e.getAttribute(\\quot\\filter\\quot\\);//crlf////tab//var sParams=e.getAttribute(\\quot\\params\\quot\\);//crlf////tab//var sSysDriverName=e.getAttribute(\\quot\\SysDriverName\\quot\\);//crlf////tab////crlf////tab//var sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em//amp//Widget=Notification Queries\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//query=getHtmlSelectOptions\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//CollectionID=\\quot\\+sCollectionID;//crlf////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+sSource;//crlf////tab//sUrl +=\\quot\\//amp//Filter=\\quot\\+sFilter;//crlf////tab//sUrl +=\\quot\\//amp//DriverParams=\\quot\\+sParams;//crlf////tab//sUrl +=\\quot\\//amp//SystemDriverName=\\quot\\+sSysDriverName;//crlf////tab////appendToLog(\\quot\\updateOptions URL: \\quot\\+sUrl);//crlf////crlf////tab//var SelectValue=e.value;//crlf////tab//if(Selected) SelectValue=Selected;//crlf////crlf////tab//var bEnable=false;//crlf////tab//if(AEnable) bEnable=AEnable;//crlf////crlf////tab//var sCallbackFunc=\\quot\\\\quot\\;//crlf////tab//if(CallbackFunction) sCallbackFunc=CallbackFunction;//crlf////crlf////tab//var sFunc=\\quot\\updateOptions(\\\quot\\\\quot\\+ID+\\quot\\\\\quot\\\\comma\\\\\quot\\\\quot\\+SelectValue+\\quot\\\\\quot\\\\comma\\\\quot\\+bEnable+\\quot\\\\comma\\\\\quot\\\\quot\\+sCallbackFunc+\\quot\\\\\quot\\\\comma\\true\\comma\\s)\\quot\\;//crlf////tab////appendToLog(\\quot\\sFunc=\\quot\\+sFunc);//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///* Sets the contents of a select box given a string of options in the form option1=value1~~pipe~~option2=value2 *///crlf//function oldsetOptions(eSelect\\comma\\strOptions) {//crlf////tab//if(eSelect==null) {//crlf////tab////tab//appendToLog(\\quot\\eSelect is null in setOptions.  Options=\\quot\\+strOptions\\comma\\false\\comma\\true);//crlf////tab////tab//printStackTrace();//crlf////tab//};//crlf////tab////crlf////tab//var sList=eSelect.getAttribute(\\quot\\list\\quot\\);//crlf////tab//var bIsDataList=(sList) ? true : false;//crlf////crlf////tab////save the current selection.  It will be restored if it is in the new set of options.//crlf////tab//if(!bIsDataList) {//crlf////tab////tab//var Selection=eSelect.value;//crlf////tab////tab//var bKeepSelection=false;//crlf////tab//};//crlf////tab////crlf////tab//var options=eSelect.options;//crlf////tab//options.length=0;//crlf////tab//arCollection=getSubStringArray(strOptions\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////tab//if(arCollection!=null) {//crlf////tab////tab//for(var i=0;i<arCollection.length;i++) {//crlf////tab////tab////tab//arPair=getSubStringArray(arCollection[i]\\comma\\\\quot\\=\\quot\\\\comma\\true);//crlf////tab////tab////tab//if((arPair) //amp////amp// (arPair.length>1)) {//crlf////tab////tab////tab////tab//if(bIsDataList) {//crlf////tab////tab////tab////tab////tab//var n=options.length;//crlf////tab////tab////tab////tab////tab//options[n]=new Option();//crlf////tab////tab////tab////tab////tab//options[n].setAttribute(\\quot\\Value\\quot\\\\comma\\arPair[1]);//crlf////tab////tab////tab////tab////tab//options[n].setAttribute(\\quot\\AspectID\\quot\\\\comma\\arPair[0]);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//options[options.length]=new Option(arPair[1]\\comma\\arPair[0]\\comma\\false\\comma\\false);//crlf////tab////tab////tab////tab////tab//if(arPair[0].equalsIgnoreCase(Selection)) bKeepSelection=true;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//if((!bIsDataList) //amp////amp// (bKeepSelection)) eSelect.value=Selection;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//appendToLog(\\quot\\Error in setOptions.  Options is empty.\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//printStackTrace();//crlf////tab//};//crlf//};//crlf////crlf//^
ID=940807|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//function logout()//crlf//{//crlf////tab//var CloseSessionID=getCookie(\\quot\\session\\quot\\);//crlf////tab//deleteCookie(\\quot\\session\\quot\\);//crlf////tab//window.open(getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget//amp//DocumentID=//amp//Widget=//amp//TargetPage=//amp//CloseSession=\\quot\\+CloseSessionID\\comma\\\\quot\\_self\\quot\\);//crlf//};//crlf////crlf//^
ID=296720|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//var initializeParametersCount=0;//crlf//initializeParameters();//crlf////crlf//var arUICompany=new Array();//crlf//var arUIComputer=new Array();//crlf////crlf////The last screen width is used to avoid executing the screenResizedListener() function//crlf////when the screen size changes because the keyboard is displayed on a mobile device.  //crlf////The result was for the hidepopups() function to hide the UI popups whenever the user //crlf////set the focus to a text field in a popup (e.g. search box in computer tab or a date //crlf////in a view parameter)//crlf//var LastScreenWidth=screen.width;//crlf////crlf//function screenResizedListener() {//crlf////tab//if(LastScreenWidth==screen.width) return;//crlf////tab//LastScreenWidth=screen.width;//crlf////crlf////tab////Hide popups.  They do not resize properly until opened again.//crlf////tab//hidePopups();//crlf////tab//setOpenViewSelectionMethod();//crlf////tab//updateBrowserStats();//crlf////tab//hideAllTableMenus();//crlf////tab//formatViewContainers(true);//crlf//};//crlf////crlf//function updateBrowserStats() {//crlf////tab////update screen size in the settings popup//crlf////tab//var e=document.getElementById(\\quot\\ScreenSize\\quot\\);//crlf////tab//if(e) e.innerHTML=screen.width+\\quot\\x\\quot\\+screen.height;//crlf////tab//e=document.getElementById(\\quot\\BrowserSize\\quot\\);//crlf////tab//if(e) e.innerHTML=window.innerWidth+\\quot\\x\\quot\\+window.innerHeight;//crlf//};//crlf////crlf//function initializeParameters(n)//crlf//{//crlf////tab//initializeParametersCount++;//crlf////tab//if(initializeParametersCount>10) {//crlf////tab////tab//console.log(\\quot\\aborting initializeParameters initializeParametersCount=\\quot\\+initializeParametersCount);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////abort if top bar is not loaded.  There will not be a top bar in//crlf////tab////containers other than the home page//crlf////tab//if(!document.getElementById(\\quot\\top_bar2015\\quot\\)) {//crlf////tab////tab//setTimeout(\\quot\\initializeParameters()\\quot\\\\comma\\500);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////make sure container surrounding views is loaded//crlf////tab//if(!document.getElementById(\\quot\\869512\\quot\\)) {//crlf////tab////tab//setTimeout(\\quot\\initializeParameters()\\quot\\\\comma\\500);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////Hide link used to close all open views//crlf////tab////setVisible(\\quot\\UICloseAllViews\\quot\\\\comma\\false);//crlf////crlf////tab////hide the left bar and popup menu//crlf////tab//setVisible(\\quot\\UIMenuContainer\\quot\\\\comma\\false);//crlf////crlf////tab////update info in the settings popup//crlf////tab//updateBrowserStats();//crlf////crlf////tab////enable mouseover events in menu bar//crlf////tab//var bisTouchDevice=('ontouchstart' in document.documentElement);//crlf////tab//appendToLog(\\quot\\bisTouchDevice=\\quot\\+bisTouchDevice);//crlf////crlf////tab//if(!bisTouchDevice) {//crlf////tab////tab///*//tab//Mouseover and mouseout functions are disabled for now because there is //crlf////tab////tab////tab////tab//not a way to limit the size of the select box used for views.  The //crlf////tab////tab////tab////tab//select box can extend outside the bounds of the popup and cause the //crlf////tab////tab////tab////tab//popup to close.  //crlf////tab////tab//*///crlf////tab////tab//if(false) {//crlf////tab////tab////tab//var s=\\quot\\showPopup('User'\\comma\\true)\\quot\\;//crlf////tab////tab////tab//document.getElementById(\\quot\\UISelectedUser\\quot\\).setAttribute(\\quot\\onmouseover\\quot\\\\comma\\s);//tab////crlf////tab////tab////tab//document.getElementById(\\quot\\UISelectedUser\\quot\\).onmouseover=Function(s);//tab////tab////crlf////tab////crlf////tab////tab////tab//var s=\\quot\\showPopup('Computer'\\comma\\true)\\quot\\;//crlf////tab////tab////tab//document.getElementById(\\quot\\UISelectedComputer\\quot\\).setAttribute(\\quot\\onmouseover\\quot\\\\comma\\s);//tab////crlf////tab////tab////tab//document.getElementById(\\quot\\UISelectedComputer\\quot\\).onmouseover=Function(s);//tab////tab////crlf////tab////crlf////tab////tab////tab//var s=\\quot\\showPopup('View'\\comma\\true)\\quot\\;//crlf////tab////tab////tab//document.getElementById(\\quot\\UISelectedView\\quot\\).setAttribute(\\quot\\onmouseover\\quot\\\\comma\\s);//tab////crlf////tab////tab////tab//document.getElementById(\\quot\\UISelectedView\\quot\\).onmouseover=Function(s);//tab////tab////crlf////tab////crlf////tab////tab////tab//var s=\\quot\\showPopup('Settings'\\comma\\true)\\quot\\;//crlf////tab////tab////tab//document.getElementById(\\quot\\UISettings\\quot\\).setAttribute(\\quot\\onmouseover\\quot\\\\comma\\s);//tab////crlf////tab////tab////tab//document.getElementById(\\quot\\UISettings\\quot\\).onmouseover=Function(s);//tab////tab////crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////cache the initial view informaiton//crlf////tab//var sCacheId=\\quot\\UIAvailableViews_\\quot\\+getSelectedComputer()+\\quot\\_\\quot\\+getUserProfileID();//crlf////tab//var eCache=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eCache.id=sCacheId;//crlf////tab//eCache.innerHTML=document.getElementById(\\quot\\UIAvailableViews\\quot\\).innerHTML;//crlf////tab//document.body.appendChild(eCache);//crlf////crlf////tab////initialize the computer history selection with the current selection//crlf////tab//addToUIComputerHistory(getSelectedComputer()\\comma\\getComputerName());//crlf////crlf////tab////call the showPopup function for the view popup in order to move it from the//crlf////tab////template to the menu bar.  This must be done before updating view parameters\\comma\\//crlf////tab////otherwise the update will fail if the template is moved while an asynchInclude//crlf////tab////is still in progress to update the parameters//crlf////tab//showPopup(\\quot\\View\\quot\\\\comma\\false);//crlf////crlf////tab//viewSelected();//crlf//};//crlf////crlf///**************************************************************//crlf//Records a default value.  Called when a parameter value changes.//crlf//The default is recorded in Aspect and in the javascript hashtable.//crlf//Values recorded in the hashtable are used to update parameter//crlf//values when a view is selected and html for the parameter inputs//crlf//is gotten from the hashtable rather than by a request to Aspect.//crlf//Defaults are recorded in Aspect using the ID of the parameter//crlf//definition\\comma\\ the name of the parameter in the view definition and //crlf//the ID of the parameter in the view definition.  This allows the//crlf//default to be retrieved in three ways://crlf////tab//1.  A shared default based on the param definition (shared by all views)//crlf////tab//2.  A shared default based on the param name (shared by all views)//crlf////tab//3.  A default associated only with a specific param in a specific view//crlf//**************************************************************///crlf//function putDefault(Key\\comma\\Value\\comma\\AltKey1\\comma\\AltKey2) {//crlf////tab//if(typeof(Value)==\\quot\\string\\quot\\) {//crlf////tab////tab//if(Value.equalsIgnoreCase(\\quot\\undefined\\quot\\)) {//crlf////tab////tab////tab////appendToLog(\\quot\\Ignoring default for \\quot\\+Key+\\quot\\=\\quot\\+Value+\\quot\\ Alt=\\quot\\+AltKey1+\\quot\\ Alt=\\quot\\+AltKey2);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////record the value in the javascript hashtable.//crlf////tab////this needs to be modified to account for the other two keys//crlf////tab//if(AltKey2) hashPut(AltKey2\\comma\\Value);//crlf//  //appendToLog(\\quot\\putDefault \\quot\\+Key+\\quot\\=\\quot\\+Value+\\quot\\ Alt=\\quot\\+AltKey1+\\quot\\ Alt=\\quot\\+AltKey2);//crlf////crlf////tab//var sParams=getServer()+\\quot\\/?Network=Greenlight//amp//ID=putDefault\\quot\\;//crlf////tab//sParams +=\\quot\\//amp//Key=\\quot\\+Key+\\quot\\//amp//Value=\\quot\\+Value;//crlf////tab//if(AltKey1) sParams +=\\quot\\//amp//AltKey1=\\quot\\+AltKey1;//crlf////tab//if(AltKey2) sParams +=\\quot\\//amp//AltKey2=\\quot\\+AltKey2;//crlf////tab//asynchInclude(null\\comma\\sParams\\comma\\\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\);//crlf//};//crlf////crlf///**************************************************************//crlf//These functions get the current selections//crlf//**************************************************************///crlf//function getUserProfileID() {//crlf////tab//return(document.getElementById(\\quot\\UIselect_user_profile\\quot\\).value);//crlf//};//crlf////crlf//function getUserName() {//crlf////tab//var e=document.getElementById(\\quot\\UIselect_user_profile\\quot\\)//crlf////tab//return(e.options[e.selectedIndex].text);//crlf//};//crlf////crlf//function getComputerName() {//crlf////tab//var e=document.getElementById(\\quot\\UISelectUserComputer\\quot\\);//crlf////tab//return(e.options[e.selectedIndex].text);//crlf//};//crlf////crlf//function getViewName() {//crlf////tab//var e=document.getElementById(\\quot\\UISelectView\\quot\\);//crlf////tab//return(e.options[e.selectedIndex].text);//crlf//};//crlf////crlf//function getSelectedCompany() {//crlf////tab//return(document.getElementById(\\quot\\UISelectUserCompany\\quot\\).value);//crlf//};//crlf////crlf//function getSelectedComputer() {//crlf////tab//return(document.getElementById(\\quot\\UISelectUserComputer\\quot\\).value);//crlf//};//crlf////crlf//function getSelectedComputerHistory() {//crlf////tab//return(document.getElementById(\\quot\\UISelectUserComputerHistory\\quot\\).value);//crlf//};//crlf////crlf//function getSelectedPackage() {//crlf////tab//return(document.getElementById(\\quot\\UISelectPackage\\quot\\).value);//crlf//};//crlf////crlf//function getSelectedCategory() {//crlf////tab//return(document.getElementById(\\quot\\UISelectViewCategory\\quot\\).value);//crlf//};//crlf////crlf//function getSelectedView() {//crlf////tab//return(document.getElementById(\\quot\\UISelectView\\quot\\).value);//crlf//};//crlf////crlf//function getDeployedViewsOnlySelected() {//crlf////tab//var bDeployedOnly=true;//crlf////tab//if(document.getElementById(\\quot\\UIDeployedViewsOnly\\quot\\)) {//crlf////tab////tab//bDeployedOnly=document.getElementById(\\quot\\UIDeployedViewsOnly\\quot\\).checked;//crlf////tab//};//crlf////tab//return(bDeployedOnly);//crlf//};//crlf////crlf///**************************************************************//crlf//Gets an array of available computers.//crlf//**************************************************************///crlf//function getAvailableComputers() {//crlf////tab//var e=document.getElementById(\\quot\\UICollection_Computer\\quot\\);//crlf////tab//return(e.innerHTML.trim().split(\\quot\\~~pipe~~\\quot\\));//crlf//};//crlf////crlf///**************************************************************//crlf//Gets an array of available packages.  The format of each//crlf//element in the array is://crlf////tab//PackageID=PackageName//crlf//**************************************************************///crlf//function getAvailablePackages() {//crlf////tab//var e=document.getElementById(\\quot\\UICollection_Package\\quot\\);//crlf////crlf////tab//if(!e) {//crlf////tab////tab//var arSpan=document.getElementById(\\quot\\UIAvailableViews\\quot\\).getElementsByTagName(\\quot\\SPAN\\quot\\);//crlf////tab////tab//for(var i=0;i<arSpan.length;i++) {//crlf////tab////tab////tab//if(arSpan[i].id) {//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UIAvailableViewsProcessedBy_\\quot\\)) arSpan[i].id=\\quot\\UIAvailableViewsProcessedBy\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_Package_\\quot\\)) arSpan[i].id=\\quot\\UICollection_Package\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_ViewCategory_\\quot\\)) arSpan[i].id=\\quot\\UICollection_ViewCategory\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_View_\\quot\\)) arSpan[i].id=\\quot\\UICollection_View\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//e=document.getElementById(\\quot\\UICollection_Package\\quot\\);//crlf////tab//};//crlf////crlf////tab//if(!e) return(\\quot\\\\quot\\);//crlf////tab//if(e.innerHTML.trim().length==0) return(\\quot\\\\quot\\);//crlf////crlf////tab//var a1=e.innerHTML.trim().split(\\quot\\~~pipe~~\\quot\\);//crlf////tab////crlf////tab////if not showing only deployed views\\comma\\ then done//crlf////tab//if(!getDeployedViewsOnlySelected()) return(a1);//crlf////crlf////tab////otherwise\\comma\\ only include packages that have a deployed view//crlf////tab////make an array of all package ID's for deployed views//crlf////tab//var arDeployedPackage=new Array();//crlf////tab//var arView=getAvailableViews();//crlf////tab//for(var i=0;i<arView.length;i++) {//crlf////tab////tab////each element in the array is in the form://crlf////tab////tab////ViewID=CategoryID//power//View Name//power//Params//power//HasParams//power//CacheParams//power//Deployed//power//PackageID//crlf////tab////tab//var n=arView[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var sViewID=arView[i].substring(0\\comma\\n);//crlf////tab////tab////tab//var s=arView[i].substring(n+1);//crlf////tab////tab////tab//var a=s.split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab//if(a.length>5) {//crlf////tab////tab////tab////tab//if(a[5].equalsIgnoreCase(\\quot\\true\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(arDeployedPackage.indexOf(a[6])<0) {//crlf////tab////tab////tab////tab////tab////tab//arDeployedPackage[arDeployedPackage.length]=a[6];//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//if(arDeployedPackage.indexOf(a[6])<0) {//crlf////tab////tab////tab////tab////tab//arDeployedPackage[arDeployedPackage.length]=a[6];//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//var a2=new Array();//crlf////tab//for(var i=0;i<a1.length;i++) {//crlf////tab////tab//n=a1[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var sID=a1[i].substring(0\\comma\\n);//crlf////tab////tab////tab//if(arDeployedPackage.indexOf(sID)>=0) a2[a2.length]=a1[i];//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//return(a2);//crlf//};//crlf////crlf///**************************************************************//crlf//Gets an array of available view categories.  The format of each//crlf//element in the array is://crlf////tab//Category ID=PackageID//power//Category Name//crlf//**************************************************************///crlf//function getAvailableViewCategories() {//crlf////tab//var e=document.getElementById(\\quot\\UICollection_ViewCategory\\quot\\);//crlf////crlf////tab//if(!e) {//crlf////tab////tab//var arSpan=document.getElementById(\\quot\\UIAvailableViews\\quot\\).getElementsByTagName(\\quot\\SPAN\\quot\\);//crlf////tab////tab//for(var i=0;i<arSpan.length;i++) {//crlf////tab////tab////tab//if(arSpan[i].id) {//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UIAvailableViewsProcessedBy_\\quot\\)) arSpan[i].id=\\quot\\UIAvailableViewsProcessedBy\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_Package_\\quot\\)) arSpan[i].id=\\quot\\UICollection_Package\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_ViewCategory_\\quot\\)) arSpan[i].id=\\quot\\UICollection_ViewCategory\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_View_\\quot\\)) arSpan[i].id=\\quot\\UICollection_View\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//e=document.getElementById(\\quot\\UICollection_ViewCategory\\quot\\);//crlf////tab//};//crlf////tab//if(!e) return(\\quot\\\\quot\\);//crlf////crlf////tab//var a1=e.innerHTML.trim().split(\\quot\\~~pipe~~\\quot\\);//crlf////crlf////tab////if not showing only deployed views\\comma\\ then done//crlf////tab//if(!getDeployedViewsOnlySelected()) return(a1);//crlf////crlf////tab////otherwise\\comma\\ only include categories that have a deployed view//crlf////tab////make an array of all package ID's for deployed views//crlf////tab//var arDeployedCategory=new Array();//crlf////tab//var arView=getAvailableViews();//crlf////tab//for(var i=0;i<arView.length;i++) {//crlf////tab////tab////each element in the array is in the form://crlf////tab////tab////ViewID=CategoryID//power//View Name//power//Params//power//HasParams//power//CacheParams//power//Deployed//power//PackageID//crlf////tab////tab//var n=arView[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var sViewID=arView[i].substring(0\\comma\\n);//crlf////tab////tab////tab//var s=arView[i].substring(n+1);//crlf////tab////tab////tab//var a=s.split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab//if(a.length>5) {//crlf////tab////tab////tab////tab//if(a[5].equalsIgnoreCase(\\quot\\true\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(arDeployedCategory.indexOf(a[0])<0) {//crlf////tab////tab////tab////tab////tab////tab//arDeployedCategory[arDeployedCategory.length]=a[0];//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//if(arDeployedCategory.indexOf(a[0])<0) {//crlf////tab////tab////tab////tab////tab//arDeployedCategory[arDeployedCategory.length]=a[0];//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//var a2=new Array();//crlf////tab//for(var i=0;i<a1.length;i++) {//crlf////tab////tab//n=a1[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var sID=a1[i].substring(0\\comma\\n);//crlf////tab////tab////tab//if(arDeployedCategory.indexOf(sID)>=0) a2[a2.length]=a1[i];//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//return(a2);//crlf//};//crlf////crlf///**************************************************************//crlf//Gets an array of available views.  The format of each//crlf//element in the array is://crlf////crlf////tab//ViewID=CategoryID//power//View Name//power//Params//power//HasUserParams//power//Cache//power//Deployed//crlf////crlf//Params includes the document ID\\comma\\ widget\\comma\\ container item and//crlf//any fixed params.  If a target is defined in the fixed params//crlf//with a value of _self or _blank\\comma\\ the view will be opened in a //crlf//new window with its own widget container.//crlf////crlf//HasUserParams is true or false indicating whether the view//crlf//contains parameters that need to be supplied by the user.//crlf//This is used to avoid updating the params when it is not necessary.//crlf////crlf//Cache is true or false indicating whether params for the view//crlf//can be cached and used again when the view is next selected.  If//crlf//not\\comma\\ params will be requested from Aspect each time the view is//crlf//selected.//crlf////crlf//Deployed is true if the view has been deployed for all users.//crlf//**************************************************************///crlf//function getAvailableViews() {//crlf////tab//var e=document.getElementById(\\quot\\UICollection_View\\quot\\);//crlf////crlf////tab//if(!e) {//crlf////tab////tab//var arSpan=document.getElementById(\\quot\\UIAvailableViews\\quot\\).getElementsByTagName(\\quot\\SPAN\\quot\\);//crlf////tab////tab//for(var i=0;i<arSpan.length;i++) {//crlf////tab////tab////tab//if(arSpan[i].id) {//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UIAvailableViewsProcessedBy_\\quot\\)) arSpan[i].id=\\quot\\UIAvailableViewsProcessedBy\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_Package_\\quot\\)) arSpan[i].id=\\quot\\UICollection_Package\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_ViewCategory_\\quot\\)) arSpan[i].id=\\quot\\UICollection_ViewCategory\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_View_\\quot\\)) arSpan[i].id=\\quot\\UICollection_View\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//e=document.getElementById(\\quot\\UICollection_View\\quot\\);//crlf////tab//};//crlf////tab//if(!e) return(\\quot\\\\quot\\);//crlf////crlf////tab//var a1=e.innerHTML.trim().split(\\quot\\~~pipe~~\\quot\\);//crlf////crlf////tab////de-tokenize pipes//crlf////tab//for(var i=0;i<a1.length;i++) {//crlf////tab////tab//if(a1[i].indexOf(\\quot\\[pipe]\\quot\\)>=0) a1[i]=replaceAllSubstrings(a1[i]\\comma\\\\quot\\[pipe]\\quot\\\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab//};//crlf////crlf////tab////if not showing only deployed views\\comma\\ then done//crlf////tab//if(!getDeployedViewsOnlySelected()) return(a1);//crlf////crlf////tab////otherwise\\comma\\ only include deployed views //crlf////tab//var arDeployedView=new Array();//crlf////tab//for(var i=0;i<a1.length;i++) {//crlf////tab////tab////each element in the array is in the form://crlf////tab////tab////ViewID=CategoryID//power//View Name//power//Params//power//HasParams//power//CacheParams//power//Deployed//power//PackageID//crlf////tab////tab//var n=a1[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var sViewID=a1[i].substring(0\\comma\\n);//crlf////tab////tab////tab//var s=a1[i].substring(n+1);//crlf////tab////tab////tab//var a=s.split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab//if(a.length>5) {//crlf////tab////tab////tab////tab//if(a[5].equalsIgnoreCase(\\quot\\true\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(arDeployedView.indexOf(sViewID)<0) {//crlf////tab////tab////tab////tab////tab////tab//arDeployedView[arDeployedView.length]=sViewID;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//if(arDeployedView.indexOf(sViewID)<0) {//crlf////tab////tab////tab////tab////tab//arDeployedView[arDeployedView.length]=sViewID;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//var a2=new Array();//crlf////tab//for(var i=0;i<a1.length;i++) {//crlf////tab////tab//n=a1[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var sID=a1[i].substring(0\\comma\\n);//crlf////tab////tab////tab//if(arDeployedView.indexOf(sID)>=0) a2[a2.length]=a1[i];//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//return(a2);//crlf//};//crlf////crlf///************************************************************************//crlf//Gets the key used to record the current view parameters in a hashtable//crlf//The html used to present view params is cached so a call doesn't have//crlf//to be made to Aspect to get them every time a view is selected.//crlf//************************************************************************///crlf//function getViewParamsHashKey() {//crlf////tab////it is important that the computer be included in the key because params//crlf////tab////will be different for each computer.//crlf////crlf////tab////The user is also included to allow for the possibility that the parameters //crlf////tab////for a view may be affected by the user selected//crlf////tab//var s=getUserProfileID()+\\quot\\_\\quot\\+getComputerName()+\\quot\\_\\quot\\+getSelectedView();//crlf////tab//return(s)//crlf//};//crlf////crlf///**************************************************************//crlf//Called when the Deployed Views Only checkbox changes//crlf//**************************************************************///crlf//function UIDeployedViewsOnlyChanged() {//crlf////tab//var b=document.getElementById(\\quot\\UIDeployedViewsOnly\\quot\\).checked;//crlf////tab//showViewParameters(false);//crlf////tab//updateAvailableViews(true);//crlf//};//crlf////crlf///**************************************************************//crlf//Called when a user profile is selected//crlf//**************************************************************///crlf//function userProfileSelected() {//crlf////tab//var sUserProfileID=getUserProfileID();//crlf////tab//var sParams=\\quot\\UserProfileID=\\quot\\+sUserProfileID;//crlf////crlf////tab////record the selected user as the default//crlf////tab//var sDefaultKey=\\quot\\DefaultUIUser\\quot\\;//crlf////tab//putDefault(sDefaultKey\\comma\\sUserProfileID);//crlf////crlf////tab////update the displayed user name//crlf////tab//document.getElementById(\\quot\\UISelectedUserText\\quot\\).innerHTML=getUserName();//crlf////crlf////tab////get list of available packages\\comma\\ view categories and views from the selected computer//crlf////tab//updateAvailableViews();//crlf////crlf////tab//var sSelectedComputer=getSelectedComputer();//crlf////tab//showViewParameters(false);//crlf//};//crlf////crlf///**************************************************************//crlf//Called when company selection changes//crlf//**************************************************************///crlf//function userCompanySelected(Salt) {//crlf////tab//var sSelectedCompanyID=getSelectedCompany();//crlf////crlf////tab////hide any parameters and the icon used to open a view//crlf////tab//showViewParameters(false);//crlf////crlf////tab////get the default computer for the current user / company//crlf////tab//var sCookieName=getUserProfileID()+\\quot\\_\\quot\\+getSelectedCompany();//crlf////tab//var sDefaultComputer=getCookie(sCookieName);//crlf////tab//if(!sDefaultComputer) sDefaultComputer=\\quot\\\\quot\\;//crlf////tab////appendToLog(\\quot\\Got default computer \\quot\\+sCookieName+\\quot\\=\\quot\\+sDefaultComputer);//crlf////crlf////tab////update the computer list to include computers for the selected company//crlf////tab//var eComputerList=document.getElementById(\\quot\\UISelectUserComputer\\quot\\);//crlf////tab//eComputerList.options.length=0;//crlf////tab//eComputerList.options[eComputerList.options.length]=new Option(\\quot\\-- Select --\\quot\\\\comma\\\\quot\\0\\quot\\\\comma\\false\\comma\\false);//crlf////tab//var arComputer=getAvailableComputers();//crlf////tab//for(var i=0;i<arComputer.length;i++) {//crlf////tab////tab////each element in the array is in the form HashID=CompanyID//power//Computer Name//crlf////tab////tab//var a1=arComputer[i].split(\\quot\\=\\quot\\);//crlf////tab////tab//if(a1.length>1) {//crlf////tab////tab////tab//var a2=a1[1].split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab//var sHashID=a1[0];//crlf////tab////tab////tab//var sCompanyID=a2[0];//crlf////tab////tab////tab//var sComputerName=a2[1];//crlf////tab////tab////tab//if(sCompanyID==sSelectedCompanyID) {//crlf////tab////tab////tab////tab//eComputerList.options[eComputerList.options.length]=new Option(sComputerName\\comma\\sHashID\\comma\\false\\comma\\(sHashID==sDefaultComputer));//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////update views available from the selected computer//crlf////tab//userComputerSelected(Salt);//crlf//};//crlf////crlf///**************************************************************//crlf//Called when computer selection changes//crlf//**************************************************************///crlf//function userComputerSelected(Salt) {//crlf////tab////update the displayed computer name//crlf////tab//var s=getComputerName();//crlf////tab//var n=s.indexOf(\\quot\\[\\quot\\);//crlf////tab//if(n>0) s=s.substring(0\\comma\\n-1);//crlf////tab//document.getElementById(\\quot\\UISelectedComputerText\\quot\\).innerHTML=s;//crlf////crlf////tab//var sSelectedComputer=getSelectedComputer();//crlf////tab////crlf////tab////add to history//crlf////tab//addToUIComputerHistory(sSelectedComputer\\comma\\getComputerName());//crlf////crlf////tab////record the selected computer as the default for the current user / company//crlf////tab//var sCookieName=getUserProfileID()+\\quot\\_\\quot\\+getSelectedCompany();//crlf////tab////setCookie(sCookieName\\comma\\sSelectedComputer);//crlf////tab////appendToLog(\\quot\\set default computer \\quot\\+sCookieName+\\quot\\=\\quot\\+sSelectedComputer);//crlf////crlf////tab////get list of available packages\\comma\\ view categories and views from the selected computer//crlf////tab//updateAvailableViews();//crlf////crlf////tab//showViewParameters(false);//crlf//};//crlf////crlf//function addToUIComputerHistory(ComputerID\\comma\\ComputerName) {//crlf////tab//var eHistory=document.getElementById(\\quot\\UISelectUserComputerHistory\\quot\\);//crlf////tab//if(eHistory) {//crlf////tab////tab//bExists=false;//crlf////tab////tab//for(var i=0;((!bExists) //amp////amp// (i<eHistory.options.length));i++) {//crlf////tab////tab////tab//if(eHistory.options[i].value==ComputerID) bExists=true;//crlf////tab////tab//};//crlf////crlf////tab////tab//if(!bExists) eHistory.add(new Option(ComputerName\\comma\\ComputerID\\comma\\false\\comma\\false)\\comma\\0);//crlf////tab////tab//eHistory.value=ComputerID;//crlf////tab//};//crlf//};//crlf////crlf///**************************************************************//crlf//Called when a selection is made from the computer history //crlf//**************************************************************///crlf//function UserComputerHistorySelected()//crlf//{//crlf////tab////get the history selection//crlf////tab//var sSelectedComputer=getSelectedComputerHistory();//crlf////crlf////tab////get list of computers//crlf////tab////each element in the array is in the form HashID=CompanyID//power//Computer Name//crlf////tab//var arComputer=getAvailableComputers();//crlf////crlf////tab////get the company ID of the selected computer//crlf////tab//var sSelectedCompanyID=\\quot\\\\quot\\;//crlf////tab//for(var i=0;i<arComputer.length;i++) {//crlf////tab////tab//var a1=arComputer[i].split(\\quot\\=\\quot\\);//crlf////tab////tab//if(a1.length>1) {//crlf////tab////tab////tab//if(a1[0]==sSelectedComputer) {//crlf////tab////tab////tab////tab//var a2=a1[1].split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab////tab//sSelectedCompanyID=a2[0];//crlf////tab////tab////tab////tab//break;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////set the selected company//crlf////tab//document.getElementById(\\quot\\UISelectUserCompany\\quot\\).value=sSelectedCompanyID;//crlf////crlf////tab////update the computer list to include computers for the selected company//crlf////tab//var eComputerList=document.getElementById(\\quot\\UISelectUserComputer\\quot\\);//crlf////tab//eComputerList.options.length=0;//crlf////tab//eComputerList.options[eComputerList.options.length]=new Option(\\quot\\-- Select --\\quot\\\\comma\\\\quot\\0\\quot\\\\comma\\false\\comma\\false);//crlf////tab//for(var i=0;i<arComputer.length;i++) {//crlf////tab////tab////each element in the array is in the form HashID=CompanyID//power//Computer Name//crlf////tab////tab//var a1=arComputer[i].split(\\quot\\=\\quot\\);//crlf////tab////tab//if(a1.length>1) {//crlf////tab////tab////tab//var a2=a1[1].split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab//var sHashID=a1[0];//crlf////tab////tab////tab//var sCompanyID=a2[0];//crlf////tab////tab////tab//var sComputerName=a2[1];//crlf////tab////tab////tab//if(sCompanyID==sSelectedCompanyID) {//crlf////tab////tab////tab////tab//eComputerList.options[eComputerList.options.length]=new Option(sComputerName\\comma\\sHashID\\comma\\false\\comma\\(sHashID==sSelectedComputer));//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////set the selected computer//crlf////tab//document.getElementById(\\quot\\UISelectUserComputer\\quot\\).value=sSelectedComputer;//crlf////crlf////tab//userComputerSelected(\\quot\\\\quot\\);//crlf//};//crlf////crlf///**************************************************************//crlf//Called when package selection changes//crlf//**************************************************************///crlf//function packageSelected() {//crlf////tab////hide any view parameters currently displayed//crlf////tab//showViewParameters(false);//crlf////crlf////tab////get the selected package//crlf////tab//var sSelectedPackageID=getSelectedPackage();//crlf////tab////crlf////tab////record the selected package as the default//crlf////tab//var sDefaultKey=\\quot\\DefaultUIPackage_\\quot\\+getUserProfileID();//crlf////tab//putDefault(sDefaultKey\\comma\\sSelectedPackageID);//crlf////crlf////tab////get the default category for the current user / package//crlf////tab//var sCookieName=getUserProfileID()+\\quot\\_\\quot\\+getSelectedPackage();//crlf////tab//var sDefaultCategory=getCookie(sCookieName);//crlf////tab//if(!sDefaultCategory) sDefaultCategory=\\quot\\\\quot\\;//crlf////tab////crlf////tab//appendToLog(\\quot\\packageSelected() sSelectedPackageID=[\\quot\\+sSelectedPackageID+\\quot\\]\\quot\\);//crlf////crlf////tab////update the view categories to include categories for the selected package//crlf////tab//var eViewCategory=document.getElementById(\\quot\\UISelectViewCategory\\quot\\);//crlf////tab//eViewCategory.options.length=0;//crlf////tab//var arViewCategory=getAvailableViewCategories();//crlf////tab//for(var i=0;i<arViewCategory.length;i++) {//crlf////tab////tab////each element in the array is in the form://crlf////tab////tab////CategoryID=PackageID//power//CategoryName//crlf////tab////tab//var a1=arViewCategory[i].split(\\quot\\=\\quot\\);//crlf////tab////tab//if(a1.length>1) {//crlf////tab////tab////tab//var a2=a1[1].split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab//var sCategoryID=a1[0];//crlf////tab////tab////tab//var sPackageID=a2[0];//crlf////tab////tab////tab//var sCategoryName=a2[1];//crlf////tab////tab////tab//if(sPackageID==sSelectedPackageID) {//crlf////tab////tab////tab////tab//eViewCategory.options[eViewCategory.options.length]=new Option(sCategoryName\\comma\\sCategoryID\\comma\\false\\comma\\(sCategoryID==sDefaultCategory) ~~pipe~~~~pipe~~ (eViewCategory.options.length==0));//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////set the list of views to those in the selected category//crlf////tab//viewCategorySelected();//crlf//};//crlf////crlf///**************************************************************//crlf//Called when view category selection changes//crlf//**************************************************************///crlf//function viewCategorySelected() {//crlf////tab//var sSelectedCategoryID=getSelectedCategory();//crlf////crlf////tab////record the selected category as the default for the current / package//crlf////tab//var sCookieName=getUserProfileID()+\\quot\\_\\quot\\+getSelectedPackage();//crlf////tab////setCookie(sCookieName\\comma\\sSelectedCategoryID);//crlf////tab//putDefault(\\quot\\UIDefaultCategory_\\quot\\+getUserProfileID()+\\quot\\_\\quot\\+getSelectedPackage()\\comma\\sSelectedCategoryID);//crlf////crlf////tab////get the default view for the current user / package / category//crlf////tab//sCookieName=getUserProfileID()+\\quot\\_\\quot\\+getSelectedPackage()+\\quot\\_\\quot\\+sSelectedCategoryID;//crlf////tab//var sDefaultView=getCookie(sCookieName);//crlf////crlf////tab//if(!sDefaultView) sDefaultView=\\quot\\\\quot\\;//crlf////crlf////tab////update views to include those for the selected category//crlf////tab//var eView=document.getElementById(\\quot\\UISelectView\\quot\\);//crlf////tab//eView.options.length=0;//crlf////tab//eView.options[eView.options.length]=new Option(\\quot\\-- Select --\\quot\\\\comma\\\\quot\\0\\quot\\\\comma\\false\\comma\\false);//crlf////tab//var arView=getAvailableViews();//crlf////tab//var bDefaultViewSelecetd=false;//crlf////tab//for(var i=0;i<arView.length;i++) {//crlf////tab////tab////each element in the array is in the form://crlf////tab////tab////ViewID=CategoryID//power//View Name//power//Params//power//HasParams//power//CacheParams//power//Deployed//crlf////tab////tab//var n=arView[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var sViewID=arView[i].substring(0\\comma\\n);//crlf////tab////tab////tab//var s=arView[i].substring(n+1);//crlf////tab////tab////tab//var a=s.split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab//var sCategoryID=a[0];//crlf////tab////tab////tab//var sViewName=a[1];//crlf////tab////tab////tab//if(sCategoryID==sSelectedCategoryID) {//crlf////tab////tab////tab////tab//var b=(sViewID==sDefaultView);//crlf////tab////tab////tab////tab//if(b) bDefaultViewSelecetd=true;//crlf////tab////tab////tab////tab//eView.options[eView.options.length]=new Option(sViewName\\comma\\sViewID\\comma\\false\\comma\\b);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////hide the view params container//crlf////tab//showViewParameters(false);//crlf////crlf////tab////if a default view was selected\\comma\\ then show the parameters//crlf////tab//if(bDefaultViewSelecetd) viewSelected();//crlf//}//crlf////crlf///**************************************************************//crlf//Called when a view is selected.  Updates the view params container //crlf//to show params for the selected view.//crlf//**************************************************************///crlf//function viewSelected() {//crlf////tab//enableUISelections(false);//crlf////crlf////tab////This was used to show the name of the view in the top menu bar//crlf////tab////it's not helpful//crlf////tab////document.getElementById(\\quot\\UISelectedView\\quot\\).innerHTML=getViewName();//crlf////crlf////tab//var sViewID=getSelectedView();//crlf////tab//var eViewParamsContainer=document.getElementById(\\quot\\view_params_container\\quot\\);//crlf////crlf////tab////hide the open view container//crlf////tab//showViewParameters(false);//crlf////crlf////tab////record the selected view as the default for the current / package / category//crlf////tab//var sCookieName=getUserProfileID()+\\quot\\_\\quot\\+getSelectedPackage()+\\quot\\_\\quot\\+getSelectedCategory();//crlf////tab////setCookie(sCookieName\\comma\\sViewID);//crlf////tab//putDefault(\\quot\\UIDefaultCategory_\\quot\\+getUserProfileID()+\\quot\\_\\quot\\+getSelectedPackage()+\\quot\\_\\quot\\+getSelectedCategory()\\comma\\sViewID);//crlf////crlf////tab//if(sViewID==\\quot\\0\\quot\\) {//crlf////tab////tab////hide the view params container//crlf////tab////tab//showViewParameters(false);//crlf////tab////tab//enableUISelections(true);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////see if any parameters are defined for the view//crlf////tab////tab//var bHasInputParams=false;//crlf////tab////tab//var bAllowCache=false;//crlf////tab////tab//var arView=getAvailableViews();//crlf////tab////tab//for(var i=0;i<arView.length;i++) {//crlf////tab////tab////tab//if(arView[i].startsWith(sViewID)) {//crlf////tab////tab////tab////tab//var n=arView[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab////tab//if(n>0) {//crlf////tab////tab////tab////tab////tab//var s=arView[i].substring(n+1);//crlf////tab////tab////tab////tab////tab//var a=s.split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab////tab////tab//if(a.length>3) bHasInputParams=a[3];//crlf////tab////tab////tab////tab////tab//if(a.length>4) bAllowCache=a[4];//crlf////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////clear the view params container //crlf////tab////tab//eViewParamsContainer.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab////tab//if(bHasInputParams==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////see if params have already been retrieved//crlf////tab////tab////tab//if(bAllowCache==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////tab//var HashKey=getViewParamsHashKey();//crlf////tab////tab////tab////tab//var s=hashGet(HashKey);//crlf////tab////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab////tab////appendToLog(\\quot\\got params from hashtable\\quot\\);//crlf////tab////tab////tab////tab////tab//eViewParamsContainer.innerHTML=s;//crlf////crlf////tab////tab////tab////tab////tab////set default values//crlf////tab////tab////tab////tab////tab//var arTagName=[\\quot\\input\\quot\\\\comma\\\\quot\\select\\quot\\\\comma\\\\quot\\textarea\\quot\\];//crlf////tab////tab////tab////tab////tab//for(ntag=0;ntag<arTagName.length;ntag++) {//crlf////tab////tab////tab////tab////tab////tab//var a=eViewParamsContainer.getElementsByTagName(arTagName[ntag]);//crlf////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\Found \\quot\\+a.length+\\quot\\ \\quot\\+arTagName[ntag]+\\quot\\ elements\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab////tab////tab////tab////tab////tab//if(a[i].id) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////the ID used for the default is in the container surrounding the parameter//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var e=document.getElementById(\\quot\\Container\\quot\\+a[i].id);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(e) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//var sParamId=a[i].id;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(sParamId) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//var s=hashGet(sParamId);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//s=s.toString();//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(!s.equalsIgnoreCase(\\quot\\undefined\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(a[i].type==\\quot\\checkbox\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//a[i].checked=(s==\\quot\\true\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////appendToLog(\\quot\\set \\quot\\+a[i].id+\\quot\\=\\quot\\+(s==\\quot\\true\\quot\\));//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//if((ntag==0) //amp////amp// (a[i].type.equalsIgnoreCase(\\quot\\date\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//s=s.substring(6)+\\quot\\-\\quot\\+s.substring(0\\comma\\2)+\\quot\\-\\quot\\+s.substring(3\\comma\\5);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//a[i].value=s;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////console.log(\\quot\\set \\quot\\+a[i].id+\\quot\\=\\quot\\+s+\\quot\\ value=\\quot\\+a[i].value+\\quot\\ type=\\quot\\+a[i].type);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab//viewParamsContainerUpdated();//crlf////tab////tab////tab////tab////tab//return;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab////Make a request to Aspect to get the view parameters//crlf////tab////tab////tab////appendToLog(\\quot\\making http request for params\\quot\\);//crlf////crlf////tab////tab////tab////set a status icon//crlf////tab////tab////tab//var divIcon=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//divIcon.style.marginTop=\\quot\\10px\\quot\\;//crlf////tab////tab////tab//showStatusIcon(divIcon);//crlf////tab////tab////tab//eViewParamsContainer.appendChild(divIcon);//crlf////tab////tab////tab////var img=document.createElement(\\quot\\img\\quot\\);//crlf////tab////tab////tab////img.src=imageStatusActive.src;//crlf////tab////tab////tab////eViewParamsContainer.appendChild(img);//crlf////tab////tab////tab//setVisible(\\quot\\view_params_container\\quot\\\\comma\\true);//crlf////tab////crlf////tab////tab////tab////get the HashID of the computer that will process the request//crlf////tab////tab////tab//sHashID=getSelectedComputer();//crlf////tab////tab////tab//if(sHashID.length==0) {//crlf////tab////tab////tab////tab//alert(\\quot\\Cannot update view parameters because missing computer ID\\quot\\);//crlf////tab////tab////tab////tab//return;//crlf////tab////tab////tab//};//crlf////tab////crlf////tab////tab////tab////set the url for the view params container and refresh the container to show //crlf////tab////tab////tab////params for the selected view//crlf////tab////tab////tab//var sUrl=eViewParamsContainer.getAttribute(\\quot\\_url\\quot\\)+sViewID;//crlf////tab////tab////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+sHashID;//crlf////tab////tab////tab////appendToLog(\\quot\\Getting parameters.  Url=\\quot\\+sUrl);//crlf////crlf////tab////tab////tab//var sFunc=\\quot\\viewParamsContainerUpdated()\\quot\\;//crlf////tab////tab////tab//asynchInclude(eViewParamsContainer\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////no params to display\\comma\\ so move along//crlf////tab////tab////tab//viewParamsContainerUpdated();//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///**************************************************************//crlf//Makes a request to the selected computer for information regarding//crlf//available packages\\comma\\ view categories and views.//crlf//**************************************************************///crlf//function updateAvailableViews(bUpdated)//crlf//{//crlf////tab//var sSelectedComputer=getSelectedComputer();//crlf////tab//if(sSelectedComputer==\\quot\\0\\quot\\) return;//crlf////crlf////tab////determine the div that selections will be saved to.  A separate div is used for each//crlf////tab////computer so they can be cached//crlf////tab//var sCacheId=\\quot\\UIAvailableViews_\\quot\\+sSelectedComputer+\\quot\\_\\quot\\+getUserProfileID();//crlf////crlf////tab//if(bUpdated) {//crlf////tab////tab////copy data from the cached div to the active one//crlf////tab////tab//document.getElementById(\\quot\\UIAvailableViews\\quot\\).innerHTML=document.getElementById(sCacheId).innerHTML;//crlf////crlf////tab////tab////update the ID's inside the UIAvailableViews div.  ID's include the hash ID when data//crlf////tab////tab////is cached.//crlf////tab////tab//var arSpan=document.getElementById(\\quot\\UIAvailableViews\\quot\\).getElementsByTagName(\\quot\\SPAN\\quot\\);//crlf////tab////tab//for(var i=0;i<arSpan.length;i++) {//crlf////tab////tab////tab//if(arSpan[i].id) {//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UIAvailableViewsProcessedBy_\\quot\\)) arSpan[i].id=\\quot\\UIAvailableViewsProcessedBy\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_Package_\\quot\\)) arSpan[i].id=\\quot\\UICollection_Package\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_ViewCategory_\\quot\\)) arSpan[i].id=\\quot\\UICollection_ViewCategory\\quot\\;//crlf////tab////tab////tab////tab//if(arSpan[i].id.startsWith(\\quot\\UICollection_View_\\quot\\)) arSpan[i].id=\\quot\\UICollection_View\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////update the package list to include available packages//crlf////tab////tab//var ePackage=document.getElementById(\\quot\\UISelectPackage\\quot\\);//crlf////tab////tab//ePackage.options.length=0;//crlf////tab////tab//var arPackage=getAvailablePackages();//crlf////tab////tab//for(var i=0;i<arPackage.length;i++) {//crlf////tab////tab////tab////each element in the array is in the form PackageID=PackageName//crlf////tab////tab////tab//var a=arPackage[i].split(\\quot\\=\\quot\\);//crlf////tab////tab////tab//var sPackageID=a[0];//crlf////tab////tab////tab//var sPackageName=a[1];//crlf////tab////tab////tab//ePackage.options[ePackage.options.length]=new Option(sPackageName\\comma\\sPackageID\\comma\\false\\comma\\(ePackage.options.length==0));//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab////set the view category//crlf////tab////tab//packageSelected();//crlf////crlf////tab////tab//enableUISelections(true);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////clear current data from the hidden span taga//crlf////tab//if(document.getElementById(\\quot\\UICollection_Package\\quot\\)) {//crlf////tab////tab//document.getElementById(\\quot\\UICollection_Package\\quot\\).innerHTML=\\quot\\\\quot\\;//crlf////tab//};//crlf////crlf////tab//if(document.getElementById(\\quot\\UICollection_ViewCategory\\quot\\)) {//crlf////tab////tab//document.getElementById(\\quot\\UICollection_ViewCategory\\quot\\).innerHTML=\\quot\\\\quot\\;//crlf////tab//};//crlf////crlf////tab//if(document.getElementById(\\quot\\UICollection_View\\quot\\)) {//crlf////tab////tab//document.getElementById(\\quot\\UICollection_View\\quot\\).innerHTML=\\quot\\\\quot\\;//crlf////tab//};//crlf////crlf////tab//if(sSelectedComputer!=\\quot\\0\\quot\\) {//crlf////tab////tab////if the div exists don't make the call again//crlf////tab////tab//var eCache=document.getElementById(sCacheId);//crlf////tab////tab//if((eCache) //amp////amp// (eCache.innerHTML.length>0) //amp////amp// (eCache.innerHTML.toUpperCase().indexOf(\\quot\\NOT AVAILABLE\\quot\\)<0)) {//crlf////tab////tab////tab//updateAvailableViews(true);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab////create the cache div and add it to the body//crlf////tab////tab//if(!eCache) {//crlf////tab////tab////tab//var eCache=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//eCache.id=sCacheId;//crlf////tab////tab////tab//eCache.style.display=\\quot\\none\\quot\\;//crlf////tab////tab////tab//document.body.appendChild(eCache);//crlf////tab////tab//};//crlf////crlf////tab////tab//enableUISelections(false);//crlf////tab////tab//sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget\\quot\\;//crlf////tab////tab//sUrl +=\\quot\\//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em//amp////amp//Widget=User Interface Setup\\quot\\;//crlf////tab////tab//sUrl +=\\quot\\//amp//ContainerItemID=935691//amp//getContent=true\\quot\\;//crlf////tab////tab//sUrl +=\\quot\\//amp//UserProfileID=\\quot\\+getUserProfileID();//crlf////tab////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+getSelectedComputer();//crlf////tab////tab//sUrl +=\\quot\\//amp//IsSupport={@isPackageLoaded(\\quot\\Aspect_Support\\quot\\)}\\quot\\;//crlf////tab////tab//var sFunc=\\quot\\updateAvailableViews(true)\\quot\\;//crlf////tab////tab//asynchInclude(eCache\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////tab//};//crlf//};//crlf////crlf//^
ID=857658|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//var UIUserPopupVisible=false;//crlf//var UIComputerPopupVisible=false;//crlf//var UIViewPopupVisible=false;//crlf//var UISettingsPopupVisible=false;//crlf////crlf///*****************************************************************//crlf//Hides all popup content.  Called when a popup is open and a click//crlf//occurs outside the popup to close the popup//crlf//*****************************************************************///crlf//function hidePopups() {//crlf////tab////alertStackTrace();//crlf////crlf////tab//if(!document.getElementById(\\quot\\UISelectedUser\\quot\\)) return;//crlf////crlf////tab//setVisible(\\quot\\UIUserPopup\\quot\\\\comma\\false);//crlf////tab//setVisible(\\quot\\UIComputerPopup\\quot\\\\comma\\false);//crlf////tab//setVisible(\\quot\\UIViewPopup\\quot\\\\comma\\false);//crlf////tab//setVisible(\\quot\\UISettingsPopup\\quot\\\\comma\\false);//crlf////tab////crlf////tab//document.getElementById(\\quot\\UISelectedUser\\quot\\).className=\\quot\\MenuBarLeft\\quot\\;//crlf////tab//document.getElementById(\\quot\\UISelectedComputer\\quot\\).className=\\quot\\MenuBarMiddle\\quot\\;//crlf////tab//document.getElementById(\\quot\\UISelectedView\\quot\\).className=\\quot\\MenuBarMiddle\\quot\\;//crlf////tab//document.getElementById(\\quot\\UISettings\\quot\\).className=\\quot\\MenuBarRight\\quot\\;//crlf////crlf////tab//UIUserPopupVisible=false;//crlf////tab//UIComputerPopupVisible=false;//crlf////tab//UIViewPopupVisible=false;//crlf////tab//UISettingsPopupVisible=false;//crlf//};//crlf////crlf//function toggleUserPopup() {//crlf////tab//showPopup(\\quot\\User\\quot\\\\comma\\!UIUserPopupVisible);//crlf//};//crlf////crlf//var bComputerPopupInitialized=false;//crlf//function toggleComputerPopup() {//crlf////tab//showPopup(\\quot\\Computer\\quot\\\\comma\\!UIComputerPopupVisible);//crlf////tab////initializeTabbedDialogs();//crlf////tab//if(!bComputerPopupInitialized) {//crlf////tab////tab//setVisible(\\quot\\UIComputerSelectDiv\\quot\\\\comma\\true);//crlf////tab////tab//bComputerPopupInitialized=true;//crlf////tab//};//crlf//};//crlf////crlf//function toggleViewPopup() {//crlf////tab////if the view popup has not been initialized yet\\comma\\ make sure that the params container//crlf////tab////is initialized before creating the popup.  Otherwise\\comma\\ the params container will//crlf////tab////not be initialized//crlf///*//crlf////tab//if(!document.getElementById(\\quot\\UIViewPopup\\quot\\)) {//crlf////tab////tab//if(bUpdatingViewParamsContainer) {//crlf////tab////tab////tab////wait for params to laod//crlf////tab////tab////tab//setTimeout(\\quot\\toggleViewPopup()\\quot\\\\comma\\1000);//crlf////tab////tab////tab//showDialog(\\quot\\icon=true//amp//msg=Loading...\\quot\\);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab////tab//showDialog();//crlf////tab//};//crlf//*///crlf////tab//showPopup(\\quot\\View\\quot\\\\comma\\!UIViewPopupVisible);//crlf////crlf////tab////move parameter container back from site map if necessary//crlf////tab//restoreUIViewParamsContainer();//crlf///*//crlf////tab//if(isVisible(\\quot\\UIViewPopup\\quot\\)) {//crlf////tab////tab//var eUIParmsOuterContainer=document.getElementById(\\quot\\view_params_outer_container\\quot\\);//crlf////tab////tab//if(eUIParmsOuterContainer.innerHTML.length==0) {//crlf////tab////tab////tab//var eAltUIParamsContainer=document.getElementById(\\quot\\AltUIParamsContainer\\quot\\);//crlf////tab////tab////tab//eUIParmsOuterContainer.innerHTML=eAltUIParamsContainer.innerHTML;//crlf////tab////tab////tab//eAltUIParamsContainer.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab////tab//setVisible(eAltUIParamsContainer\\comma\\false);//crlf////tab////tab//};//crlf////tab//};//crlf//*///crlf//};//crlf////crlf//function toggleSettingsPopup() {//crlf////tab////refresh the div in the settings popup containing the server selection//crlf////tab//if(!!UISettingsPopupVisible) setInterval(\\quot\\UIServerSelection\\quot\\\\comma\\0\\comma\\true);//crlf////tab//showPopup(\\quot\\Settings\\quot\\\\comma\\!UISettingsPopupVisible);//crlf//};//crlf////crlf//function getPopupWidth() {//crlf////tab//var eSelectedUser=document.getElementById(\\quot\\UISelectedUser\\quot\\);//crlf////tab//var xy=getPosition2012(eSelectedUser\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab//var X=xy[0];//crlf////crlf////tab//var eSettings=document.getElementById(\\quot\\UISettings\\quot\\);//crlf////tab//xy=getPosition2012(eSettings\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab//return((xy[0]+eSettings.offsetWidth)-X);//crlf//};//crlf////crlf//function showPopup(Name\\comma\\show) //crlf//{//crlf////tab////get the div containing the popup content//crlf////tab//var ePopup=document.getElementById(\\quot\\UI\\quot\\+Name+\\quot\\Popup\\quot\\);//crlf////crlf////tab////get the template used to create the popup//crlf////tab//var eTemplate=document.getElementById(\\quot\\UI\\quot\\+Name+\\quot\\PopupTemplate\\quot\\);//crlf////crlf////tab//if(!ePopup) {//tab////crlf////tab////tab////the popup div hasn't been created yet so create it and add it to the body//crlf////tab////tab//ePopup=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//ePopup.id=\\quot\\UI\\quot\\+Name+\\quot\\Popup\\quot\\;//crlf////tab////tab//ePopup.className=\\quot\\UIPopup\\quot\\;//crlf////tab////tab////ePopup.style.borderTop=\\quot\\none\\quot\\;//crlf////tab////tab//ePopup.innerHTML=eTemplate.innerHTML;//crlf////tab////tab//eTemplate.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab//document.body.appendChild(ePopup);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////the popup div already exists.  The innerHTML of the template should be //crlf////tab////tab////empty since it is cleared when the popup is created from the template.//crlf////tab////tab////If it's not still empty\\comma\\ copy the content again from the template.  This//crlf////tab////tab////causes changes made to the template during development to be reflected//crlf////tab////tab////in the popup div//crlf////tab////tab//if(eTemplate.innerHTML.length>0) {//crlf////tab////tab////tab//ePopup.innerHTML=eTemplate.innerHTML;//crlf////tab////tab////tab//eTemplate.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//if(show) {//crlf////tab////tab////close other popups//crlf////tab////tab//hidePopups();//crlf////crlf////tab////tab//setVisible(ePopup\\comma\\true);//crlf////crlf////tab////tab////position the div beneath the selected user//crlf////tab////tab//var eSelectedUser=document.getElementById(\\quot\\UISelectedUser\\quot\\);//crlf////tab////tab//var xy=getPosition2012(eSelectedUser\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab////tab//var X=xy[0];//crlf////tab////tab//var Y=xy[1]+eSelectedUser.offsetHeight;//crlf////tab////tab//ePopup.style.top=Y+\\quot\\px\\quot\\;//crlf////tab////tab//ePopup.style.left=X+\\quot\\px\\quot\\;//crlf////crlf////tab////tab//var eSettings=document.getElementById(\\quot\\UISettings\\quot\\);//crlf////tab////tab//var xy2=getPosition2012(eSettings\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab////tab//ePopup.style.width=((xy2[0]+eSettings.offsetWidth)-X)+\\quot\\px\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////just hide the popoup content//crlf////tab////tab//if(ePopup) setVisible(ePopup\\comma\\false);//crlf////tab//};//crlf////crlf////tab//if(Name==\\quot\\User\\quot\\) {//crlf////tab////tab//document.getElementById(\\quot\\UISelectedUser\\quot\\).className=(show) ? \\quot\\MenuBarLeftSelected\\quot\\ : \\quot\\MenuBarLeft\\quot\\;//crlf////tab////tab//UIUserPopupVisible=show;//crlf////tab//};//crlf////crlf////tab//if(Name==\\quot\\Computer\\quot\\) {//crlf////tab////tab//document.getElementById(\\quot\\UISelectedComputer\\quot\\).className=(show) ? \\quot\\MenuBarMiddleSelected\\quot\\ : \\quot\\MenuBarMiddle\\quot\\;//crlf////tab////tab//UIComputerPopupVisible=show;//crlf////tab//};//crlf////crlf////tab//if(Name==\\quot\\View\\quot\\) {//crlf////tab////tab//document.getElementById(\\quot\\UISelectedView\\quot\\).className=(show) ? \\quot\\MenuBarMiddleSelected\\quot\\ : \\quot\\MenuBarMiddle\\quot\\;//crlf////tab////tab//UIViewPopupVisible=show;//crlf////tab//};//crlf////crlf////tab//if(Name==\\quot\\Settings\\quot\\) {//crlf////tab////tab//document.getElementById(\\quot\\UISettings\\quot\\).className=(show) ? \\quot\\MenuBarRightSelected\\quot\\ : \\quot\\MenuBarRight\\quot\\;//crlf////tab////tab//UISettingsPopupVisible=show;//crlf////tab//};//crlf////crlf//};//crlf////crlf////crlf//^
ID=195067|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///**************************************************************//crlf//Called when the asynchInclude function has completed updating the//crlf//view params container//crlf//**************************************************************///crlf//function viewParamsContainerUpdated() //crlf//{//crlf////tab////record the params so they can be restored later without having to make a call//crlf////tab////to the computer//crlf////tab//var eViewParamsContainer=document.getElementById(\\quot\\view_params_container\\quot\\);//crlf////tab//hashPut(getViewParamsHashKey()\\comma\\eViewParamsContainer.innerHTML);//crlf////crlf////tab////check that values for all parameters are valid and if so\\comma\\ show the//crlf////tab////icon used to open the view//crlf////tab//enableUISelections(true);//crlf////tab//showViewParameters(true);//crlf////tab//evaluateParameters();//crlf////tab//positionItems();//crlf////crlf////tab//initializeCustomControls();//crlf////crlf////tab////update subsequent parameters.  When updating the params container\\comma\\ it is necessary to//crlf////tab////update all parameters individually\\comma\\ starting with the second.  The Aspect script that//crlf////tab////prepares the parameters by creating the divs and url's for each one is not able to//crlf////tab////pass the value of previous parameters to each subsequent parameter.  These values are//crlf////tab////required to make parameters visible or not and to allow a parameter to be modified //crlf////tab////based on the values of previous parameters (e.g. filtering a collection based on//crlf////tab////a previous parameter.  The values of parameters can be affected by the javascript//crlf////tab////functions getValue() and formatValue() that are called for each parameter\\comma\\ so it is//crlf////tab////not possible for Aspect to determine these values.  //crlf////tab//////tab////crlf////tab////This needs to be made more efficient.//crlf////tab//////crlf////tab//var eFirstParam=getFirstParamContainer();//crlf////tab//if(eFirstParam) {//crlf////tab////tab//viewParamModified(eFirstParam.id.substring(9));//crlf////tab//};//crlf//};//crlf////crlf///**************************************************************//crlf//Shows or hides view parameters and the icon used to open a view//crlf//**************************************************************///crlf//function showViewParameters(b) {//crlf////tab//setVisible(\\quot\\view_params_container\\quot\\\\comma\\b);//crlf////crlf////tab//if(b) {//crlf////tab////tab//var e=document.getElementById(\\quot\\open_view_container\\quot\\);//crlf////tab////tab//if(e) e.style.display=\\quot\\inline\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//setVisible(\\quot\\open_view_container\\quot\\\\comma\\b);//crlf////tab//};//crlf//};//crlf////crlf///**************************************************************//crlf//Enables or disables controls used to select computer and view//crlf//**************************************************************///crlf//function enableUISelections(b) {//crlf////tab//document.getElementById(\\quot\\UIselect_user_profile\\quot\\).disabled=!b;//crlf////tab//document.getElementById(\\quot\\UISelectUserCompany\\quot\\).disabled=!b;//crlf////tab//document.getElementById(\\quot\\UISelectUserComputer\\quot\\).disabled=!b;//crlf////tab//if(document.getElementById(\\quot\\UISelectPackage\\quot\\)) {//crlf////tab////tab//document.getElementById(\\quot\\UISelectPackage\\quot\\).disabled=!b;//crlf////tab////tab//document.getElementById(\\quot\\UISelectViewCategory\\quot\\).disabled=!b;//crlf////tab////tab//document.getElementById(\\quot\\UISelectView\\quot\\).disabled=!b;//crlf////tab//};//crlf//};//crlf////crlf///**************************************************************//crlf//Gets the container surrounding the first parameter in the list//crlf//**************************************************************///crlf//function getFirstParamContainer() {//crlf////tab//var eViewParamsContainer=document.getElementById(\\quot\\view_params_container\\quot\\);//crlf////tab//if(!eViewParamsContainer) return(null);//crlf////tab//arParam=eViewParamsContainer.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//if(arParam) {//crlf////tab////tab//for (var i=0;i<arParam.length;i++) {//crlf////tab////tab////tab//if(arParam[i].getAttribute(\\quot\\isfirstparam\\quot\\)) return(arParam[i]);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(null);//crlf//};//crlf////crlf///**************************************************************//crlf//Gets the container surrounding the last parameter in the list//crlf//**************************************************************///crlf//function getLastParamContainer() {//crlf////tab//var eViewParamsContainer=document.getElementById(\\quot\\view_params_container\\quot\\);//crlf////tab//arParam=eViewParamsContainer.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//if(arParam) {//crlf////tab////tab//for (var i=0;i<arParam.length;i++) {//crlf////tab////tab////tab//if(arParam[i].getAttribute(\\quot\\islastparam\\quot\\)) return(arParam[i]);//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(null);//crlf//};//crlf////crlf///**************************************************************//crlf//Gets the container surrounding the parameter following the given container//crlf//**************************************************************///crlf//function getNextParamContainer(aParam) {//crlf////tab//var e=document.getElementById(aParam);//crlf////tab//if(!e) e=aParam;//crlf////tab//if(!e) return(null);//crlf////crlf////tab//var NextParamID=e.getAttribute(\\quot\\NextParamID\\quot\\);//crlf////tab//if(NextParamID.length>0) return(document.getElementById(NextParamID));//crlf////tab//return(null);//crlf//};//crlf////crlf///**************************************************************//crlf//Returns the value of the input element in the given container.  The ID//crlf//of the input element is the same as the container surrounding it but//crlf//without the word \\quot\\container\\quot\\ at the beginning.  The argument passed to//crlf//this function is ContainerXXXX or the element itself.//crlf//**************************************************************///crlf//function getParamValue(aParam) {//crlf////tab//var e=document.getElementById(aParam);//crlf////tab//if(!e) e=aParam;//crlf////tab//if(!e) return(null);//crlf////crlf////tab////the ID of the input element is the same as the container\\comma\\ but without //crlf////tab////the \\quot\\container\\quot\\ at the beginning//crlf////tab//var sInputID=e.id.substring(9);//crlf////tab//var eInput=document.getElementById(sInputID);//crlf////tab//if(!eInput) {//crlf////tab////tab//alert(\\quot\\Cannot locate element with ID=\\quot\\+sInputID+\\quot\\ in param: \\quot\\+aParam);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////if the input param is the hidden random value\\comma\\ then return a random value.//crlf////tab////This parameter is named \\quot\\Hidden Random Value\\quot\\ and it is defined in the greenlight package//crlf////tab////The purpose of this is to allow a 2nd instance of a view to be opened with the same parameters.//crlf////tab////To use this\\comma\\ add the hidden parameter to the view's table of parameters//crlf////tab////6/2021: It looks like the ID has changed to QwuIisG6.  Note: This is not the ID in the table //crlf////tab////of user interface params.  It was determined using the console command below.//crlf////tab////console.log(\\quot\\sInputID=\\quot\\+sInputID);//crlf////tab//if((sInputID==\\quot\\eXDGHwnn\\quot\\) ~~pipe~~~~pipe~~ (sInputID==\\quot\\QwuIisG6\\quot\\)) {//crlf////tab////tab//var s=getSalt(4);//crlf////tab////tab////console.log(\\quot\\s=\\quot\\+s);//crlf////tab////tab//return(s);//crlf////tab//};//crlf////crlf////tab////if (eInput.type=='checkbox') return(e.checked);//crlf////tab////return(eInput.value);//crlf////crlf////tab//var sValue=\\quot\\\\quot\\;//crlf////tab//if(eInput.nodeName==\\quot\\DATALIST\\quot\\) {//crlf////tab////tab//var sText=document.getElementById(sInputID+\\quot\\_input\\quot\\).value;//crlf////tab////tab//for(var i=0;i<eInput.options.length;i++) {//crlf////tab////tab////tab////if(i<10) console.log(\\quot\\options[\\quot\\+i+\\quot\\].value=\\quot\\+eInput.options[i].text);//crlf////tab////tab////tab//if(eInput.options[i].value.equalsIgnoreCase(sText)) {//crlf////tab////tab////tab////tab//sValue=eInput.options[i].getAttribute(\\quot\\AspectID\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//sValue=(eInput.type=='checkbox') ? eInput.checked : eInput.value;//crlf////tab//};//crlf////crlf////tab////format the parameter value if a function is defined for it//crlf////tab//var sFuncName=\\quot\\formatParam\\quot\\+sInputID;//crlf////tab//if(eval('typeof '+sFuncName)==\\quot\\function\\quot\\) {//crlf////tab////tab//sValue=eval(sFuncName+\\quot\\('\\quot\\+sValue+\\quot\\')\\quot\\);//crlf////tab//}//crlf////tab////crlf////tab////appendToLog(\\quot\\getParamValue \\quot\\+sInputID+\\quot\\:  \\quot\\+sValue);//crlf////tab//return(sValue);//crlf//};//crlf////crlf///**************************************************************//crlf//Returns the text value of the input element in the given container.  //crlf//Same as getParamValue\\comma\\ except that the text value of a select box//crlf//is returned instead of the value.//crlf//**************************************************************///crlf//function getParamText(aParam) {//crlf////tab//var e=document.getElementById(aParam);//crlf////tab//if(!e) e=aParam;//crlf////tab//if(!e) return(null);//crlf////crlf////tab//var s=getParamValue(aParam);//crlf////crlf////tab////get the text value if it's a select box.  //crlf////tab//var sInputID=e.id.substring(9); //remove the \\quot\\container\\quot\\ prefix//crlf////tab//var eInput=document.getElementById(sInputID);//crlf////tab//if(eInput) {//crlf////tab////tab//if (eInput.tagName.equalsIgnoreCase(\\quot\\select\\quot\\)) s=eInput.options[eInput.selectedIndex].text;//crlf////tab//};//crlf////crlf////tab//return(s);//crlf//};//crlf////crlf///**************************************************************//crlf//gets string containing name and value of all parameters//crlf//**************************************************************///crlf//function getViewParams() {//crlf////tab//var s=\\quot\\ViewID=\\quot\\+document.getElementById(\\quot\\UISelectView\\quot\\).value;//crlf////tab//var eParam=getFirstParamContainer();//crlf////tab//while(eParam) {//crlf////tab////tab//s +=\\quot\\//amp//\\quot\\ + eParam.getAttribute(\\quot\\ParamName\\quot\\)+\\quot\\=\\quot\\+getParamValue(eParam);//crlf////tab////tab//eParam=getNextParamContainer(eParam);//crlf////tab//};//crlf////tab//return(s);//crlf//};//crlf////crlf///**************************************************************//crlf//gets additional parameters to be passed when opening a view including//crlf//the user profile ID\\comma\\ whether the support package is loaded and whether//crlf//the Deployed Views Only checkbox is enabled.//crlf//**************************************************************///crlf//function getUIParams() {//crlf////tab////add user profile ID\\comma\\ and parameters indicating whether it's a support computer//crlf////tab////and whether deployed views only is selected//crlf////tab//var s=\\quot\\//amp//UserProfileID=\\quot\\+document.getElementById(\\quot\\UIselect_user_profile\\quot\\).value;//crlf////tab//s +=\\quot\\//amp//IsSupport={@ispackageLoaded(\\quot\\Aspect_Support\\quot\\)}\\quot\\;//crlf////tab//s +=\\quot\\//amp//DeployedViewsOnly=\\quot\\;//crlf////tab//if(document.getElementById(\\quot\\UIDeployedViewsOnly\\quot\\)) {//crlf////tab////tab//s +=document.getElementById(\\quot\\UIDeployedViewsOnly\\quot\\).checked;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//s +=\\quot\\false\\quot\\;//crlf////tab//};//crlf////tab//return(s);//crlf//};//crlf////crlf///**************************************************************//crlf//Records default values for all parameters when a view is opened.  Defaults are//crlf//also recorded when the parameters are modified.  This function is only used//crlf//because date inputs do not fire an onChange event when the calendar is used//crlf//to select a date.  If this was corrected\\comma\\ this function could be removed.//crlf//**************************************************************///crlf//function recordDefaultParamValues() {//crlf////tab//var eParam=getFirstParamContainer();//crlf////tab//while(eParam) {//crlf////tab////tab//var sParamDefID=eParam.getAttribute(\\quot\\paramdefid\\quot\\);//crlf////tab////tab//var sID=replaceAllSubstrings(eParam.id\\comma\\\\quot\\Container\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab//putDefault(sParamDefID\\comma\\getParamValue(eParam.id)\\comma\\eParam.getAttribute(\\quot\\ParamName\\quot\\)\\comma\\sID);//crlf//    eParam=getNextParamContainer(eParam);//crlf////tab//};//crlf//};//crlf////crlf//function getSourceComputerName(HashID)//crlf//{//crlf////tab//var e=document.getElementById(\\quot\\UISelectUserComputer\\quot\\);//crlf////tab//for(var i=0;i<e.options.length;i++) {//crlf////tab////tab//if(e.options[i].value==HashID) return(e.options[i].text);//crlf////tab//};//crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf//function getViewSource() {//crlf////tab////if a source is specified in the parameters\\comma\\ use it first//crlf////tab//var eParam=getFirstParamContainer();//crlf////tab//while(eParam) {//crlf////tab////tab//if(eParam.getAttribute(\\quot\\IsSource\\quot\\)) return(getParamValue(eParam));//crlf////tab////tab//eParam=getNextParamContainer(eParam);//crlf////tab//};//crlf////crlf////tab////Otherwise use the selected computer as the source//crlf////tab//return(document.getElementById(\\quot\\UISelectUserComputer\\quot\\).value);//crlf//};//crlf////crlf//function getFullViewName() {//crlf////tab//var sTitle=getViewName();//crlf////crlf////tab//var eParam=getFirstParamContainer();//crlf////tab//while(eParam) {//crlf////tab////tab//var s=eParam.getAttribute(\\quot\\IncludeInTitle\\quot\\);//crlf////tab////tab//if(s) {//crlf////tab////tab////tab//var sValue=getParamText(eParam);//crlf////crlf////tab////tab////tab//if(s==\\quot\\1\\quot\\) {//crlf////tab////tab////tab////tab//sTitle +=\\quot\\: \\quot\\+sValue;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if(s==\\quot\\2\\quot\\) {//crlf////tab////tab////tab////tab//sTitle=sValue;//crlf////tab////tab////tab////tab////note: not aborting here makes it possible to override the default title//crlf////tab////tab////tab////tab////and then append additional values to the title//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//eParam=getNextParamContainer(eParam);//crlf////tab//};//crlf////crlf////tab//return(sTitle);//crlf//};//crlf////crlf///**************************************************************//crlf//Called when a parameter value is modified.  An onChange function must//crlf//be defined in the input element of the parameter definition.//crlf//**************************************************************///crlf//function viewParamModified(ID) {//crlf////tab//var e=document.getElementById(\\quot\\Container\\quot\\+ID);//crlf////crlf////tab////record the new default value//crlf////tab//var sDefaultID=e.getAttribute(\\quot\\paramdefid\\quot\\);//crlf////tab//putDefault(sDefaultID\\comma\\getParamValue(\\quot\\Container\\quot\\+ID)\\comma\\e.getAttribute(\\quot\\ParamName\\quot\\)\\comma\\ID);//crlf////crlf////tab////update the subsequent parameters//crlf////tab//var sNextID=e.getAttribute(\\quot\\NextParamID\\quot\\);//crlf////tab////appendToLog(\\quot\\viewParamModified: \\quot\\+ID+\\quot\\ Next ID: \\quot\\+sNextID);//crlf////tab//if(sNextID) {//crlf////tab////tab//if(sNextID.length>0) updateViewParameter(sNextID);//crlf////tab//};//crlf////tab//evaluateParameters();//crlf//};//crlf////crlf///**************************************************************//crlf//Updates the contents of a parameter container by setting the interval url//crlf//to the url specified for the parameter definition.  The names and values//crlf//of all other parameters are appended to the url so the contents can be//crlf//updated to reflect the selections made for other parameters.//crlf//**************************************************************///crlf//function updateViewParameter(ID) {//crlf////tab////get the span tag surrounding the parameter.  The ID is \\quot\\Containerxxxx\\quot\\//crlf////tab//var e=document.getElementById(ID);//crlf////crlf////tab////see if the parameter is to be updated.  //crlf////tab//var sUpdate=e.getAttribute(\\quot\\Update\\quot\\);//crlf////crlf////tab//if(sUpdate.equalsIgnoreCase(\\quot\\true\\quot\\)) {//crlf////tab////tab////set the url to the base url and add any parameters that have been set//crlf////tab////tab////remove any parentheses and quotes that may be in the user agent//crlf////tab////tab//var sUrl=e.getAttribute(\\quot\\_url\\quot\\)+\\quot\\//amp//\\quot\\+getViewParams();//crlf////tab////crlf////tab////tab////add the current value of the parameter //crlf////tab////tab//sUrl +=\\quot\\//amp//CurrentParamValue=\\quot\\+getParamValue(ID);//crlf////tab////tab////crlf////tab////tab////disable any controls in the container//crlf////tab////tab//var a=e.getElementsByTagName(\\quot\\input\\quot\\);//crlf////tab////tab//if(a) for(var i=0;i<a.length;i++) a[i].disabled=true;//crlf////tab////tab//a=e.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab////tab//if(a) for(var i=0;i<a.length;i++) a[i].disabled=true;//crlf////tab////tab//a=e.getElementsByTagName(\\quot\\checkbox\\quot\\);//crlf////tab////tab//if(a) for(var i=0;i<a.length;i++) a[i].disabled=true;//crlf////tab////crlf////tab////tab////update the content of the parameter//crlf////tab////tab//var sFunc=\\quot\\viewParameterUpdated('\\quot\\+ID+\\quot\\')\\quot\\;//crlf////tab////tab//asynchInclude(e\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////tab//};//crlf////crlf////tab//var sNextID=e.getAttribute(\\quot\\NextParamID\\quot\\);//crlf////tab//if(sNextID.length>0) updateViewParameter(sNextID);//crlf//};//crlf////crlf//function viewParameterUpdated(ID) {//crlf////tab//initializeCustomControls();//crlf//};//crlf////crlf///**************************************************************//crlf//Tests validity of all parameter values. //tab////crlf//**************************************************************///crlf//function evaluateParameters() {//crlf////tab////Move any scripts added with parameters to the head element.  These scripts//crlf////tab////contain functions used to evaluate the validity of parameter inputs//crlf////tab//addScripts();//crlf////tab////crlf////tab////get values for all parameters.  The value of all parameters is passed when the//crlf////tab////value of each individual parameter is evaluated.  //crlf////tab//var sAllParams=getViewParams();//crlf////tab////crlf////tab////evaluate each parameter//crlf////tab//var bAllOk=true;//crlf////tab//var s=\\quot\\\\quot\\;//crlf////tab//var eParam=getFirstParamContainer();//crlf////tab//while(eParam) {//crlf////tab////tab//var sInputID=eParam.id.substring(9);//crlf////tab////tab//var sFuncName=\\quot\\evalParam\\quot\\+sInputID;//crlf////tab////tab//var b=true;//crlf////tab////tab//if(eval('typeof '+sFuncName)==\\quot\\function\\quot\\) {//crlf////tab////tab////tab//var v=getParamValue(eParam);//crlf////tab////tab////tab//var b=eval(sFuncName+\\quot\\(\\\quot\\\\quot\\+v+\\quot\\\\\quot\\\\comma\\\\\quot\\\\quot\\+sAllParams+\\quot\\\\\quot\\)\\quot\\);//crlf////tab////tab////tab//bAllOk=bAllOk //amp////amp// b;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab//};//crlf////tab////tab//eParam=getNextParamContainer(eParam);//crlf////tab//};//crlf////crlf////tab////appendToLog(\\quot\\evaluateParameters result: \\quot\\+bAllOk);//crlf////tab//if(bAllOk) {//crlf////tab////tab//document.getElementById(\\quot\\open_view_container\\quot\\).style.display=\\quot\\inline\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//setVisible(\\quot\\open_view_container\\quot\\\\comma\\bAllOk);//crlf////tab//};//crlf//};//crlf//^
ID=600452|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=Aspect_Script|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf//function dummy() {//crlf//};//crlf////crlf//function setOpenViewSelectionMethod() //crlf//{//crlf////tab//var eContainer=document.getElementById(\\quot\\ViewOutputContainer\\quot\\);//crlf////tab//var eTable=document.getElementById(\\quot\\OutputTabs\\quot\\);//crlf////tab//var eSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////crlf////tab////if number of views is <=1\\comma\\ don't need to show either method//crlf////tab//if(countOpenViews()<1) {//crlf////tab////tab//setVisible(eSelect\\comma\\false);//crlf////tab////tab//setVisible(\\quot\\OutputSelectContainer\\quot\\\\comma\\false);//crlf////crlf////tab////tab////hide the tabs//crlf////tab////tab//setVisible(eTable\\comma\\false);//crlf////crlf////tab////tab////Show the view title.  This is the title bars that appear just above the view//crlf////tab////tab//showViewTitles(true);//crlf////crlf////tab////tab////hide the Close All button//crlf////tab////tab//setVisible(\\quot\\UICloseAllViews\\quot\\\\comma\\false);//crlf////crlf////tab////tab////hide the element used to close the selected view when the select box is visible//crlf////tab////tab//setVisible(\\quot\\UICloseSelectedView\\quot\\\\comma\\false);//crlf////crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////table must be visible to determine it's width.  Does not seem to cause screen flicker//crlf////tab//setVisible(eTable\\comma\\true);//crlf////tab////crlf////tab//ContainerWidth=eContainer.offsetWidth;//crlf////tab//TableWidth=eTable.rows[0].offsetWidth;//crlf////crlf////tab////appendToLog(\\quot\\ContainerWidth=\\quot\\+ContainerWidth+\\quot\\ TableWidth=\\quot\\+TableWidth);//crlf////tab//if(TableWidth>ContainerWidth*0.75) {//crlf////tab////tab////use select box.  Don't use setVisible because the display needs to be inline\\comma\\ not block//crlf////tab////tab//eSelect.style.display=\\quot\\inline\\quot\\;//crlf////tab////tab//eSelect.display=\\quot\\inline\\quot\\;//crlf////crlf////tab////tab////show the div surrounding the select box//crlf////tab////tab//setVisible(\\quot\\OutputSelectContainer\\quot\\\\comma\\true);//crlf////crlf////tab////tab////hide the tabs//crlf////tab////tab//setVisible(eTable\\comma\\false);//crlf////crlf////tab////tab////hide all view titles.  These are the title bars that appear just above the view//crlf////tab////tab//showViewTitles(false);//crlf////crlf////tab////tab////show the Close All button//crlf////tab////tab//setVisible(\\quot\\UICloseAllViews\\quot\\\\comma\\(countOpenViews()>0));//crlf////crlf////tab////tab////show the element used to close the selected view//crlf////tab////tab//setVisible(\\quot\\UICloseSelectedView\\quot\\\\comma\\(countOpenViews()>0));//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////use tabs//crlf////crlf////tab////tab////hide the select box and the container surrounding it//crlf////tab////tab//setVisible(eSelect\\comma\\false);//crlf////tab////tab//setVisible(\\quot\\OutputSelectContainer\\quot\\\\comma\\false);//crlf////crlf////tab////tab////show the tabs//crlf////tab////tab//setVisible(eTable\\comma\\true);//crlf////crlf////tab////tab////hide all view titles//crlf////tab////tab//showViewTitles(false);//crlf////crlf////tab////tab////show the Close All button//crlf////tab////tab//setVisible(\\quot\\UICloseAllViews\\quot\\\\comma\\(countOpenViews()>0));//crlf////crlf////tab////tab////show the element used to close the selected view//crlf////tab////tab//setVisible(\\quot\\UICloseSelectedView\\quot\\\\comma\\false);//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Shows or hides title bars above each view//crlf//***********************************************************************///crlf//function showViewTitles(b) {//crlf////tab//var eSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//if(!eSelect) return;//crlf////tab//if(eSelect.options.length==0) return;//crlf////crlf////tab//for(var i=0;i<eSelect.options.length;i++) {//crlf////tab////tab//var s=eSelect.options[i].value.substring(13); //remove the ViewContainer prefix//crlf////tab////tab//setVisible(\\quot\\ViewTitleContainer1\\quot\\+s\\comma\\b);//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Refreshes the currently selected view//crlf//***********************************************************************///crlf//function refreshSelectedView()//crlf//{//crlf////tab//var eSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//var s=eSelect.value.substring(13); //remove the ViewContainer prefix//crlf////tab//if(s.length>0) {//crlf////tab////tab//hidePopups();//crlf////tab////tab//refreshView(s);//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Refreshes the content of a view//crlf//***********************************************************************///crlf//function refreshView(ID\\comma\\b) {//crlf////tab//if(b) {//crlf////tab////tab//showDialog();//crlf////tab////tab//viewUpdated(ID\\comma\\true);//crlf////tab////tab//return;//crlf////tab//}//crlf////tab////crlf////tab//var e=document.getElementById(\\quot\\Div\\quot\\+ID);//crlf////crlf////tab////abort if the view is already being refreshed//crlf////tab//if(e.childNodes[0]) {//crlf////tab////tab//if(e.childNodes[0].getAttribute) {//crlf////tab////tab////tab//var s=e.childNodes[0].getAttribute(\\quot\\Refreshing\\quot\\);//crlf////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab//appendToLog(\\quot\\Already refreshing\\quot\\);//crlf////tab////tab////tab////tab//return;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////record the starting time in the output div//crlf////tab//e.setAttribute(\\quot\\StartTime\\quot\\\\comma\\new Date().getTime());//crlf////crlf////tab////show a message in the output div while the content is loading//crlf////tab//var divMessage=document.createElement(\\quot\\div\\quot\\);//crlf////tab//divMessage.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\output_loading\\quot\\);//crlf////tab//divMessage.setAttribute(\\quot\\Refreshing\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab//var eProgress=document.createElement(\\quot\\Progress\\quot\\);//crlf////tab//eProgress.style.width=\\quot\\250px\\quot\\;//crlf////tab//divMessage.appendChild(eProgress);//crlf////tab//e.insertBefore(divMessage\\comma\\e.childNodes[0]); //crlf////crlf////tab//var Url=e.getAttribute(\\quot\\url\\quot\\);//crlf////tab//sFunc=\\quot\\refreshView(\\\quot\\\\quot\\+ID+\\quot\\\\\quot\\\\comma\\true)\\quot\\;//crlf////tab//asynchInclude(e\\comma\\Url\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///***********************************************************************//crlf//print the content a view//crlf//***********************************************************************///crlf//function printView(ID\\comma\\sWrapper) {//crlf////tab//var eView=document.getElementById(\\quot\\Div\\quot\\+ID);//crlf////tab//if(!eView) {//crlf////tab////tab//alert(\\quot\\Cannot locate view with ID=Div\\quot\\+ID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////if the printer wrapper was retrieved\\comma\\ open the document in a new window//crlf////tab//if(sWrapper) {//crlf////tab////tab//sWrapper +=eView.innerHTML;//crlf////tab////tab//sWrapper +=\\quot\\</body></html>\\quot\\//crlf////crlf////tab////tab////show message//crlf////tab////tab//showDialog(\\quot\\icon=true//amp//msg=Preparing report...\\quot\\);//crlf////crlf////tab////tab////apply overlay to disable view//crlf////tab////tab//applyOverlay(eView\\comma\\\\quot\\overlay\\quot\\+ID);//crlf////tab////tab////crlf////tab////tab//var docprint=window.open(\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\\\comma\\\\quot\\toolbar=yes\\comma\\location=no\\comma\\directories=yes\\comma\\menubar=yes\\comma\\scrollbars=yes\\comma\\width=650\\comma\\ height=600\\comma\\ left=100\\comma\\ top=25\\quot\\); //crlf////tab////tab//docprint.document.open(); //crlf////tab////tab//docprint.document.write(sWrapper); //crlf////crlf////tab////tab////copy style elements//crlf////tab////tab//var arStyle=document.getElementsByTagName(\\quot\\style\\quot\\);//crlf////tab////tab//for(var i=0;i<arStyle.length;i++) {//crlf////tab////tab////tab//docprint.document.getElementsByTagName(\\quot\\head\\quot\\)[0].appendChild(arStyle[i].cloneNode(true));//crlf////tab////tab//};//crlf////crlf////tab////tab//var arTagNames=new Array(\\quot\\div\\quot\\\\comma\\\\quot\\form\\quot\\\\comma\\\\quot\\thead\\quot\\);//crlf////tab////tab//for (var i=0;i<arTagNames.length;i++) {//crlf////tab////tab////tab//var arTag=docprint.document.getElementsByTagName(arTagNames[i]);//crlf////tab////tab////tab//var j=0;//crlf////tab////tab////tab//while (j<arTag.length) {//crlf////tab////tab////tab////tab//var attr1=arTag[j].getAttribute(\\quot\\noprint\\quot\\);//crlf////tab////tab////tab////tab//var attr2=arTag[j].getAttribute(\\quot\\print\\quot\\);//crlf////tab////tab////tab////tab//if (((attr1) //amp////amp// (attr1.toString().equalsIgnoreCase(\\quot\\true\\quot\\))) ~~pipe~~~~pipe~~ ((attr2) //amp////amp// (attr2.toString().equalsIgnoreCase(\\quot\\false\\quot\\)))) {//crlf////tab////tab////tab////tab////tab//arTag[j].style.display=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab////tab//arTag[j].display=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab////tab//arTag[j].innerHTML=\\quot\\//amp//nbsp;\\quot\\;//crlf////tab////tab////tab////tab////tab//arTag[j].parentNode.removeChild(arTag[j]); //crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//j++;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab////hide all select boxes//crlf////tab////tab//var arSelect=docprint.document.getElementsByTagName(\\quot\\select\\quot\\);//crlf////tab////tab//for(var i=0;i<arSelect.length;i++) {//crlf////tab////tab////tab////could modify this to determine if the select box is inside a table //crlf////tab////tab////tab//arSelect[i].style.display=\\quot\\none\\quot\\;//crlf////tab////tab////tab//arSelect[i].display=\\quot\\none\\quot\\;//crlf////tab////tab//};//crlf////crlf////tab////tab////hide all input boxes (this hides inputs on cash reconciliation)//crlf///*//crlf////tab////tab//var ar=docprint.document.getElementsByTagName(\\quot\\input\\quot\\);//crlf////tab////tab//for(var i=0;i<ar.length;i++) {//crlf////tab////tab////tab////could modify this to determine if the select box is inside a table //crlf////tab////tab////tab//ar[i].style.display=\\quot\\none\\quot\\;//crlf////tab////tab////tab//ar[i].display=\\quot\\none\\quot\\;//crlf////tab////tab//};//crlf//*///crlf////crlf////tab////tab////hide all collapsed section headers//crlf///*//crlf////tab////tab//var arDiv=docprint.document.getElementsByClassName(\\quot\\sectionheader\\quot\\);//crlf////tab////tab//if(arDiv) {//crlf////tab////tab////tab//for(var i=0;i<arDiv.length;i++) {//crlf////tab////tab////tab////tab//var o=arDiv[i].getAttribute(\\quot\\selected\\quot\\);//crlf////tab////tab////tab////tab//if((!o) ~~pipe~~~~pipe~~ (o==\\quot\\false\\quot\\)) {//crlf////tab////tab////tab////tab////tab//arDiv[i].style.display=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf//*///crlf////tab////tab////hide cells in tables used to select and edit records//crlf////tab////tab//var arCells=docprint.document.getElementsByName(\\quot\\selectrecord\\quot\\);//crlf////tab////tab//for(var i=0;i<arCells.length;i++) arCells[i].style.display=\\quot\\none\\quot\\;//crlf////crlf////tab////tab//var arCells=docprint.document.getElementsByName(\\quot\\editrecord\\quot\\);//crlf////tab////tab//for(var i=0;i<arCells.length;i++) arCells[i].style.display=\\quot\\none\\quot\\;//crlf////tab////tab////crlf////tab////tab//var arCells=docprint.document.getElementsByName(\\quot\\inspectrecord\\quot\\);//crlf////tab////tab//for(var i=0;i<arCells.length;i++) arCells[i].style.display=\\quot\\none\\quot\\;//crlf////tab////tab////crlf////tab////tab////remove script tags//crlf////tab////tab//var arTag=docprint.document.getElementsByTagName(\\quot\\script\\quot\\);//crlf////tab////tab//var n=0//crlf////tab////tab//do {//crlf////tab////tab////tab//if((arTag[n].id) //amp////amp// (arTag[n].id.equalsIgnoreCase(\\quot\\JSPrint\\quot\\))) {//crlf////tab////tab////tab////tab//n++;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//arTag[n].parentNode.removeChild(arTag[n]); //crlf////tab////tab////tab//};//crlf////tab////tab//} while(n<arTag.length);//crlf////crlf////tab////tab////hide message//crlf////tab////tab//showDialog();//crlf////crlf////tab////tab////remove overlay//crlf////tab////tab//var eOverlay=document.getElementById(\\quot\\overlay\\quot\\+ID);//crlf////tab////tab//eOverlay.parentNode.removeChild(eOverlay);//crlf////tab////tab////crlf////tab////tab//docprint.document.close(); //crlf////tab////tab//docprint.focus(); //crlf////tab////tab//return;//crlf////tab//}//crlf////tab////crlf////tab////get the printer wrapper//crlf////tab//var sUrl=\\quot\\__RequestServer__/?Network=GreenLight//amp//ID=getCachedWidget//amp//DocumentID=77NaWu0FhKDKXL7C70JpnKmy//amp//Widget=Printer Wrapper\\quot\\;//crlf////tab//var sFunc=\\quot\\printView('\\quot\\+ID+\\quot\\'\\comma\\s)\\quot\\;//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf///***********************************************************************//crlf//email the content a view//crlf//***********************************************************************///crlf//function emailView(ID\\comma\\b) {//crlf////tab//showDialog(\\quot\\//amp//msg=Not implemented<br><br>//amp//fnOk=close\\quot\\);//crlf//};//crlf////crlf///***********************************************************************//crlf//Updates the view selection mirror located in the view popup so it matches//crlf//the select element used to maintain a list of open views//crlf//***********************************************************************///crlf//function updateViewSelectionMirror() {//crlf////tab//var eOutputSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//var eOutputSelectMirror=document.getElementById(\\quot\\UIOutputSelectMirror\\quot\\);//crlf////crlf////tab//eOutputSelectMirror.options.length=0;//crlf////tab//for(var i=0;i<eOutputSelect.length;i++) {//crlf////tab////tab//eOutputSelectMirror.options[eOutputSelectMirror.options.length]=new Option(eOutputSelect.options[i].text\\comma\\eOutputSelect.options[i].value);//crlf////tab//};//crlf////tab//eOutputSelectMirror.value=eOutputSelect.value;//crlf//};//crlf////crlf///***********************************************************************//crlf//Called when a view is selected from the select mirror in the views//crlf//popup.  Sets the selected view in the OutputSelect select element as//crlf//if the view was selected there andcalls showUITab//crlf//***********************************************************************///crlf//function selectionMirrorChanged(e)//crlf//{//crlf////tab//var eOutputSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//eOutputSelect.value=e.value;//crlf////tab//showUITab(eOutputSelect);//crlf////tab//return(true);//crlf//};//crlf////crlf///***********************************************************************//crlf//Called when a view is selected from the select box.  Rather than calling//crlf//showTab from the select box\\comma\\ a click on the table tab is simulated so//crlf//the select box and table stay in synch//crlf//***********************************************************************///crlf//function showUITab(e\\comma\\ID) {//crlf////tab//if(e.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\)) {//crlf////tab////tab////a tab was clicked.  Show the tab and update the select box//crlf////tab////tab//showTab(e\\comma\\ID);//crlf////tab////crlf////tab////tab//document.getElementById(\\quot\\OutputSelect\\quot\\).value=ID;//tab////crlf////crlf////tab////tab////update the view selection mirror//crlf////tab////tab//updateViewSelectionMirror();//crlf////crlf//////tab////tab//var select=document.getElementById(\\quot\\OutputSelect\\quot\\).select;//crlf//////tab////tab//for(var i=0;i<select.options.length;i++) {//crlf//////tab////tab////tab//if(select.options[i].value==ID) select.value=ID;//crlf//////tab////tab//};//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////get the ID.  Have to remove \\quot\\ViewContainer\\quot\\ from the start of the ID//crlf////tab//var sID=replaceAllSubstrings(e.value\\comma\\\\quot\\ViewContainer\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////crlf////tab////update the view selection mirror//crlf////tab//updateViewSelectionMirror();//crlf////crlf////tab////locate the corresponding td in the table//crlf////tab//var table=document.getElementById(\\quot\\OutputTabs\\quot\\);//crlf////tab//for (var i=0;i<table.rows[0].cells.length;i++) {//crlf////tab////tab//var sCellID=table.rows[0].cells[i].getAttribute(\\quot\\ID\\quot\\);//crlf////tab////tab//if(sCellID.equalsIgnoreCase(\\quot\\Cell\\quot\\+sID)) {//crlf////tab////tab////tab////var sName=table.rows[0].cells[i].childNodes[0].innerHTML;//crlf////tab////tab////tab//var sName=\\quot\\ViewContainer\\quot\\+sID;//crlf////tab////tab////tab//showTab(table.rows[0].cells[i].childNodes[0]\\comma\\sName);//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function countOpenViews() {//crlf////tab//var eSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//if(!eSelect) return(0);//crlf////tab//return(eSelect.options.length);//crlf//};//crlf////crlf///***********************************************************************//crlf//Gets the ID of the leftmost view//crlf//The ID passed to this function does not include the ViewContainer prefix//crlf//***********************************************************************///crlf//function getLeftmostView() {//crlf////tab//var eSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//if(eSelect.options.length==0) return(\\quot\\\\quot\\);//crlf////tab//var s=eSelect.options[0].value.substring(13); //remove the ViewContainer prefix//crlf////tab//return(s);//crlf//};//crlf////crlf///***********************************************************************//crlf//Gets the view with the ID prior the given ID//crlf//The ID passed to this function does not include the ViewContainer prefix//crlf//***********************************************************************///crlf//function getViewToLeftOf(ViewID)//crlf//{//crlf////tab//var sToLeftID=\\quot\\\\quot\\;//crlf////tab//var eSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//for(var i=0;i<eSelect.options.length;i++) {//crlf////tab////tab//var s=eSelect.options[i].value.substring(13); //remove the ViewContainer prefix//crlf////tab////tab//if(s==ViewID) return(sToLeftID);//crlf////tab////tab//sToLeftID=s;//crlf////tab//};//crlf////tab////crlf////tab////an error has occurred because the current view wasn't found//crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf///***********************************************************************//crlf//Closes all open views//crlf//***********************************************************************///crlf//function closeAllViews()//crlf//{//crlf////tab//hidePopups();//crlf////crlf////tab//var eSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//var arToDelete=new Array();//crlf////tab//for(var i=0;i<eSelect.options.length;i++) {//crlf////tab////tab//arToDelete[arToDelete.length]=eSelect.options[i].value.substring(13); //remove the ViewContainer prefix//crlf////tab//};//crlf////crlf////tab//for(var i=0;i<arToDelete.length;i++) {//crlf////tab////tab//deleteView(arToDelete[i]);//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Closes all but the current view//crlf//***********************************************************************///crlf//function closeOtherViews()//crlf//{//crlf////tab//hidePopups();//crlf////crlf////tab//var eSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//var arToDelete=new Array();//crlf////tab//for(var i=0;i<eSelect.options.length;i++) {//crlf////tab////tab//if(eSelect.options[i].value!=eSelect.value) {//crlf////tab////tab////tab//arToDelete[arToDelete.length]=eSelect.options[i].value.substring(13); //remove the ViewContainer prefix//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//for(var i=0;i<arToDelete.length;i++) {//crlf////tab////tab//deleteView(arToDelete[i]);//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Deletes the currently selected view//crlf//***********************************************************************///crlf//function closeSelectedView()//crlf//{//crlf////tab//var eSelect=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//var s=eSelect.value.substring(13); //remove the ViewContainer prefix//crlf////tab//if(s.length>0) {//crlf////tab////tab//hidePopups();//crlf////tab////tab//deleteView(s);//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Deletes the output div with the given ID and removes the tab from the list of available tabs.//crlf//The ID passed to this function does not include the ViewContainer prefix//crlf//***********************************************************************///crlf//function deleteView(sID)//crlf//{//crlf////tab////get the view to the left of the one being deleted.  It will be selected.//crlf////tab//var sViewToLeftID=//tab//getViewToLeftOf(sID);//crlf////tab//appendToLog(\\quot\\deleteView Left=\\quot\\+sViewToLeftID);//crlf////crlf////tab//var d=document.getElementById(\\quot\\ViewContainer\\quot\\+sID);//crlf////tab//if(d) d.parentNode.removeChild(d);//crlf////crlf////tab////delete the tab from the table//crlf////tab//var table=document.getElementById(\\quot\\OutputTabs\\quot\\);//crlf////tab//for (var i=0;i<table.rows[0].cells.length;i++) {//crlf////tab////tab//var s=table.rows[0].cells[i].getAttribute(\\quot\\ID\\quot\\);//crlf////tab////tab//if(s.equalsIgnoreCase(\\quot\\Cell\\quot\\+sID)) table.rows[0].deleteCell(i);//crlf////tab//};//crlf////crlf////tab////delete the option from the select box//crlf////tab//var select=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//for(var i=0;i<select.options.length;i++) {//crlf////tab////tab//if(select.options[i].value==\\quot\\ViewContainer\\quot\\+sID) {//crlf////tab////tab////tab//select.remove(i);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////update the view selection mirror//crlf////tab//updateViewSelectionMirror();//crlf////crlf////tab//if(countOpenViews()==0) {//crlf////tab////tab//setVisible(\\quot\\UICloseAllViews\\quot\\\\comma\\false);//crlf////crlf////tab////tab////hide the select box used to select a view//crlf////tab////tab//setVisible(\\quot\\OutputSelect\\quot\\\\comma\\false);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//if(sViewToLeftID.length>0) {//crlf////tab////tab////tab////set focus on the view to the left of the one being closed//crlf////tab////tab////tab//select.value=\\quot\\ViewContainer\\quot\\+sViewToLeftID;//crlf////tab////tab////tab//showUITab(select);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////set focus on the first view//crlf////tab////tab////tab//var sFirstView=getLeftmostView();//crlf////tab////tab////tab//if(sFirstView.length>0) {//crlf////tab////tab////tab////tab//select.value=\\quot\\ViewContainer\\quot\\+sFirstView;//crlf////tab////tab////tab////tab//showUITab(select);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab//setOpenViewSelectionMethod();//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Called when a view has been loaded//crlf//***********************************************************************///crlf//function viewUpdated(sID\\comma\\bIsRefresh) //crlf//{//crlf////tab//var eView=document.getElementById(\\quot\\Div\\quot\\+sID);//crlf////tab////if(!eView) alert(\\quot\\Cannot locate: \\quot\\+\\quot\\Div\\quot\\+sID);//crlf////tab//if(!eView) return;//crlf////crlf////tab////get the start time and calculate the elapsed time required to process the widget//crlf////tab//var iStartTime=parseInt(eView.getAttribute(\\quot\\StartTime\\quot\\));//crlf////tab//var iElapsed=new Date().getTime()-iStartTime;//crlf////crlf////tab//var eTitle=document.getElementById(\\quot\\ViewTitleContainer2\\quot\\+sID);//crlf////tab////eTitle.innerHTML=\\quot\\[\\quot\\+iElapsed+\\quot\\ms]\\quot\\;//crlf////tab//var eElapsedTime=document.getElementById(\\quot\\ElapsedTime\\quot\\+sID);//crlf////tab//eElapsedTime.innerHTML=\\quot\\[\\quot\\+iElapsed+\\quot\\ms]\\quot\\;//crlf////crlf////tab////add an icon used to refresh the contents of the div//crlf////tab////and an icon used to close the div//crlf////tab//if(!bIsRefresh) {//crlf////tab////tab///*//tab//The refresh and close icons are no longer included in the title//crlf////tab////tab////tab////tab//They are still functional if this code is enabled//crlf////tab////tab//*///crlf////tab////tab//if(false) {//crlf////tab////tab////tab//var divClose=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//divClose.className=\\quot\\view_close\\quot\\;//crlf////tab////tab////tab//divClose.innerHTML=\\quot\\//amp//nbsp;\\quot\\;//crlf////tab////tab////tab//var sOnClick=\\quot\\deleteView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab////tab////tab//divClose.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);//tab////this works for firefox//crlf////tab////tab////tab//divClose.onclick=Function(sOnClick);//tab////tab////this works for IE//crlf////tab////tab////tab//eTitle.appendChild(divClose);//crlf////tab////crlf////tab////tab////tab//var divRefresh=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//divRefresh.className=\\quot\\view_refresh\\quot\\;//crlf////tab////tab////tab//divRefresh.innerHTML=\\quot\\//amp//nbsp;\\quot\\;//crlf////tab////tab////tab//var sOnClick=\\quot\\refreshView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab////tab////tab//divRefresh.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);//tab////this works for firefox//crlf////tab////tab////tab//divRefresh.onclick=Function(sOnClick);//tab////tab////this works for IE//crlf////tab////tab////tab//eTitle.appendChild(divRefresh);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//initializeTables2012();//crlf////crlf////tab////initialize any tabs in the content//crlf////tab//initializeTabbedDialogs();//crlf////crlf////tab////record elapsed time in google analytics//crlf////tab//var sViewName=document.getElementById(\\quot\\SourceName\\quot\\+sID).innerHTML;//crlf////tab//gaevt(\\quot\\View\\quot\\\\comma\\\\quot\\ViewUpdate\\quot\\\\comma\\sViewName\\comma\\iElapsed);//crlf////crlf////tab//return;//crlf//};//crlf////crlf//function getFixedViewParams(ViewID) {//crlf////tab//var arView=getAvailableViews();//crlf////tab//for(var i=0;i<arView.length;i++) {//crlf////tab////tab////Elements in the array are in the form: ViewID=CategoryID//power//View Name//power//Params//crlf////tab////tab//var n=arView[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab//if(n>0) {//crlf////tab////tab////tab//var s1=arView[i].substring(0\\comma\\n);//crlf////tab////tab////tab//var s2=arView[i].substring(n+1);//crlf////tab////tab////tab//if(s1==ViewID) {//crlf////tab////tab////tab////tab//var a=s2.split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab////tab//var s=replaceAllSubstrings(a[2]\\comma\\\\quot\\//amp//amp;\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab////tab////tab////tab//return(s);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf///***********************************************************************//crlf//Opens a new view//crlf//***********************************************************************///crlf//function openView(Salt) {//crlf////tab//var sViewName=getViewName();//crlf////crlf////tab//var sID=getSalt(6);//crlf////tab////crlf////tab////hide any open pop-ups//crlf////tab//hidePopups();//crlf////crlf////tab////hide the alternate parameter container//crlf////tab//setVisible(\\quot\\AltUIParamsContainer\\quot\\\\comma\\false);//crlf////crlf////tab//restoreUIViewParamsContainer();//crlf////crlf////tab////show the close-all element.  Don't use setVisible because it needs to be inline//crlf////tab////This element may not be used any more//crlf////tab//var eCloseAll=document.getElementById(\\quot\\UICloseAllViews\\quot\\);//crlf////tab//if(eCloseAll) {//crlf////tab////tab//document.getElementById(\\quot\\UICloseAllViews\\quot\\).style.display=\\quot\\inline\\quot\\;//crlf////tab////tab//document.getElementById(\\quot\\UICloseAllViews\\quot\\).display=\\quot\\inline\\quot\\;//crlf////tab//};//crlf////crlf////tab////get the ID of the selected view//crlf////tab//var sViewID=getSelectedView();//crlf////crlf////tab////record default parameter values.  Defaults are also recorded when the onChange event//crlf////tab////fires for a parameter.  However\\comma\\ the onChange even is not fired when a calender is used //crlf////tab////to select a date.  This is a fix to address that.//crlf////tab//recordDefaultParamValues();//crlf////crlf////tab////get fixed params for view.  Fixed params are only used if the view will be opened//crlf////tab////in a new browser window\\comma\\ either as a view or as an external url.  Otherwise\\comma\\ they//crlf////tab////are not appended to the additional params because the getWidgetbyProxy() funciton//crlf////tab////will add them when the getWidget() request is processed.  If they were added here\\comma\\//crlf////tab////they would be added twice.//crlf////tab//var sFixedParams=getFixedViewParams(sViewID);//crlf////crlf////tab////if no document or widget are defined\\comma\\ remove them from the string.  This is necessary//crlf////tab////for external url's to open properly//crlf////tab//sFixedParams=replaceAllSubstrings(sFixedParams\\comma\\\\quot\\DocumentID=0//amp//Widget=0//amp//ContainerItemID=//amp//\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////crlf////tab//if(sFixedParams.length>0) {//crlf////tab////tab////remove any cr/lf characters.  These are allowed in the dialog used to edit the view//crlf////tab////tab//sFixedParams=replaceAllSubstrings(sFixedParams\\comma\\\\quot\\\n\\quot\\\\comma\\\\quot\\\\quot\\)//crlf////tab////tab//sFixedParams=replaceAllSubstrings(sFixedParams\\comma\\\\quot\\\r\\quot\\\\comma\\\\quot\\\\quot\\)//crlf////crlf////tab////tab////remove leading //amp// character//crlf////tab////tab//if(sFixedParams.charAt(0)==\\quot\\//amp//\\quot\\) sFixedParams=sFixedParams.substring(1);//crlf////tab//};//crlf////crlf////tab////get additional params//crlf////tab//var sViewParams=getViewParams();//crlf////tab//if(sViewParams.length>0) sViewParams+=\\quot\\//amp//\\quot\\;//crlf////crlf////tab////if the url includes a target (_blank\\comma\\ _self) then open the url as a new page and//crlf////tab////not as a tab in the current page//crlf////tab//var sTarget=getElementValue(sFixedParams\\comma\\\\quot\\target\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab//var sTargetUpper=sTarget.toUpperCase();//crlf////tab//if((sTargetUpper.indexOf(\\quot\\_BLANK\\quot\\)>=0) ~~pipe~~~~pipe~~ (sTargetUpper.indexOf(\\quot\\_SELF\\quot\\)>=0)) {//crlf////tab////tab//var sUrl=\\quot\\\\quot\\;//crlf////tab////tab//if((sFixedParams.toUpperCase().startsWith(\\quot\\HTTP\\quot\\)) ~~pipe~~~~pipe~~ (sFixedParams.toUpperCase().startsWith(\\quot\\HTTPS\\quot\\)) ~~pipe~~~~pipe~~ (sFixedParams.toUpperCase().startsWith(\\quot\\FTP\\quot\\))) {//crlf////tab////tab////tab//sUrl=sFixedParams;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget//amp//\\quot\\+sFixedParams;//crlf////tab////tab//};//crlf////crlf////tab////tab////remove the target from the url//crlf////tab////tab//sUrl=replaceAllSubstrings(sUrl\\comma\\\\quot\\target=_blank\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab//sUrl=replaceAllSubstrings(sUrl\\comma\\\\quot\\target=_self\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab//if(sUrl.endsWith(\\quot\\//amp//\\quot\\)) sUrl=sUrl.substring(0\\comma\\sUrl.length-1);//crlf////crlf////tab////tab////add any user-input params.  Don't add ViewID//crlf////tab////tab//var a=getSubStringArray(sViewParams\\comma\\\\quot\\//amp//\\quot\\\\comma\\false);//crlf////tab////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab////tab//if((a[i].length>0) //amp////amp// (!(a[i].toUpperCase().startsWith(\\quot\\VIEWID\\quot\\)))) {//crlf////tab////tab////tab////tab//if(!sUrl.endsWith(\\quot\\?\\quot\\)) sUrl +=\\quot\\//amp//\\quot\\;//crlf////tab////tab////tab////tab//sUrl +=a[i];//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//window.open(sUrl\\comma\\sTarget);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//sViewParams +=getUIParams();//crlf////crlf////tab///*************************************************************************//crlf////tab//03-14-2016//crlf////tab//Note: Don't add fixed params to view params.  getWidgetByProxy() gets the fixed params//crlf////tab//from the Greenlight_UI_View driver.  This means that view must be defined on the//crlf////tab//computer that the request is being made to.//crlf////crlf////tab//It should also be possible to pass the fixed params.  However\\comma\\ there is a problem //crlf////tab//with special characters (> in particular) that occurs when including the fixed params//crlf////tab//here.  Also\\comma\\ the view must exist on the source computer anyway because getWidgetByProxy //crlf////tab//relies on this to determine the document ID\\comma\\ widget and container item.//crlf////tab//*************************************************************************///crlf////tab////add the fixed params to the user-input params//crlf////tab////if(sFixedParams.length>0) sViewParams +=\\quot\\//amp//\\quot\\+sFixedParams;//crlf////crlf////tab////set the url that will be opened in a new tab//crlf////tab//var sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget//amp//\\quot\\ + sViewParams; //crlf////crlf////tab////pass user-input parameters to the dimensional driver //crlf////tab//var sDimDriverParams=replaceAllSubstrings(sViewParams\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\//power//\\quot\\);//crlf////tab//sUrl +=\\quot\\//amp//DimDriverParams=\\quot\\+sDimDriverParams;//crlf////crlf////tab////get the source computer//crlf////tab//var sSource=getViewSource();//crlf////tab//var sSourceName=getSourceComputerName(sSource);//crlf////crlf////tab////NOTE: To keep compatibility with widgets in the control panel\\comma\\ a CustomerID field//crlf////tab////is added to the URL.  The source parameter is set to the selected computer unless//crlf////tab////a source is defined in the parameters to override it.  The CustomerID field will//crlf////tab////always be the selected computer.  This allows a widget to be processed by a //crlf////tab////specific source (e.g. the local computer) while also passing the hash ID of the//crlf////tab////selected computer.//crlf////tab//if((sUrl.toUpperCase().indexOf(\\quot\\SOURCE=\\quot\\)<0) //amp////amp// ((\\quot\\//amp//\\quot\\+sFixedParams.toUpperCase()).indexOf(\\quot\\//amp//SOURCE=\\quot\\)<0)) {//crlf////tab////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+getViewSource();//crlf////tab////tab//sUrl +=\\quot\\//amp//CustomerID=\\quot\\+getSelectedComputer();//crlf////tab//};//crlf////crlf////tab////see if a tab has already been opened.  If so\\comma\\ focus it instead of opening a duplicate.//crlf////tab////This is important because when a cached view is returned\\comma\\ the IDs used will be the same//crlf////tab////as when the document was originally created\\comma\\ even when salt is used.  If a second instance//crlf////tab////of the same cached document is opened\\comma\\ there will be two views sharing the same ID's.//crlf////tab//var arOpenViews=document.getElementsByClassName(\\quot\\ViewContent\\quot\\);//crlf////tab//for(var i=0;i<arOpenViews.length;i++) {//crlf////tab////tab//var s=arOpenViews[i].getAttribute(\\quot\\url\\quot\\);//crlf////tab////tab//if(s) {//crlf////tab////tab////tab//if(s.equalsIgnoreCase(sUrl)) {//crlf////tab////tab////tab////tab//sSalt=arOpenViews[i].id.substring(3);//crlf////tab////tab////tab////tab//hidePopups();//crlf////tab////tab////tab////tab//var eTab=document.getElementById(\\quot\\span\\quot\\+sSalt);//crlf////tab////tab////tab////tab//showUITab(eTab\\comma\\\\quot\\ViewContainer\\quot\\+sSalt);//crlf////tab////tab////tab////tab//return;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////get the title for the view.  The computer name is added if it is not the local computer//crlf////tab////var sViewTitle=sViewName;//crlf////tab//var sViewTitle=getFullViewName();//crlf////crlf////tab//if(getSelectedComputer()!=\\quot\\{AspectHashID}\\quot\\) {//crlf////tab////tab//var sComputerName=getComputerName();//crlf////tab////tab//n=sComputerName.indexOf(\\quot\\[\\quot\\);//crlf////tab////tab//if(n>1) sComputerName=sComputerName.substring(0\\comma\\n-1);//crlf////tab////tab//sViewTitle +=\\quot\\ - \\quot\\+sComputerName;//crlf////tab//};//crlf////crlf////tab////create a new output tab to contain the output//crlf////tab//var eViewContentContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eViewContentContainer.id=\\quot\\ViewContainer\\quot\\+sID;//crlf////tab//eViewContentContainer.className=\\quot\\ViewContainer\\quot\\;//crlf////tab//document.getElementById(\\quot\\OutputDivs\\quot\\).appendChild(eViewContentContainer);//crlf////crlf////tab////create a div to contain the header for the output//crlf////tab//var divTitle1=document.createElement(\\quot\\div\\quot\\);//crlf////tab//divTitle1.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_title1\\quot\\);//crlf////tab//divTitle1.id=\\quot\\ViewTitleContainer1\\quot\\+sID;//crlf////tab//var divTitle2=document.createElement(\\quot\\div\\quot\\);//crlf////tab//divTitle2.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_title2\\quot\\);//crlf////tab//divTitle2.id=\\quot\\ViewTitleContainer2\\quot\\+sID;//crlf////tab//divTitle1.appendChild(divTitle2);//crlf////tab//eViewContentContainer.appendChild(divTitle1);//crlf////crlf////tab////add the name of the view to the title div//crlf////tab//eSourceName=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eSourceName.id=\\quot\\SourceName\\quot\\+sID;//crlf////tab//eSourceName.className=\\quot\\view_source_name\\quot\\;//crlf////tab//eSourceName.innerHTML=sViewTitle;//crlf////tab//divTitle2.appendChild(eSourceName);//crlf////crlf////tab////add a span to the title div that will contain the elapsed time//crlf////tab//eElapsedTime=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eElapsedTime.id=\\quot\\ElapsedTime\\quot\\+sID;//crlf////tab//eElapsedTime.className=\\quot\\view_elapsed_time\\quot\\;//crlf////tab//divTitle2.appendChild(eElapsedTime);//crlf////crlf////tab////add view controls to the view container//crlf////tab//var eViewControls=document.createElement(\\quot\\span\\quot\\);//crlf////tab//eViewControls.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_controls\\quot\\);//crlf////crlf////tab//var eSpan=document.createElement(\\quot\\span\\quot\\);//crlf////tab//eViewControls.appendChild(eSpan);//crlf////crlf////tab////view control - print icon//crlf////tab//var eSpan=document.createElement(\\quot\\span\\quot\\);//crlf////tab//eSpan.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_control_print_icon\\quot\\);//crlf////tab//var sOnClick=\\quot\\printView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//eSpan.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);//crlf////tab//eSpan.onclick=Function(sOnClick);  //crlf////tab//eViewControls.appendChild(eSpan);//crlf////crlf////tab////view control - refresh icon//crlf////tab//eSpan=document.createElement(\\quot\\span\\quot\\);//crlf////tab//eSpan.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_control_refresh_icon\\quot\\);//crlf////tab//var sOnClick=\\quot\\refreshView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//eSpan.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);//crlf////tab//eSpan.onclick=Function(sOnClick);  //crlf////tab//eViewControls.appendChild(eSpan);//crlf////crlf////tab////view control - close icon//crlf////tab//var eSpan=document.createElement(\\quot\\span\\quot\\);//crlf////tab//eSpan.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_control_close_icon\\quot\\);//crlf////tab//var sOnClick=\\quot\\deleteView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//eSpan.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);      //crlf////tab//eSpan.onclick=Function(sOnClick);  //crlf////tab//eViewControls.appendChild(eSpan);//crlf////crlf////tab////view control - email icon//crlf////tab//if(false) {//crlf////tab////tab//eSpan=document.createElement(\\quot\\span\\quot\\);//crlf////tab////tab//eSpan.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_control_email_icon\\quot\\);//crlf////tab////tab//var sOnClick=\\quot\\emailView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab////tab//eSpan.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);//crlf////tab////tab//eSpan.onclick=Function(sOnClick);  //crlf////tab////tab//eViewControls.appendChild(eSpan);//crlf////tab//};//crlf////crlf////tab//eViewContentContainer.appendChild(eViewControls);//crlf////crlf////tab////create the div that will contain the view content//crlf////tab//var div=document.createElement(\\quot\\div\\quot\\);//crlf////tab//div.setAttribute(\\quot\\ID\\quot\\\\comma\\\\quot\\Div\\quot\\+sID);//crlf////tab//div.id=\\quot\\Div\\quot\\+sID;//crlf////tab//div.className=\\quot\\ViewContent\\quot\\;//crlf////tab//eViewContentContainer.appendChild(div);//crlf////crlf////tab////show a message in the output div while the content is loading//crlf////tab//var divMessage=document.createElement(\\quot\\div\\quot\\);//crlf////tab//divMessage.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\output_loading\\quot\\);//crlf////tab//var eProgress=document.createElement(\\quot\\Progress\\quot\\);//crlf////tab//eProgress.style.width=\\quot\\250px\\quot\\;//crlf////tab//divMessage.appendChild(eProgress);//crlf////tab////divMessage.innerHTML=\\quot\\Loading...\\quot\\;//crlf////tab//div.appendChild(divMessage);//crlf////crlf////tab////add the new div to the table containing the list of tabs//crlf////tab//var text=document.createTextNode(sViewTitle);//crlf////tab//var span=document.createElement(\\quot\\span\\quot\\);//crlf////tab//span.id=\\quot\\span\\quot\\+sID;//crlf////tab//span.className=\\quot\\tabdialogtabselected\\quot\\;//crlf////tab//var sOnClick=\\quot\\hidePopups();showUITab(this\\comma\\'ViewContainer\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//span.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);      //this works for firefox//crlf////tab//span.onclick=Function(sOnClick);            //this works for IE//crlf////tab//span.appendChild(text);//crlf////crlf////tab////add an icon used to close the tab//crlf////tab////the icon is contained in the background of the span//crlf///*//crlf////tab//var eCloseIcon=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eCloseIcon.setAttribute(\\quot\\Class\\quot\\\\comma\\\\quot\\ViewTabCloseIcon\\quot\\);//crlf////tab//eCloseIcon.id=\\quot\\closetab\\quot\\+sID;//crlf////tab//var sOnClick=\\quot\\deleteView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//eCloseIcon.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);      //this works for firefox//crlf////tab//eCloseIcon.onclick=Function(sOnClick);            //this works for IE//crlf////tab//span.appendChild(eCloseIcon);//crlf//*///crlf////tab////crlf///*//crlf////tab//var img=document.createElement(\\quot\\img\\quot\\);//crlf////tab//img.src=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getImage//amp//Filename={packageuril_greenlight}doc/images/greyX8x8.png\\quot\\;//crlf////tab//img.setAttribute(\\quot\\Class\\quot\\\\comma\\\\quot\\view_tab\\quot\\);//crlf////tab//img.id=\\quot\\closetab\\quot\\+sID;//crlf////tab//var sOnClick=\\quot\\deleteView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//img.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);      //this works for firefox//crlf////tab//img.onclick=Function(sOnClick);            //this works for IE//crlf////tab//span.appendChild(img);//crlf//*///crlf////crlf////tab////programmatically add the tab to the table containing the dialog tabs//crlf////tab//var table=document.getElementById(\\quot\\OutputTabs\\quot\\);//crlf////tab//var cell=table.rows[0].insertCell(-1);//crlf////tab//cell.setAttribute(\\quot\\ID\\quot\\\\comma\\\\quot\\Cell\\quot\\+sID);//crlf////tab//cell.id=\\quot\\Cell\\quot\\+sID;//crlf////tab//cell.setAttribute(\\quot\\Class\\quot\\\\comma\\\\quot\\view_tab\\quot\\);//crlf////tab//cell.appendChild(span);//crlf////tab////cell.appendChild(img);//crlf////crlf////tab////add the div to the select box   The select box is set to visible\\comma\\ but a media query//crlf////tab////manages the container surrounding the select box which means it may still not be//crlf////tab////visible depending on the screen size.  //crlf////tab//var select=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//select.add(new Option(sViewTitle\\comma\\\\quot\\ViewContainer\\quot\\+sID\\comma\\false\\comma\\true));//crlf////tab//setVisible(select\\comma\\true);//crlf////tab////select.options[select.options.length]=new Option(sViewTitle\\comma\\\\quot\\ViewContainer\\quot\\+sID\\comma\\false\\comma\\true);//crlf////crlf////tab////update the view selection mirror//crlf////tab//updateViewSelectionMirror();//crlf////crlf////tab//setOpenViewSelectionMethod();//crlf////crlf////tab////record the starting time in the output div//crlf////tab//div.setAttribute(\\quot\\StartTime\\quot\\\\comma\\new Date().getTime());//crlf////crlf////tab////show the output div//crlf////tab//showTab(span\\comma\\\\quot\\ViewContainer\\quot\\+sID);//crlf////crlf////tab////if(sSource.length>0) sUrl +=\\quot\\//amp//Source=\\quot\\+sSource+\\quot\\//amp//CustomerID=\\quot\\+sSource;//crlf////tab////appendToLog(\\quot\\openView url=\\quot\\+sUrl);//crlf////tab//div.setAttribute(\\quot\\url\\quot\\\\comma\\sUrl);//crlf////tab////setInterval(div\\comma\\0\\comma\\true);//crlf////tab////crlf////tab//var sFunc=\\quot\\viewUpdated(\\\quot\\\\quot\\+sID+\\quot\\\\\quot\\\\comma\\false)\\quot\\;//crlf////tab////alert(\\quot\\URL: \\quot\\+sUrl);//crlf////tab//asynchInclude(div\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////crlf////tab////google analytics event//crlf////tab////note: this is called by the viewUpdated function when the view has been loaded//crlf////tab////gaevt(\\quot\\View\\quot\\\\comma\\\\quot\\Open\\quot\\\\comma\\sViewName\\comma\\0);//crlf//};//crlf//^
ID=37575|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=Javascript|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<state>//crlf////tab//{@if(fileExists(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\getFilespecState(getToken(\\quot\\homedir\\quot\\)+\\quot\\cache/WidgetEdit_77NaWu0FhKDKXL7C70JpnKmy_Javascript 2015.html\\quot\\)\\comma\\\\quot\\\\quot\\)}//crlf//</state>//crlf////crlf///*****************************************************************************//crlf//Toggles display of a section.  The optional b parameter can be used to show//crlf//or hide the section//crlf//*****************************************************************************///crlf//function sectionSelected(e\\comma\\b) {//crlf////tab//var Chapter=e.getAttribute(\\quot\\chapter\\quot\\);//crlf////tab//var Section=e.getAttribute(\\quot\\section\\quot\\);//crlf////tab//var NewSelected=(e.getAttribute(\\quot\\selected\\quot\\)==\\quot\\true\\quot\\) ? \\quot\\false\\quot\\ : \\quot\\true\\quot\\;//crlf////crlf////tab////override the toggle if b is defined//crlf////tab//if(b) {//crlf////tab////tab//NewSelected=(b) ? \\quot\\true\\quot\\ : false;//crlf////tab//};//crlf////crlf////tab//e.setAttribute(\\quot\\selected\\quot\\\\comma\\NewSelected);//crlf////tab//var a=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab//if(a[i].getAttribute(\\quot\\subsection\\quot\\)) {//crlf////tab////tab////tab//if((a[i].getAttribute(\\quot\\chapter\\quot\\)==Chapter) //amp////amp// (a[i].getAttribute(\\quot\\section\\quot\\)==Section)) {//crlf////tab////tab////tab////tab////show or hide the section//crlf////tab////tab////tab////tab//setVisible(a[i]\\comma\\(NewSelected==\\quot\\true\\quot\\));//crlf////crlf////tab////tab////tab////tab////if the section is being shown\\comma\\ set the interval to 0 for any div's that contain a url//crlf////tab////tab////tab////tab////and an interval of -1 or no interval is defined.  This allows divs to be defined //crlf////tab////tab////tab////tab////without actually loading the contents until the section is made visible.  //crlf////tab////tab////tab////tab////Requiring that the interval be undefined or set to -1 allows for other divs that//crlf////tab////tab////tab////tab////may have a non-zero interval - e.g. a div that updates every 60 seconds.  This routine//crlf////tab////tab////tab////tab////should not change an existing interval (like 60) to 0.//crlf////tab////tab////tab////tab//if(NewSelected==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////tab////tab//var arDiv=a[i].getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab////tab////tab////tab////tab//for(var j=0;j<arDiv.length;j++) {//crlf////tab////tab////tab////tab////tab////tab//if(arDiv[j].getAttribute(\\quot\\url\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab//var Interval=arDiv[j].getAttribute(\\quot\\interval\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//if((!Interval) ~~pipe~~~~pipe~~ (Interval==\\quot\\-1\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//setVisible(arDiv[j]\\comma\\true\\comma\\0\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////setInterval(arDiv[j]\\comma\\\\quot\\0\\quot\\\\comma\\false\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//}; //crlf////crlf////tab////tab////tab////tab////tab////tab////tab////if SetInterval is defined\\comma\\ set the interval for the div.  This is for divs that are //crlf////tab////tab////tab////tab////tab////tab////tab////initially collapsed with load after processing enabled//crlf////tab////tab////tab////tab////tab////tab////tab//var sSetInterval=arDiv[j].getAttribute(\\quot\\SetInterval\\quot\\);//crlf//console.log(\\quot\\sSetInterval=\\quot\\+sSetInterval)//crlf////tab////tab////tab////tab////tab////tab////tab//if(sSetInterval) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//var Interval=parseInt(sSetInterval);//crlf//console.log(\\quot\\Interval=\\quot\\+Interval)//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(Interval>0) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arDiv[j].setAttribute(\\quot\\Interval\\quot\\\\comma\\Interval)//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//makeScrollingTable(); //crlf//};//crlf////crlf///*****************************************************************************//crlf//Refreshes divs with urls contained in a section.  Called when the refresh icon//crlf//is clicked in a section header//crlf//*****************************************************************************///crlf//function refreshSection(event\\comma\\e) {//crlf//  //Don't propogate the event to the document.  This keeps the onclick event from //crlf////tab////being passed to the div behind the refresh icon.  Otherwise\\comma\\ the div would //crlf////tab////expand or collapse when the refresh icon is clicked.//crlf//  if (event.stopPropagation) {//crlf//      event.stopPropagation();   // W3C model//crlf//  } else {//crlf//      event.cancelBubble=true; // IE model//crlf//  }//crlf////crlf////tab//var Chapter=e.getAttribute(\\quot\\chapter\\quot\\);//crlf////tab//var Section=e.getAttribute(\\quot\\section\\quot\\);//crlf////crlf////tab//var a=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab//if(a[i].getAttribute(\\quot\\subsection\\quot\\)) {//crlf////tab////tab////tab//if((a[i].getAttribute(\\quot\\chapter\\quot\\)==Chapter) //amp////amp// (a[i].getAttribute(\\quot\\section\\quot\\)==Section)) {//crlf////crlf////tab////tab////tab////tab////show the section whenever the refresh icon is clicked.  This causes a collapsed section to //crlf////tab////tab////tab////tab////be expanded when the icon is clicked//crlf////tab////tab////tab////tab//setVisible(a[i]\\comma\\true);//crlf////crlf////tab////tab////tab////tab//var arDiv=a[i].getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab////tab////tab////tab//for(var j=0;j<arDiv.length;j++) {//crlf////tab////tab////tab////tab////tab//if(arDiv[j].getAttribute(\\quot\\url\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab//var sUpdating=arDiv[j].getAttribute(\\quot\\updating\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//if((!sUpdating) ~~pipe~~~~pipe~~ (sUpdating==\\quot\\false\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab//setInterval(arDiv[j]\\comma\\\\quot\\0\\quot\\\\comma\\true\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab//makeScrollingTable(); //crlf//};//crlf//^
ID=440336|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=false|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=var PositionLatitude=0.0;//crlf//var PositionLongitude=0.0;//crlf//var PositionAccuracy=0.0;//crlf//var PositionAltitude=0.0;//crlf//var PositionAltitudeAccuracy=0.0;//crlf//var PositionHeading=0;//crlf//var PositionSpeed=0;//crlf//var PositionTimestamp=0;//crlf////crlf//function watchPosition() {//crlf////tab//if (navigator.geolocation) {//crlf////tab////tab//navigator.geolocation.watchPosition(updateSharedLocationValues);//crlf////tab//} //crlf////tab//else {//crlf////tab////tab//appendToLog(\\quot\\Geolocation is not supported by this browser.\\quot\\);//crlf////tab//}//crlf//};//crlf////crlf//function getCurrentPosition() {//crlf////tab//if (navigator.geolocation) {//crlf////tab////tab//navigator.geolocation.getCurrentPosition(updateSharedLocationValues);//crlf////tab//} //crlf////tab//else {//crlf////tab////tab//appendToLog(\\quot\\Geolocation is not supported by this browser.\\quot\\);//crlf////tab//}//crlf//}//crlf////crlf//function updateSharedLocationValues(position) {//crlf//  //alert(\\quot\\Latitude: \\quot\\+position.coords.latitude+\\quot\\ Longitude: \\quot\\+position.coords.longitude);//crlf////tab//if(!position) {//crlf////tab////tab//alert(\\quot\\position is undefined\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//PositionLatitude=position.coords.latitude;//crlf////tab//PositionLongitude=position.coords.longitude;//crlf////tab//PositionAccuracy=position.coords.accuracy;//crlf////tab//PositionAltitude=position.coords.altitude;//crlf////tab//PositionAltitudeAccuracy=position.coords.altitudeAccuracy;//crlf////tab//PositionHeading=position.coords.heading;//crlf////tab//PositionSpeed=position.coords.speed;//crlf////tab//PositionTimestamp=position.coords.timestamp;//crlf//}//crlf////crlf//function getLatitude() {return(PositionLatitude)};//crlf//function getLongitude() {return(PositionLongitude)};//crlf//function getPositionAccuraryMeters() {return(PositionAccuracy)};//crlf//function getPositionAccuraryFeet() {return(PositionAccuracy*3.28084)};//crlf//function getPositionAltitudeMeters() {return(PositionAltitude)};//crlf//function getPositionAltitudeFeet() {return(PositionAltitude*3.28084)};//crlf//function getPositionAltitudeAccuracyMeters() {return(PositionAltitudeAccuracy)};//crlf//function getPositionAltitudeAccuracyFeet() {return(PositionAltitudeAccuracy*3.28084)};//crlf////crlf//function getPositionHeading() {//crlf////tab//if(isNaN(PositionHeading)) return(-1);//crlf////tab//return(PositionHeading)//crlf//};//crlf////crlf//function getPositionSpeedMetersPerSecond() {//crlf////tab//if(isNaN(PositionSpeed)) return(-1);//crlf////tab//{return(PositionSpeed)};//crlf//};//crlf////crlf//function getPositionSpeedMilesPerHour() {//crlf////tab//if(isNaN(PositionSpeed)) return(-1);//crlf////tab//return(PositionSpeed*3.28084/60/60);//crlf//};//crlf////crlf//function getPositionTimestamp() {//crlf////tab//return(PositionTimestamp);//crlf//};//crlf////crlf//^
ID=993103|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=html|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<include type:expression; expression:htmlConstant(\\quot\\salt\\quot\\\\comma\\\\quot\\__\\quot\\\\comma\\getSalt(4))>//crlf////crlf//<conditional expression:(defined(\\quot\\__Module__\\quot\\))>//crlf////tab//<div ID=\\quot\\__salt__\\quot\\ Formatted=\\quot\\false\\quot\\>//crlf////tab////tab//<conditional expression:false>//crlf////tab////tab////tab//Formatting of the html could be done using formatAsHtml in the widget container.//crlf////tab////tab////tab//However\\comma\\ an unknown error causes the text to be mangled.  The error may be //crlf////tab////tab////tab//related to the size of the content.  //crlf////tab////tab//</conditional>//crlf////tab////tab//<!include type:script; commands:\\quot\\//crlf////tab////tab////tab////s=gw(\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\\\comma\\\\quot\\Javascript 2015\\quot\\\\comma\\\\quot\\600452\\quot\\)//crlf////tab////tab////tab//s=gw(\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\\\comma\\\\quot\\Javascript 2015\\quot\\\\comma\\\\quot\\__Module__\\quot\\)//crlf////crlf////tab////tab////tab//sSpace=\\quot\\//amp//nbsp\\quot\\+char(0x3B)//crlf////tab////tab////tab//s=replaceSubstring(s\\comma\\getToken(\\quot\\br\\quot\\)\\comma\\char(10))//crlf////tab////tab////tab//s=replaceSubstring(s\\comma\\char(9)\\comma\\sSpace+sSpace+sSpace+sSpace+sSpace+sSpace)//crlf////tab////tab////tab//s=replaceSubstring(s\\comma\\char(0x3C)\\comma\\\\quot\\//amp//lt\\quot\\+char(0x3B))//crlf////tab////tab////tab//s=replaceSubstring(s\\comma\\char(0x3E)\\comma\\\\quot\\//amp//gt\\quot\\+char(0x3B))//crlf////tab////tab////tab//s=replaceSubstring(s\\comma\\\\quot\\ \\quot\\\\comma\\\\quot\\//amp//nbsp\\quot\\+char(0x3B))//crlf////tab////tab////tab//s=replaceSubstring(s\\comma\\\\quot\\/*\\quot\\\\comma\\quote(\\quot\\span class='commentblock'\\quot\\\\comma\\char(0x3C))+\\quot\\//amp////pound//47\\quot\\+char(0x3B)+\\quot\\*\\quot\\)//crlf////tab////tab////tab//s=replaceSubstring(s\\comma\\\\quot\\*/\\quot\\\\comma\\quote(\\quot\\/span\\quot\\\\comma\\char(0x3C))+\\quot\\*//amp////pound//47\\quot\\+char(0x3B))//crlf////crlf////tab////tab////tab//s1=\\quot\\\\quot\\//crlf////tab////tab////tab//c=getElementCount(s\\comma\\char(10))//crlf////tab////tab////tab//n=0//crlf////tab////tab////tab//while(n<c)//crlf////tab////tab////tab////tab//sLine=getElement(s\\comma\\n\\comma\\char(10))//crlf////tab////tab////tab////tab//if((startsWith(sLine\\comma\\\\quot\\function\\quot\\)) or (pos(\\quot\\}\\quot\\+char(0x3B)\\comma\\sLine)=0))//crlf////tab////tab////tab////tab////tab//sLine=quote(\\quot\\span class='function'\\quot\\\\comma\\char(0x3C))+sLine+quote(\\quot\\/span\\quot\\\\comma\\char(0x3C))//crlf////tab////tab////tab////tab//endif//crlf////tab////tab////tab////tab//if((pos(\\quot\\//\\quot\\\\comma\\sLine)>=0) and (pos(\\quot\\://\\quot\\\\comma\\sLine)<0))//crlf////tab////tab////tab////tab////tab//sLine=quote(\\quot\\span class='comment'\\quot\\\\comma\\char(0x3C))+sLine+quote(\\quot\\/span\\quot\\\\comma\\char(0x3C))//crlf////tab////tab////tab////tab//endif//crlf////tab////tab////tab////tab//s1=s1+sLine+getToken(\\quot\\br\\quot\\)//crlf////tab////tab////tab////tab//n++//crlf////tab////tab////tab//endwhile//crlf////tab////tab////tab//return(s1)//crlf////tab////tab//\\quot\\>//crlf////tab//</div>//crlf//</conditional>//crlf////crlf//<conditional expression:(\\quot\\__action__\\quot\\=\\quot\\selectModule\\quot\\)>//crlf////tab//<script ID=\\quot\\JS__ParamID__\\quot\\>//crlf////tab////tab//function evalParam__ParamID__(Value\\comma\\AllParams) {//crlf////tab////tab////tab//return((Value!=\\quot\\0\\quot\\));//crlf////tab////tab//};//crlf////tab//</script>//crlf////tab////crlf////tab//Module//crlf////tab//<select ID=\\quot\\__ParamID__\\quot\\ Name=\\quot\\__ParamName__\\quot\\>//crlf////tab////tab//<option value='370976'>All JS</option>//crlf////tab////tab//<option value=''></option>//crlf////tab////tab//<option value=''>-------------------------</option>//crlf////tab////tab//<option value='803322'>Initialization</option>//crlf////tab////tab//<option value='591093'>Google Analytics</option>//crlf////tab////tab//<option value=''></option>//crlf////tab////tab//<option value=''>-------------------------</option>//crlf////tab////tab//<option value='296720'>UI Selections</option>//crlf////tab////tab//<option value='857658'>UI Popups</option>//crlf////tab////tab//<option value='195067'>UI Params</option>//crlf////tab////tab//<option value='600452'>UI View Management</option>//crlf////tab////tab//<option value='350254'>UI Inspect</option>//crlf////tab////tab//<option value='391179'>UI View Containers</option>//crlf////tab////tab//<option value='804531'>UI External Params Container</option>//crlf////tab////tab//<option value=''></option>//crlf////tab////tab//<option value=''>-------------------------</option>//crlf////tab////tab//<option value='158824'>Dialog for Table Record</option>//crlf////tab////tab//<option value='851443'>Display Options</option>//crlf////tab////tab//<option value='69513'>Table Data Submission</option>//crlf////tab////tab//<option value='801274'>Table Info</option>//crlf////tab////tab//<option value='538055'>Table Functions</option>//crlf////tab////tab//<option value='269074'>Charts</option>//crlf////tab////tab//<option value='350058'>Aspect Charts</option>//crlf////tab////tab//<option value='455955'>Animations</option>//crlf////tab////tab//<option value=''></option>//crlf////tab////tab//<option value=''>-------------------------</option>//crlf////tab////tab//<option value='499706'>Select File Dialog</option>//crlf////tab////tab//<option value='440336'>Geolocation</option>//crlf////tab////tab//<option value='783016'>System Dialog</option>//crlf////tab////tab//<option value='37575'>Chapters</option>//crlf////tab////tab//<option value='567024'>Tabbed Dialogs</option>//crlf////tab////tab//<option value='768522'>Refresh On Interval</option>//crlf////tab////tab//<option value='208063'>Aspect Specific Functions</option>//crlf////tab////tab//<option value='715444'>Styles / Scripts</option>//crlf////tab////tab//<option value='655411'>Log / Debugging</option>//crlf////tab////tab//<option value='433893'>Visibility / Set Interval</option>//crlf////tab////tab//<option value='913848'>Collections</option>//crlf////tab////tab//<option value='940807'>Session</option>//crlf////tab////tab//<option value=''></option>//crlf////tab////tab//<option value=''>-------------------------</option>//crlf////tab////tab//<option value='571416'>Text Functions</option>//crlf////tab////tab//<option value='270967'>Http Request</option>//crlf////tab////tab//<option value='130298'>Utility Functions</option>//crlf////tab////tab//<option value='961525'>Cookies</option>//crlf////tab////tab//<option value='622194'>Positioning</option>//crlf////tab////tab//<option value='82587'>Host information</option>//crlf////tab////tab//<option value=''></option>//crlf////tab////tab//<option value=''>-------------------------</option>//crlf////tab////tab//<option value='829332'>Drop-down menu</option>//crlf////tab////tab//<option value='819734'>Left Bar Functions - Old</option>//crlf////tab////tab//<option value='528184'>Tooltips</option>//crlf////tab////tab//<option value='80555'>Play Videos</option>//crlf////tab////tab//<option value='902418'>Retired Functions</option>//crlf////tab//</select>//crlf//</conditional>^
ID=350254|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=function hideInspectMenu(TDID\\comma\\TableID) {//crlf////tab////get the inspect menu//crlf////tab//var InspectMenuID=\\quot\\InspectMenu\\quot\\+TableID;//crlf////tab//var eInspectMenuDiv=document.getElementById(InspectMenuID);//crlf////crlf////tab////restore the table cell's bottom border//crlf////tab//if(eInspectMenuDiv.getAttribute(\\quot\\RestoreBorderWidth\\quot\\)) {//crlf////tab////tab//var td=document.getElementById(TDID);//crlf////tab////tab//td.style.borderBottomWidth=eInspectMenuDiv.getAttribute(\\quot\\RestoreBorderWidth\\quot\\);//crlf////tab//};//crlf////crlf////tab//setVisible(eInspectMenuDiv\\comma\\false);//crlf//};//crlf////crlf///*********************************************************//crlf//Called when the inspect menu icon is clicked.  TDID is the//crlf//ID of the TD containing the inspect icon that was clicked.//crlf//This value is set in the tdid attribute of the inspect//crlf//menu when it is displayed.  When an inspect menu item is//crlf//selected\\comma\\ the url can quickly be gotten from the td tag//crlf//where it is stored as an attribute.//crlf//*********************************************************///crlf//function showInspectMenu(TDID\\comma\\TableID)//crlf//{//crlf////tab////get the inspect menu//crlf////tab//var InspectMenuID=\\quot\\InspectMenu\\quot\\+TableID;//crlf////tab//var eInspectMenuDiv=document.getElementById(InspectMenuID);//crlf////crlf////tab////if the inspect menu is already displayed for the selected record\\comma\\ just hide it//crlf////tab//if((isVisible(eInspectMenuDiv)) //amp////amp// (eInspectMenuDiv.getAttribute(\\quot\\TDID\\quot\\)==TDID)){//crlf////tab////tab//hideInspectMenu(TDID\\comma\\TableID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////record the ID of the TD that was clicked to open the inspect menu.  This is used//crlf////tab////to get the params when a menu item is selected//crlf////tab//eInspectMenuDiv.setAttribute(\\quot\\TDID\\quot\\\\comma\\TDID);//crlf////crlf////tab////set the menu item descriptions using the attributes in the TD that was clicked//crlf////tab//var td=document.getElementById(TDID);//crlf////tab//var ul=document.getElementById(\\quot\\InspectUL\\quot\\+TableID);//crlf////tab//var arLI=ul.getElementsByTagName(\\quot\\LI\\quot\\);//crlf////tab//for(var i=0;i<arLI.length;i++) {//crlf////tab////tab//var MenuItemID=arLI[i].id;//crlf////tab////tab//var sDescription=td.getAttribute(\\quot\\inspectdescription\\quot\\+MenuItemID);//crlf////crlf////tab////tab//var Enabled=td.getAttribute(\\quot\\InspectEnabled\\quot\\+MenuItemID);//crlf////tab////tab//if(Enabled==\\quot\\true\\quot\\) {//crlf////tab////tab////tab//arLI[i].setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\inspect_menu_li\\quot\\);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//arLI[i].setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\inspect_menu_li_disabled\\quot\\);//crlf////tab////tab//};//crlf////crlf////tab////tab//if(sDescription) {//tab////tab////crlf////tab////tab////tab//arLI[i].innerHTML=sDescription;//crlf////tab////tab////tab//arLI[i].style.display=\\quot\\block\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//arLI[i].style.display=\\quot\\none\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//var eTable=document.getElementById(\\quot\\div\\quot\\+TableID);//crlf////crlf////tab////This was an attempt to clear the bottom border of the td and the top border//crlf////tab////of the menu so they appear as a single item.  However\\comma\\ the border around the//crlf////tab////tr gets in the way.  //crlf////tab//if(false) {//crlf////tab////tab////set the border of the inspect menu to match the border of the table cell//crlf////tab////tab//var BorderBottomWidth=window.getComputedStyle(td\\comma\\null).getPropertyValue(\\quot\\border-bottom-width\\quot\\);//crlf////tab////tab//var BorderBottomColor=window.getComputedStyle(td\\comma\\null).getPropertyValue(\\quot\\border-top-color\\quot\\);//crlf////crlf////tab////tab////save the border attributes of the table cell in the inspect menu//crlf////tab////tab//eInspectMenuDiv.setAttribute(\\quot\\RestoreBorderWidth\\quot\\\\comma\\BorderBottomWidth);//crlf////tab////tab//eInspectMenuDiv.setAttribute(\\quot\\RestoreBorderColor\\quot\\\\comma\\BorderBottomColor);//crlf////crlf////tab////tab////clear the bottom border of the table cell//crlf////tab////tab//td.style.borderBottomWidth=\\quot\\0px\\quot\\;//crlf////crlf////tab////tab//if(BorderBottomWidth!=\\quot\\0px\\quot\\) {//crlf////tab////tab////tab//eInspectMenuDiv.style.borderWidth=BorderBottomWidth;//crlf////tab////tab////tab//eInspectMenuDiv.style.borderColor=BorderBottomColor;//crlf////tab////tab////tab//eInspectMenuDiv.style.borderTopWidth=\\quot\\0px\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////set the color and border width of the inspect menu to match the td//crlf////tab//var BorderBottomWidth=window.getComputedStyle(td\\comma\\null).getPropertyValue(\\quot\\border-bottom-width\\quot\\);//crlf////tab//if(BorderBottomWidth!=\\quot\\0px\\quot\\) {//crlf////tab////tab//var BorderBottomColor=window.getComputedStyle(td\\comma\\null).getPropertyValue(\\quot\\border-top-color\\quot\\);//crlf////tab////tab//eInspectMenuDiv.style.borderColor=BorderBottomColor;//crlf////tab////tab//eInspectMenuDiv.style.borderWidth=BorderBottomWidth;//crlf////tab//};//crlf////crlf////tab////make the top border of the inspect menu thicker//crlf////tab//eInspectMenuDiv.style.borderTopWidth=\\quot\\10px\\quot\\;//crlf////crlf////tab//var tddiv=td.getElementsByTagName(\\quot\\DIV\\quot\\)[0];//crlf////tab//var xy=getPosition2012(tddiv\\comma\\\\quot\\absolute\\quot\\\\comma\\eTable);//crlf////tab//var Top=xy[1]+tddiv.offsetHeight;//crlf////tab//var Left=xy[0];//crlf////tab//eInspectMenuDiv.style.top=Top+\\quot\\px\\quot\\;//crlf////tab//eInspectMenuDiv.style.left=Left+\\quot\\px\\quot\\;//crlf////tab//setVisible(InspectMenuID\\comma\\true);//crlf//};//crlf////crlf//function inspectMenuItemSelected(TableID\\comma\\MenuItemID)//crlf//{//crlf////tab//var InspectMenuID=\\quot\\InspectMenu\\quot\\+TableID;//crlf////tab//var eInspectMenuDiv=document.getElementById(InspectMenuID);//crlf////tab//var TDID=eInspectMenuDiv.getAttribute(\\quot\\TDID\\quot\\);//crlf////tab//var TD=document.getElementById(TDID);//crlf////tab//var sParams=\\quot\\\\quot\\;//crlf////tab//var sViewName=\\quot\\\\quot\\;//crlf////crlf////tab//hideInspectMenu(TDID\\comma\\TableID);//crlf////crlf////tab//if(TD) {//crlf////tab////tab//sParams=TD.getAttribute(\\quot\\inspectparams\\quot\\+MenuItemID);//crlf////tab////tab//sViewName=TD.getAttribute(\\quot\\inspecttitle\\quot\\+MenuItemID);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//alert(\\quot\\Cannot locate TD for selected menu item\\quot\\);//crlf////tab//};//crlf////crlf////tab////execute a javascript function if the params begin with JS://crlf////tab//if(sParams.toUpperCase().startsWith(\\quot\\JS:\\quot\\)) {//crlf////tab////tab//setTimeout(sParams.substring(3)\\comma\\0);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//if((sParams) //amp////amp// (sParams.length>0)) {//crlf////tab////tab////add the source to the params if a source is not explicitly defined in the//crlf////tab////tab////params for the inspect menu item//crlf////tab////tab//if((\\quot\\//amp//\\quot\\+sParams).toUpperCase().indexOf(\\quot\\//amp//SOURCE=\\quot\\)<0) {//crlf////tab////tab////tab//var sHashID=eInspectMenuDiv.getAttribute(\\quot\\source\\quot\\);//crlf////tab////tab////tab//sParams +=\\quot\\//amp//Source=\\quot\\+sHashID;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//appendToLog(\\quot\\Inspect Table: \\quot\\+TableID);//crlf////tab//appendToLog(\\quot\\Inspect MenuItem: \\quot\\+MenuItemID);//crlf////tab//appendToLog(\\quot\\Inspect TDID: \\quot\\+TDID);//crlf////tab//appendToLog(\\quot\\Inspect Params: \\quot\\+sParams);//crlf////tab//openInspectWindow(sViewName\\comma\\sParams);//crlf//};//crlf////crlf//function initializeInspectMenuDialog(DialogID)//crlf//{//crlf//};//crlf////crlf///***********************************************************************//crlf//Opens an inspect window in a new view//crlf//***********************************************************************///crlf//function openInspectWindow(ViewName\\comma\\Params) {//crlf////crlf////tab//appendToLog(\\quot\\openInspectWindow ViewName=\\quot\\+ViewName+\\quot\\ Params=\\quot\\+Params);//crlf////crlf////tab//var sViewName=ViewName;//crlf////tab//var sID=getSalt(6);//crlf////tab////crlf////tab////hide any open pop-ups//crlf////tab//hidePopups();//crlf////crlf////tab////show the close-all element.  Don't use setVisible because it needs to be inline//crlf////tab////This element may not be used any more//crlf////tab//var eCloseAll=document.getElementById(\\quot\\UICloseAllViews\\quot\\);//crlf////tab//if(eCloseAll) {//crlf////tab////tab//document.getElementById(\\quot\\UICloseAllViews\\quot\\).style.display=\\quot\\inline\\quot\\;//crlf////tab////tab//document.getElementById(\\quot\\UICloseAllViews\\quot\\).display=\\quot\\inline\\quot\\;//crlf////tab//};//crlf////crlf////tab////record default parameter values.  Defaults are also recorded when the onChange event//crlf////tab////fires for a parameter.  However\\comma\\ the onChange even is not fired when a calender is used //crlf////tab////to select a date.  This is a fix to address that.//crlf////tab//recordDefaultParamValues();//crlf////crlf////tab////if the params includes a target (_blank\\comma\\ _self) then open the url as a new page and//crlf////tab////not as a tab in the current page//crlf////tab//var sTarget=getElementValue(Params\\comma\\\\quot\\target\\quot\\\\comma\\\\quot\\//amp//\\quot\\);//crlf////tab//var sTargetUpper=sTarget.toUpperCase();//crlf////tab//if((sTargetUpper.indexOf(\\quot\\_BLANK\\quot\\)>=0) ~~pipe~~~~pipe~~ (sTargetUpper.indexOf(\\quot\\_SELF\\quot\\)>=0)) //crlf////tab//{//crlf////tab////tab//var sUrl=\\quot\\\\quot\\;//crlf////tab////tab//if((Params.toUpperCase().startsWith(\\quot\\HTTP\\quot\\)) ~~pipe~~~~pipe~~ (Params.toUpperCase().startsWith(\\quot\\FTP\\quot\\)) ~~pipe~~~~pipe~~ (Params.toUpperCase().startsWith(\\quot\\VIEWID\\quot\\)) ~~pipe~~~~pipe~~ (Params.toUpperCase().startsWith(\\quot\\..\\quot\\))) {//crlf////tab////tab////tab//sUrl=Params;//crlf////crlf////tab////tab////tab////remove ViewID=xxx from the start of the URL//crlf////tab////tab////tab//if(sUrl.toUpperCase().startsWith(\\quot\\VIEWID\\quot\\)) {//crlf////tab////tab////tab////tab//sUrl=sUrl.substring(sUrl.indexOf(\\quot\\//amp//\\quot\\)+1);//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////remove the source from the end of the params//crlf////tab////tab////tab//var n=sUrl.toUpperCase().indexOf(\\quot\\//amp//SOURCE=\\quot\\);//crlf////tab////tab////tab//if(n>=0) {//crlf////tab////tab////tab////tab//sUrl=sUrl.substring(0\\comma\\n);//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget//amp//\\quot\\+Params;//crlf////tab////tab//};//crlf////crlf////tab////tab////remove the target from the url//crlf////tab////tab//sUrl=replaceAllSubstrings(sUrl\\comma\\\\quot\\target=_blank\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab//sUrl=replaceAllSubstrings(sUrl\\comma\\\\quot\\target=_self\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab//if(sUrl.endsWith(\\quot\\//amp//\\quot\\)) sUrl=sUrl.substring(0\\comma\\sUrl.length-1);//crlf////crlf////tab////tab//appendToLog(\\quot\\Opening window: \\quot\\+sUrl);//crlf////tab////tab//window.open(sUrl\\comma\\sTarget);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////add parameters from the UI//crlf////tab//if(Params.length>0) Params+=\\quot\\//amp//\\quot\\;//crlf////tab//Params +=getUIParams();//crlf////crlf////tab////set the url that will be opened in a new tab//crlf////tab//var sUrl=getServer()+\\quot\\/?Network=Greenlight//amp//ID=getWidget//amp//\\quot\\ + Params; //crlf////crlf////tab////pass user-input parameters to the dimensional driver //crlf////tab//var sDimDriverParams=replaceAllSubstrings(Params\\comma\\\\quot\\//amp//\\quot\\\\comma\\\\quot\\//power//\\quot\\);//crlf////tab//sUrl +=\\quot\\//amp//DimDriverParams=\\quot\\+sDimDriverParams;//crlf////crlf////tab////see if a tab has already been opened.  If so\\comma\\ focus it instead of opening a duplicate.//crlf////tab////This is important because when a cached view is returned\\comma\\ the IDs used will be the same//crlf////tab////as when the document was originally created\\comma\\ even when salt is used.  If a second instance//crlf////tab////of the same cached document is opened\\comma\\ there will be two views sharing the same ID's.//crlf////tab//var arOpenViews=document.getElementsByClassName(\\quot\\ViewContent\\quot\\);//crlf////tab//for(var i=0;i<arOpenViews.length;i++) {//crlf////tab////tab//var s=arOpenViews[i].getAttribute(\\quot\\url\\quot\\);//crlf////tab////tab//if(s) {//crlf////tab////tab////tab//if(s.equalsIgnoreCase(sUrl)) {//crlf////tab////tab////tab////tab//sSalt=arOpenViews[i].id.substring(3);//crlf////tab////tab////tab////tab//hidePopups();//crlf////tab////tab////tab////tab//var eTab=document.getElementById(\\quot\\span\\quot\\+sSalt);//crlf////tab////tab////tab////tab//showUITab(eTab\\comma\\\\quot\\ViewContainer\\quot\\+sSalt);//crlf////tab////tab////tab////tab//return;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////get the title for the view.  The computer name is added if it is not the local computer//crlf////tab//var sViewTitle=ViewName;//crlf////crlf////tab////add the name of the computer to the view title if it's not the local computer//crlf////tab////Don't add the computer name for inspect windows used to display faq\\comma\\ how to and videos//crlf////tab//var sSource=getElementValue(Params\\comma\\\\quot\\source\\quot\\\\comma\\\\quot\\//amp//\\quot\\); //crlf////tab//if((!sViewTitle.toUpperCase().startsWith(\\quot\\FAQ:\\quot\\)) //amp////amp// (!sViewTitle.toUpperCase().startsWith(\\quot\\HOW TO:\\quot\\)) //amp////amp// (!sViewTitle.toUpperCase().startsWith(\\quot\\PROCEDURE:\\quot\\))) {//crlf////tab////tab//if((sSource.length>0) //amp////amp// (!sSource.equalsIgnoreCase(\\quot\\{AspectHashID}\\quot\\))) {//crlf////tab////tab////tab//appendToLog(\\quot\\sSource=\\quot\\+sSource+\\quot\\ AspectHashID={AspectHashID}\\quot\\);//crlf////tab////tab////tab//var e=document.getElementById(\\quot\\UISelectUserComputer\\quot\\); //crlf////tab////tab////tab//var sComputerName=\\quot\\\\quot\\;//crlf////tab////tab////tab//for(var i=0;i<e.options.length;i++) {//crlf////tab////tab////tab////tab//if(e.options[i].value.equalsIgnoreCase(sSource)) sComputerName=e.options[i].text;//crlf////tab////tab////tab//};//crlf////tab////tab////tab//if(sComputerName.length==0) sComputerName=sSource;//crlf////tab////tab////tab//sViewTitle +=\\quot\\ - \\quot\\+sComputerName;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////create a new output tab to contain the output//crlf////tab//var eViewContentContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eViewContentContainer.id=\\quot\\ViewContainer\\quot\\+sID;//crlf////tab//eViewContentContainer.className=\\quot\\ViewContainer\\quot\\;//crlf////tab//document.getElementById(\\quot\\OutputDivs\\quot\\).appendChild(eViewContentContainer);//crlf////crlf////tab////create a div to contain the header for the output//crlf////tab//var divTitle1=document.createElement(\\quot\\div\\quot\\);//crlf////tab//divTitle1.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_title1\\quot\\);//crlf////tab//divTitle1.id=\\quot\\ViewTitleContainer1\\quot\\+sID;//crlf////tab//var divTitle2=document.createElement(\\quot\\div\\quot\\);//crlf////tab//divTitle2.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_title2\\quot\\);//crlf////tab//divTitle2.id=\\quot\\ViewTitleContainer2\\quot\\+sID;//crlf////tab//divTitle1.appendChild(divTitle2);//crlf////tab//eViewContentContainer.appendChild(divTitle1);//crlf////crlf////tab////add the name of the view to the title div//crlf////tab//eSourceName=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eSourceName.id=\\quot\\SourceName\\quot\\+sID;//crlf////tab//eSourceName.className=\\quot\\view_source_name\\quot\\;//crlf////tab//eSourceName.innerHTML=sViewTitle;//crlf////tab//divTitle2.appendChild(eSourceName);//crlf////crlf////tab////add a span to the title div that will contain the elapsed time//crlf////tab//eElapsedTime=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eElapsedTime.id=\\quot\\ElapsedTime\\quot\\+sID;//crlf////tab//eElapsedTime.className=\\quot\\view_elapsed_time\\quot\\;//crlf////tab//divTitle2.appendChild(eElapsedTime);//crlf////crlf////tab////add view controls to the view container//crlf////tab//var eViewControls=document.createElement(\\quot\\span\\quot\\);//crlf////tab//eViewControls.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_controls\\quot\\);//crlf////tab////eViewControls.innerHTML=\\quot\\testing\\quot\\;//crlf////crlf////tab////view control - print icon//crlf////tab//eSpan=document.createElement(\\quot\\span\\quot\\);//crlf////tab//eSpan.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_control_print_icon\\quot\\);//crlf////tab//var sOnClick=\\quot\\printView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//eSpan.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);//crlf////tab//eSpan.onclick=Function(sOnClick);  //crlf////tab//eViewControls.appendChild(eSpan);//crlf////crlf////tab////view control - refresh icon//crlf////tab//eSpan=document.createElement(\\quot\\span\\quot\\);//crlf////tab//eSpan.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_control_refresh_icon\\quot\\);//crlf////tab//var sOnClick=\\quot\\refreshView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//eSpan.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);//crlf////tab//eSpan.onclick=Function(sOnClick);  //crlf////tab//eViewControls.appendChild(eSpan);//crlf////crlf////tab////view control - close icon//crlf////tab//var eSpan=document.createElement(\\quot\\span\\quot\\);//crlf////tab//eSpan.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_control_close_icon\\quot\\);//crlf////tab//var sOnClick=\\quot\\deleteView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//eSpan.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);      //crlf////tab//eSpan.onclick=Function(sOnClick);  //crlf////tab//eViewControls.appendChild(eSpan);//crlf////crlf////tab////view control - email icon//crlf////tab//if(false) {//crlf////tab////tab//eSpan=document.createElement(\\quot\\span\\quot\\);//crlf////tab////tab//eSpan.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\view_control_email_icon\\quot\\);//crlf////tab////tab//var sOnClick=\\quot\\emailView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab////tab//eSpan.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);//crlf////tab////tab//eSpan.onclick=Function(sOnClick);  //crlf////tab////tab//eViewControls.appendChild(eSpan);//crlf////tab//};//crlf////crlf////tab//eViewContentContainer.appendChild(eViewControls);//crlf////tab////create the div that will contain the view content//crlf////tab//var div=document.createElement(\\quot\\div\\quot\\);//crlf////tab//div.setAttribute(\\quot\\ID\\quot\\\\comma\\\\quot\\Div\\quot\\+sID);//crlf////tab//div.id=\\quot\\Div\\quot\\+sID;//crlf////tab//div.className=\\quot\\ViewContent\\quot\\;//crlf////tab//eViewContentContainer.appendChild(div);//crlf////crlf////tab////show a message in the output div while the content is loading//crlf////tab//divMessage=document.createElement(\\quot\\div\\quot\\);//crlf////tab//divMessage.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\output_loading\\quot\\);//crlf////tab//divMessage.innerHTML=\\quot\\Loading...\\quot\\;//crlf////tab//div.appendChild(divMessage);//crlf////crlf////tab////add the new div to the table containing the list of tabs//crlf////tab//var text=document.createTextNode(sViewTitle);//crlf////tab//var span=document.createElement(\\quot\\span\\quot\\);//crlf////tab//span.id=\\quot\\span\\quot\\+sID;//crlf////tab//span.className=\\quot\\tabdialogtabselected\\quot\\;//crlf////tab//var sOnClick=\\quot\\hidePopups();showUITab(this\\comma\\'ViewContainer\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//span.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);      //this works for firefox//crlf////tab//span.onclick=Function(sOnClick);            //this works for IE//crlf////tab//span.appendChild(text);//crlf////crlf////tab////add an icon used to close the tab//crlf////tab////the icon is contained in the background of the span//crlf///*//crlf////tab//var eCloseIcon=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eCloseIcon.setAttribute(\\quot\\Class\\quot\\\\comma\\\\quot\\ViewTabCloseIcon\\quot\\);//crlf////tab//eCloseIcon.id=\\quot\\closetab\\quot\\+sID;//crlf////tab//var sOnClick=\\quot\\deleteView('\\quot\\+sID+\\quot\\');\\quot\\;//crlf////tab//eCloseIcon.setAttribute(\\quot\\onclick\\quot\\\\comma\\sOnClick);      //this works for firefox//crlf////tab//eCloseIcon.onclick=Function(sOnClick);            //this works for IE//crlf////tab//span.appendChild(eCloseIcon);//crlf//*///crlf////tab////crlf////tab////programmatically add the tab to the table containing the dialog tabs//crlf////tab//var table=document.getElementById(\\quot\\OutputTabs\\quot\\);//crlf////tab//var cell=table.rows[0].insertCell(-1);//crlf////tab//cell.setAttribute(\\quot\\ID\\quot\\\\comma\\\\quot\\Cell\\quot\\+sID);//crlf////tab//cell.id=\\quot\\Cell\\quot\\+sID;//crlf////tab//cell.setAttribute(\\quot\\Class\\quot\\\\comma\\\\quot\\view_tab\\quot\\);//crlf////tab//cell.appendChild(span);//crlf////tab////cell.appendChild(img);//crlf////crlf////tab////add the div to the select box   The select box is set to visible\\comma\\ but a media query//crlf////tab////manages the container surrounding the select box which means it may still not be//crlf////tab////visible depending on the screen size.  //crlf////tab//var select=document.getElementById(\\quot\\OutputSelect\\quot\\);//crlf////tab//select.add(new Option(sViewTitle\\comma\\\\quot\\ViewContainer\\quot\\+sID\\comma\\false\\comma\\true));//crlf////tab//setVisible(select\\comma\\true);//crlf////tab////select.options[select.options.length]=new Option(sViewTitle\\comma\\\\quot\\ViewContainer\\quot\\+sID\\comma\\false\\comma\\true);//crlf////crlf////tab//setOpenViewSelectionMethod();//crlf////crlf////tab////record the starting time in the output div//crlf////tab//div.setAttribute(\\quot\\StartTime\\quot\\\\comma\\new Date().getTime());//crlf////crlf////tab////show the output div//crlf////tab//showTab(span\\comma\\\\quot\\ViewContainer\\quot\\+sID);//crlf////crlf////tab//div.setAttribute(\\quot\\url\\quot\\\\comma\\sUrl);//crlf////tab////crlf////tab//appendToLog(\\quot\\Opening inspect window: \\quot\\+sUrl);//crlf////tab//var sFunc=\\quot\\viewUpdated(\\\quot\\\\quot\\+sID+\\quot\\\\\quot\\\\comma\\false)\\quot\\;//crlf////tab//asynchInclude(div\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf////crlf////tab////google analytics event//crlf////tab////note: this is called by the viewUpdated function when the view has been loaded//crlf////tab////gaevt(\\quot\\View\\quot\\\\comma\\\\quot\\inspect\\quot\\\\comma\\sViewName\\comma\\0);//crlf//};//crlf//^
ID=391179|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=<conditional expression:false>//crlf//=======================================================================//crlf//Formats all view containers that have not already been formatted or all//crlf//view containers regardless of whether they've been formatted if bScreenResized//crlf//is true.  This function is called from screenResizedListener() in the UI Selections//crlf//item.  It is also called by view container widget items that are responsible//crlf//for embedding views in a view container (e.g. the \\quot\\Embedded View Container\\quot\\ item//crlf//in the User Interface Setup container.//crlf////crlf//The formatViewContainer() function has been modified to accept either an element//crlf//or an ID.  Allowing an element to be passed allows for handling a situation in //crlf//which a cached view container has been opened twice\\comma\\ using the same ID in each//crlf//view.  By passing the element\\comma\\ both instances will be formatted even if they have //crlf//the same ID.//crlf//=======================================================================//crlf//</conditional>//crlf//function formatViewContainers(bScreenResized) {//crlf////tab//var arDiv=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for(var i=0;i<arDiv.length;i++) {//crlf////tab////tab//if(arDiv[i].getAttribute(\\quot\\ViewContainer\\quot\\)) {//crlf////tab////tab////tab//if((bScreenResized) ~~pipe~~~~pipe~~ (!arDiv[i].getAttribute(\\quot\\ViewContainerFormated\\quot\\))) {//crlf////tab////tab////tab////tab//formatViewContainer(arDiv[i]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//<conditional expression:false>//crlf//=======================================================================//crlf//This function sets the width and height of embedded divs in the view //crlf//container.  //crlf////crlf//1/20/17 - Disabled setting of the height of an embedded div.  This causes//crlf//a problem in the site map guides when More is clicked to show associated//crlf//videos\\comma\\ procedures and faqs.  If the height is not set to auto\\comma\\ the//crlf//embedded divs will not be reorganized when More is clicked.//crlf////crlf//Since neither the width or height are set\\comma\\ this function could probably//crlf//be disabled.  If there are cases where setting the height is useful\\comma\\ //crlf//it may be necessary to enable this function based on a setting in the view.//crlf//=======================================================================//crlf//</conditional>//crlf//function formatViewContainer(ID) {//crlf////tab//var eViewContainer=document.getElementById(ID);//crlf////tab//if(!eViewContainer) eViewContainer=ID;//crlf////tab//if(!eViewContainer) return;//crlf////tab//if(!isVisible(eViewContainer)) return;//crlf////tab////crlf////tab////get an array of all the different top positions in use//crlf////tab//var arTop=new Array();//crlf////tab//var arRowHeight=new Array();//crlf////tab//var arRowWidth=new Array();//crlf////tab//var MaxRowWidth=0;//crlf////tab//var arDiv=eViewContainer.getElementsByTagName(\\quot\\div\\quot\\);//crlf////crlf////tab//for(var i=0;i<arDiv.length;i++) {//crlf////tab////tab//if(arDiv[i].getAttribute(\\quot\\ViewContainerItem\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////abort if the height of the div is 0\\comma\\ indicating that it is hidden.//crlf////tab////tab////tab//if(arDiv[i].offsetHeight==0) return;//crlf////tab////tab////tab//arDiv[i].style.width=\\quot\\auto\\quot\\;//crlf////tab////tab////tab//arDiv[i].style.height=\\quot\\auto\\quot\\;//crlf////tab////tab////tab////arDiv[i].style.borderTop=\\quot\\1px solid black\\quot\\;//crlf////tab////tab////tab////arDiv[i].style.borderLeftColor=\\quot\\black\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//for(var i=0;i<arDiv.length;i++) {//crlf////tab////tab//if(arDiv[i].getAttribute(\\quot\\ViewContainerItem\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab//var Top=arDiv[i].offsetTop;//crlf////tab////tab////tab//var Height=arDiv[i].offsetHeight;//crlf////tab////tab////tab//var Width=arDiv[i].offsetWidth;//crlf////tab////tab////tab//var Index=arTop.indexOf(Top);//crlf////tab////tab////tab//if(Index<0) {//crlf////tab////tab////tab////tab//Index=arTop.length;//crlf////tab////tab////tab////tab//arTop[Index]=Top;//crlf////tab////tab////tab////tab//arRowHeight[Index]=Height;//crlf////tab////tab////tab////tab//arRowWidth[Index]=Width;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//arRowHeight[Index]=Math.max(arRowHeight[Index]\\comma\\Height);//crlf////tab////tab////tab////tab//arRowWidth[Index] +=Width;//crlf////tab////tab////tab//};//crlf////tab////tab////tab//MaxRowWidth=Math.max(MaxRowWidth\\comma\\arRowWidth[Index]);//crlf////tab////tab////tab//arDiv[i].setAttribute(\\quot\\ViewContainerRow\\quot\\\\comma\\Index);//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////set the height of each element on a row to the max height of any element on the row//crlf////tab//for(var i=0;i<arDiv.length;i++) {//crlf////tab////tab//if(arDiv[i].getAttribute(\\quot\\ViewContainerItem\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab//var Row=arDiv[i].getAttribute(\\quot\\ViewContainerRow\\quot\\);//crlf////tab////tab////tab////01-20-2017 - Disabled this.  See comments at start of function.//crlf////tab////tab////tab////arDiv[i].style.height=arRowHeight[Row]+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////This section was used to apply a consistent width to all elements in a row.//crlf////tab////It seems to apply the largest width of any row to every row instead of the //crlf////tab////taking the width from a single row.  In any case\\comma\\ it is probably not a good//crlf////tab////idea to set the widths.  Set them in the content being embedded instead.//crlf////tab////make all rows the same width//crlf////tab//if(false) {//crlf////tab////tab//for(var Row=0;Row<arTop.length;Row++) {//crlf////tab////tab////tab////get the current width of the row//crlf////tab////tab////tab//var CurrentWidth=0;//crlf////tab////tab////tab//var arDivsInRow=new Array();//crlf////tab////tab////tab//for(var i=0;i<arDiv.length;i++) {//crlf////tab////tab////tab////tab//if(arDiv[i].getAttribute(\\quot\\ViewContainerItem\\quot\\)==\\quot\\true\\quot\\) {//crlf////tab////tab////tab////tab////tab//if(arDiv[i].getAttribute(\\quot\\ViewContainerRow\\quot\\)==Row) {//crlf////tab////tab////tab////tab////tab////tab//CurrentWidth +=arDiv[i].offsetWidth;//crlf////tab////tab////tab////tab////tab////tab//arDivsInRow[arDivsInRow.length]=arDiv[i];//crlf////crlf////tab////tab////tab////tab////tab////tab////turn off top border for rows after row 0//crlf////tab////tab////tab////tab////tab////tab//if(Row>0) arDiv[i].style.borderTop=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab////tab////crlf////tab////tab////tab////Determine the number of pixels to add//crlf////tab////tab////tab//var PixelsToAdd=MaxRowWidth-CurrentWidth;//crlf////tab////tab////tab//if(PixelsToAdd>0) {//crlf////tab////tab////tab////tab//var PixelsPerDiv=Math.floor(PixelsToAdd/arDivsInRow.length);//crlf////tab////tab////tab////tab//var Remainder=PixelsToAdd - (PixelsPerDiv*arDivsInRow.length);//crlf////tab////tab////tab////tab//for(var i=0;i<arDivsInRow.length;i++) {//crlf////tab////tab////tab////tab////tab//var W=PixelsPerDiv;//crlf////tab////tab////tab////tab////tab//if(i==arDivsInRow.length-1) W +=Remainder;//crlf////tab////tab////tab////tab////tab//arDivsInRow[i].style.width=(arDivsInRow[i].offsetWidth+W)+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab//if(false) {//crlf////tab////tab////tab////turn off left  border for columns after column 0//crlf////tab////tab////tab//for(var i=1;i<arDivsInRow.length;i++) {//crlf////tab////tab////tab////tab////boxes get out of alignment on the far right border if the left border is set to none.//crlf////tab////tab////tab////tab////Instead\\comma\\ set the color to transparent//crlf////tab////tab////tab////tab//arDivsInRow[i].style.borderLeftColor=\\quot\\transparent\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//eViewContainer.setAttribute(\\quot\\ViewContainerFormated\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf//};//crlf//^
ID=804531|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=Aspect_Script|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/****************************************************************//crlf//The View tab is normally used to prompt for parameters and open a//crlf//view.  The functions below provide an alternate way to prompt for //crlf//parameters and open a view\\comma\\ outside the View tab.  //crlf////crlf//Only one set of parameters exists at any time.  They are located in //crlf//tags with the ID \\quot\\view_params_container\\quot\\ and \\quot\\open_view_container\\quot\\.//crlf//These elements normally belong to the \\quot\\view_params_outer_container\\quot\\//crlf//element in the View tab.//crlf////crlf//To open a view outside of the view tab\\comma\\ an element with the ID //crlf//AltUIParamsContainer is created and the \\quot\\view_params_container\\quot\\ and //crlf//\\quot\\open_view_container\\quot\\ elements are removed from the \\quot\\view_params_outer_container\\quot\\//crlf//element and added to the \\quot\\AltUIParamsContainer\\quot\\ element.  This allows functions //crlf//used to evaluate and update the parameters to function //crlf//as they would if the parameters were in the View tab.  The view may //crlf//also be opened as if it was being opened from the View tab.  Using one //crlf//set of parameters also allows for consistency when the parameters are //crlf//accessed from different locations and allows for recording default values.//crlf////crlf//When the view is opened\\comma\\ or when the View tab is selected\\comma\\ the //crlf//\\quot\\view_params_container\\quot\\ and \\quot\\open_view_container\\quot\\ elements are restored //crlf//to their original place in the View tab.  As a failsafe\\comma\\ an element with//crlf//the ID \\quot\\view_params_outer_container_backup\\quot\\ is included in the View popup//crlf//and can be used to restore the parameter container if the AltUIParamsContainer//crlf//element is destroyed before the container is moved back to the view tab.//crlf//****************************************************************///crlf////crlf///****************************************************************//crlf//Restores the params container to its original place in the View//crlf//popup.  The params are removed from the AltUIParamsContainer and//crlf//appended to the view popup.  If the params container does not exist\\comma\\//crlf//a new params container is initialized by copying html from the //crlf//backup container.//crlf////crlf//This function is called whenever the view tab is clicked\\comma\\ whether //crlf//it is being shown or hidden.//crlf//****************************************************************///crlf//function restoreUIViewParamsContainer() {//crlf////tab//var eUIParmsOuterContainer=document.getElementById(\\quot\\view_params_outer_container\\quot\\);//crlf////tab//var eViewParamsContainer=document.getElementById(\\quot\\view_params_container\\quot\\);//crlf////tab//var eOpenviewContainer=document.getElementById(\\quot\\open_view_container\\quot\\);//crlf////tab//if((!eViewParamsContainer) ~~pipe~~~~pipe~~ (!(eViewParamsContainer.parentNode==eUIParmsOuterContainer))) {//crlf////tab////tab//if((eViewParamsContainer) //amp////amp// (eOpenviewContainer)) {//crlf////tab////tab////tab//eViewParamsContainer.parentNode.removeChild(eViewParamsContainer);//crlf////tab////tab////tab//eOpenviewContainer.parentNode.removeChild(eOpenviewContainer);//crlf////tab////tab////tab//eUIParmsOuterContainer.appendChild(eViewParamsContainer);//crlf////tab////tab////tab//document.getElementById(\\quot\\select_view_containerLI\\quot\\).appendChild(eOpenviewContainer);//crlf////tab////tab////tab////eUIParmsOuterContainer.appendChild(eOpenviewContainer);//crlf////crlf////tab////tab////tab////set the class of the div containing the open button icon back to the original class.//crlf////tab////tab////tab////This restores the padding so the element is aligned horizontally with the view selection//crlf////tab////tab////tab//document.getElementById(\\quot\\OpenViewButton\\quot\\).setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\OpenViewButton\\quot\\);//crlf////tab////tab////tab//setVisible(\\quot\\AltUIParamsContainer\\quot\\\\comma\\false);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//var eUIParmsOuterContainerBackup=document.getElementById(\\quot\\view_params_outer_container_backup\\quot\\);//crlf////tab////tab////tab//var s=eUIParmsOuterContainerBackup.innerHTML;//crlf////tab////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\_view_params_container\\quot\\\\comma\\\\quot\\view_params_container\\quot\\);//crlf////tab////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\_open_view_container\\quot\\\\comma\\\\quot\\open_view_container\\quot\\);//crlf////tab////tab////tab//s=replaceAllSubstrings(s\\comma\\\\quot\\_OpenViewButton\\quot\\\\comma\\\\quot\\OpenViewButton\\quot\\);//crlf////tab////tab////tab//eUIParmsOuterContainerBackup.innerHTML=s;//crlf////tab////tab////tab//viewSelected();//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///****************************************************************//crlf//Moves the view params container out of the view popup and into//crlf//a div with the ID AltUIParamsContainer.  The div is then appended //crlf//to the element specified by e.  The view popup is updated with //crlf//the package\\comma\\ category and view ID so it is in synch with the view//crlf//being opened.//crlf////crlf//This function is used to open a view and prompt for params outside //crlf//the standard view popup.  For example\\comma\\ it might allow opening a //crlf//view from a site map.  The difference between this and opening a //crlf//view using openInspectWindow() is that this method allows for //crlf//prompting for parameters associated with the view.  When using //crlf//openInspectWindow()\\comma\\ the parameters must be known and be passed to //crlf//the function.//crlf//****************************************************************///crlf//function showViewParamsContainer(e\\comma\\PackageID\\comma\\CategoryID\\comma\\ViewID)//crlf//{//crlf////tab//hidePopups();//crlf////crlf////tab////If an item is selected in the site map and the params are already displayed//crlf////tab////for that item\\comma\\ toggle the params to not visible//crlf////tab//var eAltUIParamsContainer=document.getElementById(\\quot\\AltUIParamsContainer\\quot\\);//crlf////tab//if(eAltUIParamsContainer) {//crlf////tab////tab//if((eAltUIParamsContainer.parentNode==e) //amp////amp// (isVisible(eAltUIParamsContainer))) {//crlf////tab////tab////tab//setVisible(eAltUIParamsContainer\\comma\\false);//crlf////tab////tab////tab//return;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////see if any parameters are defined for the view//crlf////tab//var bHasInputParams=false;//crlf////tab//var arView=getAvailableViews();//crlf////tab//for(var i=0;i<arView.length;i++) {//crlf////tab////tab//if(arView[i].startsWith(ViewID)) {//crlf////tab////tab////tab//var n=arView[i].indexOf(\\quot\\=\\quot\\);//crlf////tab////tab////tab//if(n>0) {//crlf////tab////tab////tab////tab//var s=arView[i].substring(n+1);//crlf////tab////tab////tab////tab//var a=s.split(\\quot\\//power//\\quot\\);//crlf////tab////tab////tab////tab//if(a.length>3) bHasInputParams=a[3];//crlf////tab////tab////tab////tab//break;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//if(bHasInputParams==\\quot\\true\\quot\\) {//crlf////tab////tab////create the AltUIParamsContainer element if it doesn't exist//crlf////tab////tab//if(!eAltUIParamsContainer) {//crlf////tab////tab////tab//eAltUIParamsContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//eAltUIParamsContainer.id=\\quot\\AltUIParamsContainer\\quot\\;//crlf////tab////tab////tab//eAltUIParamsContainer.className=\\quot\\AltUIParamsContainer\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//eAltUIParamsContainer.parentNode.removeChild(eAltUIParamsContainer);//crlf////tab////tab//};//crlf////crlf////tab////tab//e.appendChild(eAltUIParamsContainer);//crlf////tab////tab//setVisible(eAltUIParamsContainer\\comma\\true);//crlf////crlf////tab////tab//var eViewParamsContainer=document.getElementById(\\quot\\view_params_container\\quot\\);//crlf////tab////tab//var eOpenviewContainer=document.getElementById(\\quot\\open_view_container\\quot\\);//crlf////tab////tab//eViewParamsContainer.parentNode.removeChild(eViewParamsContainer);//crlf////tab////tab//eOpenviewContainer.parentNode.removeChild(eOpenviewContainer);//crlf////tab////tab//eAltUIParamsContainer.appendChild(eViewParamsContainer);//crlf////tab////tab//eAltUIParamsContainer.appendChild(eOpenviewContainer);//crlf////crlf////tab////tab////set the class of the div containing the open button to the alternate class //crlf////tab////tab////This adjusts the padding so the element is aligned horizontally with the params//crlf////tab////tab//document.getElementById(\\quot\\OpenViewButton\\quot\\).setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\OpenViewButtonAlt\\quot\\);//crlf////tab//};//crlf////crlf////tab//document.getElementById(\\quot\\UISelectPackage\\quot\\).value=PackageID;//crlf////tab//packageSelected();//crlf////crlf////tab//document.getElementById(\\quot\\UISelectViewCategory\\quot\\).value=CategoryID;//crlf////tab//viewCategorySelected();//crlf////crlf////tab//document.getElementById(\\quot\\UISelectView\\quot\\).value=ViewID;//crlf////tab//viewSelected();//crlf////crlf////tab//if(!(bHasInputParams==\\quot\\true\\quot\\)) openView();//crlf//};//crlf//^
ID=499706|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/******************************************************************//crlf//Closed the select file dialog by removing the div containing the //crlf//dialog.  The additional div created by the selectFile() function is //crlf//also removed\\comma\\ so the cleanup is complete.//crlf//******************************************************************///crlf//function closeSelectFileDialog(salt\\comma\\fnCancel) {//crlf////tab//var e=document.getElementById(salt+\\quot\\SelectFile\\quot\\);//crlf////tab//appendToLog(\\quot\\e.id=\\quot\\+e.id);//crlf////tab//eParent=e.parentNode;//crlf////tab//eParent.removeChild(e);//crlf////tab//if(eParent.getAttribute(\\quot\\removeme\\quot\\)) {//crlf////tab////tab//eParent.parentNode.removeChild(eParent);//crlf////tab//};//crlf////tab//if(fnCancel) eval(fnCancel+\\quot\\('\\quot\\+salt+\\quot\\')\\quot\\);//crlf//};//crlf////crlf///******************************************************************//crlf//Called when the user clicks the select button in the dialog used//crlf//to select a file or directory//crlf//******************************************************************///crlf//function fileSelected(salt\\comma\\fnOk) {//crlf////tab//var sFilename=document.getElementById(salt+\\quot\\SelectFileFileSpec\\quot\\).value;//crlf////tab//closeSelectFileDialog(salt);//crlf////tab//sFilename=replaceAllSubstrings(sFilename\\comma\\\\quot\\\\\\quot\\\\comma\\\\quot\\\\\\\\quot\\);//crlf////tab//if(fnOk) eval(fnOk+\\quot\\('\\quot\\+salt+\\quot\\'\\comma\\'\\quot\\+sFilename+\\quot\\')\\quot\\);//crlf//};//crlf////crlf///******************************************************************//crlf//Displays a dialog used to select a file or directory.//crlf//Params://crlf////tab//Salt - An identifier that is included with the filename when a selection//crlf////tab////tab////tab//has been made.  The function called is fnOk(Salt\\comma\\Filename)//crlf////tab//e - An element beneath which the dialog will be displayed.  If null\\comma\\//crlf////tab////tab////tab//the dialog is centered and 100px down from the top of the page//crlf////tab//Filespec - The default filename or directory//crlf////tab//Select - Either File or Directory//crlf////tab//Exists - If true\\comma\\ the user must select from a list of files and directories.//crlf////tab////tab////tab//If false\\comma\\ the user may type a name\\comma\\ including the name of a file or //crlf////tab////tab////tab//directory that does not exist.//crlf////tab//fnOk - Name of a javascript function that will be called when the user makes//crlf////tab////tab////tab//a selection.  This is only the function name.  The function will be //crlf////tab////tab////tab//called using fnOK(Filespec)//crlf////tab//fnCancel - Name of a javascript function to be called if the user closes the //crlf////tab////tab////tab//dialog without making a selection.//crlf////tab//Center - If true\\comma\\ the dialog will be centered horizontally//crlf////tab//Top - Top position offset//crlf////tab//Left - Left position offset.  The value \\quot\\center\\quot\\ can be used to center the //crlf////tab////tab////tab//dialog horizontally.//crlf////tab//Source - HashID of the computer used to process the request//crlf//******************************************************************///crlf//function selectFile(Salt\\comma\\Filespec\\comma\\Select\\comma\\Exists\\comma\\fnOk\\comma\\fnCancel\\comma\\Top\\comma\\Left\\comma\\Source) {//crlf////tab//var eDiv=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eDiv.id=\\quot\\selectFile\\quot\\+getSalt(4);//crlf////tab//eDiv.setAttribute(\\quot\\RemoveMe\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab//eDiv.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\select_file_dialog\\quot\\);//crlf////crlf////tab//document.body.appendChild(eDiv);//crlf////crlf////tab//var L=0;//crlf////tab//if(typeof(Left)==\\quot\\string\\quot\\) {//crlf////tab////tab//if(Left.equalsIgnoreCase(\\quot\\center\\quot\\)) {//crlf////tab////tab////tab//var iDivWidth=Math.min(window.outerWidth\\comma\\550);//crlf////tab////tab////tab//L=Math.max(0\\comma\\window.outerWidth/2 - iDivWidth/2);//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//L=Left;//crlf////tab//};//crlf////crlf////tab//if(Top>=0) eDiv.style.top=Top+\\quot\\px\\quot\\;//crlf////tab//if(L>=0) eDiv.style.left=L+\\quot\\px\\quot\\;//crlf////crlf////tab//sUrl=getServer()+\\quot\\/?Network=GreenLight//amp//ID=getWidget//amp//DocumentID=K4Ui6j3Y1rwlvukPkOqn25Em\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//Widget=Notification Container 2//amp//ContainerItemID=648693\\quot\\;//crlf////tab//sUrl +=\\quot\\//amp//Salt=\\quot\\+Salt+\\quot\\//amp//Filespec=\\quot\\+Filespec+\\quot\\//amp//Select=\\quot\\+Select+\\quot\\//amp//Exists=\\quot\\+Exists;//crlf////tab//sUrl +=\\quot\\//amp//FnOk=\\quot\\+fnOk+\\quot\\//amp//FnCancel=\\quot\\+fnCancel;//crlf////tab//sUrl +=\\quot\\//amp//Source=\\quot\\+Source;//crlf////tab//asynchInclude(eDiv\\comma\\sUrl\\comma\\\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\);//crlf//};//crlf//^
ID=591093|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=Javascript|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=[!------------------------------------------------------------------------//crlf//Google Analytics Event//crlf////crlf//This is a convenience function used to record a google analytics event.  The parameters are not//crlf//confined to any specific values except the value parameter which must be an integer.//crlf////crlf////tab//Category - Used to group events.  //crlf////tab//Event - Typically something like click\\comma\\ open\\comma\\ close\\comma\\ start\\comma\\ stop\\comma\\ etc.//crlf////tab//Label - An identifier to identify the object that was acted on//crlf////tab//Value - A numeric value//crlf////crlf//Example\\comma\\ when a view is opened in the UI\\comma\\ the Category=View\\comma\\ Event=Open\\comma\\ Label=View Name/ID\\comma\\ Value=0//crlf////crlf//The standard analytics code must be loaded for this function to work.  The analytics code is loaded //crlf//just before the closing head tag in the widget container.  It is also added to landing pages //crlf//when the pages are published by the publishLandingPage agent action.//crlf//--------------------------------------------------------------------------]//crlf//function gaevt(Category\\comma\\Action\\comma\\Label\\comma\\Value) {//crlf////tab////console.log(\\quot\\gaevt: \\quot\\+Category+\\quot\\:\\quot\\+Action+\\quot\\:\\quot\\+Label+\\quot\\:\\quot\\+Value);//crlf////tab//if (typeof ga===\\quot\\function\\quot\\) {//crlf////tab////tab//try {//crlf////tab////tab////tab//var iValue=0;//crlf////tab////tab////tab//if(Value) iValue=Value;//crlf////crlf////tab////tab////tab////replace commas//crlf////tab////tab////tab//var sCategory=replaceAllSubstrings(Category\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//var sAction=replaceAllSubstrings(Action\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//sAction=replaceAllSubstrings(sAction\\comma\\\\quot\\\x27\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//sAction=replaceAllSubstrings(sAction\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//var sLabel=replaceAllSubstrings(Label\\comma\\\\quot\\\\comma\\\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//sLabel=replaceAllSubstrings(sLabel\\comma\\\\quot\\\x27\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//sLabel=replaceAllSubstrings(sLabel\\comma\\\\quot\\\x22\\quot\\\\comma\\\\quot\\ \\quot\\);//crlf////tab////tab////tab//var sFunc=\\quot\\ga('send'\\comma\\'event'\\comma\\'\\quot\\+sCategory+\\quot\\'\\comma\\'\\quot\\+sAction+\\quot\\'\\comma\\'\\quot\\+sLabel+\\quot\\'\\comma\\'\\quot\\+iValue+\\quot\\')\\quot\\;//crlf////tab////tab////tab////appendToLog(sFunc);//crlf////tab////tab////tab//setTimeout(sFunc\\comma\\100);//crlf////tab////tab//}//crlf////tab////tab//catch(e) {//crlf////tab////tab////tab//appendToLog(\\quot\\Error in gaevt: \\quot\\+e.message);//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//appendToLog(\\quot\\Error in gaevt: ga is undefined\\quot\\);//crlf////tab//};//crlf//};//crlf////crlf//function initVideoListeners(eVideo) {//crlf////tab//eVideo.addEventListener('ended'\\comma\\ videoEnd\\comma\\ false)//crlf////tab//eVideo.addEventListener('timeupdate'\\comma\\ videoTimeUpdate\\comma\\ false)//crlf////tab//eVideo.addEventListener('play'\\comma\\ videoPlay\\comma\\ false)//crlf////tab//eVideo.addEventListener('pause'\\comma\\ videoPause\\comma\\ false)//crlf//}//crlf////crlf//function getVideoTitle(e) {//crlf////tab//var s=e.getAttribute(\\quot\\title\\quot\\);//crlf////tab//if(s) return(s);//crlf////tab//return(\\quot\\Untitled\\quot\\);//crlf//};//crlf////crlf//function getVideoID(e) {//crlf////tab//var s=e.getAttribute(\\quot\\VideoID\\quot\\);//crlf////tab//if(s) return(s);//crlf////tab//return(\\quot\\Undefined\\quot\\);//crlf//};//crlf////crlf//function setKeyFrames(duration) {//crlf////tab//var quarter=(duration / 4).toFixed(1)//crlf////tab//sessionStorage.setItem('one'\\comma\\ quarter)//crlf////tab//sessionStorage.setItem('two'\\comma\\ (quarter * 2).toFixed(1))//crlf////tab//sessionStorage.setItem('three'\\comma\\ (quarter * 3).toFixed(1))//crlf//}//crlf////crlf//function videoTimeUpdate() {//crlf////tab//var curTime=this.currentTime.toFixed(1)//crlf////tab//switch (curTime) {//crlf////tab////tab//case sessionStorage.getItem('one')://crlf////tab////tab////tab//gaevt('video'\\comma\\'25\\percent\\ played'\\comma\\getVideoID(this)+\\quot\\~~pipe~~\\quot\\+getVideoTitle(this));//crlf////tab////tab////tab//sessionStorage.setItem('one'\\comma\\ null);//crlf////tab////tab////tab//break;//crlf////tab////tab//case sessionStorage.getItem('two')://crlf////tab////tab////tab//gaevt('video'\\comma\\'50\\percent\\ played'\\comma\\getVideoID(this)+\\quot\\~~pipe~~\\quot\\+getVideoTitle(this));//crlf////tab////tab////tab//sessionStorage.setItem('two'\\comma\\ null);//crlf////tab////tab////tab//break;//crlf////tab////tab//case sessionStorage.getItem('three')://crlf////tab////tab////tab//gaevt('video'\\comma\\'75\\percent\\ played'\\comma\\getVideoID(this)+\\quot\\~~pipe~~\\quot\\+getVideoTitle(this));//crlf////tab////tab////tab//sessionStorage.setItem('three'\\comma\\ null);//crlf////tab////tab////tab//break;//crlf////tab//}//crlf//}//crlf////crlf//function videoEnd() {//crlf////tab//gaevt('video'\\comma\\'100\\percent\\ played'\\comma\\getVideoID(this)+\\quot\\~~pipe~~\\quot\\+getVideoTitle(this));//crlf//}//crlf////crlf//function videoPlay() {//crlf////tab//gaevt('video'\\comma\\'play'\\comma\\getVideoID(this)+\\quot\\~~pipe~~\\quot\\+getVideoTitle(this));//crlf////tab//setKeyFrames(this.duration)//crlf//}//crlf////crlf//function videoPause() {//crlf////tab//gaevt('video'\\comma\\'pause'\\comma\\getVideoID(this)+\\quot\\~~pipe~~\\quot\\+getVideoTitle(this));//crlf//}//tab////crlf//^
ID=269074|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/******************************************************************************//crlf//Called from initializeTables2012() to display any charts with ShowChart=true //crlf//as an attribute.  Also called from the javascript initialization when a file //crlf//is sent as an email attachment.//crlf//******************************************************************************///crlf//var bInShowChart=false;//crlf//function showCharts() {//crlf////tab//if(bInShowChart) {//crlf////tab////tab//console.log(\\quot\\showCharts exit because bInShowChart=\\quot\\+bInShowChart);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab//bInShowChart=true;//crlf////crlf////tab//var arDiv=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for(var i=0;i<arDiv.length;i++) {//crlf////tab////tab//var sShowChart=arDiv[i].getAttribute(\\quot\\showchart\\quot\\);//crlf////tab////tab//if(sShowChart) {//crlf////tab////tab////tab//if(sShowChart.equalsIgnoreCase(\\quot\\true\\quot\\)) {//crlf////tab////tab////tab////tab//var sInitialized=arDiv[i].getAttribute(\\quot\\Initialized\\quot\\);//crlf////tab////tab////tab////tab//if(!sInitialized) {//crlf////tab////tab////tab////tab////tab////set to not visible.  This is done to avoid showGoogleChart just toggling //crlf////tab////tab////tab////tab////tab////the chart to not visible//crlf////tab////tab////tab////tab////tab//var sTableID=replaceAllSubstrings(arDiv[i].id\\comma\\\\quot\\googlechartoutputwrapper\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab////tab////displayChart1(sTableID);//crlf////crlf////tab////tab////tab////tab////tab//var table=document.getElementById(sTableID);//crlf////tab////tab////tab////tab////tab//var sChartType=table.getAttribute(\\quot\\aspectChartType\\quot\\);//crlf////tab////tab////tab////tab////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectLine\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectLineIndex\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectLine2\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectColumn\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectColumn2\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectScatter\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\))) {//crlf////tab////tab////tab////tab////tab////tab////create an Aspect chart//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].setAttribute(\\quot\\Initialized\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//createChart(sTableID+\\quot\\Chart\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//bInShowChart=false;//crlf////tab////crlf////tab////tab////tab////tab////tab////tab////call showCharts again to display any remaining charts//crlf////tab////tab////tab////tab////tab////tab//setTimeout(\\quot\\showCharts()\\quot\\\\comma\\0);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////create a google chart//crlf////tab////tab////tab////tab////tab////tab//hashPut(\\quot\\ChartTableID\\quot\\\\comma\\sTableID);//crlf////tab////tab////tab////tab////tab////tab//google.charts.setOnLoadCallback(showGoogleChartSub);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//bInShowChart=false;//crlf//};//crlf////crlf///******************************************************************************//crlf//display the chart for a table.  e is the icon used to open the graph and//crlf//is probably not needed//crlf//NOTE: THIS HAS BEEN REPLACED WITH DISPLAYCHART1() BELOW IN ORDER TO //crlf//ADD GOOGLE CHARTS//crlf//******************************************************************************///crlf//function displayChart(TableID\\comma\\e)//crlf//{//crlf////tab//var sID=\\quot\\chart\\quot\\+TableID;//crlf////tab////crlf////tab//if(isVisible(sID)) {//crlf////tab////tab//setVisible(sID\\comma\\false);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var d=document.getElementById(sID);//crlf////crlf////tab////replace the __requestserver__ token in the url for the chart image//crlf////tab////This is not handled by TRpoxyHandler:handleNotification//crlf///*//tab////crlf////tab//var arImg=d.getElementsByTagName(\\quot\\img\\quot\\);//crlf////tab//alert(\\quot\\Found \\quot\\+arImg.length+\\quot\\ image tags in chart element\\quot\\);//crlf////tab//if(arImg.length>1) {//crlf////tab////tab//var imgChart=arImg[1];//crlf////tab////tab//var sSrc=imgChart.src;//crlf////tab////tab//alert(\\quot\\src=\\quot\\+sSrc);//crlf////tab////tab//if(sSrc.toUpperCase().indexOf(\\quot\\REQUESTSERVER\\quot\\)>=0) {//crlf////tab////tab////tab//if(sSrc.startsWith(getServer())) {//crlf////tab////tab////tab////tab//sSrc=replaceAllSubstrings(sSrc\\comma\\\\quot\\__request\\quot\\+\\quot\\server__/\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//sSrc=replaceAllSubstrings(sSrc\\comma\\\\quot\\__request\\quot\\+\\quot\\server__\\quot\\\\comma\\getServer());//crlf////tab////tab////tab//};//crlf////tab////tab////tab//imgChart.setAttribute(\\quot\\src\\quot\\\\comma\\sSrc);//crlf////tab////tab//};//crlf////tab////tab//alert(\\quot\\new src=\\quot\\+imgChart.src);//crlf////tab//};//crlf//*///crlf////tab////crlf////tab////make sure the chart is displayed relative to the body.  This is necessary//crlf////tab////to position it properly.//crlf////tab//d.parentNode.removeChild(d);//crlf////tab//document.body.appendChild(d);//crlf////tab////crlf////tab//var table=document.getElementById(TableID);//crlf////tab//d.style.position=\\quot\\relative\\quot\\;//crlf////tab////var xy=getPosition2012(table\\comma\\\\quot\\absolute\\quot\\\\comma\\d.parentNode);//crlf////tab//var xy=getPosition2012(table\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab//d.style.left=(xy[0]+20)+\\quot\\px\\quot\\; //(table.offsetLeft+20)+\\quot\\px\\quot\\;//crlf////tab//d.style.top=(xy[1]+40)+\\quot\\px\\quot\\; //(table.offsetTop+40)+\\quot\\px\\quot\\;//crlf////tab//setVisible(d\\comma\\true);//crlf//};//crlf////crlf///******************************************************************************//crlf//display the chart for a table.  e is the icon used to open the graph and//crlf//is probably not needed//crlf//******************************************************************************///crlf//function displayChart1(TableID\\comma\\e) {//crlf////tab////get the chart type//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//var sChartType=table.getAttribute(\\quot\\aspectChartType\\quot\\);//crlf//console.log(\\quot\\displayChart1 sChartType=\\quot\\+sChartType);//crlf////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectLine\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectLineIndex\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectLine2\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectColumn\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectColumn2\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectScatter\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\))) {//crlf////tab////tab//var sID=TableID+\\quot\\Chart\\quot\\;//crlf////tab////tab//var e=document.getElementById(sID);//crlf////tab////tab//if(e) {//crlf////tab////tab////tab////just hide the chart if it's already visible//crlf////tab////tab////tab//if(isVisible(e)) {//crlf////tab////tab////tab////tab//setVisible(e\\comma\\false);//crlf////tab////tab////tab////tab//e.style.display=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab//return;//tab////crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab////tab//createChart(sID);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////show chart created by TChart//crlf////tab//if(document.getElementById(\\quot\\chart\\quot\\+TableID)) //crlf////tab//{//crlf////tab////tab////remove any content.  This is required if an Aspect chart has been displayed in the div//crlf////tab////tab////and then a google chart is displayed by changing the display//crlf////tab////tab//document.getElementById(\\quot\\chart\\quot\\+TableID).innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab////tab//showTChart(TableIID);//crlf////tab//};//crlf////crlf////tab////show Google chart//crlf////tab//if(document.getElementById(\\quot\\googlechartdata\\quot\\+TableID)) {//crlf////tab////tab//showGoogleChart(TableID);//crlf////tab//};//crlf//}//crlf////crlf///******************************************************************************//crlf//Called to display a google chart.  If the chart is already displayed\\comma\\ it is //crlf//hidden.  Otherwise\\comma\\ the table ID is recorded in a temporary variable and //crlf//setOnLoadCallback function is called to initiate the chart creation.//crlf//******************************************************************************///crlf////crlf//function showGoogleChart(TableID) {//crlf////crlf////tab//var sChartDataID=\\quot\\googlechartdata\\quot\\+TableID;//crlf////tab//var sChartOutputWrapperID=\\quot\\googlechartoutputwrapper\\quot\\+TableID;//crlf////tab//var sChartOutputID=\\quot\\googlechartoutput\\quot\\+TableID;//crlf////crlf////tab//if(isVisible(sChartOutputWrapperID)) {//crlf////tab////tab//setVisible(sChartOutputWrapperID\\comma\\false);//crlf////tab////tab//var e=document.getElementById(sChartOutputWrapperID);//crlf////tab////tab//e.style.display=\\quot\\none\\quot\\;//crlf////crlf////tab////tab//var eChartDiv=document.getElementById(TableID+\\quot\\Chart\\quot\\);//crlf////tab////tab//if(eChartDiv) eChartDiv.style.display=\\quot\\none\\quot\\;//crlf////crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////setTimeout(\\quot\\showDialog('msg=Creating chart//amp//icon=true')\\quot\\\\comma\\0);//crlf////tab////crlf////tab//hashPut(\\quot\\ChartTableID\\quot\\\\comma\\TableID);//crlf////crlf////tab////google.charts.setOnLoadCallback(showGoogleChartSub);//crlf////tab//setTimeout(\\quot\\google.charts.setOnLoadCallback(showGoogleChartSub)\\quot\\\\comma\\100);//crlf//}; //crlf////crlf////crlf///******************************************************************************//crlf//This function does the work of creating the chart.  Data for the chart is //crlf//supplied in a hidden div when the table is created.  The data is read from //crlf//this div and passed to the google chart library to display the chart in //crlf//an output div.  The output div is contained in a wrapper which is made //crlf//visible just before calling for the chart to be created.//crlf//******************************************************************************///crlf//function showGoogleChartSub() {//crlf////crlf////tab////show progress bar.  For some reason\\comma\\ this is not displayed//crlf////tab////showDialog('msg=Creating chart//amp//icon=true');//crlf////crlf////tab//var TableID=hashGet(\\quot\\ChartTableID\\quot\\);//crlf////tab//var table=document.getElementById(TableID);//crlf////tab//var sChartDataID=\\quot\\googlechartdata\\quot\\+TableID;//crlf////tab//var sChartOutputWrapperID=\\quot\\googlechartoutputwrapper\\quot\\+TableID;//crlf////tab//var sChartOutputID=\\quot\\googlechartoutput\\quot\\+TableID;//crlf////crlf////tab//var eChartOutput=document.getElementById(sChartOutputID);//crlf////tab//var iChartWidth=parseFloat(eChartOutput.getAttribute(\\quot\\width\\quot\\));//crlf////tab//var iChartHeight=parseFloat(eChartOutput.getAttribute(\\quot\\height\\quot\\));//crlf////crlf////tab////get widths and heights that can be used as defaults if the chart is not visible //crlf////tab////and it's offsetWidth and offsetHeight return 0//crlf////tab//var eChartDiv=document.getElementById(TableID+\\quot\\Chart\\quot\\);//crlf////tab//var sStyleWidth=(eChartDiv) ? eChartDiv.style.width : 0;//crlf////tab//var sStyleHeight=(eChartDiv) ? eChartDiv.style.height : 0;//crlf////tab//var iDocumentWidth=document.documentElement.offsetWidth;//crlf////console.log(\\quot\\width1=\\quot\\+iChartWidth+\\quot\\ height1=\\quot\\+iChartHeight+\\quot\\ iDocumentWidth=\\quot\\+iDocumentWidth+\\quot\\ sStyleWidth=\\quot\\+sStyleWidth+\\quot\\ sStyleHeight=\\quot\\+sStyleHeight);//crlf////crlf////tab//var eChartDiv=document.getElementById(table.id+\\quot\\Chart\\quot\\);//crlf////tab//if(eChartDiv) {//crlf////tab////tab////remove any content.  This is required if an Aspect chart has been displayed in the div//crlf////tab////tab////and then a google chart is displayed by changing the display//crlf////tab////tab//eChartDiv.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab////tab//setVisible(eChartDiv\\comma\\true);//crlf////tab////tab//if(iChartWidth==0) iChartWidth=eChartDiv.offsetWidth;//crlf////tab////tab//if(iChartWidth==0) {//crlf////tab////tab////tab//iChartWidth=iDocumentWidth*0.95;//crlf////console.log(\\quot\\set iChartWidth=\\quot\\+iChartWidth);//crlf////tab////tab////tab//if(sStyleWidth.indexOf(\\quot\\\\percent\\\\quot\\)>0) {//crlf////console.log(\\quot\\found width in style\\quot\\);//crlf////tab////tab////tab////tab//var s=replaceAllSubstrings(sStyleWidth\\comma\\\\quot\\\\percent\\\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab//var n=parseFloat(s);//crlf////console.log(\\quot\\s=\\quot\\+s+\\quot\\ n=\\quot\\+n);//crlf////tab////tab////tab////tab//if(n>0) {//crlf////tab////tab////tab////tab////tab//iChartWidth*=(n/100);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab//if(iChartHeight==0) iChartHeight=eChartDiv.offsetHeight;//crlf////tab////tab//if(iChartHeight==0) {//crlf////tab////tab////tab//if(sStyleHeight.toUpperCase().indexOf(\\quot\\PX\\quot\\)>0) {//crlf////tab////tab////tab////tab//var s=replaceAllSubstrings(sStyleHeight\\comma\\\\quot\\px\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab////tab////tab////tab//iChartHeight=parseFloat(s);//crlf////console.log(\\quot\\set iChartHeight=\\quot\\+iChartHeight+\\quot\\ s=\\quot\\+s);//crlf////tab////tab////tab////tab//if(iChartHeight==0) {//crlf////console.log(\\quot\\set iChartHeight to 500\\quot\\);//crlf////tab////tab////tab////tab////tab//iChartHeight=500;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////console.log(\\quot\\width2=\\quot\\+iChartWidth+\\quot\\ height2=\\quot\\+iChartHeight);//crlf////tab//};//crlf////crlf////tab//var sChartType=table.getAttribute(\\quot\\aspectChartType\\quot\\);//crlf////crlf////tab//var eChartData=document.getElementById(sChartDataID);//crlf////tab//var a=getSubStringArray(eChartData.innerHTML\\comma\\\\quot\\~~pipe~~\\quot\\\\comma\\true);//crlf////crlf////tab//var data=new google.visualization.DataTable();//crlf////tab//var a1=getSubStringArray(a[0]\\comma\\\\quot\\//power//\\quot\\);//crlf////tab//for(var i=0;i<a1.length;i++) {//crlf////tab////tab//if(i==0) {//crlf////tab////tab////tab//data.addColumn('string'\\comma\\ a1[i]);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//data.addColumn('number'\\comma\\ a1[i]);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////determine the interval at which data will be included in the chart.  The amount of data is //crlf////tab////limited for column charts.  Otherwise\\comma\\ the chart is truncated.//crlf////tab//var iDataInterval=1;//crlf////tab//if(sChartType.equalsIgnoreCase(\\quot\\Column\\quot\\)) {//crlf////tab////tab////set the number of bars to 1/3 the chart width.  This was chosen by experimenting.//crlf////tab////tab//var iMaxColumn=iChartWidth/3;//crlf////tab////tab//if(iMaxColumn<a.length) {//crlf////tab////tab////tab//iDataInterval=Math.floor(a.length/iMaxColumn+0)+1;//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab////determine the interval at which data labels will be displayed//crlf////tab////Don't implement this.  Let the chart do it.//crlf////tab////var Interval=Math.floor(a.length/150)+1;//crlf////tab//var Interval=1;//crlf////tab//for(var i=1;i<a.length;i++) {//crlf////tab////tab//if(i \\percent\\ iDataInterval==0) {//crlf////tab////tab////tab//var a1=getSubStringArray(a[i]\\comma\\\\quot\\//power//\\quot\\);//crlf////tab////tab////tab//var a2=new Array();//crlf////tab////tab////tab//for(var j=0;j<a1.length;j++) {//crlf////tab////tab////tab////tab//if(j==0) {//crlf////tab////tab////tab////tab////tab//if(i \\percent\\ Interval==0) {//crlf////tab////tab////tab////tab////tab////tab//a2[j]=String(a1[j]);//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////a2[j]=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//a2[j]=String(a1[j]);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//a2[j]=parseFloat(a1[j]);//crlf////tab////tab////tab////tab////tab//if(isNaN(a2[j])) a2[j]=0;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//data.addRow(a2);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//var options={'title' : ''\\comma\\//crlf////tab////tab//hAxis: {//crlf////tab////tab////tab//title: ''\\comma\\//crlf////tab////tab////tab//textStyle : { fontSize: '30px'}//crlf////tab////tab//}\\comma\\//crlf////tab////tab//vAxis: {//crlf////tab////tab////tab//title: ''\\comma\\//crlf////tab////tab////tab//textStyle : { fontSize: '30px'}//crlf////tab////tab//}\\comma\\//crlf////tab////tab//crosshair: {//crlf////tab////tab////tab//color: '//pound//000'\\comma\\//crlf////tab////tab////tab//trigger: 'selection'//crlf////tab////tab//}\\comma\\//crlf////tab////tab//width:iChartWidth\\comma\\//crlf////tab////tab//height:iChartHeight\\comma\\//crlf////crlf////tab////tab//title: \\quot\\\\quot\\\\comma\\//crlf////tab////tab//pointSize: 1\\comma\\//crlf////tab////tab//legend: 'bottom'\\comma\\//crlf////tab////tab//_legend: {//crlf////tab////tab////tab//position:'bottom'\\comma\\//crlf////tab////tab////tab//textStyle : { fontSize: '30px'}//crlf////tab////tab//}\\comma\\//crlf////tab//};//crlf////crlf////tab////This is a quick fix for 2-axis charts.  It puts the first series on the first axis//crlf////tab////and the second on the second axis.  There is no provision for more than 2 series.//crlf////tab//if(sChartType.equalsIgnoreCase(\\quot\\Line2\\quot\\)) {//crlf////tab////tab//options.series={0: {targetAxisIndex: 0}\\comma\\1: {targetAxisIndex: 1}};//crlf////tab////tab//options.vAxes={0: {title: 'Axis1'}\\comma\\1: {title: 'Axis2'}};//crlf////tab//};//crlf////crlf////tab////add title if one is defined.//crlf////tab//var sChartTitle=\\quot\\\\quot\\;//crlf////tab//var eChartTitle=document.getElementById(TableID+\\quot\\ChartTitle\\quot\\);//crlf////tab//if(eChartTitle) sChartTitle=eChartTitle.innerHTML;//crlf////tab////crlf////tab//var s=table.getAttribute(\\quot\\ChartTitle\\quot\\);//crlf////tab//if((s) //amp////amp// (s.length>0)) sChartTitle=s;//crlf////tab//if(sChartTitle.length==0) {//crlf////tab////tab//var eDisplayName=document.getElementById(\\quot\\SelectDisplay1\\quot\\+TableID);//crlf////tab////tab//if(eDisplayName) {//crlf////tab////tab////tab//sChartTitle=eDisplayName.options[eDisplayName.selectedIndex].text;//crlf////tab////tab////tab//var n=sChartTitle.indexOf(\\quot\\:\\quot\\);//crlf////tab////tab////tab//if(n>=0) sChartTitle=sChartTitle.substring(n+2);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//if(sChartTitle.length>0) options.title=sChartTitle;//crlf////crlf////tab//var eChartOutputWrapper=document.getElementById(sChartOutputWrapperID);//crlf////crlf////tab//eChartOutputWrapper.parentNode.removeChild(eChartOutputWrapper);//crlf////crlf////tab////if a div is defined for the chart\\comma\\ add the chart to the div//crlf////tab////if the table is not visible\\comma\\ add the chart to the parent node of the table so //crlf////tab////it appears where the table would//crlf////tab//if(eChartDiv) {//crlf////tab////tab//eChartDiv.appendChild(eChartOutputWrapper);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab////add a border around the chart//crlf////tab////tab//eChartOutputWrapper.class=\\quot\\googlechartoutputborderedwrapper\\quot\\;//crlf////crlf////tab////tab////table.parentNode.insertBefore(eChartOutputWrapper\\comma\\table);//crlf////tab////tab//document.body.appendChild(eChartOutputWrapper);//crlf////tab////crlf////tab////tab//eChartOutputWrapper.style.position=\\quot\\absolute\\quot\\;//crlf////tab////tab//var xy=getPosition2012(table\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//tab////crlf////crlf////tab////tab//eChartOutputWrapper.style.left=(Math.max(xy[0]\\comma\\0)+0)+\\quot\\px\\quot\\; //(table.offsetLeft+20)+\\quot\\px\\quot\\;//crlf////tab////tab////eChartOutputWrapper.style.left=(xy[0]+20)+\\quot\\px\\quot\\; //(table.offsetLeft+20)+\\quot\\px\\quot\\;//crlf////tab////tab//eChartOutputWrapper.style.top=(xy[1]+40)+\\quot\\px\\quot\\; //(table.offsetTop+40)+\\quot\\px\\quot\\;//crlf////tab//};//crlf////crlf////tab//eChartOutputWrapper.style.display=\\quot\\block\\quot\\;//crlf////tab////setVisible(eChartOutputWrapper\\comma\\true);//crlf////crlf////tab//showDialog();//crlf////crlf////tab//// Instantiate and draw chart\\comma\\ passing options.//crlf////tab//eChartOutput.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab//if(sChartType.equalsIgnoreCase(\\quot\\Bar\\quot\\)) {//crlf////tab////tab//var chart=new google.visualization.BarChart(eChartOutput);//crlf////tab//}//crlf////tab//else if(sChartType.equalsIgnoreCase(\\quot\\Column\\quot\\)) {//crlf////tab////tab//var chart=new google.visualization.ColumnChart(eChartOutput);//crlf////tab//}//crlf////tab//else if(sChartType.equalsIgnoreCase(\\quot\\Line\\quot\\)) {//crlf////tab////tab//var chart=new google.visualization.LineChart(eChartOutput);//crlf////tab//}//crlf////tab//else if(sChartType.equalsIgnoreCase(\\quot\\Line2\\quot\\)) {//crlf////tab////tab//var chart=new google.visualization.LineChart(eChartOutput);//crlf////tab//}//crlf////tab//else if(sChartType.equalsIgnoreCase(\\quot\\Pie\\quot\\)) {//crlf////tab////tab//var chart=new google.visualization.PieChart(eChartOutput);//crlf////tab//}//crlf////tab//else if(sChartType.equalsIgnoreCase(\\quot\\Scatter\\quot\\)) {//crlf////tab////tab//var chart=new google.visualization.ScatterChart(eChartOutput);//crlf////tab//}//crlf////tab//else if(sChartType.equalsIgnoreCase(\\quot\\Candlestick\\quot\\)) {//crlf////tab////tab//var chart=new google.visualization.CandlestickChart(eChartOutput);//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//var chart=new google.visualization.LineChart(eChartOutput);//crlf////tab//};//crlf////crlf////tab////var chart=new google.visualization.ComboChart(eChartOutput);//crlf////crlf////tab//// Wait for the chart to finish drawing before calling the getImageURI() method.//crlf////tab///*//crlf////tab//google.visualization.events.addListener(chart\\comma\\ 'ready'\\comma\\ function () {//crlf////tab////tab//eChartOutput.innerHTML='<img src=\\quot\\' + chart.getImageURI() + '\\quot\\>';//crlf////tab//}); //crlf////tab//*///crlf////tab////crlf////tab//chart.draw(data\\comma\\ options);//crlf////crlf////tab////set the initialized flag in the chart wrapper//crlf////tab//var eChartWrapper=document.getElementById(\\quot\\googlechartoutputwrapper\\quot\\+TableID);//crlf////tab//eChartWrapper.setAttribute(\\quot\\Initialized\\quot\\\\comma\\\\quot\\true\\quot\\);//crlf////tab////crlf////tab////call showCharts again to display any remaining charts//crlf////tab//console.log(\\quot\\showGoogleChartSub complete for \\quot\\+TableID);//crlf////tab//setTimeout(\\quot\\showCharts()\\quot\\\\comma\\0);//crlf//};//crlf////crlf////crlf///******************************************************************************//crlf//This function needs to be redone.  Do not try to copy contents from the //crlf//iframe.  Use the getImageURI() function available in the google chart javascript.//crlf//******************************************************************************///crlf//function printGoogleChart(ID\\comma\\sWrapper) {//crlf////tab//var eToPrint=document.getElementById(ID);//crlf////tab//for(var i=0;i<eToPrint.childNodes.length;i++) {//crlf////tab////tab//if(eToPrint.childNodes[i].nodeName==\\quot\\IFRAME\\quot\\) {//crlf////tab////tab//};//crlf////tab////tab//var e=eToPrint.childNodes[i];//crlf////tab////tab//for(var j=0;j<e.childNodes.length;j++) {//crlf////tab////tab//};//crlf////tab//};//crlf////tab//return;//crlf////crlf////tab////if the printer wrapper was retrieved\\comma\\ open the document in a new window//crlf////tab//if(sWrapper) {//crlf////crlf////tab////tab//sWrapper +=eToPrint.innerHTML;//crlf////tab////tab//sWrapper +=\\quot\\</body></html>\\quot\\;//crlf////crlf////tab////tab//var docprint=window.open(\\quot\\\\quot\\\\comma\\\\quot\\\\quot\\\\comma\\\\quot\\toolbar=yes\\comma\\location=no\\comma\\directories=yes\\comma\\menubar=yes\\comma\\scrollbars=yes\\comma\\width=650\\comma\\ height=600\\comma\\ left=100\\comma\\ top=25\\quot\\); //crlf////tab////tab//docprint.document.open(); //crlf////tab////tab//docprint.document.write(sWrapper); //crlf////crlf////tab////tab//docprint.document.close(); //crlf////tab////tab//docprint.focus(); //crlf////tab////tab//return;//crlf////tab//}//crlf////tab////crlf////tab////get the printer wrapper//crlf////tab//var sUrl=\\quot\\__RequestServer__/?Network=GreenLight//amp//ID=getCachedWidget//amp//DocumentID=77NaWu0FhKDKXL7C70JpnKmy//amp//Widget=Printer Wrapper\\quot\\;//crlf////tab//var sFunc=\\quot\\printGoogleChart(\\\quot\\\\quot\\+ID+\\quot\\\\\quot\\\\comma\\s)\\quot\\;//crlf////tab//asynchInclude(null\\comma\\sUrl\\comma\\sFunc\\comma\\sFunc);//crlf//};//crlf////crlf//function createGoogleTestChart() {//crlf////tab//google.charts.setOnLoadCallback(drawTestChart);//crlf//}; //crlf////crlf//function drawTestChart() {//crlf////tab//// Define the chart to be drawn.//crlf////crlf////tab//var data=new google.visualization.DataTable();//crlf////tab//data.addColumn('string'\\comma\\ 'Month');//crlf////tab//data.addColumn('number'\\comma\\ 'Tokyo');//crlf////tab//data.addColumn('number'\\comma\\ 'New York');//crlf////tab//data.addColumn('number'\\comma\\ 'Berlin');//crlf////tab//data.addColumn('number'\\comma\\ 'London');//crlf////tab//data.addRows([//crlf////tab////tab//['Jan'\\comma\\  7.0\\comma\\ -0.2\\comma\\ -0.9\\comma\\ 3.9]\\comma\\//crlf////tab////tab//['Feb'\\comma\\  6.9\\comma\\ 0.8\\comma\\ 0.6\\comma\\ 4.2]\\comma\\//crlf////tab////tab//['Mar'\\comma\\  9.5\\comma\\  5.7\\comma\\ 3.5\\comma\\ 5.7]\\comma\\//crlf////tab////tab//['Apr'\\comma\\  14.5\\comma\\ 11.3\\comma\\ 8.4\\comma\\ 8.5]\\comma\\//crlf////tab////tab//['May'\\comma\\  18.2\\comma\\ 17.0\\comma\\ 13.5\\comma\\ 11.9]\\comma\\//crlf////tab////tab//['Jun'\\comma\\  21.5\\comma\\ 22.0\\comma\\ 17.0\\comma\\ 15.2]\\comma\\//crlf////crlf////tab////tab//['Jul'\\comma\\  25.2\\comma\\ 24.8\\comma\\ 18.6\\comma\\ 17.0]\\comma\\//crlf////tab////tab//['Aug'\\comma\\  26.5\\comma\\ 24.1\\comma\\ 17.9\\comma\\ 16.6]\\comma\\//crlf////tab////tab//['Sep'\\comma\\  23.3\\comma\\ 20.1\\comma\\ 14.3\\comma\\ 14.2]\\comma\\//crlf////tab////tab//['Oct'\\comma\\  18.3\\comma\\ 14.1\\comma\\ 9.0\\comma\\ 10.3]\\comma\\//crlf////tab////tab//['Nov'\\comma\\  13.9\\comma\\  8.6\\comma\\ 3.9\\comma\\ 6.6]\\comma\\//crlf////tab////tab//['Dec'\\comma\\  9.6\\comma\\  2.5\\comma\\  1.0\\comma\\ 4.8]//crlf////tab//]);//crlf////crlf////tab//// Set chart options//crlf////tab//var options={'title' : 'Average Temperatures of Cities'\\comma\\//crlf////tab////tab//hAxis: {//crlf////tab////tab////tab//title: 'Time'\\comma\\//crlf////tab////tab////tab//textStyle : { fontSize: '30px'}//crlf////tab////tab//}\\comma\\//crlf////tab////tab//vAxis: {//crlf////tab////tab////tab//title: 'Popularity'\\comma\\//crlf////tab////tab////tab//textStyle : { fontSize: '30px'}//crlf////tab////tab//}\\comma\\//crlf////tab////tab//colors: ['//pound//a52714'\\comma\\ '//pound//097138']\\comma\\//crlf////tab////tab//crosshair: {//crlf////tab////tab////tab//color: '//pound//000'\\comma\\//crlf////tab////tab////tab//trigger: 'selection'//crlf////tab////tab//}\\comma\\//crlf////tab////tab//width:800\\comma\\//crlf////tab////tab//height:400\\comma\\//crlf////tab////tab//title: \\quot\\\\quot\\\\comma\\//crlf////tab////tab//legend: {//crlf////tab////tab////tab//position:'bottom'\\comma\\//crlf////tab////tab////tab//textStyle : { fontSize: '30px'}//crlf////tab////tab//}\\comma\\//crlf////tab//};//crlf////crlf////tab//// Instantiate and draw the chart.//crlf////tab//var chart=new google.visualization.LineChart(document.getElementById('testgooglechartcontainer'));//crlf////crlf////tab//// Wait for the chart to finish drawing before calling the getImageURI() method.//crlf////tab///*//crlf////tab//google.visualization.events.addListener(chart\\comma\\ 'ready'\\comma\\ function () {//crlf////tab////tab//testgooglechartcontainer.innerHTML='<img src=\\quot\\' + chart.getImageURI() + '\\quot\\>';//crlf////tab//});//crlf////tab//*///crlf////crlf////tab//chart.draw(data\\comma\\ options);//crlf//}//crlf////crlf///******************************************************************************//crlf//This function is used to display an image created by TChart when a table is //crlf//created.  This is how charts were originally handled.//crlf//******************************************************************************///crlf//function showTChart(TableID) //crlf//{//crlf////tab//var sID=\\quot\\chart\\quot\\+TableID;//crlf////crlf////tab//if(isVisible(sID)) {//crlf////tab////tab//setVisible(sID\\comma\\false);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//var d=document.getElementById(sID);//crlf////crlf////tab////make sure the chart is displayed relative to the body.  This is necessary//crlf////tab////to position it properly.//crlf////tab//d.parentNode.removeChild(d);//crlf////tab//document.body.appendChild(d);//crlf////tab////crlf////tab//var table=document.getElementById(TableID);//crlf////tab//d.style.position=\\quot\\absolute\\quot\\;//crlf////tab////var xy=getPosition2012(table\\comma\\\\quot\\absolute\\quot\\\\comma\\d.parentNode);//crlf////tab//var xy=getPosition2012(table\\comma\\\\quot\\absolute\\quot\\\\comma\\document.getElementsByTagName('BODY')[0]);//crlf////tab//d.style.left=(xy[0]+0)+\\quot\\px\\quot\\; //(table.offsetLeft+20)+\\quot\\px\\quot\\;//crlf////tab//d.style.top=(xy[1]+40)+\\quot\\px\\quot\\; //(table.offsetTop+40)+\\quot\\px\\quot\\;//crlf////tab//setVisible(d\\comma\\true);//crlf//};//crlf//^
ID=249315|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=false|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=//crlf//String.prototype.equalsIgnoreCase=function(str){//crlf////tab//if(!str) return(false);//crlf//    return (this.toUpperCase()==str.toUpperCase());//crlf//}//crlf////crlf//function initializeEmailCharts() {//crlf////tab//console.log(\\quot\\initializeEmailCharts started\\quot\\);//crlf////tab//console.log(\\quot\\calling showCharts\\quot\\);//crlf////tab//showCharts();//crlf////tab//console.log(\\quot\\initializeEmailCharts complete\\quot\\);//crlf//};//crlf////crlf//function showDialog(s) {//crlf//};//crlf////crlf////crlf////Charts//crlf//<include type:widget; server:{AspectHashID}; secure:true; documentID:\\quot\\77NaWu0FhKDKXL7C70JpnKmy\\quot\\; widget:\\quot\\Javascript 2015\\quot\\; containerItemID:\\quot\\269074\\quot\\; params:\\quot\\\\quot\\;>//crlf////crlf//String.prototype.replaceAll=function(str1\\comma\\ str2\\comma\\ ignore) {//crlf////tab//return this.replace(new RegExp(str1.replace(/([\/\\\comma\\\!\\\//power//\$\{\}\[\]\(\)\.\*\+\?\~~pipe~~\<\>\-\//amp//])/g\\comma\\\\quot\\\\$//amp//\\quot\\)\\comma\\(ignore?\\quot\\gi\\quot\\:\\quot\\g\\quot\\))\\comma\\(typeof(str2)==\\quot\\string\\quot\\)?str2.replace(/\$/g\\comma\\\\quot\\$$$$\\quot\\):str2);//crlf//} ;//crlf////crlf//function replaceAllSubstrings(str\\comma\\target\\comma\\replacement) //crlf//{//crlf////tab//if(!str) return(\\quot\\\\quot\\);//crlf////tab//return(str.toString().replaceAll(target\\comma\\replacement\\comma\\false));//crlf//};//crlf////crlf//function isVisible(aitem) {//crlf////tab//var e=document.getElementById(aitem);//crlf////tab//if(!e) e=aitem;//crlf////tab//if(!e) return(false);//crlf////tab//if(!e.nodeName) return(false);//crlf////crlf////tab////if no display style is defined\\comma\\ consider it visible//crlf////tab//if(!e.style) return(true);//crlf////tab//if(!e.style.display) return(true);//crlf////tab//if(e.style.display.length==0) return(true);//crlf////crlf////tab//if (e) {//crlf////tab////tab//var strOn=\\quot\\block\\quot\\;//crlf////tab////tab//var strOff=\\quot\\none\\quot\\;//crlf////tab////tab////crlf////tab////tab////if it's a table row\\comma\\ need to use inline or table-row//crlf////tab////tab//if (e.nodeName.equalsIgnoreCase(\\quot\\tr\\quot\\)) {//crlf////tab////tab////tab//strOn=\\quot\\inline\\quot\\;//crlf////tab////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\NETSCAPE\\quot\\)>=0) strOn=\\quot\\table-row\\quot\\;//crlf////tab////tab//};//crlf////crlf////tab////tab////get the current display status//crlf////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)>=0) {//crlf////tab////tab////tab////Internet Explorer//crlf////tab////tab////tab//if ((e.style.display.length==0) ~~pipe~~~~pipe~~ (e.style.display.equalsIgnoreCase(strOff))) {return(false);} else {return(true);};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////Everything else//crlf////tab////tab////tab//if ((e.style.display.length==0) ~~pipe~~~~pipe~~ (e.style.display.equalsIgnoreCase(strOff))) {return(false);}//tab//else {return(true);};//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//alert(\\quot\\Error: isVisible cannot find element with ID=\\quot\\+aitem);//crlf////tab//};//crlf//};//crlf////crlf//function getBrowserName() {//crlf////tab//return(navigator.appName);//crlf//};//crlf////crlf//function hashPut(akey\\comma\\avalue) {//crlf////tab//var n=arHashKey.indexOf(akey);//crlf////tab//if(n<0) n=arHashKey.length;//crlf////tab//arHashKey[n]=akey;//crlf////tab//arHashValue[n]=avalue;//crlf////tab//return(akey);//crlf//};//crlf////crlf//var arHashKey=new Array();//crlf//var arHashValue=new Array();//crlf////crlf//function hashGet(akey) {//crlf////tab//var n=arHashKey.indexOf(akey);//crlf////tab//if(n<0) return(null);//crlf////tab//return(arHashValue[n]);//crlf//};//crlf////crlf//String.prototype.equalsIgnoreCase=function(str){//crlf////tab//if(!str) return(false);//crlf//    return (this.toUpperCase()==str.toUpperCase());//crlf//}//crlf////crlf//function getSubStringArray(Src\\comma\\ADelimit\\comma\\ARemoveQuotes)//crlf//{//crlf////tab//if(Src==\\quot\\\\quot\\) {//crlf////tab////tab//var arString=new Array();//crlf////tab////tab//arString[0]=\\quot\\\\quot\\;//crlf////tab////tab//return(arString);//crlf////tab//};//crlf////crlf////tab//if((!Src) ~~pipe~~~~pipe~~ (Src==null)) {//crlf////tab////tab//appendToLog(\\quot\\Src is null in getSubStringArray1\\quot\\\\comma\\false\\comma\\true);//crlf////tab////tab//printStackTrace();//crlf////tab////tab//return(null);//crlf////tab//};//crlf////tab////crlf////tab////check for non-string variable//crlf////tab//try {//crlf////tab////tab//var Ch=Src.charAt(0);//crlf////tab//}//crlf////tab//catch(e) {//crlf////tab////tab//printStackTrace();//crlf////tab////tab//appendToLog(\\quot\\getSubStringArray: Error: \\quot\\+e.toString()\\comma\\false\\comma\\true);//crlf////tab//};//crlf////tab////crlf////tab//var Str1=\\quot\\\\quot\\;//crlf////tab//var Len=Src.length;//crlf////tab//var cDelimiters//tab//=0;//crlf////tab//var LastIndex=0;//crlf////tab//var InQuotes=false;//crlf////crlf////tab//if (Len==0) return(\\quot\\\\quot\\);//crlf////tab////crlf////tab////initialize array for recording location of commas//crlf////tab//var arDelimit=new Array(Len+1);//crlf////crlf////tab////get locations of delimiters//crlf////tab//for (var i=0;i<Len;i++) {//crlf////tab////tab//var Ch=Src.charAt(i);//crlf////tab////tab//if (Ch=='\x22') {//crlf////tab////tab////tab//InQuotes=!InQuotes;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if ((Ch==ADelimit) //amp////amp// (!InQuotes)) {//crlf////tab////tab////tab////tab//arDelimit[cDelimiters]=i;//crlf////tab////tab////tab////tab//cDelimiters++;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////fake a delimiter at the end of the string//crlf////tab//arDelimit[cDelimiters]=Len;//crlf////tab//cDelimiters++;//crlf////tab////crlf////tab//var arString=new Array(cDelimiters);//crlf////tab////crlf////tab//for (var i=0;i<cDelimiters;i++)//tab////crlf////tab//{//crlf////tab////tab//Str1=\\quot\\\\quot\\;//crlf////tab////tab////crlf////tab////tab//if (arDelimit[i]>LastIndex) //crlf////tab////tab//{//crlf////tab////tab////tab//Str1 +=Src.substring(LastIndex\\comma\\arDelimit[i]);//crlf////crlf////tab////tab////tab////remove quotes//crlf////tab////tab////tab//if (ARemoveQuotes) {//crlf////tab////tab////tab////tab//if (Str1.length>0) {//crlf////tab////tab////tab////tab////tab//if (Str1.charAt(0)==\\quot\\\x22\\quot\\) {//crlf////tab////tab////tab////tab////tab////tab//Str1=Str1.deleteCharAt(0);//crlf////tab////tab////tab////tab////tab////tab//if ((Str1.length>0) //amp////amp// (Str1.charAt(Str1.length-1)=='\x22')) {//crlf////tab////tab////tab////tab////tab////tab////tab//Str1=Str1.setLength(Str1.length-1);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////trim//crlf////tab////tab////tab//Str1=Str1.trim();//crlf////tab////tab////tab////while ((Str1.length>0) //amp////amp// (Str1.charAt(0)==' ')) Str1=Str1.deleteCharAt(0);//crlf////tab////tab////tab////while ((Str1.length>0) //amp////amp// (Str1.charAt(Str1.length-1)==' ')) Str1=Str1.setLength(Str1.length-1);//crlf////crlf////tab////tab////tab//arString[i]=Str1;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//arString[i]=\\quot\\\\quot\\;//crlf////tab////tab//}//crlf////crlf////tab////tab//LastIndex=arDelimit[i]+1;//crlf////tab//};//crlf////crlf////tab//if (false) {//crlf////tab////tab//String1=\\quot\\\\quot\\;//crlf////tab////tab//for (var i=0;i<arString.length;i++) String1 +=arString[i]+\\quot\\\n\\quot\\;//crlf////tab////tab//alert(\\quot\\arString=\\quot\\+String1);//crlf////tab//};//crlf////crlf////tab//return(arString);//crlf//};//crlf////crlf//function setVisible(aitem\\comma\\boolVisible\\comma\\Interval\\comma\\ShowStatusIcon\\comma\\Msg)//crlf//{//crlf////tab//var e=document.getElementById(aitem);//crlf////tab//if(!e) e=aitem;//crlf////tab//if(!e) return;//crlf////tab//if(!e.nodeName) {//crlf////tab////tab//appendToLog(\\quot\\Error in setVisible: \\quot\\+aitem+\\quot\\ bVisible=\\quot\\+boolVisible);//crlf////tab////tab////printStackTrace();//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab//if (e) {//crlf////tab////tab//var strOn=\\quot\\block\\quot\\;//crlf////tab////tab//var strOff=\\quot\\none\\quot\\;//crlf////tab////tab////crlf////tab////tab////if it's a table row\\comma\\ need to use inline or table-row//crlf////tab////tab//if (e.nodeName.equalsIgnoreCase(\\quot\\tr\\quot\\)) {//crlf////tab////tab////tab//strOn=\\quot\\inline\\quot\\;//crlf////tab////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\NETSCAPE\\quot\\)>=0) strOn=\\quot\\table-row\\quot\\;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab////if it's a span\\comma\\ use inline//crlf////tab////tab//if(e.nodeName.equalsIgnoreCase(\\quot\\span\\quot\\)) strOn=\\quot\\inline\\quot\\;//crlf////tab////tab////crlf////tab////tab////set the display on/off//crlf////tab////tab//if (getBrowserName().toUpperCase().indexOf(\\quot\\EXPLORER\\quot\\)>=0) {//crlf////tab////tab////tab////Internet Explorer//crlf////tab////tab////tab//if (boolVisible) {//crlf////tab////tab////tab////tab//e.style.display=strOn;//crlf////tab////tab////tab////tab//e.display=strOn;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//e.style.display=strOff;//crlf////tab////tab////tab////tab//e.display=strOff;//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////Everything else//crlf////tab////tab////tab//(boolVisible) ? e.style.display=strOn : e.style.display=strOff;//crlf////tab////tab//};//crlf////tab////tab//if(boolVisible) setDimensions(e);//crlf////tab////tab////crlf////tab////tab////if the element contains a table of tabs\\comma\\ also show or hide tabs belonging to the table//crlf////tab////tab//var arTable=e.getElementsByTagName(\\quot\\table\\quot\\);//crlf////tab////tab//if(arTable) {//crlf////tab////tab////tab//for (var i=0;i<arTable.length;i++) {//crlf////tab////tab////tab////tab//var sClass=arTable[i].getAttribute(\\quot\\class\\quot\\);//crlf////tab////tab////tab////tab//if((sClass) //amp////amp// (sClass.equalsIgnoreCase(\\quot\\tabdialog\\quot\\))) {//crlf////tab////tab////tab////tab////tab//if(boolVisible) {//crlf////tab////tab////tab////tab////tab////tab////show the last tab selected//crlf////tab////tab////tab////tab////tab////tab//s=arTable[i].getAttribute(\\quot\\SelectedTab\\quot\\);//crlf////tab////tab////tab////tab////tab////tab//if(s) {//crlf////tab////tab////tab////tab////tab////tab////tab//var ar=getSubStringArray(s\\comma\\\\quot\\~~pipe~~\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////if(ar==null) alert(\\quot\\ar=null in setVisible\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//for (var j=0;j<ar.length;j++) setVisible(ar[j]\\comma\\true);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////hide all tabs associated with the table//crlf////tab////tab////tab////tab////tab////tab//hideTabElements(arTable[i]);//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab////if an interval is defined\\comma\\ set the interval attribute of the item//crlf////tab////tab//if(Interval!=null) {//crlf////tab////tab////tab//if(boolVisible) {//crlf////tab////tab////tab////tab////only set the interval if it's greater than zero or if the element has not yet been updated//crlf////tab////tab////tab////tab////by an asynchinclude.  This allows a 0 interval to be specified to update the item only once\\comma\\//crlf////tab////tab////tab////tab////even if it is shown and hidden multiple times.//crlf////tab////tab////tab////tab//var bIsLoaded=false;//crlf////tab////tab////tab////tab//if(e.getAttribute(\\quot\\AspectASynchInclude\\quot\\)) {//crlf////tab////tab////tab////tab////tab//if(e.getAttribute(\\quot\\AspectASynchInclude\\quot\\).trim().length>0) bIsLoaded=true;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//if((parseInt(Interval)>0) ~~pipe~~~~pipe~~ (!bIsLoaded)) {//crlf////tab////tab////tab////tab////tab//e.setAttribute(\\quot\\interval\\quot\\\\comma\\Interval);//crlf////tab////tab////tab////tab////tab//if((ShowStatusIcon) ~~pipe~~~~pipe~~ (Msg)) {//crlf////tab////tab////tab////tab////tab////tab//e.innerHTML=\\quot\\\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//if(ShowStatusIcon) {//crlf////tab////tab////tab////tab////tab////tab////tab//var img=document.createElement(\\quot\\img\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab//img.src=imageStatusActive.src;//crlf////tab////tab////tab////tab////tab////tab////tab//e.appendChild(img);//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//if(Msg) {//crlf////tab////tab////tab////tab////tab////tab////tab//e.innerHTML +=\\quot\\//amp//nbsp;\\quot\\+Msg;//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//if(Interval==0) refreshWidgets();//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//e.setAttribute(\\quot\\interval\\quot\\\\comma\\\\quot\\-1\\quot\\);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function setDimensions(e) {//crlf////tab//var bDebug=((e.id) //amp////amp// (e.id.equalsIgnoreCase(\\quot\\588702\\quot\\)));//crlf////tab//if((e.getAttribute(\\quot\\AutoWidth\\quot\\)) //amp////amp// (boolVal(e.getAttribute(\\quot\\AutoWidth\\quot\\)))) {//crlf////tab////tab//e.style.width=\\quot\\auto\\quot\\;//crlf////tab//};//crlf////tab//if((e.getAttribute(\\quot\\AutoHeight\\quot\\)) //amp////amp// (boolVal(e.getAttribute(\\quot\\AutoHeight\\quot\\)))) {//crlf////tab////tab//e.style.height=\\quot\\auto\\quot\\;//crlf////tab//};//crlf////crlf////tab//if (bDebug) appendToLog(e.id+\\quot\\ w1=\\quot\\+e.style.width+\\quot\\ h1=\\quot\\+e.style.height+\\quot\\ offsetw=\\quot\\+e.offsetWidth+\\quot\\ offseth=\\quot\\+e.offsetHeight);//crlf////tab////crlf////tab//if((e.offsetWidth>0) //amp////amp// (e.offsetHeight>0)) {//crlf////tab////tab//if(e.getAttribute(\\quot\\minwidth\\quot\\)) {//crlf////tab////tab////tab//var n=parseInt(e.getAttribute(\\quot\\minwidth\\quot\\));//crlf////tab////tab////tab//if((n>0) //amp////amp// (e.offsetWidth<n)) e.style.width=n+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab////tab//if(e.getAttribute(\\quot\\maxwidth\\quot\\)) {//crlf////tab////tab////tab//var n=parseInt(e.getAttribute(\\quot\\maxwidth\\quot\\));//crlf////tab////tab////tab//if((n>0) //amp////amp// (e.offsetWidth>n)) e.style.width=n+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab////tab//if(e.getAttribute(\\quot\\minheight\\quot\\)) {//crlf////tab////tab////tab//var n=parseInt(e.getAttribute(\\quot\\minheight\\quot\\));//crlf////tab////tab////tab//if((n>0) //amp////amp// (e.offsetHeight<n)) e.style.height=n+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab////tab//if(e.getAttribute(\\quot\\maxheight\\quot\\)) {//crlf////tab////tab////tab//var n=parseInt(e.getAttribute(\\quot\\maxheight\\quot\\));//crlf////tab////tab////tab//if((n>0) //amp////amp// (e.offsetHeight>n)) e.style.height=n+\\quot\\px\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//if (bDebug) appendToLog(e.id+\\quot\\ w2=\\quot\\+e.style.width+\\quot\\ h2=\\quot\\+e.style.height);//crlf//};//crlf////crlf//^
ID=350058|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=true|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=function createChart(_id) {//crlf////tab//var eChartContainer=document.getElementById(_id);//crlf////tab//if(!eChartContainer) {//crlf////tab////tab//console.log(\\quot\\Error: createChart: \\quot\\+_id+\\quot\\ not found\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////make the element visible and add a single space.  If the element has no width\\comma\\ then it //crlf////tab////is not displayed so set a timeout and try again.//crlf////tab//eChartContainer.innerHTML=\\quot\\ \\quot\\;//crlf////tab//setVisible(_id\\comma\\true);//crlf////crlf////tab////console.log(\\quot\\eChartContainer id=\\quot\\+_id+\\quot\\ width=\\quot\\+eChartContainer.offsetWidth);//crlf////tab//if(eChartContainer.offsetWidth==0) {//crlf////tab////tab//setTimeout(\\quot\\createChart(\\\quot\\\\quot\\+_id+\\quot\\\\\quot\\)\\quot\\\\comma\\1000);//crlf////tab////tab//return;//crlf////tab//};//crlf////tab////crlf////tab////add title//crlf////tab//var eChartTitle=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eChartTitle.id=\\quot\\ChartTitle\\quot\\+_id;//crlf////tab//eChartTitle.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_title\\quot\\);//crlf////tab//eChartTitle.innerHTML=getChartTitle(_id);//crlf////tab//eChartTitle.setAttribute(\\quot\\onmouseover\\quot\\\\comma\\\\quot\\clearCrosshair('\\quot\\+_id+\\quot\\')\\quot\\);//crlf////tab//eChartContainer.appendChild(eChartTitle);//crlf////crlf////tab////add left axis//crlf////tab//var eLeftAxis=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eLeftAxis.id=\\quot\\ChartLeftAxis\\quot\\+_id;//crlf////tab//eLeftAxis.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_leftaxis\\quot\\);//crlf////tab//eLeftAxis.innerHTML=\\quot\\1000000000000\\quot\\;//crlf////tab//eLeftAxis.setAttribute(\\quot\\onmouseover\\quot\\\\comma\\\\quot\\clearCrosshair('\\quot\\+_id+\\quot\\')\\quot\\);//crlf////tab//eChartContainer.appendChild(eLeftAxis);//crlf////crlf////tab////add plot area container//crlf////tab//var ePlotAreaContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//ePlotAreaContainer.id=\\quot\\ChartPlotAreaContainer\\quot\\+_id;//crlf////tab//ePlotAreaContainer.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_plotarea_container\\quot\\);//crlf////tab//eChartContainer.appendChild(ePlotAreaContainer);//crlf////tab////crlf////tab////add plot area//crlf////tab//var ePlotArea=document.createElement(\\quot\\div\\quot\\);//crlf////tab//ePlotArea.id=\\quot\\ChartPlotArea\\quot\\+_id;//crlf////tab//ePlotArea.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_plotarea\\quot\\);//crlf////tab//ePlotArea.setAttribute(\\quot\\onmousemove\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this)\\quot\\);//crlf////tab//ePlotArea.setAttribute(\\quot\\onmouseenter\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this)\\quot\\);//crlf////tab////crlf////tab////this causes flickering//crlf////tab////ePlotArea.setAttribute(\\quot\\onmouseout\\quot\\\\comma\\\\quot\\clearCrosshair(this)\\quot\\);//crlf////crlf////tab//ePlotAreaContainer.appendChild(ePlotArea);//crlf////tab////crlf////tab////add bottom axis//crlf////tab//var eBottomAxis=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eBottomAxis.id=\\quot\\ChartBottomAxis\\quot\\+_id;//crlf////tab//eBottomAxis.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_bottomaxis\\quot\\);//crlf////tab//eBottomAxis.innerHTML=\\quot\\bottom<br>axis<br><br>\\quot\\;//crlf////tab//eBottomAxis.setAttribute(\\quot\\onmouseover\\quot\\\\comma\\\\quot\\clearCrosshair('\\quot\\+_id+\\quot\\')\\quot\\);//crlf////tab//ePlotAreaContainer.appendChild(eBottomAxis);//crlf////crlf////tab////add right axis//crlf////tab//var eRightAxis=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eRightAxis.id=\\quot\\ChartRightAxis\\quot\\+_id;//crlf////tab//eRightAxis.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_rightaxis\\quot\\);//crlf////tab//eRightAxis.innerHTML=\\quot\\1000000000000\\quot\\;//crlf////tab//eRightAxis.setAttribute(\\quot\\onmouseover\\quot\\\\comma\\\\quot\\clearCrosshair('\\quot\\+_id+\\quot\\')\\quot\\);//crlf////tab//eChartContainer.appendChild(eRightAxis);//crlf////crlf////tab////add slider//crlf////tab//var eSliderDiv=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eSliderDiv.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_slider\\quot\\);//crlf////tab//eSliderDiv.id=\\quot\\ChartSlider\\quot\\+_id;//crlf////crlf////tab//var eSliderControl=document.createElement(\\quot\\input\\quot\\);//crlf////tab//eSliderControl.id=\\quot\\Range\\quot\\+_id;//crlf////tab//eSliderControl.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\slider_input\\quot\\);//crlf////tab//eSliderControl.setAttribute(\\quot\\type\\quot\\\\comma\\\\quot\\range\\quot\\);//crlf////tab////eSliderControl.setAttribute(\\quot\\min\\quot\\\\comma\\\\quot\\0\\quot\\);//crlf////tab////eSliderControl.setAttribute(\\quot\\max\\quot\\\\comma\\\\quot\\1000\\quot\\);//crlf////tab////eSliderControl.setAttribute(\\quot\\value\\quot\\\\comma\\\\quot\\500\\quot\\);//crlf////tab//eSliderControl.setAttribute(\\quot\\onChange\\quot\\\\comma\\\\quot\\scalePlotArea(\\\quot\\\\quot\\+_id+\\quot\\\\\quot\\)\\quot\\);//crlf////tab//eSliderDiv.appendChild(eSliderControl);//crlf////tab//eChartContainer.appendChild(eSliderDiv);//crlf////crlf////tab////add legend//crlf////tab//var eLegend=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eLegend.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\legend\\quot\\);//crlf////tab//eLegend.id=\\quot\\ChartLegend\\quot\\+_id;//crlf////tab//eLegend.innerHTML=\\quot\\legend1<br>Legend2\\quot\\;//crlf////tab//eChartContainer.appendChild(eLegend);//crlf////tab////crlf////tab////get dimensions//crlf////tab//var iChartContainerWidth=eChartContainer.offsetWidth;//crlf////tab//var iChartContainerHeight=eChartContainer.offsetHeight;//crlf////tab//var iTitleHeight=eChartTitle.offsetHeight;//crlf////tab//var iLeftAxisWidth=eLeftAxis.offsetWidth;//tab////tab////tab////crlf////tab//var iRightAxisWidth=eRightAxis.offsetWidth;//crlf////tab//var iBottomAxisHeight=eBottomAxis.offsetHeight;//crlf////tab//var iSliderHeight=eSliderDiv.offsetHeight;//crlf////tab//var iLegendHeight=eLegend.offsetHeight;//crlf////tab////crlf////tab//var iScrollbarHeight=eBottomAxis.offsetHeight;//tab////this needs to be corrected//crlf////tab////crlf////tab//var iPlotAreaContainerWidth=iChartContainerWidth-iLeftAxisWidth-iRightAxisWidth;//crlf////tab//var iPlotAreaContainerHeight=iChartContainerHeight-iTitleHeight-iSliderHeight-iLegendHeight;//crlf////tab//var iPlotAreaHeight=iPlotAreaContainerHeight-iBottomAxisHeight-iScrollbarHeight;//crlf////crlf////tab////set dimensions of plot area//crlf////tab////ePlotAreaContainer.style.left=iLeftAxisWidth+\\quot\\px\\quot\\;//crlf////tab//ePlotAreaContainer.style.marginLeft=iLeftAxisWidth+\\quot\\px\\quot\\;//crlf////tab//ePlotAreaContainer.style.width=iPlotAreaContainerWidth+\\quot\\px\\quot\\;//crlf////tab//ePlotAreaContainer.style.height=iPlotAreaContainerHeight+\\quot\\px\\quot\\;//crlf////tab//ePlotArea.style.height=(iPlotAreaHeight-2)+\\quot\\px\\quot\\;//crlf////tab//eSliderDiv.style.width=iPlotAreaContainerWidth+\\quot\\px\\quot\\;//crlf////tab//eSliderDiv.style.marginLeft=iLeftAxisWidth+\\quot\\px\\quot\\;//crlf////crlf////tab//eSliderControl.setAttribute(\\quot\\min\\quot\\\\comma\\iPlotAreaContainerWidth);//crlf////tab//eSliderControl.setAttribute(\\quot\\max\\quot\\\\comma\\5*iPlotAreaContainerWidth);//crlf////tab//eSliderControl.setAttribute(\\quot\\value\\quot\\\\comma\\iPlotAreaContainerWidth);//crlf////crlf////tab//eLeftAxis.style.height=(iPlotAreaHeight+iBottomAxisHeight+iScrollbarHeight)+\\quot\\px\\quot\\;//crlf////tab//eRightAxis.style.height=(iPlotAreaHeight+iBottomAxisHeight+iScrollbarHeight)+\\quot\\px\\quot\\;//crlf////crlf////tab//setChartAxisScale(_id);//crlf////tab//drawLeftAxis(_id);//crlf////tab//drawRightAxis(_id);//crlf////tab//drawBottomAxis(_id);//crlf////crlf////tab////note: this needs to come after setChartAxisScale so the location of the //crlf////tab////series (left/right) is known//crlf////tab//drawLegend(_id);//crlf////crlf////tab//initializePlotArea(_id);//crlf////crlf////tab//var sChartType=getChartType(_id);//crlf////tab//if((!sChartType.equalsIgnoreCase(\\quot\\AspectScatter\\quot\\)) //amp////amp// (!sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\))) {//crlf////tab////tab//drawDateMarkers(_id);//crlf////tab////tab//drawRecessionTicks(_id);//crlf////tab//};//crlf////tab//drawZeroLine(_id\\comma\\\\quot\\left\\quot\\);//crlf////tab//drawZeroLine(_id\\comma\\\\quot\\right\\quot\\);//crlf////tab//setTimeout(\\quot\\drawPlot(\\\quot\\\\quot\\+_id+\\quot\\\\\quot\\\\comma\\1);\\quot\\\\comma\\0);//crlf//};//crlf////crlf//function getChartTitle(_id) {//crlf////tab//var sTableID=replaceAllSubstrings(_id\\comma\\\\quot\\Chart\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab//var table=document.getElementById(sTableID);//crlf////crlf////tab//var s=table.getAttribute(\\quot\\ChartTitle\\quot\\);//crlf////tab//if((s) //amp////amp// (s.length>0)) return(s);//crlf////crlf////tab//var eDisplayName=document.getElementById(\\quot\\SelectDisplay1\\quot\\+sTableID);//crlf////tab//if(eDisplayName) {//crlf////tab////tab//var s=eDisplayName.options[eDisplayName.selectedIndex].text;//crlf////tab////tab//var n=s.indexOf(\\quot\\:\\quot\\);//crlf////tab////tab//if(n>=0) s=s.substring(n+2);//crlf////tab////tab//return(s);//crlf////tab//};//crlf////crlf////tab//return(\\quot\\\\quot\\);//crlf//};//crlf////crlf//function getChartType(_id) {//crlf////tab//var sTableID=replaceAllSubstrings(_id\\comma\\\\quot\\Chart\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab//var table=document.getElementById(sTableID);//crlf////tab//var sChartType=table.getAttribute(\\quot\\aspectChartType\\quot\\);//crlf////tab//return(sChartType);//crlf//};//crlf////crlf//function getChartData(_id) {//crlf////tab//var sTableID=replaceAllSubstrings(_id\\comma\\\\quot\\Chart\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////tab//var e=document.getElementById(\\quot\\googlechartdata\\quot\\+sTableID);//crlf////tab//return(e.innerHTML);//crlf//};//crlf////crlf//function getAxisMinMax(_min\\comma\\_max) {//crlf////tab//var tick=(_max-_min)/10;//crlf////crlf////tab////console.log(\\quot\\_min=\\quot\\+_min);//crlf////tab////console.log(\\quot\\_max=\\quot\\+_max);//crlf////tab////console.log(\\quot\\tick=\\quot\\+tick);//crlf////crlf////tab//var Factor;//crlf////tab//if(tick<1) {//crlf////tab////tab//Factor=0.1;//crlf////tab//}//crlf////tab//else if(tick<10) {//crlf////tab////tab//Factor=1;//crlf////tab//}//crlf////tab//else if(tick<100) {//crlf////tab////tab//Factor=10;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//Factor=100;//crlf////tab//};//crlf////crlf////tab//tick=(Math.floor(tick/Factor)+1)*Factor;//crlf////tab//var min=Math.floor(_min/tick)*tick;//crlf////tab//var max=min+(tick*10);//crlf////crlf////tab//while(max<_max) max +=tick;//crlf////crlf////tab////console.log(\\quot\\Factor=\\quot\\+Factor);//crlf////tab////console.log(\\quot\\tick2=\\quot\\+tick);//crlf////tab////console.log(\\quot\\min=\\quot\\+min);//crlf////tab////console.log(\\quot\\max=\\quot\\+max);//crlf////crlf////tab////try cutting the max by half//crlf////tab//if(max-tick*5>_max) {//crlf////tab////tab//max-=tick*5;//crlf////tab//};//crlf////crlf////tab////try cutting the max by one quarter//crlf////tab//if(max-tick*2.5>_max) {//crlf////tab////tab//max-=tick*2.5;//crlf////tab//};//crlf////crlf////tab////try increasing the min by half//crlf////tab//if(min+tick*5<_min) {//crlf////tab////tab//min+=tick*5;//crlf////tab//};//crlf////crlf////tab////try increasing the min by one quarter//crlf////tab//if(min+tick*2.5<_min) {//crlf////tab////tab//min+=tick*2.5;//crlf////tab//};//crlf////crlf////tab////console.log(\\quot\\min2=\\quot\\+min);//crlf////tab////console.log(\\quot\\max2=\\quot\\+max);//crlf////crlf////tab//var a=new Array(min\\comma\\max);//crlf////tab//return(a);//crlf//};//crlf////crlf//function setChartAxisScale(_id) {//crlf////crlf////tab//var sChartType=getChartType(_id);//crlf////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectLine2\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectColumn2\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\))) {//crlf////tab////if(getChartType(_id).equalsIgnoreCase(\\quot\\AspectLine2\\quot\\)) {//crlf////tab////tab//setChart2AxisScale(_id);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var ChartData=getChartData(_id);//crlf////tab//var leftmin=0;//crlf////tab//var leftmax=0;//crlf////tab//var rightmin=0;//crlf////tab//var rightmax=0;//crlf////tab//var bottommin=0;//crlf////tab//var bottommax=0;//crlf////tab////crlf////tab//var SeriesCount=getChartSeriesCount(ChartData);//crlf////tab//for(var i=1;i<SeriesCount;i++) {//crlf////tab////tab//var a=getChartSeries(_id\\comma\\ChartData\\comma\\i);//crlf////tab////tab//var min=getChartSeriesMin(a\\comma\\_id);//crlf////tab////tab//var max=getChartSeriesMax(a);//crlf////crlf////tab////tab//if((!Number.isNaN(min)) //amp////amp// (!Number.isNaN(max))) {//crlf////tab////tab////tab//if(i==1) {//crlf////tab////tab////tab////tab//if(sChartType.equalsIgnoreCase(\\quot\\AspectScatter\\quot\\)) {//crlf////tab////tab////tab////tab////tab//bottommin=min;//crlf////tab////tab////tab////tab////tab//bottommax=max;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//leftmin=min;//crlf////tab////tab////tab////tab////tab//leftmax=max;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectScatter\\quot\\)) //amp////amp// (i==2)) {//crlf////tab////tab////tab////tab////tab////initialize min/max using first series that is not the X axis.  This is series 2.//crlf////tab////tab////tab////tab////tab//leftmin=min;//crlf////tab////tab////tab////tab////tab//leftmax=max;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//leftmin=Math.min(leftmin\\comma\\min);//crlf////tab////tab////tab////tab////tab//leftmax=Math.max(leftmax\\comma\\max);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////tab////crlf////tab//if((leftmin==0) //amp////amp// (leftmax==0)) {//crlf////tab////tab//leftmax=1;//crlf////tab//};//crlf////crlf////tab//if(leftmin==leftmax) {//crlf////tab////tab//leftmin=leftmax*0.9;//crlf////tab////tab//leftmax=leftmax*1.1;//crlf////tab//};//crlf////crlf////tab////adjust min/max to make the scales more readable//crlf////tab//var a=getAxisMinMax(leftmin\\comma\\leftmax);//crlf////tab//leftmin=a[0];//crlf////tab//leftmax=a[1];//crlf////crlf////tab//var e=document.getElementById(_id);//crlf////tab//e.setAttribute(\\quot\\LeftAxisMin\\quot\\\\comma\\leftmin);//crlf////tab//e.setAttribute(\\quot\\LeftAxisMax\\quot\\\\comma\\leftmax);//crlf////tab//e.setAttribute(\\quot\\RightAxisMin\\quot\\\\comma\\rightmin);//crlf////tab//e.setAttribute(\\quot\\RightAxisMax\\quot\\\\comma\\rightmin);//crlf////tab//e.setAttribute(\\quot\\BottomAxisMin\\quot\\\\comma\\bottommin);//crlf////tab//e.setAttribute(\\quot\\BottomAxisMax\\quot\\\\comma\\bottommax);//crlf////crlf////tab//for(var i=0;i<SeriesCount;i++) {//crlf////tab////tab//e.setAttribute(\\quot\\SeriesAxis\\quot\\+i\\comma\\\\quot\\left\\quot\\);//crlf////tab//};//crlf//};//crlf////crlf//function setChart2AxisScale(_id) {//crlf////tab//var sChartType=getChartType(_id);//crlf////tab//var armin=new Array();//crlf////tab//var armax=new Array();//crlf////tab//var sChartData=getChartData(_id);//crlf////tab//cSeries=getChartSeriesCount(sChartData);//crlf////crlf////tab//var bottommin=0;//crlf////tab//var bottommax=0;//crlf////crlf////tab////get the min and max values for each series.  Remember that series 0 is the labels.//crlf////tab//for(var i=0;i<cSeries;i++) {//crlf////tab////tab//if(i==0) {//crlf////tab////tab////tab//armin[armin.length]=-1//crlf////tab////tab////tab//armax[armax.length]=-1//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//armin[armin.length]=getChartSeriesMin(getChartSeries(_id\\comma\\sChartData\\comma\\i)\\comma\\_id);//crlf////tab////tab////tab//armax[armax.length]=getChartSeriesMax(getChartSeries(_id\\comma\\sChartData\\comma\\i));//crlf////crlf////tab////tab////tab//if(i==1) {//crlf////tab////tab////tab////tab//bottommin=armin[armin.length-1];//crlf////tab////tab////tab////tab//bottommax=armax[armax.length-1];//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf///*//crlf////tab//for(var i=0;i<armin.length;i++) {//crlf////tab////tab//console.log(\\quot\\A armin[\\quot\\+i+\\quot\\]=\\quot\\+armin[i]+\\quot\\ armax[\\quot\\+i+\\quot\\]=\\quot\\+armax[i]);//crlf////tab//};//crlf//*///crlf////crlf////tab////if dealing with a scatter chart\\comma\\ set min[0] and max[0] to min[1] and max[1].  This is a //crlf////tab////simple way of eliminating the min/max from the first series which is the X axis//crlf////tab//if(sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\)) {//crlf////tab////tab//armin[1]=armin[2];//crlf////tab////tab//armax[1]=armax[2];//crlf////tab//};//crlf////crlf///*//crlf////tab//for(var i=0;i<armin.length;i++) {//crlf////tab////tab//console.log(\\quot\\B armin[\\quot\\+i+\\quot\\]=\\quot\\+armin[i]+\\quot\\ armax[\\quot\\+i+\\quot\\]=\\quot\\+armax[i]);//crlf////tab//};//crlf//*///crlf////crlf////tab////console.log(\\quot\\cSeries=\\quot\\+cSeries);//crlf////tab////console.log(\\quot\\armin=\\quot\\+armin.toString());//crlf////tab////console.log(\\quot\\armax=\\quot\\+armax.toString());//crlf////crlf////tab////test each possible combination//crlf////tab//var cTrial=0;//crlf////tab//var MinSpread=0;//crlf////tab//var bSpreadInitialized=false;//crlf////crlf////tab//////crlf////tab//var arAxis=new Array();//crlf////tab//for(var i=0;i<cSeries;i++) {//crlf////tab////tab//if(i==0) {//crlf////tab////tab////tab//arAxis[arAxis.length]=\\quot\\n/a\\quot\\;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//arAxis[arAxis.length]=\\quot\\left\\quot\\;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////an array with two elements representing the min and max value of the axis//crlf////tab//var LeftAxisRange=new Array();//crlf////tab//var RightAxisRange=new Array();//crlf////crlf////tab////This loop tests every possible combination of left and right axis values.  //crlf////tab////The i and j loops iterate through all possible values of left max and right max//crlf////tab////Inside of that loop\\comma\\ k and l iterate through all possible min values//crlf////tab////For each possible combination\\comma\\ every series is tested to see if it will fit inside //crlf////tab////one of the axes.  If not\\comma\\ the combination is considered invalid and ignored.//crlf////tab////crlf////tab////If the axes will accommodate all of the series\\comma\\ a spread is calculated to determine //crlf////tab////how well the series sit inside the axes.  This is just the sum of the axis maximum less //crlf////tab////the series maximum and the series minimum less the axis minimum.  The spread is summed //crlf////tab////for all series.  If the spread is less that the best spread so far\\comma\\ that ranges are recorded //crlf////tab////as well as the axis on which each series will be plotted.//crlf////tab//for(var i=0;i<cSeries;i++) {//crlf////tab////tab//for(var j=1;j<cSeries;j++) {//crlf////tab////tab////tab//LeftMax=armax[i];//crlf////tab////tab////tab//RightMax=armax[j];//crlf////tab////tab////tab//for(var k=1;k<cSeries;k++) {//crlf////tab////tab////tab////tab//for(var l=1;l<cSeries;l++) {//crlf////tab////tab////tab////tab////tab//LeftMin=armin[k];//crlf////tab////tab////tab////tab////tab//RightMin=armin[l];//crlf////crlf////tab////tab////tab////tab////tab//if((LeftMax>LeftMin) //amp////amp// (RightMax>RightMin)) {//crlf////tab////tab////tab////tab////tab////tab////see if all of the series can be accommodated //crlf////tab////tab////tab////tab////tab////tab//bIsValid=true;//crlf////tab////tab////tab////tab////tab////tab//var arTestAxis=new Array();//crlf////tab////tab////tab////tab////tab////tab//for(iSeries=1;iSeries<cSeries;iSeries++) {//crlf////tab////tab////tab////tab////tab////tab////tab//if((armin[iSeries]<LeftMin) ~~pipe~~~~pipe~~ (armax[iSeries]>LeftMax)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if((armin[iSeries]<RightMin) ~~pipe~~~~pipe~~ (armax[iSeries]>RightMax)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//bIsValid=false;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arTestAxis[iSeries]=\\quot\\invalid\\quot\\;//crlf////console.log(\\quot\\(\\quot\\+LeftMin+\\quot\\\\comma\\\\quot\\+LeftMax+\\quot\\)\\comma\\(\\quot\\+RightMin+\\quot\\\\comma\\\\quot\\+RightMax+\\quot\\) - Invalid\\quot\\);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//break;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arTestAxis[iSeries]=\\quot\\right\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//arTestAxis[iSeries]=\\quot\\left\\quot\\;//crlf////crlf////console.log(\\quot\\Testing right axis.\\quot\\);//crlf////console.log(\\quot\\armin=\\quot\\+armin[iSeries]+\\quot\\ RightMin=\\quot\\+RightMin);//crlf////console.log(\\quot\\armax=\\quot\\+armax[iSeries]+\\quot\\ RightMax=\\quot\\+RightMax);//crlf////tab////tab////tab////tab////tab////tab////tab////tab////so far\\comma\\ the series will fit on the left.  See if it will fit on the right //crlf////tab////tab////tab////tab////tab////tab////tab////tab////and if the range of the right axis is less than the range of the left axis.//crlf////tab////tab////tab////tab////tab////tab////tab////tab////If so\\comma\\ move it to the right//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if((armin[iSeries]>=RightMin) //amp////amp// (armax[iSeries]<=RightMax)) {//crlf////console.log(\\quot\\RightMax-RightMin=\\quot\\+(RightMax-RightMin)+\\quot\\ LeftMax-LeftMin=\\quot\\+(LeftMax-LeftMin));//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//if(RightMax-RightMin<LeftMax-LeftMin) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab////tab//arTestAxis[iSeries]=\\quot\\right\\quot\\;//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////tab////tab//if(bIsValid) {//crlf////tab////tab////tab////tab////tab////tab////tab////evaluate the axes.  This spread is too simple and is replaced below.//crlf////tab////tab////tab////tab////tab////tab////tab//var Spread=(LeftMax-LeftMin)+(RightMax-RightMin);//crlf////crlf////tab////tab////tab////tab////tab////tab////tab////calculate the spread by calculating the difference between the min/max value of //crlf////tab////tab////tab////tab////tab////tab////tab////each series and the min/max of the axis on which it is plotted//crlf////tab////tab////tab////tab////tab////tab////tab//Spread=0;//crlf////tab////tab////tab////tab////tab////tab////tab//for(iSeries=1;iSeries<cSeries;iSeries++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//if(arTestAxis[iSeries].equalsIgnoreCase(\\quot\\left\\quot\\)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//Spread+=(armin[iSeries]-LeftMin)+(LeftMax-armax[iSeries]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//Spread+=(armin[iSeries]-RightMin)+(RightMax-armax[iSeries]);//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////console.log(\\quot\\(\\quot\\+LeftMin+\\quot\\\\comma\\\\quot\\+LeftMax+\\quot\\)\\comma\\(\\quot\\+RightMin+\\quot\\\\comma\\\\quot\\+RightMax+\\quot\\) - Spread=\\quot\\+Spread+\\quot\\ MinSpread=\\quot\\+MinSpread);//crlf////crlf////tab////tab////tab////tab////tab////tab////tab//if((!bSpreadInitialized) ~~pipe~~~~pipe~~ (Spread<MinSpread)) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab//MinSpread=Spread;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//bSpreadInitialized=true;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//LeftAxisRange[0]=LeftMin;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//LeftAxisRange[1]=LeftMax;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//RightAxisRange[0]=RightMin;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//RightAxisRange[1]=RightMax;//crlf////tab////tab////tab////tab////tab////tab////tab////tab//for(var iSeries=1;iSeries<cSeries;iSeries++) {//crlf////tab////tab////tab////tab////tab////tab////tab////tab////tab//arAxis[iSeries]=arTestAxis[iSeries];//crlf////tab////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//cTrial++;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////console.log(\\quot\\MinSpread=\\quot\\+MinSpread);//crlf////tab////console.log(\\quot\\LeftAxisRange=\\quot\\+LeftAxisRange);//crlf////tab////console.log(\\quot\\RightAxisRange=\\quot\\+RightAxisRange);//crlf////tab////console.log(\\quot\\arAxis=\\quot\\+arAxis.toString());//crlf////crlf////tab////adjust min/max to make the scales more readable//crlf////tab//var a=getAxisMinMax(LeftAxisRange[0]\\comma\\LeftAxisRange[1]);//crlf////tab//LeftAxisRange[0]=a[0];//crlf////tab//LeftAxisRange[1]=a[1];//crlf////crlf////tab//a=getAxisMinMax(RightAxisRange[0]\\comma\\RightAxisRange[1]);//crlf////tab//RightAxisRange[0]=a[0];//crlf////tab//RightAxisRange[1]=a[1];//crlf////crlf////tab//var e=document.getElementById(_id);//crlf////tab////console.log(\\quot\\set attributes in \\quot\\+_id+\\quot\\: \\quot\\+e);//crlf////tab//e.setAttribute(\\quot\\LeftAxisMin\\quot\\\\comma\\LeftAxisRange[0]);//crlf////tab//e.setAttribute(\\quot\\LeftAxisMax\\quot\\\\comma\\LeftAxisRange[1]);//crlf////tab//e.setAttribute(\\quot\\RightAxisMin\\quot\\\\comma\\RightAxisRange[0]);//crlf////tab//e.setAttribute(\\quot\\RightAxisMax\\quot\\\\comma\\RightAxisRange[1]);//crlf////tab//e.setAttribute(\\quot\\BottomAxisMin\\quot\\\\comma\\bottommin);//crlf////tab//e.setAttribute(\\quot\\BottomAxisMax\\quot\\\\comma\\bottommax);//crlf////crlf////tab//console.log(\\quot\\bottommin=\\quot\\+bottommin+\\quot\\ bottommax=\\quot\\+bottommax);//crlf////crlf////tab//for(var i=1;i<arAxis.length;i++) {//crlf////tab////tab//e.setAttribute(\\quot\\SeriesAxis\\quot\\+i\\comma\\arAxis[i]);//crlf////tab////tab////console.log(\\quot\\setAttribute SeriesAxis\\quot\\+i+\\quot\\=\\quot\\+arAxis[i]);//crlf////tab//};//crlf//};//tab////crlf////crlf//function getChartSeriesCount(_chartdata) {//crlf////tab//var a1=_chartdata.split(\\quot\\~~pipe~~\\quot\\);//crlf////tab//var a2=a1[0].split(\\quot\\//power//\\quot\\);//crlf////tab//return(a2.length);//crlf//};//crlf////crlf//function getChartLegend(_chartdata) {//crlf////tab//var a1=_chartdata.split(\\quot\\~~pipe~~\\quot\\);//crlf////tab//var a2=a1[0].split(\\quot\\//power//\\quot\\);//crlf////tab//return(a2);//crlf//};//crlf////crlf//function getChartSeries(_id\\comma\\_chartdata\\comma\\_index) {//crlf////tab//var a1=_chartdata.split(\\quot\\~~pipe~~\\quot\\);//crlf////tab//var arSeries=new Array();//crlf////tab//var dFirstValue=0;//crlf////tab//var sChartType=getChartType(_id);//crlf////tab//var bIndex=(sChartType==\\quot\\AspectLineIndex\\quot\\);//crlf////tab//var dFirstIndexedValue=0;//crlf////crlf////tab//for(var i=1;i<a1.length;i++) {//crlf////tab////tab//var a2=a1[i].split(\\quot\\//power//\\quot\\);//crlf////tab////tab//if(_index==0) {//crlf////tab////tab////tab//arSeries[arSeries.length]=a2[_index];//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if(bIndex) {//crlf////tab////tab////tab////tab//if((i==1) ~~pipe~~~~pipe~~ (dFirstValue==0)) dFirstValue=parseFloat(a2[_index]);//crlf////tab////tab////tab////tab//if(dFirstValue==0) {//crlf////tab////tab////tab////tab////tab//arSeries[arSeries.length]=0;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//arSeries[arSeries.length]=parseFloat(a2[_index])/Math.abs(dFirstValue)*100;//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////This is to handle negative numbers.  If the first number is negative then the //crlf////tab////tab////tab////tab////first index value will be -100\\comma\\ so add 200 to it.  It's also necessary to use//crlf////tab////tab////tab////tab////the absolute value of dFirstValue above when calculating the index value.//crlf////tab////tab////tab////tab//if(dFirstValue<0) arSeries[arSeries.length-1]+=200;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//arSeries[arSeries.length]=parseFloat(a2[_index]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//return(arSeries);//crlf//};//crlf////crlf//function getChartSeriesMax(_a) {//crlf////tab//var max=_a[0];//crlf////tab//for(var i=0;i<_a.length;i++) {//crlf////tab////tab//if(!Number.isNaN(_a[i])) max=Math.max(max\\comma\\_a[i]);//crlf////tab//};//crlf////tab//return(max);//crlf//};//crlf////crlf///**************************************************************//crlf//4/2021 - Modified this to skip initial zeroes in a series.  For example\\comma\\ in a series forecast\\comma\\ //crlf//the values are zero until the forecast begins.  Including these zeroes causes the min to be //crlf//less than it should.//crlf////crlf//However\\comma\\ there is a problem when applying this to 2-axis graphs.  Currently\\comma\\ 0 will be //crlf//returned as the min for a 2-axis graph.//crlf//**************************************************************///crlf//function getChartSeriesMin(_a\\comma\\_id) {//crlf////tab//var min=_a[0];//crlf////crlf////tab////don't include 0's in the min calculation until a non-zero number has been encountered.//crlf////tab////This allows the graph to avoid plotting the initial zero value for series that may not //crlf////tab////contain data until later in the series//crlf////tab//var bPastZeros=false;//crlf////crlf////tab//if(_id) {//crlf////tab////tab//var sChartType=getChartType(_id);//crlf////tab////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectLine2\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectColumn2\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\))) {//crlf////tab////tab////tab//bPastZeros=true;//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//for(var i=0;i<_a.length;i++) {//crlf////tab////tab//if(!Number.isNaN(_a[i])) {//crlf////tab////tab////tab//if(_a[i]!=0) {//crlf////tab////tab////tab////tab//if(!bPastZeros) min=_a[i];//crlf////tab////tab////tab////tab//bPastZeros=true;//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if(bPastZeros) {//crlf////tab////tab////tab////tab//min=Math.min(min\\comma\\_a[i]);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//return(min);//crlf//};//crlf////crlf//function getSeriesColor(_seriesIndex) {//crlf////tab//var c=\\quot\\black\\quot\\;//crlf////tab//var arColor=[\\quot\\Blue\\quot\\\\comma\\\\quot\\Tomato\\quot\\\\comma\\\\quot\\BlueViolet\\quot\\\\comma\\\\quot\\Brown\\quot\\\\comma\\\\quot\\CadetBlue\\quot\\\\comma\\\\quot\\Chocolate\\quot\\\\comma\\\\quot\\Coral\\quot\\\\comma\\\\quot\\CornflowerBlue\\quot\\\\comma\\\\quot\\Crimson\\quot\\\\comma\\\\quot\\DarkBlue\\quot\\\\comma\\\\quot\\DarkCyan\\quot\\\\comma\\\\quot\\DarkGoldenRod\\quot\\\\comma\\\\quot\\DarkGreen\\quot\\\\comma\\\\quot\\DarkMagenta\\quot\\\\comma\\\\quot\\DarkOliveGreen\\quot\\\\comma\\\\quot\\DarkOrange\\quot\\\\comma\\\\quot\\DarkOrchid\\quot\\\\comma\\\\quot\\DarkRed\\quot\\\\comma\\\\quot\\DarkSlateBlue\\quot\\\\comma\\\\quot\\DarkSlateGray\\quot\\\\comma\\\\quot\\DarkSlateGrey\\quot\\\\comma\\\\quot\\DarkTurquoise\\quot\\\\comma\\\\quot\\DarkViolet\\quot\\\\comma\\\\quot\\DeepPink\\quot\\\\comma\\\\quot\\DeepSkyBlue\\quot\\\\comma\\\\quot\\DimGray\\quot\\\\comma\\\\quot\\DimGrey\\quot\\\\comma\\\\quot\\DodgerBlue\\quot\\\\comma\\\\quot\\FireBrick\\quot\\\\comma\\\\quot\\ForestGreen\\quot\\\\comma\\\\quot\\Fuchsia\\quot\\\\comma\\\\quot\\Gold\\quot\\\\comma\\\\quot\\GoldenRod\\quot\\\\comma\\\\quot\\Gray\\quot\\\\comma\\\\quot\\Grey\\quot\\\\comma\\\\quot\\Green\\quot\\\\comma\\\\quot\\GreenYellow\\quot\\\\comma\\\\quot\\HotPink\\quot\\\\comma\\\\quot\\IndianRed \\quot\\\\comma\\\\quot\\Indigo \\quot\\\\comma\\\\quot\\Ivory\\quot\\\\comma\\\\quot\\Khaki\\quot\\\\comma\\\\quot\\Lavender\\quot\\\\comma\\\\quot\\LavenderBlush\\quot\\\\comma\\\\quot\\LawnGreen\\quot\\\\comma\\\\quot\\LemonChiffon\\quot\\\\comma\\\\quot\\LightBlue\\quot\\\\comma\\\\quot\\LightCoral\\quot\\\\comma\\\\quot\\LightCyan\\quot\\\\comma\\\\quot\\LightGoldenRodYellow\\quot\\\\comma\\\\quot\\LightGray\\quot\\\\comma\\\\quot\\LightGrey\\quot\\\\comma\\\\quot\\LightGreen\\quot\\\\comma\\\\quot\\LightPink\\quot\\\\comma\\\\quot\\LightSalmon\\quot\\\\comma\\\\quot\\LightSeaGreen\\quot\\\\comma\\\\quot\\LightSkyBlue\\quot\\\\comma\\\\quot\\LightSlateGray\\quot\\\\comma\\\\quot\\LightSlateGrey\\quot\\\\comma\\\\quot\\LightSteelBlue\\quot\\\\comma\\\\quot\\LightYellow\\quot\\\\comma\\\\quot\\Lime\\quot\\\\comma\\\\quot\\LimeGreen\\quot\\\\comma\\\\quot\\Linen\\quot\\\\comma\\\\quot\\Magenta\\quot\\\\comma\\\\quot\\Maroon\\quot\\\\comma\\\\quot\\MediumAquaMarine\\quot\\\\comma\\\\quot\\MediumBlue\\quot\\\\comma\\\\quot\\MediumOrchid\\quot\\\\comma\\\\quot\\MediumPurple\\quot\\\\comma\\\\quot\\MediumSeaGreen\\quot\\\\comma\\\\quot\\MediumSlateBlue\\quot\\\\comma\\\\quot\\MediumSpringGreen\\quot\\\\comma\\\\quot\\MediumTurquoise\\quot\\\\comma\\\\quot\\MediumVioletRed\\quot\\\\comma\\\\quot\\MidnightBlue\\quot\\\\comma\\\\quot\\MintCream\\quot\\\\comma\\\\quot\\MistyRose\\quot\\\\comma\\\\quot\\Moccasin\\quot\\\\comma\\\\quot\\NavajoWhite\\quot\\\\comma\\\\quot\\Navy\\quot\\\\comma\\\\quot\\OldLace\\quot\\\\comma\\\\quot\\Olive\\quot\\\\comma\\\\quot\\OliveDrab\\quot\\\\comma\\\\quot\\Orange\\quot\\\\comma\\\\quot\\OrangeRed\\quot\\\\comma\\\\quot\\Orchid\\quot\\\\comma\\\\quot\\PaleGoldenRod\\quot\\\\comma\\\\quot\\PaleGreen\\quot\\\\comma\\\\quot\\PaleTurquoise\\quot\\\\comma\\\\quot\\PaleVioletRed\\quot\\\\comma\\\\quot\\PapayaWhip\\quot\\\\comma\\\\quot\\PeachPuff\\quot\\\\comma\\\\quot\\Peru\\quot\\\\comma\\\\quot\\Pink\\quot\\\\comma\\\\quot\\Plum\\quot\\\\comma\\\\quot\\PowderBlue\\quot\\\\comma\\\\quot\\Purple\\quot\\\\comma\\\\quot\\RebeccaPurple\\quot\\\\comma\\\\quot\\Red\\quot\\\\comma\\\\quot\\RosyBrown\\quot\\\\comma\\\\quot\\RoyalBlue\\quot\\\\comma\\\\quot\\SaddleBrown\\quot\\\\comma\\\\quot\\Salmon\\quot\\\\comma\\\\quot\\SandyBrown\\quot\\\\comma\\\\quot\\SeaGreen\\quot\\\\comma\\\\quot\\SeaShell\\quot\\\\comma\\\\quot\\Sienna\\quot\\\\comma\\\\quot\\Silver\\quot\\\\comma\\\\quot\\SkyBlue\\quot\\\\comma\\\\quot\\SlateBlue\\quot\\\\comma\\\\quot\\SlateGray\\quot\\\\comma\\\\quot\\SlateGrey\\quot\\\\comma\\\\quot\\Snow\\quot\\\\comma\\\\quot\\SpringGreen\\quot\\\\comma\\\\quot\\SteelBlue\\quot\\\\comma\\\\quot\\Tan\\quot\\\\comma\\\\quot\\Teal\\quot\\\\comma\\\\quot\\Thistle\\quot\\\\comma\\\\quot\\Turquoise\\quot\\\\comma\\\\quot\\Violet\\quot\\\\comma\\\\quot\\Wheat\\quot\\\\comma\\\\quot\\Yellow\\quot\\\\comma\\\\quot\\YellowGreen\\quot\\\\comma\\\\quot\\AliceBlue\\quot\\\\comma\\\\quot\\Azure\\quot\\\\comma\\\\quot\\Beige\\quot\\\\comma\\\\quot\\Bisque\\quot\\\\comma\\\\quot\\BlanchedAlmond\\quot\\\\comma\\\\quot\\BurlyWood\\quot\\\\comma\\\\quot\\Cornsilk\\quot\\\\comma\\\\quot\\Cyan\\quot\\\\comma\\\\quot\\DarkGray\\quot\\\\comma\\\\quot\\DarkGrey\\quot\\\\comma\\\\quot\\Aqua\\quot\\\\comma\\\\quot\\Aquamarine\\quot\\\\comma\\\\quot\\Black\\quot\\\\comma\\\\quot\\DarkKhaki\\quot\\\\comma\\\\quot\\DarkSalmon\\quot\\\\comma\\\\quot\\DarkSeaGreen\\quot\\\\comma\\\\quot\\Chartreuse\\quot\\\\comma\\\\quot\\FloralWhite\\quot\\\\comma\\\\quot\\Gainsboro\\quot\\\\comma\\\\quot\\GhostWhite\\quot\\\\comma\\\\quot\\HoneyDew\\quot\\];//crlf////tab//if((_seriesIndex-1)<arColor.length) c=arColor[_seriesIndex-1];//crlf////tab//return(c);//crlf//};//crlf////crlf//function scalePlotArea(_id) {//crlf////tab////console.log(\\quot\\scalePlotArea\\quot\\);//crlf////tab//initializePlotArea(_id);//crlf////tab//drawBottomAxis(_id);//crlf////crlf////tab//var sChartType=getChartType(_id);//crlf////tab//if((!sChartType.equalsIgnoreCase(\\quot\\AspectScatter\\quot\\)) //amp////amp// (!sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\))) {//crlf////tab////tab//drawRecessionTicks(_id);//crlf////tab////tab//drawDateMarkers(_id);//crlf////tab//};//crlf////tab//drawZeroLine(_id\\comma\\\\quot\\left\\quot\\);//crlf////tab//drawZeroLine(_id\\comma\\\\quot\\right\\quot\\);//crlf////tab//setTimeout(\\quot\\drawPlot(\\\quot\\\\quot\\+_id+\\quot\\\\\quot\\\\comma\\1)\\quot\\\\comma\\0);//crlf//};//crlf////crlf//function initializePlotArea(_id) {//crlf////tab//var e=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab//var width=document.getElementById(\\quot\\Range\\quot\\+_id).value;//crlf////tab//e.style.width=(width-4)+\\quot\\px\\quot\\;//crlf////tab////document.getElementById(\\quot\\ChartBottomAxis\\quot\\+_id).style.width=width+\\quot\\px\\quot\\;//crlf////tab//e.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab////add horizontal crosshair//crlf////tab//var eHorzCrosshair=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eHorzCrosshair.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_horz_crosshair\\quot\\);//crlf////tab//eHorzCrosshair.id=e.id+\\quot\\HCross\\quot\\;//crlf////tab//eHorzCrosshair.style.width=e.offsetWidth+\\quot\\px\\quot\\;//crlf////tab//e.appendChild(eHorzCrosshair);//crlf////crlf////tab////add vertical crosshair//crlf////tab//var eVertCrosshair=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eVertCrosshair.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_vert_crosshair\\quot\\);//crlf////tab//eVertCrosshair.id=e.id+\\quot\\VCross\\quot\\;//crlf////tab//eVertCrosshair.style.height=e.offsetHeight+\\quot\\px\\quot\\;//crlf////tab//e.appendChild(eVertCrosshair);//crlf//};//crlf////crlf//function drawPlot(_id\\comma\\iSeries) {//crlf////tab//var e=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////crlf////tab//var sChartType=getChartType(replaceAllSubstrings(_id\\comma\\\\quot\\Chart\\quot\\\\comma\\\\quot\\\\quot\\));//crlf////crlf////tab////draw scatter plot//crlf////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectScatter\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\))) {//crlf////tab////tab//drawXYPlot(_id\\comma\\iSeries);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var eChartContainer=document.getElementById(_id);//crlf////tab//var LeftAxisMax=parseFloat(eChartContainer.getAttribute(\\quot\\LeftAxisMax\\quot\\));//crlf////tab//var LeftAxisMin=parseFloat(eChartContainer.getAttribute(\\quot\\LeftAxisMin\\quot\\));//crlf////tab//var RightAxisMax=parseFloat(eChartContainer.getAttribute(\\quot\\RightAxisMax\\quot\\));//crlf////tab//var RightAxisMin=parseFloat(eChartContainer.getAttribute(\\quot\\RightAxisMin\\quot\\));//crlf////tab//var SeriesAxis=eChartContainer.getAttribute(\\quot\\SeriesAxis\\quot\\+iSeries);//crlf////tab//var sData=getChartData(_id);//crlf////tab//var SeriesCount=getChartSeriesCount(sData);//crlf////tab//var arLegend=getChartLegend(sData);//crlf////crlf////tab//var Series=getChartSeries(_id\\comma\\sData\\comma\\iSeries);//crlf////tab//var SeriesLabel=getChartSeries(_id\\comma\\sData\\comma\\0);//crlf////crlf////tab////get background color//crlf////tab//var BackgroundColor=getSeriesColor(iSeries);//crlf////crlf////tab//var LastX=-1;//crlf////tab//var LastY=-1;//crlf////tab//var cNotPlotted=0;//crlf////tab//var graphwidth=e.offsetWidth;//crlf////tab//var PixelsPerPoint=graphwidth/Series.length;//crlf////tab//var sInnerHtml=\\quot\\\\quot\\;//crlf////tab//var sTooltip=\\quot\\\\quot\\;//crlf////tab//var cPoints=0;//crlf////tab//var cPointsAdded=0;//crlf////tab//var bFirstNonZero=false;//crlf////crlf////tab//for(var i=0;i<Series.length;i++) {//crlf////tab////tab//var x=(i/Series.length)*graphwidth;//crlf////crlf////tab////tab////NOTE: The pixel height of the point is subtracted from e.offsetHeight.  Otherwise\\comma\\ //crlf////tab////tab////points at the maximum value will be outside the plot area.  The bottom of the point //crlf////tab////tab////will be positioned at the maximum which is the upper edge of the plot area.//crlf////tab////tab//if(SeriesAxis.equalsIgnoreCase(\\quot\\left\\quot\\)) {//crlf////tab////tab////tab//var y=(Series[i]-LeftAxisMin)/(LeftAxisMax-LeftAxisMin) * (e.offsetHeight-3);//crlf////tab////tab////tab//var yZero=(0-LeftAxisMin)/(LeftAxisMax-LeftAxisMin) * (e.offsetHeight-3);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//var y=(Series[i]-RightAxisMin)/(RightAxisMax-RightAxisMin) * (e.offsetHeight-3);//crlf////tab////tab////tab//var yZero=(0-RightAxisMin)/(RightAxisMax-RightAxisMin) * (e.offsetHeight-3);//crlf////tab////tab//};//crlf////crlf////tab////tab////=================================================================//crlf////tab////tab////Note: Points are only plotted when the x or y offset value changes.  This avoids plotting //crlf////tab////tab////multiple points in the exact same place.  When a point is not plotted\\comma\\ the tooltip for that //crlf////tab////tab////point is appended to sTooltip.  This way\\comma\\ the tooltip for the final point displays //crlf////tab////tab////values for all of the points that would occupy the same location.//crlf////tab////tab////=================================================================//crlf////tab////tab//x=Math.round(x);//crlf////tab////tab//y=Math.round(y);//crlf////tab////tab//if((x!=LastX) ~~pipe~~~~pipe~~ (y!=LastY) ~~pipe~~~~pipe~~ (i==Series.length-1)) {//crlf////tab////tab////tab//sTooltip+=arLegend[iSeries]+\\quot\\: \\quot\\+SeriesLabel[i]+\\quot\\: \\quot\\+Series[i]+\\quot\\<br>\\quot\\;//crlf////tab////crlf////tab////tab////tab//var pointwidth=Math.round(Math.max(Math.min(PixelsPerPoint\\comma\\7)\\comma\\4));//crlf////tab////tab////tab//var pointheight=Math.round(Math.max(Math.min(PixelsPerPoint\\comma\\7)\\comma\\4));//crlf////tab////tab////tab////x-=pointwidth/2;//crlf////tab////tab////tab////y-=pointheight/2;//crlf////tab////tab////tab////x=Math.round(x);//crlf////tab////tab////tab////y=Math.round(y);//crlf////crlf////tab////tab////tab//var iBottom=y;//crlf////tab////tab////tab//var iHeight=pointheight;//crlf////tab////tab////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectColumn\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectColumn2\\quot\\))) {//crlf////tab////tab////tab////tab//if(Series[i]>=0) {//crlf////tab////tab////tab////tab////tab//if(LeftAxisMin>=0) {//crlf////tab////tab////tab////tab////tab////tab//var iBottom=0;//crlf////tab////tab////tab////tab////tab////tab//var iHeight=y;//crlf////tab////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//var iBottom=yZero;//crlf////tab////tab////tab////tab////tab////tab//var iHeight=y-yZero;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//var iBottom=y;//crlf////tab////tab////tab////tab////tab//var iHeight=yZero-y;//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////var iBottom=0;//crlf////tab////tab////tab////tab////var iHeight=y;//crlf////crlf////tab////tab////tab////tab//var pointwidth=graphwidth/Series.length/(SeriesCount-1)*0.95;//crlf////tab////tab////tab////tab//var x=(i/Series.length)*graphwidth+((iSeries-1)*pointwidth);//crlf////tab////tab////tab////tab////console.log(\\quot\\SeriesCount=\\quot\\+SeriesCount+\\quot\\ iSeries=\\quot\\+iSeries+\\quot\\ pointwidth=\\quot\\+pointwidth+\\quot\\ x=\\quot\\+x);//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if(Series[i]!=0) bFirstNonZero=true;//crlf////tab////tab////tab////console.log(\\quot\\i=\\quot\\+i+\\quot\\ Series[i]=\\quot\\+Series[i]+\\quot\\ sTooltip=\\quot\\+sTooltip+\\quot\\ x=\\quot\\+x+\\quot\\ y=\\quot\\+y);//crlf////tab////tab////tab////don't show points until the first non-zero value is encountered.  This avoids drawing a line //crlf////tab////tab////tab////across the bottom for a series that doesn't have any data at the beginning//crlf////tab////tab////tab//if(bFirstNonZero==true) {//crlf////tab////tab////tab////tab//sInnerHtml+=\\quot\\<div class='point' style='background-color:\\quot\\+BackgroundColor+\\quot\\;bottom:\\quot\\+iBottom+\\quot\\px;left:\\quot\\+x+\\quot\\px;height:\\quot\\+iHeight+\\quot\\;width:\\quot\\+pointwidth+\\quot\\'\\quot\\;//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else {//crlf////tab////tab////tab////tab//sInnerHtml+=\\quot\\<div class='point' style='background-color:transparent;bottom:\\quot\\+iBottom+\\quot\\px;left:\\quot\\+x+\\quot\\px;height:\\quot\\+iHeight+\\quot\\;width:\\quot\\+pointwidth+\\quot\\'\\quot\\;//crlf////tab////tab////tab//}//crlf////crlf////tab////tab////tab//sInnerHtml+=\\quot\\originalwidth=\\\quot\\\\quot\\+pointwidth+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ _bottom=\\quot\\+y;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ _left=\\quot\\+x;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ onmouseover=\\\quot\\showTooltip(event\\comma\\'\\quot\\+sTooltip+\\quot\\'\\comma\\10\\comma\\10)\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ onmouseout=\\\quot\\showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ onclick=\\\quot\\chartpointclicked(this)\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ id=\\\quot\\\\quot\\+_id+\\quot\\_\\quot\\+iSeries+\\quot\\_\\quot\\+i+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ series=\\\quot\\\\quot\\+iSeries+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ index=\\\quot\\\\quot\\+i+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ Label=\\\quot\\\\quot\\+SeriesLabel[i]+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ Value=\\\quot\\\\quot\\+Series[i]+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\></div>\\quot\\;//crlf////tab////tab////tab//cPointsAdded++;//crlf////crlf////tab////tab////tab////sTooltip=SeriesLabel[i]+\\quot\\: \\quot\\+Series[i]+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab//sTooltip=\\quot\\\\quot\\;//crlf////crlf////tab////tab////tab//cPoints=1;//crlf////tab////tab////tab//LastX=x;//crlf////tab////tab////tab//LastY=y;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//sTooltip+=SeriesLabel[i]+\\quot\\: \\quot\\+Series[i]+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab//cPoints++;//crlf////tab////tab//};//crlf////tab//};//tab////crlf////crlf////tab//e.innerHTML+=sInnerHtml;//crlf////tab////console.log(\\quot\\Added \\quot\\+cPointsAdded+\\quot\\ from series \\quot\\+iSeries);//crlf////crlf////tab//if(iSeries<SeriesCount-1) {//crlf////tab////tab//setTimeout(\\quot\\drawPlot(\\\quot\\\\quot\\+_id+\\quot\\\\\quot\\\\comma\\\\quot\\+(iSeries+1)+\\quot\\);\\quot\\\\comma\\0);//crlf////tab//};//crlf//};//crlf////crlf//function drawXYPlot(_id\\comma\\iSeries) {//crlf////crlf////tab//var sData=getChartData(_id);//crlf////tab//var SeriesCount=getChartSeriesCount(sData);//crlf////tab////console.log(\\quot\\drawXYPlot id=\\quot\\+_id+\\quot\\ Series=\\quot\\+iSeries+\\quot\\ SeriesCount=\\quot\\+SeriesCount);//crlf////crlf////tab////skip the first series.  This is used as the X axis//crlf////tab//if((iSeries==1) //amp////amp// (iSeries<SeriesCount-1)) {//crlf////tab////tab////console.log(\\quot\\Skipping first series (x values)\\quot\\);//crlf////tab////tab//setTimeout(\\quot\\drawXYPlot(\\\quot\\\\quot\\+_id+\\quot\\\\\quot\\\\comma\\\\quot\\+(iSeries+1)+\\quot\\);\\quot\\\\comma\\0);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var e=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////crlf////tab//var sChartType=getChartType(replaceAllSubstrings(_id\\comma\\\\quot\\Chart\\quot\\\\comma\\\\quot\\\\quot\\));//crlf////crlf////tab//var eChartContainer=document.getElementById(_id);//crlf////tab//var LeftAxisMax=parseFloat(eChartContainer.getAttribute(\\quot\\LeftAxisMax\\quot\\));//crlf////tab//var LeftAxisMin=parseFloat(eChartContainer.getAttribute(\\quot\\LeftAxisMin\\quot\\));//crlf////tab//var RightAxisMax=parseFloat(eChartContainer.getAttribute(\\quot\\RightAxisMax\\quot\\));//crlf////tab//var RightAxisMin=parseFloat(eChartContainer.getAttribute(\\quot\\RightAxisMin\\quot\\));//crlf////tab//var BottomAxisMax=parseFloat(eChartContainer.getAttribute(\\quot\\BottomAxisMax\\quot\\));//crlf////tab//var BottomAxisMin=parseFloat(eChartContainer.getAttribute(\\quot\\BottomAxisMin\\quot\\));//crlf////tab//var SeriesAxis=eChartContainer.getAttribute(\\quot\\SeriesAxis\\quot\\+iSeries);//crlf////tab//var arLegend=getChartLegend(sData);//crlf////crlf////tab//var Series=getChartSeries(_id\\comma\\sData\\comma\\iSeries);//crlf////tab//var XSeries=getChartSeries(_id\\comma\\sData\\comma\\1);//crlf////tab//var SeriesLabel=getChartSeries(_id\\comma\\sData\\comma\\0);//crlf////crlf////tab////get background color//crlf////tab//var BackgroundColor=getSeriesColor(iSeries);//crlf////crlf////tab//var LastX=-1;//crlf////tab//var LastY=-1;//crlf////tab//var cNotPlotted=0;//crlf////tab//var graphwidth=e.offsetWidth;//crlf////tab//var PixelsPerPoint=graphwidth/Series.length;//crlf////tab//var sInnerHtml=\\quot\\\\quot\\;//crlf////tab//var sTooltip=\\quot\\\\quot\\;//crlf////tab//var cPoints=0;//crlf////tab//var cPointsAdded=0;//crlf////tab//var bFirstNonZero=false;//crlf////crlf////tab//for(var i=0;i<Series.length;i++) {//crlf////tab////tab//var xPcnt=(XSeries[i]-BottomAxisMin)/(BottomAxisMax-BottomAxisMin);//crlf////tab////tab//var x=graphwidth*xPcnt;//crlf////console.log(\\quot\\i=\\quot\\+i+\\quot\\ XSeries[i]=\\quot\\+XSeries[i]+\\quot\\ BottomAxisMin=\\quot\\+BottomAxisMin+\\quot\\ BottomAxisMax=\\quot\\+BottomAxisMax+\\quot\\ xPcnt=\\quot\\+xPcnt+\\quot\\ x=\\quot\\+x);//crlf////crlf////tab////tab////NOTE: The pixel height of the point is subtracted from e.offsetHeight.  Otherwise\\comma\\ //crlf////tab////tab////points at the maximum value will be outside the plot area.  The bottom of the point //crlf////tab////tab////will be positioned at the maximum which is the upper edge of the plot area.//crlf////tab////tab//if(SeriesAxis.equalsIgnoreCase(\\quot\\left\\quot\\)) {//crlf////tab////tab////tab//var y=(Series[i]-LeftAxisMin)/(LeftAxisMax-LeftAxisMin) * (e.offsetHeight-3);//crlf////tab////tab////tab//var yZero=(0-LeftAxisMin)/(LeftAxisMax-LeftAxisMin) * (e.offsetHeight-3);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//var y=(Series[i]-RightAxisMin)/(RightAxisMax-RightAxisMin) * (e.offsetHeight-3);//crlf////tab////tab////tab//var yZero=(0-RightAxisMin)/(RightAxisMax-RightAxisMin) * (e.offsetHeight-3);//crlf////tab////tab//};//crlf////crlf////tab////tab////=================================================================//crlf////tab////tab////Note: Points are only plotted when the x or y offset value changes.  This avoids plotting //crlf////tab////tab////multiple points in the exact same place.  When a point is not plotted\\comma\\ the tooltip for that //crlf////tab////tab////point is appended to sTooltip.  This way\\comma\\ the tooltip for the final point displays //crlf////tab////tab////values for all of the points that would occupy the same location.//crlf////tab////tab////=================================================================//crlf////tab////tab//x=Math.round(x);//crlf////tab////tab//y=Math.round(y);//crlf////tab////tab//if((x!=LastX) ~~pipe~~~~pipe~~ (y!=LastY) ~~pipe~~~~pipe~~ (i==Series.length-1)) {//crlf////tab////tab////tab//sTooltip+=SeriesLabel[i]+\\quot\\: (\\quot\\+arLegend[1]+\\quot\\=\\quot\\+XSeries[i]+\\quot\\\\comma\\\\quot\\+arLegend[iSeries]+\\quot\\=\\quot\\+Series[i]+\\quot\\)<br>\\quot\\;//crlf////tab////crlf////tab////tab////tab//var pointwidth=Math.round(Math.max(Math.min(PixelsPerPoint\\comma\\7)\\comma\\5));//crlf////tab////tab////tab//var pointheight=Math.round(Math.max(Math.min(PixelsPerPoint\\comma\\7)\\comma\\5));//crlf////crlf////tab////tab////tab//var iBottom=y;//crlf////tab////tab////tab//var iHeight=pointheight;//crlf////crlf////tab////tab////tab//if(Series[i]!=0) bFirstNonZero=true;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\<div class='point' style='background-color:\\quot\\+BackgroundColor+\\quot\\;bottom:\\quot\\+iBottom+\\quot\\px;left:\\quot\\+x+\\quot\\px;height:\\quot\\+iHeight+\\quot\\;width:\\quot\\+pointwidth+\\quot\\'\\quot\\;//crlf////crlf////tab////tab////tab//sInnerHtml+=\\quot\\originalwidth=\\\quot\\\\quot\\+pointwidth+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ _bottom=\\quot\\+y;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ _left=\\quot\\+x;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ onmouseover=\\\quot\\showTooltip(event\\comma\\'\\quot\\+sTooltip+\\quot\\'\\comma\\10\\comma\\10)\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ onmouseout=\\\quot\\showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ onclick=\\\quot\\chartpointclicked(this)\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ id=\\\quot\\\\quot\\+_id+\\quot\\_\\quot\\+iSeries+\\quot\\_\\quot\\+i+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ series=\\\quot\\\\quot\\+iSeries+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ index=\\\quot\\\\quot\\+i+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ Label=\\\quot\\\\quot\\+SeriesLabel[i]+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\ Value=\\\quot\\\\quot\\+Series[i]+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\></div>\\quot\\;//crlf////tab////tab////tab//cPointsAdded++;//crlf////crlf////tab////tab////tab////sTooltip=SeriesLabel[i]+\\quot\\: \\quot\\+Series[i]+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab//sTooltip=\\quot\\\\quot\\;//crlf////crlf////tab////tab////tab//cPoints=1;//crlf////tab////tab////tab//LastX=x;//crlf////tab////tab////tab//LastY=y;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//sTooltip+=SeriesLabel[i]+\\quot\\: \\quot\\+Series[i]+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab//cPoints++;//crlf////tab////tab//};//crlf////tab//};//tab////crlf////crlf////tab//e.innerHTML+=sInnerHtml;//crlf////tab////console.log(\\quot\\Added \\quot\\+cPointsAdded+\\quot\\ from series \\quot\\+iSeries);//crlf////crlf////tab//if(iSeries<SeriesCount-1) {//crlf////tab////tab//setTimeout(\\quot\\drawXYPlot(\\\quot\\\\quot\\+_id+\\quot\\\\\quot\\\\comma\\\\quot\\+(iSeries+1)+\\quot\\);\\quot\\\\comma\\0);//crlf////tab//};//crlf//};//crlf////crlf//function olddrawPlot(_id\\comma\\iSeries) {//crlf////tab//var e=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////crlf////tab//var eChartContainer=document.getElementById(_id);//crlf////tab//var LeftAxisMax=parseFloat(eChartContainer.getAttribute(\\quot\\LeftAxisMax\\quot\\));//crlf////tab//var LeftAxisMin=parseFloat(eChartContainer.getAttribute(\\quot\\LeftAxisMin\\quot\\));//crlf////crlf////tab//var sData=getChartData(_id);//crlf////tab//var SeriesCount=getChartSeriesCount(sData);//crlf////crlf////tab//var Series=getChartSeries(_id\\comma\\sData\\comma\\iSeries);//crlf////tab//var SeriesLabel=getChartSeries(_id\\comma\\sData\\comma\\0);//crlf////crlf////tab////get background color//crlf////tab//var BackgroundColor=getSeriesColor(iSeries);//crlf////crlf////tab//var LastX=-1;//crlf////tab//var LastY=-1;//crlf////tab//var cNotPlotted=0;//crlf////tab//var graphwidth=e.offsetWidth;//crlf////tab//s=\\quot\\\\quot\\;//crlf////tab//for(var i=0;i<Series.length;i++) {//crlf////tab////tab//var x=(i/Series.length)*graphwidth;//crlf////tab////tab//var y=(Series[i]-LeftAxisMin)/(LeftAxisMax-LeftAxisMin) * e.offsetHeight;//crlf////tab////tab//x=Math.round(x);//crlf////tab////tab//y=Math.round(y);//crlf////tab////tab//if((x!=LastX) ~~pipe~~~~pipe~~ (y!=LastY)) {//crlf////tab////tab////tab//var point=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//point.setAttribute(\\quot\\tt\\quot\\\\comma\\SeriesLabel[i]+\\quot\\: \\quot\\+Series[i]);//crlf////tab////tab////tab//point.setAttribute(\\quot\\onmouseover\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\this.getAttribute('tt')\\comma\\10\\comma\\10)\\quot\\);//crlf////tab////tab////tab//point.setAttribute(\\quot\\onmouseout\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\quot\\);//crlf////tab////tab////tab//point.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\point\\quot\\);//crlf////tab////tab////tab//point.style.backgroundColor=BackgroundColor;//crlf////tab////tab////tab//point.style.bottom=y+\\quot\\px\\quot\\;//crlf////tab////tab////tab//point.style.left=x+\\quot\\px\\quot\\;//crlf////tab////tab////tab//e.appendChild(point);  //tab////tab////tab////crlf////crlf////tab////tab////tab//LastX=x;//crlf////tab////tab////tab//LastY=y;//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//if(point) {//crlf////tab////tab////tab////tab//var s=point.getAttribute(\\quot\\tt\\quot\\);//crlf////tab////tab////tab////tab//s+=\\quot\\<br>\\quot\\+SeriesLabel[i]+\\quot\\: \\quot\\+Series[i];//crlf////tab////tab////tab////tab//point.setAttribute(\\quot\\tt\\quot\\\\comma\\s);//crlf////tab////tab////tab////tab//cNotPlotted++;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//tab////crlf////crlf////tab//if(iSeries<SeriesCount-1) {//crlf////tab////tab//setTimeout(\\quot\\drawPlot(\\\quot\\\\quot\\+_id+\\quot\\\\\quot\\\\comma\\\\quot\\+(iSeries+1)+\\quot\\);\\quot\\\\comma\\0);//crlf////tab//};//crlf//};//crlf////crlf//function drawLeftAxis(_id) {//crlf////tab//var MajorTickDivisions=10;//crlf////tab//var MinorTickMultiplier=2;//crlf////tab//var MinorTickDivisions=MajorTickDivisions * MinorTickMultiplier;//crlf////tab////crlf////tab//var eLeftAxis=document.getElementById(\\quot\\ChartLeftAxis\\quot\\+_id);//crlf////tab//var iLeftAxisWidth=eLeftAxis.offsetWidth;//crlf////tab//eLeftAxis.innerHTML=\\quot\\\\quot\\;//crlf////tab////crlf////tab//var ePlotArea=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab//var iBottomAxisHeight=document.getElementById(\\quot\\ChartBottomAxis\\quot\\+_id).offsetHeight;//crlf////tab//var iScrollbarHeight=iBottomAxisHeight;//tab////this needs to be corrected//crlf////tab//var LeftAxisHeight=ePlotArea.offsetHeight;//crlf////tab////crlf////tab//var e=document.getElementById(_id);//crlf////tab//var Max=parseFloat(e.getAttribute(\\quot\\LeftAxisMax\\quot\\));//crlf////tab//var Min=parseFloat(e.getAttribute(\\quot\\LeftAxisMin\\quot\\));//crlf////tab//var MajorTick=(Max-Min)/MajorTickDivisions;//crlf////tab//var MinorTick=(Max-Min)/MinorTickDivisions;//crlf////tab//var MajorTickHeight=LeftAxisHeight/MajorTickDivisions;//crlf////tab//var MinorTickHeight=LeftAxisHeight/MinorTickDivisions;//crlf////tab////crlf////tab////add container for major tick//crlf////tab//var eMajorTickContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eMajorTickContainer.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_axis_major_tick_container\\quot\\);//crlf////tab//eLeftAxis.appendChild(eMajorTickContainer);//crlf////tab////crlf////tab////add container for minor tick//crlf////tab//var MinorTickContainerWidth=10;//crlf////tab//var eMinorTickContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eMinorTickContainer.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_axis_minor_tick_container\\quot\\);//crlf////tab//eMinorTickContainer.style.width=MinorTickContainerWidth;//crlf////tab//eMinorTickContainer.style.marginLeft=(iLeftAxisWidth-MinorTickContainerWidth)+\\quot\\px\\quot\\;//crlf////tab//eLeftAxis.appendChild(eMinorTickContainer);//crlf////tab////crlf////tab////add divs for major ticks//crlf////tab//var c=0;//crlf////tab//var n=Max;//crlf////tab//while(n>=Min) {//crlf////tab////tab//var eMajorTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//eMajorTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_left_axis_major_tick\\quot\\);//crlf////tab////tab//eMajorTick.style.height=MajorTickHeight+\\quot\\px\\quot\\;//crlf////tab////tab//var eTickValue=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//eTickValue.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_tick_value\\quot\\);//crlf////tab////tab//eTickValue.innerHTML=formatNumber(n\\comma\\\\quot\\0.00\\quot\\);//crlf////tab////tab//eTickValue.style.marginTop=(MajorTickHeight/3)+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTick.appendChild(eTickValue);//crlf////tab////tab//eMajorTick.style.top=(-(MajorTickHeight*0.5)+(c*MajorTickHeight))+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTick.style.width=(iLeftAxisWidth-MinorTickContainerWidth)+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTickContainer.appendChild(eMajorTick);//crlf////tab////tab//n-=MajorTick;//crlf////tab////tab//c++;//crlf////tab//};//crlf////tab////crlf////tab////add divs for minor ticks//crlf////tab//var c=0;//crlf////tab//var n=Max;//crlf////tab//while(n>=Min) {//crlf////tab////tab//var eMinorTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//eMinorTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_axis_minor_tick\\quot\\);//crlf////tab////tab//eMinorTick.style.height=MinorTickHeight+\\quot\\px\\quot\\;//crlf////tab////tab//var eHorzLine=document.createElement(\\quot\\hr\\quot\\);//crlf////tab////tab//eHorzLine.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_tick\\quot\\);//crlf////tab////tab//eHorzLine.style.marginTop=(MinorTickHeight/2)+\\quot\\px\\quot\\;//crlf////tab////tab//eMinorTick.appendChild(eHorzLine);//crlf////tab////tab//eMinorTick.style.top=(-(MajorTickHeight*0.5)+(c*MinorTickHeight)+((MinorTickMultiplier-1)*MinorTickHeight/2))+\\quot\\px\\quot\\;//crlf////tab////tab//eMinorTick.style.width=MinorTickContainerWidth+\\quot\\px\\quot\\;//crlf////tab////tab//eMinorTickContainer.appendChild(eMinorTick);//crlf////tab////tab//n-=MinorTick;//crlf////tab////tab//c++;//crlf////tab//};//crlf//};//crlf////crlf//function drawRightAxis(_id) {//crlf////tab//var MajorTickDivisions=10;//crlf////tab//var MinorTickMultiplier=5;//crlf////tab//var MinorTickDivisions=MajorTickDivisions * MinorTickMultiplier;//crlf////tab////crlf////tab//var eRightAxis=document.getElementById(\\quot\\ChartRightAxis\\quot\\+_id);//crlf////tab//var iRightAxisWidth=eRightAxis.offsetWidth;//crlf////tab//eRightAxis.style.width=(eRightAxis.offsetWidth-2)+\\quot\\px\\quot\\; //2 pixels are removed.  Otherwise the plot area border is covered up.//crlf////tab//eRightAxis.innerHTML=\\quot\\\\quot\\;//crlf////tab////crlf////tab//var ePlotArea=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab//var iBottomAxisHeight=document.getElementById(\\quot\\ChartBottomAxis\\quot\\+_id).offsetHeight;//crlf////tab//var iScrollbarHeight=iBottomAxisHeight;//tab////this needs to be corrected//crlf////tab//var RightAxisHeight=ePlotArea.offsetHeight;//crlf////tab////crlf////tab//var e=document.getElementById(_id);//crlf////tab//var Max=parseFloat(e.getAttribute(\\quot\\RightAxisMax\\quot\\));//crlf////tab//var Min=parseFloat(e.getAttribute(\\quot\\RightAxisMin\\quot\\));//crlf////tab//if(Min==Max) return;//crlf////tab////crlf////tab//var MajorTick=(Max-Min)/MajorTickDivisions;//crlf////tab//var MinorTick=(Max-Min)/MinorTickDivisions;//crlf////tab//var MajorTickHeight=RightAxisHeight/MajorTickDivisions;//crlf////tab//var MinorTickHeight=RightAxisHeight/MinorTickDivisions;//crlf////tab////crlf////tab////add container for minor tick//crlf////tab//var MinorTickContainerWidth=10;//crlf////tab//var eMinorTickContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eMinorTickContainer.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_axis_minor_tick_container\\quot\\);//crlf////tab//eMinorTickContainer.style.width=MinorTickContainerWidth;//crlf////tab//eRightAxis.appendChild(eMinorTickContainer);//crlf////tab////crlf////tab////add container for major tick//crlf////tab//var MajorTickContainerWidth=iRightAxisWidth-MinorTickContainerWidth;//crlf////tab//var eMajorTickContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eMajorTickContainer.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_axis_major_tick_container\\quot\\);//crlf////tab//eMajorTickContainer.style.width=MajorTickContainerWidth+\\quot\\px\\quot\\;//crlf////tab//eMajorTickContainer.style.marginLeft=MinorTickContainerWidth+\\quot\\px\\quot\\;//crlf////tab//eRightAxis.appendChild(eMajorTickContainer);//crlf////tab////crlf////tab////add divs for major ticks//crlf////tab//var c=0;//crlf////tab//var n=Max;//crlf////tab//while(n>=Min) {//crlf////tab////tab//var eMajorTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//eMajorTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_right_axis_major_tick\\quot\\);//crlf////tab////tab//eMajorTick.style.height=MajorTickHeight+\\quot\\px\\quot\\;//crlf////tab////tab//var eTickValue=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//eTickValue.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_tick_value\\quot\\);//crlf////tab////tab//eTickValue.innerHTML=formatNumber(n\\comma\\\\quot\\0.00\\quot\\);//crlf////tab////tab//eTickValue.style.marginTop=(MajorTickHeight/4)+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTick.appendChild(eTickValue);//crlf////tab////tab//eMajorTick.style.top=(-(MajorTickHeight*0.5)+(c*MajorTickHeight))+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTick.style.width=(iRightAxisWidth-MinorTickContainerWidth)+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTickContainer.appendChild(eMajorTick);//crlf////tab////tab//n-=MajorTick;//crlf////tab////tab//c++;//crlf////tab//};//crlf////tab////crlf////tab////add divs for minor ticks//crlf////tab//var c=0;//crlf////tab//var n=Max;//crlf////tab//while(n>=Min) {//crlf////tab////tab//var eMinorTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//eMinorTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_axis_minor_tick\\quot\\);//crlf////tab////tab//eMinorTick.style.height=MinorTickHeight+\\quot\\px\\quot\\;//crlf////tab////tab//var eHorzLine=document.createElement(\\quot\\hr\\quot\\);//crlf////tab////tab//eHorzLine.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_tick\\quot\\);//crlf////tab////tab//eHorzLine.style.marginTop=(MinorTickHeight/2)+\\quot\\px\\quot\\;//crlf////tab////tab//eMinorTick.appendChild(eHorzLine);//crlf////tab////tab//eMinorTick.style.top=(-(MajorTickHeight*0.5)+(c*MinorTickHeight)+((MinorTickMultiplier-1)*MinorTickHeight/2))+\\quot\\px\\quot\\;//crlf////tab////tab//eMinorTick.style.width=MinorTickContainerWidth+\\quot\\px\\quot\\;//crlf////tab////tab//eMinorTickContainer.appendChild(eMinorTick);//crlf////tab////tab//n-=MinorTick;//crlf////tab////tab//c++;//crlf////tab//};//crlf////crlf//};//crlf////crlf//function drawBottomAxis(_id) {//crlf////tab//var sChartType=getChartType(replaceAllSubstrings(_id\\comma\\\\quot\\Chart\\quot\\\\comma\\\\quot\\\\quot\\));//crlf////tab////crlf////tab////if scatter plot...//crlf////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectScatter\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\))) {//crlf////tab////tab//drawXYBottomAxis(_id);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var eBottomAxis=document.getElementById(\\quot\\ChartBottomAxis\\quot\\+_id);//crlf////tab//var iHeight=eBottomAxis.offsetHeight;//crlf////tab//eBottomAxis.style.height=iHeight+\\quot\\px\\quot\\;//crlf////tab//eBottomAxis.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab////var iWidth=eBottomAxis.offsetWidth;//crlf////tab////var iWidth=eChartPlotArea.offsetWidth;//crlf////tab//var iWidth=document.getElementById(\\quot\\Range\\quot\\+_id).value;//crlf////crlf////tab//eBottomAxis.style.width=(iWidth-4)+\\quot\\px\\quot\\;//crlf////tab////crlf////tab//var sData=getChartData(_id);//crlf////tab//var Series=getChartSeries(_id\\comma\\sData\\comma\\0);//crlf////tab////crlf////tab//var LastX=-1;//crlf////tab//var LastWidth=0;//crlf////tab//var graphwidth=iWidth;//crlf////crlf////tab//for(var i=0;i<Series.length;i++) {//crlf////tab////tab//var x=(i/Series.length)*graphwidth;//crlf////tab////tab//x=Math.round(x);//crlf////crlf////tab////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectColumn\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectColumn2\\quot\\))) {//crlf////tab////tab////tab//var pointwidth=graphwidth/Series.length;//crlf////tab////tab////tab//x+=(pointwidth/2)//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////shift right a bit\\comma\\ otherwise the leftmost label is cut off//crlf////tab////tab////tab//if(i==0) x+=5;//crlf////tab////tab//};//crlf////crlf////tab////tab//if((LastX==-1) ~~pipe~~~~pipe~~ (x>LastX+LastWidth-20)) {//crlf////crlf////tab////tab////tab//var eTickContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//eTickContainer.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\bottom_axis_tick_container\\quot\\);//crlf////tab////tab////tab//eTickContainer.style.width=\\quot\\auto\\quot\\;//crlf////tab////tab////tab//eTickContainer.style.left=x+\\quot\\px\\quot\\;//crlf////crlf////tab////tab////tab//var eTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//eTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\bottom_axis_tick\\quot\\);//crlf////tab////tab////tab//eTick.innerHTML=Series[i];//crlf////tab////tab////tab//eTickContainer.appendChild(eTick);//crlf////crlf////tab////tab////tab//if(x+eTickContainer.offsetWidth<iWidth-1*LastWidth) {//crlf////tab////tab////tab////tab//eBottomAxis.appendChild(eTickContainer);//crlf////tab////tab////tab////tab//LastX=x;//crlf////tab////tab////tab////tab//LastWidth=eTickContainer.offsetWidth;//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function drawXYBottomAxis(_id) {//crlf////tab//var e=document.getElementById(_id);//crlf////tab//var BottomAxisMin=parseFloat(e.getAttribute(\\quot\\BottomAxisMin\\quot\\));//crlf////tab//var BottomAxisMax=parseFloat(e.getAttribute(\\quot\\BottomAxisMax\\quot\\));//crlf////crlf////tab//var MajorTickDivisions=10;//crlf////tab//var MinorTickMultiplier=2;//crlf////tab//var MinorTickDivisions=MajorTickDivisions * MinorTickMultiplier;//crlf////tab////crlf////tab//var ePlotArea=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab////crlf////tab//var eBottomAxis=document.getElementById(\\quot\\ChartBottomAxis\\quot\\+_id);//crlf////tab//var iBottomAxisWidth=ePlotArea.offsetWidth;//crlf////tab////var iBottomAxisWidth=eBottomAxis.offsetWidth;//crlf////tab//var iBottomAxisHeight=eBottomAxis.offsetHeight;//crlf////tab//eBottomAxis.innerHTML=\\quot\\\\quot\\;//crlf////tab////console.log(\\quot\\iBottomAxisWidth=\\quot\\+iBottomAxisWidth);//crlf////tab////crlf////tab//var e=document.getElementById(_id);//crlf////tab//var Max=parseFloat(e.getAttribute(\\quot\\BottomAxisMax\\quot\\));//crlf////tab//var Min=parseFloat(e.getAttribute(\\quot\\BottomAxisMin\\quot\\));//crlf////tab//var MajorTick=(Max-Min)/MajorTickDivisions;//crlf////tab//var MinorTick=(Max-Min)/MinorTickDivisions;//crlf////tab////crlf////tab////add container for major tick//crlf////tab//var MajorTickHeight=iBottomAxisHeight;//crlf////tab//var MajorTickWidth=iBottomAxisWidth/MajorTickDivisions;//crlf////tab//var eMajorTickContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eMajorTickContainer.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\vertical_axis_major_tick_container\\quot\\);//crlf////tab//eBottomAxis.appendChild(eMajorTickContainer);//crlf////tab////crlf////tab////add container for minor tick//crlf////tab//var MinorTickContainerHeight=10;//crlf////tab//var MinorTickHeight=10;//crlf////tab//var MinorTickWidth=iBottomAxisWidth/MinorTickDivisions;//crlf////tab//var eMinorTickContainer=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eMinorTickContainer.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\bottomxy_axis_minor_tick_container\\quot\\);//crlf////tab//eMinorTickContainer.style.height=MinorTickContainerHeight;//crlf////tab//eMinorTickContainer.style.marginLeft=0+\\quot\\px\\quot\\;//crlf////tab//eBottomAxis.appendChild(eMinorTickContainer);//crlf////crlf////tab////get series//tab////crlf////tab//var sData=getChartData(_id);//crlf////tab//var Series=getChartSeries(_id\\comma\\sData\\comma\\1);//crlf////crlf////tab////add divs for major ticks//crlf////tab//var c=0;//crlf////tab//var step=(BottomAxisMax-BottomAxisMin)/MajorTickDivisions;//crlf////tab//var n=BottomAxisMin;//crlf////tab////console.log(\\quot\\BottomAxisMin=\\quot\\+BottomAxisMin);//crlf////tab////console.log(\\quot\\BottomAxisMax=\\quot\\+BottomAxisMax);//crlf////tab////console.log(\\quot\\step=\\quot\\+step);//crlf////crlf////tab//while(n<BottomAxisMax) {//crlf////tab////tab//var eMajorTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//eMajorTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\bottomxy_axis_major_tick\\quot\\);//crlf////tab////tab//eMajorTick.style.height=MajorTickHeight+\\quot\\px\\quot\\;//crlf////tab////tab//var eTickValue=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//eTickValue.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\bottomxy_tick_value\\quot\\);//crlf////tab////tab//if(Math.abs(n)<100) {//crlf////tab////tab////tab//eTickValue.innerHTML=n.toFixed(2);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//eTickValue.innerHTML=n.toFixed(0);//crlf////tab////tab//};//crlf////tab////tab//eTickValue.style.marginTop=(MajorTickHeight/3)+\\quot\\px\\quot\\;//crlf////tab////tab//eTickValue.style.width=iBottomAxisHeight+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTick.appendChild(eTickValue);//crlf////tab////tab//eMajorTick.style.top=10+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTick.style.left=(c*MajorTickWidth)+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTick.style.width=MajorTickWidth+\\quot\\px\\quot\\;//crlf////tab////tab//eMajorTickContainer.appendChild(eMajorTick);//crlf////tab////tab//n+=step;//crlf////tab////tab//c++;//crlf////tab//};//crlf////crlf////tab////add divs for minor ticks//crlf////tab//var c=0;//crlf////tab//var step=(BottomAxisMax-BottomAxisMin)/MinorTickDivisions;//crlf////tab//var n=BottomAxisMin;//crlf////tab////console.log(\\quot\\step=\\quot\\+step);//crlf////tab//while(n<BottomAxisMax) {//crlf////tab////tab//var eMinorTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab//eMinorTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\bottomxy_axis_minor_tick\\quot\\);//crlf////tab////tab//eMinorTick.style.height=MinorTickHeight+\\quot\\px\\quot\\;//crlf////tab////tab//eMinorTick.style.top=0+\\quot\\px\\quot\\;//crlf////tab////tab//eMinorTick.style.left=(c*MinorTickWidth)+\\quot\\px\\quot\\;//crlf////tab////tab//eMinorTick.style.width=1;//crlf////tab////tab//eMinorTickContainer.appendChild(eMinorTick);//crlf////tab////tab//n+=step;//crlf////tab////tab//c++;//crlf////tab//};//crlf//};//crlf////crlf//function drawZeroLine(_id\\comma\\_axis) {//crlf////tab//var e=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////crlf////tab//var eChartContainer=document.getElementById(_id);//crlf////tab//var LeftAxisMax=parseFloat(eChartContainer.getAttribute(\\quot\\LeftAxisMax\\quot\\));//crlf////tab//var LeftAxisMin=parseFloat(eChartContainer.getAttribute(\\quot\\LeftAxisMin\\quot\\));//crlf////tab//var RightAxisMax=parseFloat(eChartContainer.getAttribute(\\quot\\RightAxisMax\\quot\\));//crlf////tab//var RightAxisMin=parseFloat(eChartContainer.getAttribute(\\quot\\RightAxisMin\\quot\\));//crlf////tab//var sData=getChartData(_id);//crlf////crlf////tab//if(_axis.equalsIgnoreCase(\\quot\\left\\quot\\)) {//crlf////tab////tab//if((LeftAxisMin>=0) ~~pipe~~~~pipe~~ (LeftAxisMax<=0)) return;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//if((RightAxisMin>=0) ~~pipe~~~~pipe~~ (RightAxisMax<=0)) return;//crlf////tab//};//crlf////crlf////tab//var SeriesLabel=getChartSeries(_id\\comma\\sData\\comma\\0);//crlf////crlf////tab////get background color//crlf////tab//var BackgroundColor=\\quot\\black\\quot\\//crlf////crlf////tab//var LastX=-1;//crlf////tab//var LastY=-1;//crlf////tab//var graphwidth=e.offsetWidth;//crlf////tab//var PixelsPerPoint=graphwidth/SeriesLabel.length;//crlf////tab//var sInnerHtml=\\quot\\\\quot\\;//crlf////tab//for(var i=0;i<SeriesLabel.length;i++) {//crlf////tab////tab//var x=(i/SeriesLabel.length)*graphwidth;//crlf////crlf////tab////tab////NOTE: The pixel height of the point is subtracted from e.offsetHeight.  Otherwise\\comma\\ //crlf////tab////tab////points at the maximum value will be outside the plot area.  The bottom of the point //crlf////tab////tab////will be positioned at the maximum which is the upper edge of the plot area.//crlf////tab////tab//if(_axis.equalsIgnoreCase(\\quot\\left\\quot\\)) {//crlf////tab////tab////tab//var y=(0-LeftAxisMin)/(LeftAxisMax-LeftAxisMin) * (e.offsetHeight-3);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//var y=(0-RightAxisMin)/(RightAxisMax-RightAxisMin) * (e.offsetHeight-3);//crlf////tab////tab//};//crlf////crlf////tab////tab//x=Math.round(x);//crlf////tab////tab//y=Math.round(y);//crlf////tab////tab//if((x!=LastX) ~~pipe~~~~pipe~~ (y!=LastY) ~~pipe~~~~pipe~~ (i==SeriesLabel.length-1)) {//crlf////tab////tab////tab////var pointwidth=Math.max(Math.min(PixelsPerPoint\\comma\\5)\\comma\\3);//crlf////tab////tab////tab////var pointheight=Math.max(Math.min(PixelsPerPoint\\comma\\5)\\comma\\3);//crlf////tab////tab////tab//var pointwidth=2;//crlf////tab////tab////tab//var pointheight=2;//crlf////tab////tab////tab//x-=pointwidth/2;//crlf////tab////tab////tab//y-=pointheight/2;//crlf////crlf////tab////tab////tab//sInnerHtml+=\\quot\\<div class='point' style='background-color:\\quot\\+BackgroundColor+\\quot\\;bottom:\\quot\\+y+\\quot\\px;left:\\quot\\+x+\\quot\\px;height:\\quot\\+pointheight+\\quot\\;width:\\quot\\+pointwidth+\\quot\\'\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\index=\\\quot\\\\quot\\+i+\\quot\\\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\Value=\\\quot\\0\\\quot\\\\quot\\;//crlf////tab////tab////tab//sInnerHtml+=\\quot\\></div>\\quot\\;//crlf////crlf////tab////tab////tab//LastX=x;//crlf////tab////tab////tab//LastY=y;//crlf////tab////tab//};//crlf////tab//};//tab////crlf////crlf////tab//e.innerHTML+=sInnerHtml;//crlf//};//crlf////crlf//function drawLegend(_id) {//crlf////tab//var eChartContainer=document.getElementById(_id);//crlf////tab//var sChartType=getChartType(_id);//crlf////tab//var ChartData=getChartData(_id);//crlf////tab//var arLegend=getChartLegend(ChartData);//crlf////tab//var bIsAspectLine2=(getChartType(_id).equalsIgnoreCase(\\quot\\AspectLine2\\quot\\));//crlf////tab//var bIsAspectColumn2=(getChartType(_id).equalsIgnoreCase(\\quot\\AspectColumn2\\quot\\));//crlf////tab//var bIsAspectScatter2=(getChartType(_id).equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\));//crlf////tab////crlf////tab//var eLegend=document.getElementById(\\quot\\ChartLegend\\quot\\+_id);//crlf////tab//eLegend.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab////set the margins for the legend.  The width is the same width used to the minor ticks.//crlf////tab////Not sure why this is.//crlf////tab//eLegend.style.marginLeft=\\quot\\10px\\quot\\;//crlf////tab//eLegend.style.marginRight=\\quot\\10px\\quot\\;//crlf////crlf////tab//var eUL=document.createElement(\\quot\\ul\\quot\\);//crlf////tab//eUL.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_legend\\quot\\);//crlf////crlf////tab//for(var i=1;i<arLegend.length;i++) {//crlf////tab////tab//var bSkip=false;//crlf////tab////tab//if((sChartType.equalsIgnoreCase(\\quot\\AspectScatter\\quot\\)) ~~pipe~~~~pipe~~ (sChartType.equalsIgnoreCase(\\quot\\AspectScatter2\\quot\\))) {//crlf////tab////tab////tab//if(i==1) bSkip=true;//crlf////tab////tab//};//crlf////tab////tab////crlf////tab////tab//if(bSkip==false) {//crlf////tab////tab////tab////create li element//crlf////tab////tab////tab//var eLI=document.createElement(\\quot\\li\\quot\\);//crlf////tab////tab////tab//eLI.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_legend\\quot\\);//crlf////tab////tab////tab//eLI.setAttribute(\\quot\\ChartID\\quot\\\\comma\\_id);//crlf////tab////tab////tab//eLI.setAttribute(\\quot\\onClick\\quot\\\\comma\\\\quot\\highlightChartSeries('\\quot\\+_id+\\quot\\'\\comma\\\\quot\\+i+\\quot\\\\comma\\true)\\quot\\);//crlf////tab////tab////tab////eLI.setAttribute(\\quot\\onMouseOut\\quot\\\\comma\\\\quot\\highlightChartSeries('\\quot\\+_id+\\quot\\'\\comma\\\\quot\\+i+\\quot\\\\comma\\false)\\quot\\);//crlf////crlf////tab////tab////tab////create div showing the color of the series//crlf////tab////tab////tab//var eLegendMarker=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab//eLegendMarker.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_legend_marker\\quot\\);//crlf////tab////tab////tab//eLegendMarker.style.backgroundColor=getSeriesColor(i);//crlf////tab////tab////tab//eLegendMarker.innerHTML=\\quot\\//amp//nbsp;//amp//nbsp;//amp//nbsp;//amp//nbsp;\\quot\\//crlf////tab////tab////tab//eLI.appendChild(eLegendMarker);//crlf////crlf////tab////tab////tab////create text containing the name of the series//crlf////tab////tab////tab//var eLegendText=document.createElement(\\quot\\span\\quot\\);//crlf////tab////tab////tab//eLegendText.id=_id+\\quot\\legendtext_\\quot\\+i;//crlf////tab////tab////tab//eLegendText.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chart_legend_text\\quot\\);//crlf////tab////tab////tab////eLegendText.style.color=getSeriesColor(i);//crlf////tab////tab////tab//eLegendText.innerHTML=arLegend[i];//crlf////crlf////tab////tab////tab////add left/right to charts with 2 vertical axes//crlf////tab////tab////tab////if(bIsAspectLine2) eLegendText.innerHTML+=\\quot\\ (\\quot\\+eChartContainer.getAttribute(\\quot\\SeriesAxis\\quot\\+i)+\\quot\\)\\quot\\;//crlf////tab////tab////tab//if((bIsAspectLine2) ~~pipe~~~~pipe~~ (bIsAspectColumn2) ~~pipe~~~~pipe~~ (bIsAspectScatter2)) {//crlf////tab////tab////tab////tab//eLegendText.innerHTML+=\\quot\\ (\\quot\\+eChartContainer.getAttribute(\\quot\\SeriesAxis\\quot\\+i)+\\quot\\)\\quot\\;//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//eLI.appendChild(eLegendText);//crlf////crlf////tab////tab////tab//eUL.appendChild(eLI);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//eLegend.appendChild(eUL);//crlf//};//crlf////crlf//function showCrosshair(event\\comma\\e) {//crlf////tab//var x=event.clientX;//crlf////tab//var y=event.clientY;//crlf////tab//var arFixedxy=getFixedCoord(e.parentNode);//crlf////crlf////tab//var eHorzCrosshair=document.getElementById(e.id+\\quot\\HCross\\quot\\);//crlf////tab//if(!eHorzCrosshair) return;//crlf////crlf////tab//var eVertCrosshair=document.getElementById(e.id+\\quot\\VCross\\quot\\);//crlf////tab//if(!eVertCrosshair) return;//crlf////crlf////tab//var maxy=arFixedxy[1]+eHorzCrosshair.parentNode.offsetHeight;//crlf////tab//var maxx=arFixedxy[0]+eVertCrosshair.parentNode.offsetWidth;//crlf////tab////crlf////tab////horizontal crosshair//crlf////tab//if((y>=arFixedxy[1]+3) //amp////amp// (y<=arFixedxy[1]+eHorzCrosshair.parentNode.offsetHeight)) {//crlf////tab////tab//eHorzCrosshair.style.display=\\quot\\block\\quot\\;//crlf////tab////tab//eHorzCrosshair.style.width=e.offsetWidth+\\quot\\px\\quot\\;//crlf////tab////tab//eHorzCrosshair.style.top=(y-3)+\\quot\\px\\quot\\;//crlf////tab////tab//eHorzCrosshair.style.left=arFixedxy[0]+\\quot\\px\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//eHorzCrosshair.style.display=\\quot\\none\\quot\\;//crlf////tab////tab//eVertCrosshair.style.display=\\quot\\none\\quot\\;//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab////vertical crosshair//crlf////tab//if((x>=arFixedxy[0]+3) //amp////amp// (x<=arFixedxy[0]+eVertCrosshair.parentNode.offsetWidth)) {//crlf////tab////tab//eVertCrosshair.style.display=\\quot\\block\\quot\\;//crlf////tab////tab//eVertCrosshair.style.height=e.offsetHeight+\\quot\\px\\quot\\;//crlf////tab////tab//eVertCrosshair.style.top=arFixedxy[1]+\\quot\\px\\quot\\;//crlf////tab////tab//eVertCrosshair.style.left=(x-3)+\\quot\\px\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//eHorzCrosshair.style.display=\\quot\\none\\quot\\;//crlf////tab////tab//eVertCrosshair.style.display=\\quot\\none\\quot\\;//crlf////tab//};//crlf//};//crlf////crlf//function clearCrosshair(_id) {//crlf////tab//if(document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id+\\quot\\HCross\\quot\\)) {//crlf////tab////tab//document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id+\\quot\\HCross\\quot\\).style.display=\\quot\\none\\quot\\;//crlf////tab////tab//document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id+\\quot\\VCross\\quot\\).style.display=\\quot\\none\\quot\\;//crlf////tab//};//crlf//};//crlf////crlf//function drawRecessionTicks(_id) {//crlf////tab//var ChartData=getChartData(_id);//crlf////tab//var Series=getChartSeries(_id\\comma\\ChartData\\comma\\0);//crlf////crlf////tab//if(Series[0].indexOf(\\quot\\-\\quot\\)==2) {//crlf////tab////tab//var arDateRange=[\\quot\\1854-12-01\\comma\\1854-12-31\\quot\\\\comma\\\\quot\\1857-06-30\\comma\\1858-12-31\\quot\\\\comma\\\\quot\\1860-10-31\\comma\\1861-06-30\\quot\\\\comma\\\\quot\\1865-04-30\\comma\\1867-12-31\\quot\\\\comma\\\\quot\\1869-06-30\\comma\\1870-12-31\\quot\\\\comma\\\\quot\\1873-10-31\\comma\\1879-03-31\\quot\\\\comma\\\\quot\\1882-03-31\\comma\\1885-05-31\\quot\\\\comma\\\\quot\\1887-03-31\\comma\\1888-04-30\\quot\\\\comma\\\\quot\\1890-07-31\\comma\\1891-05-31\\quot\\\\comma\\\\quot\\1893-01-31\\comma\\1894-06-30\\quot\\\\comma\\\\quot\\1895-12-31\\comma\\1897-06-30\\quot\\\\comma\\\\quot\\1899-06-30\\comma\\1900-12-31\\quot\\\\comma\\\\quot\\1902-09-30\\comma\\1904-08-31\\quot\\\\comma\\\\quot\\1907-05-31\\comma\\1908-06-30\\quot\\\\comma\\\\quot\\1910-01-31\\comma\\1912-01-31\\quot\\\\comma\\\\quot\\1913-01-31\\comma\\1914-12-31\\quot\\\\comma\\\\quot\\1918-08-31\\comma\\1919-03-31\\quot\\\\comma\\\\quot\\1920-01-31\\comma\\1921-07-31\\quot\\\\comma\\\\quot\\1923-05-31\\comma\\1924-07-31\\quot\\\\comma\\\\quot\\1926-10-31\\comma\\1927-11-30\\quot\\\\comma\\\\quot\\1929-08-31\\comma\\1933-03-31\\quot\\\\comma\\\\quot\\1937-05-31\\comma\\1938-06-30\\quot\\\\comma\\\\quot\\1945-02-28\\comma\\1945-10-31\\quot\\\\comma\\\\quot\\1948-11-30\\comma\\1949-10-31\\quot\\\\comma\\\\quot\\1953-07-31\\comma\\1954-05-31\\quot\\\\comma\\\\quot\\1957-08-31\\comma\\1958-04-30\\quot\\\\comma\\\\quot\\1960-04-30\\comma\\1961-02-28\\quot\\\\comma\\\\quot\\1969-12-31\\comma\\1970-11-30\\quot\\\\comma\\\\quot\\1973-11-30\\comma\\1975-03-31\\quot\\\\comma\\\\quot\\1980-01-31\\comma\\1980-07-31\\quot\\\\comma\\\\quot\\1981-07-31\\comma\\1982-11-30\\quot\\\\comma\\\\quot\\1990-07-31\\comma\\1991-03-31\\quot\\\\comma\\\\quot\\2001-03-31\\comma\\2001-11-30\\quot\\\\comma\\\\quot\\2007-12-31\\comma\\2009-06-30\\quot\\\\comma\\\\quot\\2020-02-01\\comma\\2020-03-01\\quot\\];//crlf////tab////tab//var ePlotArea=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab////tab//var graphwidth=ePlotArea.offsetWidth;//crlf////tab////tab//var PlotDt1=Date.parse(Series[0]);//crlf////tab////tab//var PlotDt2=Date.parse(Series[Series.length-1]);//crlf////tab////tab//var PlotDtRange=PlotDt2-PlotDt1;//crlf////tab////tab////console.log(\\quot\\PlotDt1=\\quot\\+PlotDt1+\\quot\\ PlotDt2=\\quot\\+PlotDt2+\\quot\\ PlotDtRange=\\quot\\+PlotDtRange);//crlf////tab////tab//for(var i=0;i<arDateRange.length;i++) {//crlf////tab////tab////tab//var arRange=arDateRange[i].split(\\quot\\\\comma\\\\quot\\);//crlf////tab////tab////tab//var dt1=Date.parse(arRange[0]);//crlf////tab////tab////tab//var dt2=Date.parse(arRange[1]);//crlf////crlf////tab////tab////tab//var x1=0;//crlf////tab////tab////tab//if((dt1>=PlotDt1) //amp////amp// (dt1<=PlotDt2)) {//crlf////tab////tab////tab////tab//x1=(dt1-PlotDt1)/PlotDtRange*graphwidth;//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if(dt2>PlotDt2) dt2=PlotDt2;//crlf////tab////tab////tab//var x2=0//crlf////tab////tab////tab//if((dt2>=PlotDt1) //amp////amp// (dt2<=PlotDt2)) {//crlf////tab////tab////tab////tab//x2=(dt2-PlotDt1)/PlotDtRange*graphwidth;//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab//if((x1>0) //amp////amp// (x2>0)) {//crlf////tab////tab////tab////tab//var eRecessionShade=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab////tab//eRecessionShade.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\recession_shade\\quot\\);//crlf////tab////tab////tab////tab//eRecessionShade.style.left=x1+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab//eRecessionShade.style.width=(x2-x1)+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab//eRecessionShade.style.height=ePlotArea.offsetHeight+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab//eRecessionShade.setAttribute(\\quot\\onmouseover\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\\\\quot\\\\quot\\+arRange[0]+\\quot\\ - \\quot\\+arRange[1]+\\quot\\\\\quot\\\\comma\\10\\comma\\10)\\quot\\);//crlf////tab////tab////tab////tab//eRecessionShade.setAttribute(\\quot\\onmouseout\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\quot\\);//crlf////tab////tab////tab////tab//eRecessionShade.setAttribute(\\quot\\onmousemove\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this.parentNode)\\quot\\);//crlf////tab////tab////tab////tab//eRecessionShade.setAttribute(\\quot\\onmouseenter\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this.parentNode)\\quot\\);//crlf////tab////tab////tab////tab//ePlotArea.appendChild(eRecessionShade);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function drawDateMarkers(_id)//crlf//{//crlf////tab////console.log(\\quot\\drawDateMarkers\\quot\\);//crlf////tab//var ChartData=getChartData(_id);//crlf////tab//var Series=getChartSeries(_id\\comma\\ChartData\\comma\\0);//crlf////tab//if(Series[0].indexOf(\\quot\\-\\quot\\)==2) {//crlf////tab////tab//var ePlotArea=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab////tab//var dt1=new Date();//crlf////tab////tab//dt1.setTime(Date.parse(Series[0]));//crlf////tab////tab//var dt2=new Date();//crlf////tab////tab//dt2.setTime(Date.parse(Series[Series.length-1]));//crlf////tab////tab////console.log(\\quot\\dt1=\\quot\\+formatDate(dt1\\comma\\\\quot\\MM-dd-yyyy\\quot\\));//crlf////tab////tab////console.log(\\quot\\dt2=\\quot\\+formatDate(dt2\\comma\\\\quot\\MM-dd-yyyy\\quot\\));//crlf////tab////tab//var t=dt2.getTime()-dt1.getTime();//crlf////tab////tab//var Days=t/(1000*60*60*24);//crlf////tab////tab////console.log(\\quot\\Days=\\quot\\+Days+\\quot\\ Years=\\quot\\+Days/365);//crlf////crlf////tab////tab//var today=new Date();//crlf////tab////tab//today=new Date(today.getFullYear()\\comma\\ today.getMonth()\\comma\\ today.getDate()\\comma\\ 0\\comma\\ 0\\comma\\ 0);//crlf////tab////tab//var IsForecast=false;//crlf////crlf////tab////tab//var graphwidth=ePlotArea.offsetWidth;//crlf////tab////tab//var e=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab////tab//var dt=dt1;//crlf////tab////tab//var LastYear=dt.getFullYear();//crlf////tab////tab//var LastMonth=dt.getMonth();//crlf////crlf////tab////tab////determine if month ticks should be displayed//crlf////tab////tab//var bDisplayMonth=(graphwidth/(Days/30)>10);//crlf////crlf////tab////tab//for(var i=0;i<Series.length;i++) {//crlf////tab////tab////tab//dt.setTime(Date.parse(Series[i]));//crlf////console.log(\\quot\\i=\\quot\\+i+\\quot\\ dt=\\quot\\+dt+\\quot\\ Series[i]=\\quot\\+Series[i]);//crlf////tab////tab////tab//var Year=dt.getFullYear();//crlf////tab////tab////tab//var Month=dt.getMonth();//crlf////tab////tab////tab//var x=(i/Series.length)*graphwidth;//crlf////tab////tab////crlf////tab////tab////tab//if((IsForecast==false) //amp////amp// (dt.getTime()>=today.getTime())) {//crlf////tab////tab////tab////tab//var eTodayTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab////tab//eTodayTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chartTodayTick\\quot\\);//crlf////tab////tab////tab////tab//eTodayTick.style.left=x;//crlf////tab////tab////tab////tab//eTodayTick.style.height=ePlotArea.offsetHeight+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab//eTodayTick.setAttribute(\\quot\\onmousemove\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this.parentNode)\\quot\\);//crlf////tab////tab////tab////tab//eTodayTick.setAttribute(\\quot\\onmouseenter\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this.parentNode)\\quot\\);//crlf////tab////tab////tab////tab//eTodayTick.setAttribute(\\quot\\onmouseover\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\\\\quot\\Today Tick: \\quot\\+Series[i]+\\quot\\\\\quot\\\\comma\\10\\comma\\10)\\quot\\);//crlf////tab////tab////tab////tab//eTodayTick.setAttribute(\\quot\\onmouseout\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\quot\\);//crlf////tab////tab////tab////tab//ePlotArea.appendChild(eTodayTick);//crlf////tab////tab////tab////tab//IsForecast=true;//crlf////tab////tab////tab//}//tab////tab////tab////crlf////tab////tab////tab//else if(Year!=LastYear) {//crlf////tab////tab////tab////tab//var eYearTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab////tab//eYearTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chartYearTick\\quot\\);//crlf////tab////tab////tab////tab//eYearTick.style.left=x;//crlf////tab////tab////tab////tab//eYearTick.style.height=ePlotArea.offsetHeight+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab//eYearTick.setAttribute(\\quot\\onmousemove\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this.parentNode)\\quot\\);//crlf////tab////tab////tab////tab//eYearTick.setAttribute(\\quot\\onmouseenter\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this.parentNode)\\quot\\);//crlf////tab////tab////tab////tab//eYearTick.setAttribute(\\quot\\onmouseover\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\\\\quot\\Year Tick: \\quot\\+Series[i]+\\quot\\\\\quot\\\\comma\\10\\comma\\10)\\quot\\);//crlf////tab////tab////tab////tab//eYearTick.setAttribute(\\quot\\onmouseout\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\quot\\);//crlf////tab////tab////tab////tab//ePlotArea.appendChild(eYearTick);//crlf////tab////tab////tab//}//crlf////tab////tab////tab//else if((bDisplayMonth) //amp////amp// (Month!=LastMonth)) {//crlf////tab////tab////tab////tab//var eMonthTick=document.createElement(\\quot\\div\\quot\\);//crlf////tab////tab////tab////tab//eMonthTick.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\chartMonthTick\\quot\\);//crlf////tab////tab////tab////tab//eMonthTick.style.left=x;//crlf////tab////tab////tab////tab//eMonthTick.style.height=ePlotArea.offsetHeight+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab//eMonthTick.setAttribute(\\quot\\onmousemove\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this.parentNode)\\quot\\);//crlf////tab////tab////tab////tab//eMonthTick.setAttribute(\\quot\\onmouseenter\\quot\\\\comma\\\\quot\\showCrosshair(event\\comma\\this.parentNode)\\quot\\);//crlf////tab////tab////tab////tab//eMonthTick.setAttribute(\\quot\\onmouseover\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\\\\quot\\Month Tick: \\quot\\+Series[i]+\\quot\\\\\quot\\\\comma\\10\\comma\\10)\\quot\\);//crlf////tab////tab////tab////tab//eMonthTick.setAttribute(\\quot\\onmouseout\\quot\\\\comma\\\\quot\\showTooltip(event\\comma\\''\\comma\\0\\comma\\0)\\quot\\);//crlf////tab////tab////tab////tab//ePlotArea.appendChild(eMonthTick);//crlf////tab////tab////tab//};//crlf////tab////tab////tab//LastYear=Year;//crlf////tab////tab////tab//LastMonth=Month;//crlf////tab////tab////tab////dt.setTime(Date.parse(Series[i]));//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//function updatePointInfo(_id\\comma\\_series) {//crlf////tab//console.log(\\quot\\updatePointInfo\\quot\\);//crlf////crlf////tab//var sData=getChartData(_id);//crlf////tab//var arLegend=getChartLegend(sData);//crlf////tab//var SeriesCount=getChartSeriesCount(sData);//crlf////tab//var Series=getChartSeries(_id\\comma\\sData\\comma\\_series);//crlf////crlf////tab////create an array of point info container ID's and the series index associated with each//crlf////tab//var arPointInfoID=new Array();//crlf////tab//var arPointIndex=new Array();//crlf////tab//var eChartPlotArea=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab//for(var i=0;i<eChartPlotArea.childNodes.length;i++) {//crlf////tab////tab//if(eChartPlotArea.childNodes[i].id.startsWith(_id+\\quot\\point\\quot\\+_series)) {//crlf////tab////tab////tab//var sPointID=eChartPlotArea.childNodes[i].getAttribute(\\quot\\pointid\\quot\\);//crlf////tab////tab////tab//var ePoint=document.getElementById(sPointID);//crlf////tab////tab////tab//var Index=parseFloat(ePoint.getAttribute(\\quot\\Index\\quot\\));//crlf////tab////tab////tab//arPointInfoID[arPointInfoID.length]=eChartPlotArea.childNodes[i].id;//crlf////tab////tab////tab//arPointIndex[arPointIndex.length]=Index;//crlf////tab////tab////tab////console.log(\\quot\\Found container: \\quot\\+eChartPlotArea.childNodes[i].id+\\quot\\ for point \\quot\\+sPointID+\\quot\\ Index=\\quot\\+Index);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//for(var i=0;i<arPointInfoID.length;i++) {//crlf////tab////tab////get the point info container with the index prior to this one//crlf////tab////tab//var PreviousInfoID=\\quot\\\\quot\\;//crlf////tab////tab//var PreviousPointIndex=0;//crlf////crlf////tab////tab//for(var j=0;j<arPointInfoID.length;j++) {//crlf////tab////tab////tab//if(arPointIndex[j]<arPointIndex[i]) {//crlf////tab////tab////tab////tab//if(arPointIndex[j]>PreviousPointIndex) {//crlf////tab////tab////tab////tab////tab//PreviousPointIndex=arPointIndex[j];//crlf////tab////tab////tab////tab////tab//PreviousInfoID=arPointInfoID[j];//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////crlf////tab////tab//console.log(\\quot\\PreviousInfoID=\\quot\\+PreviousInfoID+\\quot\\ len=\\quot\\+PreviousInfoID.length);//crlf////crlf////tab////tab//var ePointInfo2=document.getElementById(arPointInfoID[i]);//crlf////tab////tab//var ePoint2=document.getElementById(ePointInfo2.getAttribute(\\quot\\pointID\\quot\\));//crlf////tab////tab//var Label2=ePoint2.getAttribute(\\quot\\label\\quot\\);//crlf////tab////tab//var Value2=parseFloat(ePoint2.getAttribute(\\quot\\value\\quot\\));//crlf////tab////tab//var s=arLegend[_series]+\\quot\\<br>\\quot\\;//crlf////tab////tab//s+=Label2+\\quot\\<br>\\quot\\;//crlf////tab////tab//s+=Value2+\\quot\\<br>\\quot\\;//crlf////crlf////tab////tab////if a prior point was found\\comma\\ add the stats to the container being processed//crlf////tab////tab//if(PreviousInfoID.length>0) {//crlf////tab////tab////tab//var ePointInfo1=document.getElementById(PreviousInfoID);//crlf////tab////tab////tab//var ePoint1=document.getElementById(ePointInfo1.getAttribute(\\quot\\pointID\\quot\\));//crlf////tab////tab////tab//var Label1=ePoint1.getAttribute(\\quot\\label\\quot\\);//crlf////tab////tab////tab//var Value1=parseFloat(ePoint1.getAttribute(\\quot\\value\\quot\\));//crlf////crlf////tab////tab////tab//s+=\\quot\\<hr>\\quot\\;//crlf////tab////tab////tab//s+=Label1+\\quot\\ - \\quot\\+Label2+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab//s +=\\quot\\Difference: \\quot\\+formatNumber(Value2-Value1\\comma\\\\quot\\0.00\\quot\\)+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab//if(Label1.charAt(2)==\\quot\\-\\quot\\) {//crlf////tab////tab////tab////tab//var dt1=new Date();//crlf////tab////tab////tab////tab//var dt2=new Date();//crlf////tab////tab////tab////tab//dt1.setTime(Date.parse(Label1));//crlf////tab////tab////tab////tab//dt2.setTime(Date.parse(Label2));//crlf////tab////tab////tab////tab//var t=dt2.getTime()-dt1.getTime();//crlf////tab////tab////tab////tab//var Days=t/(1000*60*60*24);//crlf////tab////tab////tab////tab//var Years=Days/365;//crlf////tab////tab////tab////tab//s+=\\quot\\Days: \\quot\\+Math.round(Days)+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab////tab//s+=\\quot\\Year: \\quot\\+formatNumber(Years\\comma\\\\quot\\0.00\\quot\\)+\\quot\\<br>\\quot\\;//crlf////crlf////tab////tab////tab////tab////CAGR//crlf////tab////tab////tab////tab//if(Value1!=0) {//crlf////tab////tab////tab////tab////tab//var Cagr=Math.pow(Value2/Value1\\comma\\1/Years)-1;//crlf////tab////tab////tab////tab////tab//s+=\\quot\\CAGR: \\quot\\+formatNumber(Cagr*100\\comma\\\\quot\\0.00\\quot\\)+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab////tab////tab//var Percent=(Value2/Value1)-1;//crlf////tab////tab////tab////tab////tab//s+=\\quot\\Percent: \\quot\\+formatNumber(Percent*100\\comma\\\\quot\\0.00\\quot\\)+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////add mean and stdev for change in series value.  For example\\comma\\ this would be the mean //crlf////tab////tab////tab////price change and stdev of the price change for a stock series//crlf////tab////tab////tab//var PointIndex1=parseFloat(ePoint1.getAttribute(\\quot\\Index\\quot\\));//crlf////tab////tab////tab//var PointIndex2=parseFloat(ePoint2.getAttribute(\\quot\\Index\\quot\\));//crlf////crlf////tab////tab////tab////calculate the mean//crlf////tab////tab////tab//var Sum=0;//crlf////tab////tab////tab//var Count=0;//crlf////tab////tab////tab//var MaxDiff=0;//crlf////tab////tab////tab//var MinDiff=0;//crlf////tab////tab////tab//for(var PointIndex=PointIndex1+1;PointIndex<=PointIndex2;PointIndex++) {//crlf////tab////tab////tab////tab//var Num1=Series[PointIndex-1];//crlf////tab////tab////tab////tab//var Num2=Series[PointIndex];//crlf////tab////tab////tab////tab//var Diff=Num2-Num1;//crlf////tab////tab////tab////tab//if(Count==0) {//crlf////tab////tab////tab////tab////tab//MaxDiff=Diff;//crlf////tab////tab////tab////tab////tab//MinDiff=Diff;//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab//MaxDiff=Math.max(MaxDiff\\comma\\Diff);//crlf////tab////tab////tab////tab////tab//MinDiff=Math.min(MinDiff\\comma\\Diff);//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//Sum +=Diff;//crlf////tab////tab////tab////tab//Count++;//crlf////tab////tab////tab//};//crlf////crlf////tab////tab////tab////calculate the stdev//crlf////tab////tab////tab//if(Count>0) {//crlf////tab////tab////tab////tab//var Mean=Sum/Count;//crlf////tab////tab////tab////tab//var Sum=0;//crlf////tab////tab////tab////tab//for(var PointIndex=PointIndex1+1;PointIndex<=PointIndex2;PointIndex++) {//crlf////tab////tab////tab////tab////tab//var Num1=Series[PointIndex-1];//crlf////tab////tab////tab////tab////tab//var Num2=Series[PointIndex];//crlf////tab////tab////tab////tab////tab//var Diff=(Num2-Num1)-Mean;//crlf////tab////tab////tab////tab////tab//Sum +=Math.pow(Diff\\comma\\2);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab//var Stdev=Math.pow(Sum/Count\\comma\\0.5);//crlf////crlf////tab////tab////tab////tab//s+=\\quot\\<hr>\\quot\\;//crlf////tab////tab////tab////tab//s+=\\quot\\Change in value stats:<br>\\quot\\;//crlf////tab////tab////tab////tab//s+=\\quot\\Min: \\quot\\+Math.round(MinDiff*10000)/10000+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab////tab//s+=\\quot\\Max: \\quot\\+Math.round(MaxDiff*10000)/10000+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab////tab//s+=\\quot\\Mean: \\quot\\+Math.round(Mean*10000)/10000+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab////tab//s+=\\quot\\Stdev: \\quot\\+Math.round(Stdev*10000)/10000+\\quot\\<br>\\quot\\;//crlf////tab////tab////tab//};//crlf////tab////tab//}//crlf////crlf////tab////tab////get the content element//crlf////tab////tab//var eContent=document.getElementById(ePointInfo2.id+\\quot\\content\\quot\\);//crlf////tab////tab//eContent.innerHTML=s;//crlf////tab//};//crlf//};//crlf////crlf//function chartpointclicked(_point) {//crlf////tab//console.log(\\quot\\point clicked\\quot\\);//crlf////tab////crlf////tab////get the series that the point belongs to//crlf////tab//var iSeries=_point.getAttribute(\\quot\\series\\quot\\);//crlf////crlf////tab////get the ID of the chart//crlf////tab//var sID=replaceAllSubstrings(_point.parentNode.id\\comma\\\\quot\\ChartPlotArea\\quot\\\\comma\\\\quot\\\\quot\\);//crlf////crlf////tab////look for point info containers that have already been created.  The ID of a point info container//crlf////tab////is [_id]point[series]_[index].  The index is not in any particular order and will be recycled if //crlf////tab////a container is closed.//crlf////tab//var Index=0;//crlf////tab//var sPopupID=sID+\\quot\\point\\quot\\+iSeries+\\quot\\_\\quot\\+Index;//crlf////tab//while(document.getElementById(sPopupID)) {//crlf////tab////tab//Index++;//crlf////tab////tab//sPopupID=sID+\\quot\\point\\quot\\+iSeries+\\quot\\_\\quot\\+Index;//crlf////tab//};//crlf////crlf////tab////create info container//crlf////tab//var ePointInfo=document.createElement(\\quot\\div\\quot\\);//crlf////tab//ePointInfo.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\point_info_container\\quot\\);//crlf////tab//ePointInfo.id=sID+\\quot\\point\\quot\\+iSeries+\\quot\\_\\quot\\+Index;//crlf////tab//ePointInfo.innerHTML=\\quot\\\\quot\\;//crlf////crlf////tab//ePointInfo.setAttribute(\\quot\\pointID\\quot\\\\comma\\_point.id);//crlf////tab//_point.parentNode.appendChild(ePointInfo);//crlf////crlf////tab////determine x/y coordinates//crlf////tab//var xy1=getPosition2012(_point\\comma\\\\quot\\absolute\\quot\\\\comma\\_point.parentNode);//crlf////tab//var top=xy1[1]+10;//crlf////tab//var left=xy1[0]+10;//crlf////crlf////tab////offset the left position to move the container toward the bottom left quadrant the closer //crlf////tab////the point is to the right-hand side of the plot area//crlf////tab//var d=_point.offsetLeft/_point.parentNode.offsetWidth;//crlf////tab//left -=d*ePointInfo.offsetWidth;//crlf////crlf////tab////position the container above the point if the point is in the bottom half of the graph//crlf////tab//if(_point.offsetTop>_point.parentNode.offsetHeight/2) {//crlf////tab////tab//top-=ePointInfo.offsetHeight;//crlf////tab//};//crlf////crlf////tab//ePointInfo.style.top=top+\\quot\\px\\quot\\;//crlf////tab//ePointInfo.style.left=left+\\quot\\px\\quot\\;//crlf////crlf////tab////add close icon to info container//crlf////tab//var eClose=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eClose.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\point_info_close_icon\\quot\\);//crlf////tab//eClose.innerHTML=\\quot\\<span class='clear'>//amp//nbsp</span>\\quot\\;//crlf////tab//eClose.setAttribute(\\quot\\onclick\\quot\\\\comma\\\\quot\\this.parentNode.parentNode.removeChild(this.parentNode);updatePointInfo(\\\quot\\\\quot\\+sID+\\quot\\\\\quot\\\\comma\\\\quot\\+iSeries+\\quot\\)\\quot\\);//crlf////tab//ePointInfo.appendChild(eClose);//crlf////crlf////tab////add div that will contain the content//crlf////tab//var eContent=document.createElement(\\quot\\div\\quot\\);//crlf////tab//eContent.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\point_info\\quot\\);//crlf////tab//eContent.id=ePointInfo.id+\\quot\\content\\quot\\;//crlf////tab//ePointInfo.appendChild(eContent);//crlf////crlf////tab//updatePointInfo(sID\\comma\\iSeries);//crlf//};//crlf////crlf//function highlightChartSeries(_id\\comma\\_series) {//crlf////tab//var eChartPlotArea=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab//if(!eChartPlotArea) {//crlf////tab////tab//console.log(\\quot\\Cannot find: \\quot\\+\\quot\\ChartPlotArea\\quot\\+_id+\\quot\\Chart\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var arDiv=eChartPlotArea.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for(var i=0;i<arDiv.length;i++) {//crlf////tab////tab//var series=arDiv[i].getAttribute(\\quot\\series\\quot\\);//crlf////tab////tab//if(series) {//crlf////tab////tab////tab//if(series==_series) {//crlf////tab////tab////tab////tab//var sBackgroundColor=arDiv[i].style.backgroundColor;//crlf////tab////tab////tab////tab//if(sBackgroundColor==\\quot\\black\\quot\\) {//crlf////tab////tab////tab////tab////tab//arDiv[i].style.backgroundColor=arDiv[i].getAttribute(\\quot\\origcolor\\quot\\);//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].setAttribute(\\quot\\origcolor\\quot\\\\comma\\sBackgroundColor);//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.backgroundColor=\\quot\\black\\quot\\;//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//This takes too long//crlf//***********************************************************************///crlf//function highlightChartSeriesOLD(_id\\comma\\_series\\comma\\_enable) {//crlf////tab//var eChartPlotArea=document.getElementById(\\quot\\ChartPlotArea\\quot\\+_id);//crlf////tab//if(!eChartPlotArea) {//crlf////tab////tab//console.log(\\quot\\Cannot find: \\quot\\+\\quot\\ChartPlotArea\\quot\\+_id+\\quot\\Chart\\quot\\);//crlf////tab////tab//return;//crlf////tab//};//crlf////crlf////tab//var arDiv=eChartPlotArea.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//var dOriginalWidth=null;//crlf////tab//for(var i=0;i<arDiv.length;i++) {//crlf////tab////tab//var series=arDiv[i].getAttribute(\\quot\\series\\quot\\);//crlf////tab////tab//if(series) {//crlf////tab////tab////tab//if(series==_series) {//crlf////tab////tab////tab////tab////get the original width of the point.  The point is expanded to a multiple of its //crlf////tab////tab////tab////tab////original width and height when hightlighted.//crlf////tab////tab////tab////tab//if(!dOriginalWidth) dOriginalWidth=parseFloat(arDiv[i].getAttribute(\\quot\\originalwidth\\quot\\));//crlf////crlf////tab////tab////tab////tab//if(_enable) {//crlf////tab////tab////tab////tab////tab////enable highlighting//crlf////tab////tab////tab////tab////tab//if(arDiv[i].offsetWidth<=dOriginalWidth) {//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.width=(dOriginalWidth*2)+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.height=(dOriginalWidth*2)+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.bottom=(arDiv[i].getAttribute(\\quot\\_bottom\\quot\\)-dOriginalWidth)+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.left=(arDiv[i].getAttribute(\\quot\\_left\\quot\\)-dOriginalWidth)+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.border=\\quot\\solid 2px black\\quot\\;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//}//crlf////tab////tab////tab////tab//else {//crlf////tab////tab////tab////tab////tab////disable highlighting//crlf////tab////tab////tab////tab////tab//if(arDiv[i].offsetWidth>dOriginalWidth) {//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.width=dOriginalWidth+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.height=dOriginalWidth+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.bottom=arDiv[i].getAttribute(\\quot\\_bottom\\quot\\)+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.left=arDiv[i].getAttribute(\\quot\\_left\\quot\\)+\\quot\\px\\quot\\;//crlf////tab////tab////tab////tab////tab////tab//arDiv[i].style.border=\\quot\\none\\quot\\;//crlf////tab////tab////tab////tab////tab//};//crlf////tab////tab////tab////tab//};//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf//^
ID=455955|X=183|Y=33|W=981|H=737|AutoHeight=false|AutoWidth=false|widthpcnt=0|minwidth=0|maxwidth=0|minheight=0|maxheight=0|ProcessContent=false|Border=true|BorderStyle=solid 1 black|Visible=true|Print=true|RefreshInterval=0|RefreshWhenHidden=false|ExcludeFromAutospace=true|EditExternally=false|content_type=text|onload=|LockEditing=true|LineWrap=false|Publish=true|DragDeployed=false|SizeDeployed=false|ShowStatusIcon=true|AttachTop=589704|AttachLeft=|AlignLeft=589704|AlignRight=|RefreshCondition=|zindex=1|opacity=10|Background=Transparent|Source=|DefaultSource=false|AgentChildYesNode=|AgentChildNoNode=|AgentSensor=|AgentAction=|AgentNodeNotes=|AgentNodeParams=|AgentNodeExpression=|AgentNodeActionReturnValue=|AgentNodeComment=|AgentNodeTermType=|Content=/***********************************************************************//crlf//An array of group names for elements to be animated.  Each element belongs //crlf//to one of these groups.  Each group is animated independently.//crlf////crlf//Attributes are://crlf////tab//Name - Name of the group//crlf////tab//MaxFrames - The maximum number of frames of any element in the group//crlf////tab//Frame - The current frame//crlf////tab//Delay - The number of milliseconds to pause before moving all elements to the next frame//crlf////tab//NextAction - The action to take when animate() is called for the group.//crlf////tab//Control - The range slider associated with the group//crlf////tab//SliderValue - This is set by the range slider when it changes.//crlf////tab//AnimationSpeed - The playback speed (1-10)//crlf////tab//Salt - A unique ID given to the group.  This is used to discontinue calls to animate() //crlf////tab////tab//for a group when it has been updated with new animation elements.//crlf//***********************************************************************///crlf//var arAnimateGroup=new Array();//crlf////crlf///***********************************************************************//crlf//An array of ID's for elements to be animated.  These elements contain //crlf//a series of frames in the form of divs.//crlf////crlf//Attributes are://crlf////tab//ID - ID of the element.  This is the wrapper containing the frames to be animated//crlf////tab//group - group name//crlf////tab//e - element //crlf////tab//FrameCount - Number of frames in the animation//crlf////tab//Frames - Array of frames in the animation//crlf////tab//ActiveFrame - The currently visible frame//crlf//***********************************************************************///crlf//var arAnimateID=new Array();//crlf////crlf///***********************************************************************//crlf//Gets the table that an animation element belongs to//crlf//***********************************************************************///crlf//function getAnimationTable(e) {//crlf////tab//var sTableID=null;//crlf////tab//var e1=e;//crlf////tab//do {//crlf////tab////tab//e1=e1.parentNode;//crlf////tab////tab//if(e1) {//crlf////tab////tab////tab//if(e1.nodeName.equalsIgnoreCase(\\quot\\TD\\quot\\)) {//crlf////tab////tab////tab////tab//var eTableRow=e1.parentNode;//crlf////tab////tab////tab////tab//var eTableBody=eTableRow.parentNode;//crlf////tab////tab////tab////tab//var eTable=eTableBody.parentNode;//crlf////tab////tab////tab////tab//return(eTable);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//} while((e1) //amp////amp// (e1.parentNode) //amp////amp// (sTableID==null));//crlf////crlf////tab//return(null);//crlf//};//crlf////crlf///***********************************************************************//crlf//Gets the group name that an element belongs to.  The group can be specified //crlf//in the animationgroup attribute.  If a name is not specified\\comma\\ the ID of the table//crlf//that the element belongs to will be used.//crlf//***********************************************************************///crlf//function getAnimationGroupForElement(e) //crlf//{//crlf////tab////use the animationgroup attribute if one is specified.  This can be done when an animation //crlf////tab////is not included in a table//crlf////tab//var Group=e.getAttribute(\\quot\\animationgroup\\quot\\);//crlf////tab//if(Group) return(Group);//crlf////crlf////tab////otherwise\\comma\\ return the ID of the table containing the animation//crlf////tab//var eTable=getAnimationTable(e);//crlf////tab//if(eTable) return(eTable.id);//crlf////tab//return(null);//crlf//};//crlf////crlf///***********************************************************************//crlf//Returns an element from the arAnimateGroup array//crlf//***********************************************************************///crlf//function getAnimationGroup(_groupname) {//crlf////tab//var nGroup=arAnimateGroup.map(function(e) { return e.Name; }).indexOf(_groupname);//crlf////tab//if(nGroup<0) return(null);//crlf////tab//return(arAnimateGroup[nGroup]);//crlf//};//crlf////crlf///***********************************************************************//crlf//Gets an array of frames belonging to an element.  getElementsByTagName is //crlf//used instead of childNodes because text elements are included in the //crlf//childNodes for some reason in addition to the frames (divs)//crlf//***********************************************************************///crlf//function getFrames(e) {//crlf////tab//var aNodes=e.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//var a=new Array();//crlf////tab//for(var i=0;i<aNodes.length;i++) {//crlf////tab////tab//var sClass=aNodes[i].getAttribute(\\quot\\class\\quot\\);//crlf////tab////tab//if(sClass) {//crlf////tab////tab////tab//if((sClass.equalsIgnoreCase(\\quot\\meter_outer\\quot\\)) ~~pipe~~~~pipe~~ (sClass.equalsIgnoreCase(\\quot\\meter_opaque\\quot\\))) {//crlf////tab////tab////tab////tab//a[a.length]=aNodes[i];//crlf////tab////tab////tab//};//crlf////tab////tab//};//tab////tab////tab////crlf////tab//};//crlf////tab//return(a);//crlf//};//crlf////crlf///***********************************************************************//crlf//Returns a count of the number of frames in an animation element//crlf//***********************************************************************///crlf//function countFrames(e) {//crlf////tab//var a=getFrames(e);//crlf////tab//return(a.length);//crlf//};//crlf////crlf///***********************************************************************//crlf//Adds the ID of an element to be animated to the array of animations//crlf//***********************************************************************///crlf//function addAnimation(_id\\comma\\_group) {//crlf////tab//var n=arAnimateID.map(function(e) { return e.id; }).indexOf(_id);//crlf////tab//if(n<0) {//crlf////tab////tab////console.log(\\quot\\addAnimation \\quot\\+_id+\\quot\\ arAnimateID.len=\\quot\\+arAnimateID.length);//crlf////tab////tab//n=arAnimateID.length;//crlf////tab////tab//var e1=document.getElementById(_id);//crlf////tab////tab//arAnimateID[n]={ID:_id\\comma\\group:_group\\comma\\e:e1\\comma\\FrameCount:countFrames(e1)\\comma\\Frames:getFrames(e1)\\comma\\ActiveFrame:0};//crlf////tab////tab//initializeAnimation(n);//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Removes the ID of an element from the array of animations.  This is called //crlf//by animate() when an animation no longer exists//crlf//***********************************************************************///crlf//function removeAnimation(_index) {//crlf////tab//console.log(\\quot\\removeAnimation \\quot\\+_index+\\quot\\ arAnimateID len=\\quot\\+arAnimateID.length);//crlf////tab//arAnimateID.splice(_index\\comma\\1);//crlf////tab//console.log(\\quot\\removeAnimation complete len=\\quot\\+arAnimateID.length);//crlf//};//crlf////crlf///***********************************************************************//crlf//Sets an animation back to its starting frame//crlf//***********************************************************************///crlf//function initializeAnimation(_index) {//crlf////tab//arAnimateID[_index].ActiveFrame=0;//crlf////tab//var arFrames=getFrames(arAnimateID[_index].e);//crlf////tab//for(var i=0;i<arFrames.length;i++) {//crlf////tab////tab//arFrames[i].style.display=\\quot\\none\\quot\\;//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Sets the frame for an animation//crlf//***********************************************************************///crlf//function advanceAnimation(_animation\\comma\\PercentDone) {//crlf////tab//var NewActiveFrame=Math.floor(_animation.FrameCount*PercentDone);//crlf////tab//NewActiveFrame=Math.min(NewActiveFrame\\comma\\_animation.FrameCount-1);//crlf////tab////console.log(\\quot\\_animation.ActiveFrame=\\quot\\+_animation.ActiveFrame+\\quot\\ NewActiveFrame=\\quot\\+NewActiveFrame);//crlf////tab//if(NewActiveFrame!=_animation.ActiveFrame) {//crlf////tab////tab//_animation.Frames[_animation.ActiveFrame].style.display=\\quot\\none\\quot\\;//crlf////tab////tab//_animation.ActiveFrame=NewActiveFrame;//crlf////tab////tab//_animation.Frames[_animation.ActiveFrame].style.display=\\quot\\block\\quot\\;//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//This is a continuous loop that makes the call to advance the animation //crlf//for all animations in the array//crlf//***********************************************************************///crlf//function animationFastRewind(_groupname) {//crlf////tab//var Group=getAnimationGroup(_groupname);//crlf////tab//Group.NextAction=\\quot\\fastrewind\\quot\\;//crlf//};//crlf////crlf//function animationSkipPrevious(_groupname) {//crlf////tab//var Group=getAnimationGroup(_groupname);//crlf////tab//Group.NextAction=\\quot\\skipprevious\\quot\\;//crlf//};//crlf////crlf//function animationPlayArrow(_groupname) {//crlf////tab//var Group=getAnimationGroup(_groupname);//crlf////tab//var e=document.getElementById(_groupname+\\quot\\play_arrow\\quot\\);//crlf////tab//var s=e.getAttribute(\\quot\\class\\quot\\);//crlf////tab//if(s==\\quot\\play_arrow\\quot\\) {//crlf////tab////tab//e.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\pause\\quot\\);//crlf////tab////tab//Group.NextAction=\\quot\\play\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//e.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\play_arrow\\quot\\);//crlf////tab////tab//Group.NextAction=\\quot\\pause\\quot\\;//crlf////tab//};//crlf////tab//console.log(\\quot\\Group.NextAction=\\quot\\+Group.NextAction);//crlf//};//crlf////crlf//function animationSkipNext(_groupname) {//crlf////tab//var Group=getAnimationGroup(_groupname);//crlf////tab//Group.NextAction=\\quot\\skipnext\\quot\\;//crlf//};//crlf////crlf//function animationFastForward(_groupname) {//crlf////tab//var Group=getAnimationGroup(_groupname);//crlf////tab//Group.NextAction=\\quot\\fastforward\\quot\\;//crlf//};//crlf////crlf//function setAnimationSpeed(_groupname\\comma\\eSelect) {//crlf////tab//var Group=getAnimationGroup(_groupname);//crlf////tab//Group.AnimationSpeed=parseFloat(eSelect.value);//crlf//};//crlf////crlf//function animationRangeSet(_groupname\\comma\\eRange) {//crlf////tab//var Group=getAnimationGroup(_groupname);//crlf////tab//Group.SliderValue=parseFloat(eRange.value);//crlf////crlf////tab//var e=document.getElementById(_groupname+\\quot\\play_arrow\\quot\\);//crlf////tab//var s=e.getAttribute(\\quot\\class\\quot\\);//crlf////tab//if(s==\\quot\\play_arrow\\quot\\) {//crlf////tab////tab//Group.NextAction=\\quot\\RangeSelectedPause\\quot\\;//crlf////tab//}//crlf////tab//else {//crlf////tab////tab//Group.NextAction=\\quot\\RangeSelectedPlay\\quot\\;//crlf////tab//};//crlf//};//crlf////crlf//function animate(_groupIndex\\comma\\_groupsalt) {//crlf////tab////don't animate hidden elements//crlf////tab//var Group=arAnimateGroup[_groupIndex];//crlf////tab//if(!Group) return;//crlf////crlf////tab//var iDelay=Group.AnimationSpeed*50;//crlf////crlf////tab//if(Group.NextAction==\\quot\\play\\quot\\) {//crlf////tab////tab//Group.Frame++;//crlf////tab////tab//if(Group.Frame>Group.MaxFrames) {//crlf////tab////tab////tab//Group.Frame=0;//crlf////tab////tab////tab//iDelay=2000;//crlf////tab////tab//};//crlf////tab//}//crlf////tab//else if(Group.NextAction==\\quot\\pause\\quot\\) {//crlf////tab////tab//setTimeout(\\quot\\animate(\\quot\\+_groupIndex+\\quot\\\\comma\\\\\quot\\\\quot\\+Group.Salt+\\quot\\\\\quot\\)\\quot\\\\comma\\1000);//crlf////tab////tab//return;//crlf////tab//}//crlf////tab//else if(Group.NextAction==\\quot\\fastrewind\\quot\\) {//crlf////tab////tab//Group.Frame=0;//crlf////tab////tab//Group.Control.value=Group.Frame;//crlf////tab////tab//var e=document.getElementById(Group.Name+\\quot\\play_arrow\\quot\\);//crlf////tab////tab//e.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\play_arrow\\quot\\);//crlf////tab////tab//Group.NextAction=\\quot\\pause\\quot\\;//crlf////tab//}//crlf////tab//else if(Group.NextAction==\\quot\\fastforward\\quot\\) {//crlf////tab////tab//Group.Frame=Group.MaxFrames;//crlf////tab////tab//Group.Control.value=Group.Frame;//crlf////tab////tab//var e=document.getElementById(Group.Name+\\quot\\play_arrow\\quot\\);//crlf////tab////tab//e.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\play_arrow\\quot\\);//crlf////tab////tab//Group.NextAction=\\quot\\pause\\quot\\;//crlf////tab//}//crlf////tab//else if(Group.NextAction==\\quot\\skipprevious\\quot\\) {//crlf////tab////tab//Group.Frame--;//crlf////tab////tab//Group.Control.value=Group.Frame;//crlf////tab////tab//var e=document.getElementById(Group.Name+\\quot\\play_arrow\\quot\\);//crlf////tab////tab//e.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\play_arrow\\quot\\);//crlf////tab////tab//if(Group.Frame<0) Group.Frame=0;//crlf////tab////tab//Group.NextAction=\\quot\\pause\\quot\\;//crlf////tab//}//crlf////tab//else if(Group.NextAction==\\quot\\skipnext\\quot\\) {//crlf////tab////tab//Group.Frame++;//crlf////tab////tab//var e=document.getElementById(Group.Name+\\quot\\play_arrow\\quot\\);//crlf////tab////tab//e.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\play_arrow\\quot\\);//crlf////tab////tab//if(Group.Frame>Group.MaxFrames) Group.Frame=0;//crlf////tab////tab//Group.NextAction=\\quot\\pause\\quot\\;//crlf////tab//}//crlf////tab//else if(Group.NextAction==\\quot\\RangeSelectedPause\\quot\\) {//crlf////tab////tab//Group.Frame=Group.SliderValue;//crlf////tab////tab//Group.SliderValue=-1;//crlf////tab////tab//Group.NextAction=\\quot\\pause\\quot\\;//crlf////tab//}//crlf////tab//else if(Group.NextAction==\\quot\\RangeSelectedPlay\\quot\\) {//crlf////tab////tab//Group.Frame=Group.SliderValue;//crlf////tab////tab//Group.SliderValue=-1;//crlf////tab////tab//Group.NextAction=\\quot\\play\\quot\\;//crlf////tab//};//crlf////crlf////tab//if((Group.Control.value==Group.Frame-1) ~~pipe~~~~pipe~~ (Group.Frame==0)) {//crlf////tab////tab//Group.Control.value=Group.Frame;//crlf////tab//};//crlf////crlf////tab//var PercentDone=Group.Frame/Group.MaxFrames;//crlf////tab//var n=0;//crlf////tab//while(n<arAnimateID.length) {//crlf////tab////tab//if(arAnimateID[n].e) {//crlf////tab////tab////tab//advanceAnimation(arAnimateID[n]\\comma\\PercentDone);//crlf////tab////tab////tab//n++//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//removeAnimation(n);//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab////don't renew the loop if no animation elements exist.  Animation elements will no //crlf////tab////longer exist when a table is refreshed//crlf////tab//if(Group.Salt==_groupsalt) setTimeout(\\quot\\animate(\\quot\\+_groupIndex+\\quot\\\\comma\\\\\quot\\\\quot\\+Group.Salt+\\quot\\\\\quot\\)\\quot\\\\comma\\iDelay);//crlf//};//crlf////crlf//function addAnimationControl(_table\\comma\\_groupname) {//crlf////tab//var arTableTHead=_table.getElementsByTagName(\\quot\\thead\\quot\\);//crlf////tab//if(arTableTHead.length>=1) {//crlf////tab////tab////add another row to the table header//crlf//console.log(\\quot\\arTableTHead.length=\\quot\\+arTableTHead.length);//crlf////tab////tab//if(arTableTHead.length==1) {//crlf////tab////tab////tab////table controls are not displayed so add the control as the first row in the header.//crlf////tab////tab////tab////This puts the control above the column headers//crlf////tab////tab////tab//var tr=arTableTHead[0].insertRow(0);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab////table controls are included so add the control to the end of the table controls.//crlf////tab////tab////tab//var tr=arTableTHead[0].insertRow(-1);//crlf////tab////tab//};//crlf////crlf////tab////tab////add a cell to contain the animation controls//crlf////tab////tab//var THControl=document.createElement(\\quot\\th\\quot\\);//crlf////tab////tab//THControl.setAttribute(\\quot\\colspan\\quot\\\\comma\\100);//crlf////tab////tab//tr.appendChild(THControl);//crlf////crlf////tab////tab////add range element to display playback position//crlf////tab////tab//var eRange=document.createElement(\\quot\\input\\quot\\);//crlf////tab////tab//eRange.setAttribute(\\quot\\id\\quot\\\\comma\\_groupname+\\quot\\animatecontrol\\quot\\);//crlf////tab////tab//eRange.setAttribute(\\quot\\type\\quot\\\\comma\\\\quot\\range\\quot\\);//crlf////tab////tab//eRange.setAttribute(\\quot\\min\\quot\\\\comma\\0);//crlf////tab////tab//eRange.setAttribute(\\quot\\max\\quot\\\\comma\\100); //this is updated in addAnimations to be the max number of frames//crlf////tab////tab//eRange.setAttribute(\\quot\\value\\quot\\\\comma\\0);//crlf////tab////tab//eRange.style.width=\\quot\\100\\percent\\\\quot\\;//crlf////tab////tab//eRange.setAttribute(\\quot\\onInput\\quot\\\\comma\\\\quot\\animationRangeSet('\\quot\\+_groupname+\\quot\\'\\comma\\this)\\quot\\);//crlf////tab////tab//THControl.appendChild(eRange);//crlf////crlf////tab////tab//if(arTableTHead.length==1) {//crlf////tab////tab////tab//tr=arTableTHead[0].insertRow(1);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//tr=arTableTHead[0].insertRow(-1);//crlf////tab////tab//};//crlf////tab////tab//var THPlayback=document.createElement(\\quot\\th\\quot\\);//crlf////tab////tab//THPlayback.setAttribute(\\quot\\colspan\\quot\\\\comma\\100);//crlf////tab////tab//THPlayback.style.textAlign=\\quot\\center\\quot\\;//crlf////tab////tab//tr.appendChild(THPlayback);//crlf////crlf////tab////tab//var Span=document.createElement(\\quot\\span\\quot\\);//crlf////tab////tab//Span.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\fast_rewind\\quot\\);//crlf////tab////tab//Span.style.marginRight=\\quot\\10px\\quot\\;//crlf////tab////tab//Span.id=_groupname+\\quot\\fast_rewind\\quot\\;//crlf////tab////tab//Span.style.cursor=\\quot\\pointer\\quot\\;//crlf////tab////tab//Span.setAttribute(\\quot\\onClick\\quot\\\\comma\\\\quot\\animationFastRewind('\\quot\\+_groupname+\\quot\\')\\quot\\);//crlf////tab////tab//THPlayback.appendChild(Span);//crlf////crlf////tab////tab//Span=document.createElement(\\quot\\span\\quot\\);//crlf////tab////tab//Span.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\skip_previous\\quot\\);//crlf////tab////tab//Span.style.marginRight=\\quot\\10px\\quot\\;//crlf////tab////tab//Span.id=_groupname+\\quot\\skip_previous\\quot\\;//crlf////tab////tab//Span.style.cursor=\\quot\\pointer\\quot\\;//crlf////tab////tab//Span.setAttribute(\\quot\\onClick\\quot\\\\comma\\\\quot\\animationSkipPrevious('\\quot\\+_groupname+\\quot\\')\\quot\\);//crlf////tab////tab//THPlayback.appendChild(Span);//crlf////crlf////tab////tab//Span=document.createElement(\\quot\\span\\quot\\);//crlf////tab////tab//Span.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\pause\\quot\\);//crlf////tab////tab//Span.style.marginRight=\\quot\\10px\\quot\\;//crlf////tab////tab//Span.id=_groupname+\\quot\\play_arrow\\quot\\;//crlf////tab////tab//Span.style.cursor=\\quot\\pointer\\quot\\;//crlf////tab////tab//Span.setAttribute(\\quot\\onClick\\quot\\\\comma\\\\quot\\animationPlayArrow('\\quot\\+_groupname+\\quot\\')\\quot\\);//crlf////tab////tab//THPlayback.appendChild(Span);//crlf////crlf////tab////tab//Span=document.createElement(\\quot\\span\\quot\\);//crlf////tab////tab//Span.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\skip_next\\quot\\);//crlf////tab////tab//Span.style.marginRight=\\quot\\10px\\quot\\;//crlf////tab////tab//Span.id=_groupname+\\quot\\skip_next\\quot\\;//crlf////tab////tab//Span.style.cursor=\\quot\\pointer\\quot\\;//crlf////tab////tab//Span.setAttribute(\\quot\\onClick\\quot\\\\comma\\\\quot\\animationSkipNext('\\quot\\+_groupname+\\quot\\')\\quot\\);//crlf////tab////tab//THPlayback.appendChild(Span);//crlf////crlf////tab////tab//Span=document.createElement(\\quot\\span\\quot\\);//crlf////tab////tab//Span.setAttribute(\\quot\\class\\quot\\\\comma\\\\quot\\fast_forward\\quot\\);//crlf////tab////tab//Span.style.marginRight=\\quot\\10px\\quot\\;//crlf////tab////tab//Span.id=_groupname+\\quot\\fast_forward\\quot\\;//crlf////tab////tab//Span.style.cursor=\\quot\\pointer\\quot\\;//crlf////tab////tab//Span.setAttribute(\\quot\\onClick\\quot\\\\comma\\\\quot\\animationFastForward('\\quot\\+_groupname+\\quot\\')\\quot\\);//crlf////tab////tab//THPlayback.appendChild(Span);//crlf////crlf////tab////tab//var Select=document.createElement(\\quot\\select\\quot\\);//crlf////tab////tab//Select.setAttribute(\\quot\\onChange\\quot\\\\comma\\\\quot\\setAnimationSpeed('\\quot\\+_groupname+\\quot\\'\\comma\\this)\\quot\\);//crlf////tab////tab//Select.value=5;//crlf////tab////tab//for(var i=1;i<=10;i++) {//crlf////tab////tab////tab//Select.options[i]=document.createElement(\\quot\\option\\quot\\);//crlf////tab////tab////tab//Select.options[i].text=i;//crlf////tab////tab////tab//Select.options[i].value=i;//crlf////tab////tab////tab//if(i==3) Select.options[i].selected=true;//crlf////tab////tab//};//crlf////tab////tab//THPlayback.appendChild(Select);//crlf////crlf////tab////tab//return(eRange);//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//Removes animation elements that no longer exist.  Animations will no longer //crlf//exist when a table is refreshed.  Also removes groups that no longer contain//crlf//any animations.//crlf//***********************************************************************///crlf//function purgeAnimations() {//crlf////tab////remove any animation elements that no longer exist//crlf////tab//var n=0;//crlf////tab//var c=0;//crlf////tab//while((c<100) //amp////amp// (n<arAnimateID.length)) {//crlf////tab////tab//if(!document.getElementById(arAnimateID[n].ID)) {//crlf////tab////tab////tab//console.log(\\quot\\Removed animation: \\quot\\+arAnimateID[n].ID+\\quot\\ n=\\quot\\+n+\\quot\\ arAnimateID.length=\\quot\\+arAnimateID.length);//crlf////tab////tab////tab//arAnimateID.splice(n\\comma\\1);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//n++;//crlf////tab////tab//};//crlf////tab////tab//c++;//crlf////tab//};//crlf////crlf////tab////remove any groups for which there are no animations.  This happens when a table is refreshed.//crlf////tab////The group will still be in the array but the animations will have been replaced//crlf////tab//var n=0;//crlf////tab//while(n<arAnimateGroup.length) {//crlf////tab////tab//var n1=arAnimateID.map(function(e) { return e.group; }).indexOf(arAnimateGroup[n].Name);//crlf////tab////tab//if(n1<0) {//crlf////tab////tab////tab//console.log(\\quot\\Removed group: \\quot\\+arAnimateGroup[n].Name);//crlf////tab////tab////tab//arAnimateGroup.splice(n\\comma\\1);//crlf////tab////tab//}//crlf////tab////tab//else {//crlf////tab////tab////tab//n++;//crlf////tab////tab//};//crlf////tab//};//crlf//};//crlf////crlf///***********************************************************************//crlf//This is called when content is loaded.  It adds elements to the array of //crlf//elements to be animated//crlf//***********************************************************************///crlf//function addAnimations() {//crlf////crlf////tab////remove any animations that no longer exist//crlf////tab//purgeAnimations();//crlf////crlf////tab////save the number of existing animation groups.  Animation will be started for //crlf////tab////any new groups added beyond this index//crlf////tab//var SaveGroupLen=arAnimateGroup.length;//crlf////crlf////tab//var a=document.getElementsByTagName(\\quot\\div\\quot\\);//crlf////tab//for(var i=0;i<a.length;i++) {//crlf////tab////tab//var AnimateAttr=a[i].getAttribute(\\quot\\animate\\quot\\);//crlf////tab////tab//if((AnimateAttr) //amp////amp// (a[i].id)) {//crlf////tab////tab////tab//if(AnimateAttr!=\\quot\\active\\quot\\) {//crlf////tab////tab////tab////tab////get the group that the animation belongs to//crlf////tab////tab////tab////tab//var group=getAnimationGroupForElement(a[i]);//crlf////crlf////tab////tab////tab////tab//var eTable=getAnimationTable(a[i]);//crlf////tab////tab////tab////tab//var eAnimationControl=document.getElementById(group+\\quot\\animatecontrol\\quot\\);//crlf////tab////tab////tab////tab//if(!eAnimationControl) {//crlf////tab////tab////tab////tab////tab//eAnimationControl=addAnimationControl(eTable\\comma\\group);//crlf////tab////tab////tab////tab//};//crlf////tab////crlf////tab////tab////tab////tab////add the group to the array of animation groups if it's not already included//crlf////tab////tab////tab////tab//var nGroup=arAnimateGroup.map(function(e) { return e.Name; }).indexOf(group);//crlf////tab////tab////tab////tab//if(nGroup<0) {//crlf////tab////tab////tab////tab////tab//nGroup=arAnimateGroup.length;//crlf////tab////tab////tab////tab////tab//arAnimateGroup[nGroup]={Name:group\\comma\\MaxFrames:0\\comma\\Frame:0\\comma\\Delay:100\\comma\\Control:eAnimationControl\\comma\\NextAction:\\quot\\play\\quot\\\\comma\\SliderValue:-1\\comma\\AnimationSpeed:5\\comma\\Salt:getSalt(4)};//crlf////tab////tab////tab////tab////tab//console.log(\\quot\\added group: \\quot\\+arAnimateGroup[nGroup].Name);//crlf////tab////tab////tab////tab//};//crlf////crlf////tab////tab////tab////tab////add the element to the list of animations//crlf////tab////tab////tab////tab//addAnimation(a[i].id\\comma\\group);//crlf////tab////tab////tab////tab//a[i].setAttribute(\\quot\\animate\\quot\\\\comma\\\\quot\\active\\quot\\);//crlf////crlf////tab////tab////tab////tab////set the maximum number of frames for the group//crlf////tab////tab////tab////tab//arAnimateGroup[nGroup].MaxFrames=Math.max(countFrames(a[i])\\comma\\arAnimateGroup[nGroup].MaxFrames);//crlf////tab////tab////tab////tab////arAnimateGroup[nGroup].Frame=0;//crlf////tab////tab////tab////tab////arAnimateGroup[nGroup].Control=eAnimationControl;//crlf////tab////tab////tab////tab//arAnimateGroup[nGroup].Control.setAttribute(\\quot\\max\\quot\\\\comma\\arAnimateGroup[nGroup].MaxFrames);//crlf////tab////tab////tab//};//crlf////tab////tab//};//crlf////tab//};//crlf////crlf////tab//StopAnimation=false;//crlf////crlf////tab//for(var i=SaveGroupLen;i<arAnimateGroup.length;i++) {//crlf////tab////tab//animate(i\\comma\\arAnimateGroup[i].Salt);//crlf////tab//};//crlf//};//crlf////crlf//
</widget>