J
Jay
I have a web app running on the windows CE device. In one of the asp.net
pages - it has javascript code. That seems to have a memory leak.
When I run the web app - in about one hour, the app hangs. I looked at the
memory and it seems to be full.
I removed all the javascript code - and the app seems to be have no leaks.
As soon as I include my javascript code - the memory consumption gradually
increases.
Whether I actually invoke the javascript code or not - it doesn't matter.
The memory leak happens.
I have been looking at some of the discussions around memory leak and they
talk about circular references and closures.
Well, I dont think I have that issue.
What else can be the problem?
Here is the page that has the problem:
<%@ Master Language="C#" AutoEventWireup="true" Inherits="MyMobile"
CodeBehind="MyMobile.master.cs" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
<meta http-equiv="ScannerNavigate"
content="Javascriptnscan('%s','%s','%s','%s','%s');" />
</head>
<body onload="OnLoad()" onbeforeunload="showProgress();"
onunload="sip_hide();" onkeydown="cancelBack();">
<% if (this.DisplayProgress && this.DisplayTimer)
{ %>
<script language="javascript" type="text/javascript" src="<%=
Page.ResolveUrl("~/Scripts/waitTimer.js") %>">
</script>
<% } %>
<script language="javascript" type="text/javascript" src="<%=
Page.ResolveUrl("~/Scripts/button.js") %>"></script>
<script language="javascript" type="text/javascript">
var sipState = false;
var isSubmitting = false; // limits page to only one Scan or Enter
keypress, used by onkeydown method, injected via Basepage,
HandleEnterKey(...)
function sip_hide()
{
// check if CE device
if (navigator.appVersion.indexOf("Windows CE") >= 0)
{
external.CETerm.PostIDA( "IDA_SIP_HIDE", 0 );
}
}
function sip_show()
{
// check if CE device
if (navigator.appVersion.indexOf("Windows CE") >= 0)
{
external.CETerm.PostIDA( "IDA_SIP_SHOW", 0 );
return false;
}
return false;
}
function sip_toggle()
{
if (sipState == false)
{
external.CETerm.PostIDA( "IDA_SIP_SHOW", 0 );
sipState = true;
return false;
}
else
{
external.CETerm.PostIDA( "IDA_SIP_HIDE", 0 );
sipState = false;
}
}
function showProgress()
{
<% if (this.DisplayProgress) { %>
//added var since CSharp's bool in Script is
// returned as True rather than true
var bDisplayTimer = false;
<% if (this.DisplayTimer) { %>
bDisplayTimer = true;
<% } %>
displayBusyPage(bDisplayTimer);
<% } %>
}
function displayBusyPage(bTimerNeeded)
{
setTimeout('document.images["<%= ProgressImage.ClientID
%>"].src="<%= Page.ResolveUrl("~/Images/progress.gif") %>"', 200);
if (bTimerNeeded)
setTimeout("StartTimer()",10);
document.getElementById('WaitScreen').style.display ="block";
document.getElementById('Content').style.display ="none";
document.getElementById('appNavSect').style.display ="none";
document.getElementById('globalNavSect').style.display ="none";
}
// Scan Capture event
function baseScanEvent(data,source,type,time, length)
{
if (!isSubmitting) {
theForm.<%= txtScannedData.ClientID %>.value = data;
isSubmitting = true;
external.CETerm.PostIDA( "IDA_SCAN_SUSPEND", 0 );
//turn off scanner, user experience, limit to one scan per submit
theForm.submit();
}
}
var onScanEvent = function scanEvent(data,source,type,time, length)
{
baseScanEvent(data,source,type,time, length);
}
function onscan(data, source, type, time, length)
{
// external.CETerm.PostIDA( "IDA_SCAN_SUSPEND", 0 );
var inputTypeElem = document.getElementById('<%=
txtInputType.ClientID %>');
inputTypeElem.value = 'S';
var barcodeTypeElem = document.getElementById('<%=
txtBarcodeType.ClientID %>');
var btArray = source.split(':');
if (btArray.length > 1)
barcodeTypeElem.value = btArray[1];
onScanEvent(data,source,type,time,length);
}
// End Scan Capture event
// base Screen Load event - offers beep functionality
function baseLoadEvent()
{
try
{
// For Beep(s) on Windows CE
if (navigator.appVersion.indexOf("Windows CE") >= 0)
{
var count = <%= BeepCount %>;
for(var i=1; i <= count; i++)
{
<%= BeepSoundPlayString %>
for(var j=1; j<=100000; j++);
}
}
}
catch (e)
{
alert(e.message);
}
}
var onLoadEvent = function loadEvent() {
baseLoadEvent();
}
//End screen OnLoad event
// Scan Config event
function baseScanConfigEvent()
{
try
{
// First Beep on Windows CE
if (navigator.appVersion.indexOf("Windows CE") >= 0)
{
var sessIdx = external.sessionindex;
//check for any enabled symbologies
var enabledSymbologies = "<%= this.EnabledSymbologies
%>";
if (external.CETerm.ActiveSession == 3) {
if (enabledSymbologies == '') {
external.CETerm.PostIDA(
"IDA_SCAN_SUSPEND", 0 );
return;
} else {
external.CETerm.PostIDA(
"IDA_SCAN_RESUME", 0 );
}
}
var symbologies =
enabledSymbologies.split(",");
// Disable all the common symbologies
var allSymbologies = new
Array("upca","upce0","ean8","ean13","code39","code128");
for (var i=0; i < allSymbologies.length; i++) {
external.CETerm.setProperty("session"+sessIdx+".scanner."+allSymbologies+".enabled",false);
}
// Enable the required symbologies
for (var i=0; i < symbologies.length; i++) {
external.CETerm.setProperty("session"+sessIdx+".scanner."+symbologies+".enabled",true);
}
// Set the beeptime
var beepTime = <%= BeepTime %>;
external.CETerm.setProperty("session" + sessIdx +
".scanner.decodebeeptime", beepTime);
// Apply the settings
external.CETerm.PostIDA(
"IDA_SCAN_APPLYCONFIG", 0 );
}
}
catch (e)
{
alert(e.message);
}
}
var onScanConfig = function scanConfigEvent() {
baseScanConfigEvent();
}
// End Scan Config event
function OnLoad()
{
onLoadEvent();
onScanConfig();
}
function disableSelection(target) {
target.onselectstart=function() {return false}
}
function cancelBack()
{
if ((event.keyCode == 8 ||
(event.keyCode == 37 && event.altKey) ||
(event.keyCode == 39 && event.altKey))
&&
(event.srcElement.form == null || event.srcElement.isTextEdit
== false)
)
{
event.cancelBubble = true;
event.returnValue = false;
}
}
//function to toggle alert icon to "active" status
function alertRecdIcon () {
try {
document.getElementById('ctl00_GlobalNavBarArea_GlobalNavAlerts').src="<%=
Page.ResolveUrl("~/Images/new_alert_received.gif") %>";
setCookie('MWN_ALERT_ICON', '1', 1);
} catch (e) {
//ignore
}
}
//function to toggle alert icon to "normal" status
function alertNormalIcon() {
try {
document.getElementById('ctl00_GlobalNavBarArea_GlobalNavAlerts').src="<%=
Page.ResolveUrl("~/Images/alert.jpg") %>";
setCookie('MWN_ALERT_ICON', '0', 1);
} catch (e) {
//ignore
}
}
//function to handleAlert from listener app
// handleAlert must exist to receive communications from the
alerting listener client
// the 'msg' argument carries the test message of the alert
function handleAlert(type,priority,msg,id)
{
// all parameters ignored at this time
// change below to the icon that would notify of a new alert
alertRecdIcon();
}
// functions to set and get cookies -- used for alert icon state
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
expiredays = null;
document.cookie=c_name+ "=" +escape(value)+"; path=/;
domain=xyz.com;"+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
</script>
<div id="MobileScreen" class="mobileScreen">
<form id="form1" runat="server">
<input type="hidden" value="" name="txtScannedData"
id="txtScannedData" runat="server" />
<input type="hidden" value="" name="txtBarcodeType"
id="txtBarcodeType" runat="server" />
<input type="hidden" value="K" name="txtInputType"
id="txtInputType" runat="server" />
<div id="GlobalNavBar"
class="absGlobalNav">
<asp:ContentPlaceHolder ID="GlobalNavBarArea"
runat="server">
<div id="globalNavSect">
<input type="image"
name="element1" src="<%= Page.ResolveUrl("~/Images/red1px.gif") %>"
onclick="return false;"/>
<asp:ImageButton
ID="GlobalNavHome" runat="server" AlternateText="Home"
CssClass="globalNavBtn1" ImageUrl="~/Images/home.jpg" Visible="false"
OnClick="GlobalNavBarHome_Click" />
<asp:ImageButton
ID="GlobalNavScan" runat="server" AlternateText="Scan"
CssClass="globalNavBtn2" ImageUrl="~/Images/scan.jpg" Visible="false"
OnClick="GlobalNavBarScan_Click" />
<asp:ImageButton
ID="GlobalNavToggle" runat="server" AlternateText="Toggle"
CssClass="globalNavBtn2" ImageUrl="~/Images/toggle.jpg" Visible="false"
OnClick="GlobalNavBarToggle_Click" />
<asp:ImageButton
ID="GlobalNavAlerts" runat="server" AlternateText="Alerts"
CssClass="globalNavBtn3" ImageUrl="~/Images/alert.jpg" Visible="true"
OnClientClick="alertNormalIcon();" OnClick="GlobalNavBarAlerts_Click" />
<asp:ImageButton
ID="GlobalNavInfo" runat="server" AlternateText="Info"
CssClass="globalNavBtn3" ImageUrl="~/Images/info.jpg" Visible="false"
OnClick="GlobalNavBarInfo_Click" />
<asp:ImageButton
ID="GlobalNavExit" runat="server" AlternateText="Exit"
CssClass="globalNavBtn4" ImageUrl="~/Images/exit.jpg" Visible="false"
OnClick="GlobalNavBarExit_Click" />
<asp:ImageButton
ID="GlobalNavKeyboard" runat="server" AlternateText="Keyboard"
CssClass="globalNavBtn4" ImageUrl="~/Images/key.jpg" Visible="false"
OnClientClick="setFocusTxt();sip_show();return false;" />
<asp:ImageButton
ID="GlobalNavChangeView" runat="server" AlternateText="Change View"
CssClass="globalNavBtn4" ImageUrl="~/Images/change_view.jpg" Visible="false"
OnClick="GlobalNavBarChangeView_Click" />
</div>
</asp:ContentPlaceHolder>
</div>
<div id="WaitScreen"
class="absContentArea" style='display: none'>
<table border="0" width="100%">
<tr align="center">
<td align="center">
<asp:Image
ID="ProgressImage" ImageAlign="absmiddle" ImageUrl="~/Images/progress.gif"
AlternateText="In Progress" runat="server"/>
<!--img
id="ProgressImage" align=absmiddle src="/Images/progress.gif" alt="In
Progress" /-->
</td>
</tr>
<tr align="center"
valign="top">
<td align="center"
valign="top">
<font face="Tahoma"
style="font-weight:bold" size="3"><%= BusyMessage %></font>
<% if
(this.DisplayTimer) { %>
<br /><br />
<span id="time"
class="waitTimer">
</span>
<% } %>
</td>
</tr>
</table>
</div>
<div id="Content"
class="absContentArea">
<asp:ContentPlaceHolder ID="ContentArea" runat="server" >
<h3>Default Content</h3>
</asp:ContentPlaceHolder>
</div>
<div id="AppNavBar" class="appNav">
<asp:ContentPlaceHolder ID="AppNavBarArea" runat="server">
<div id="appNavSect">
<asp:ImageButton ID="AppNavBarBack" runat="server"
AlternateText="Back" CssClass="appNavBtn1" ImageUrl="~/Images/Back.jpg"
Visible="false" OnClick="AppNavBarBack_Click" />
<asp:ImageButton ID="AppNavBarUp" runat="server"
AlternateText="Up" CssClass="appNavBtn2" ImageUrl="~/Images/up.jpg"
Visible="false" OnClick="AppNavBarUp_Click" />
<asp:ImageButton ID="AppNavBarDown" runat="server"
AlternateText="Down" CssClass="appNavBtn3" ImageUrl="~/Images/down.jpg"
Visible="false" OnClick="AppNavBarDown_Click" />
<asp:ImageButton ID="AppNavBarNext" runat="server"
AlternateText="Next" CssClass="appNavBtn4" ImageUrl="~/Images/next.jpg"
Visible="false" OnClick="AppNavBarNext_Click" />
<asp:ImageButton ID="AppNavBarGo" runat="server"
AlternateText="Go" CssClass="appNavBtn4" ImageUrl="~/Images/go.gif"
Visible="false" OnClick="AppNavBarGo_Click" />
</div>
</asp:ContentPlaceHolder>
<div class="ScreenID"><asp:Label ID="lblScreenID"
runat="server"></asp:Label></div>
</div>
</form>
<script language="javascript" type="text/javascript">
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
</script>
</div>
<script type="text/javascript" language="javascript">
disableSelection(document.getElementById("MobileScreen"));
//set alert icon based on cookie
if (getCookie('MWN_ALERT_ICON')=='1') {
alertRecdIcon();
} else {
alertNormalIcon();
}
</script>
</body>
</html>
pages - it has javascript code. That seems to have a memory leak.
When I run the web app - in about one hour, the app hangs. I looked at the
memory and it seems to be full.
I removed all the javascript code - and the app seems to be have no leaks.
As soon as I include my javascript code - the memory consumption gradually
increases.
Whether I actually invoke the javascript code or not - it doesn't matter.
The memory leak happens.
I have been looking at some of the discussions around memory leak and they
talk about circular references and closures.
Well, I dont think I have that issue.
What else can be the problem?
Here is the page that has the problem:
<%@ Master Language="C#" AutoEventWireup="true" Inherits="MyMobile"
CodeBehind="MyMobile.master.cs" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
<meta http-equiv="ScannerNavigate"
content="Javascriptnscan('%s','%s','%s','%s','%s');" />
</head>
<body onload="OnLoad()" onbeforeunload="showProgress();"
onunload="sip_hide();" onkeydown="cancelBack();">
<% if (this.DisplayProgress && this.DisplayTimer)
{ %>
<script language="javascript" type="text/javascript" src="<%=
Page.ResolveUrl("~/Scripts/waitTimer.js") %>">
</script>
<% } %>
<script language="javascript" type="text/javascript" src="<%=
Page.ResolveUrl("~/Scripts/button.js") %>"></script>
<script language="javascript" type="text/javascript">
var sipState = false;
var isSubmitting = false; // limits page to only one Scan or Enter
keypress, used by onkeydown method, injected via Basepage,
HandleEnterKey(...)
function sip_hide()
{
// check if CE device
if (navigator.appVersion.indexOf("Windows CE") >= 0)
{
external.CETerm.PostIDA( "IDA_SIP_HIDE", 0 );
}
}
function sip_show()
{
// check if CE device
if (navigator.appVersion.indexOf("Windows CE") >= 0)
{
external.CETerm.PostIDA( "IDA_SIP_SHOW", 0 );
return false;
}
return false;
}
function sip_toggle()
{
if (sipState == false)
{
external.CETerm.PostIDA( "IDA_SIP_SHOW", 0 );
sipState = true;
return false;
}
else
{
external.CETerm.PostIDA( "IDA_SIP_HIDE", 0 );
sipState = false;
}
}
function showProgress()
{
<% if (this.DisplayProgress) { %>
//added var since CSharp's bool in Script is
// returned as True rather than true
var bDisplayTimer = false;
<% if (this.DisplayTimer) { %>
bDisplayTimer = true;
<% } %>
displayBusyPage(bDisplayTimer);
<% } %>
}
function displayBusyPage(bTimerNeeded)
{
setTimeout('document.images["<%= ProgressImage.ClientID
%>"].src="<%= Page.ResolveUrl("~/Images/progress.gif") %>"', 200);
if (bTimerNeeded)
setTimeout("StartTimer()",10);
document.getElementById('WaitScreen').style.display ="block";
document.getElementById('Content').style.display ="none";
document.getElementById('appNavSect').style.display ="none";
document.getElementById('globalNavSect').style.display ="none";
}
// Scan Capture event
function baseScanEvent(data,source,type,time, length)
{
if (!isSubmitting) {
theForm.<%= txtScannedData.ClientID %>.value = data;
isSubmitting = true;
external.CETerm.PostIDA( "IDA_SCAN_SUSPEND", 0 );
//turn off scanner, user experience, limit to one scan per submit
theForm.submit();
}
}
var onScanEvent = function scanEvent(data,source,type,time, length)
{
baseScanEvent(data,source,type,time, length);
}
function onscan(data, source, type, time, length)
{
// external.CETerm.PostIDA( "IDA_SCAN_SUSPEND", 0 );
var inputTypeElem = document.getElementById('<%=
txtInputType.ClientID %>');
inputTypeElem.value = 'S';
var barcodeTypeElem = document.getElementById('<%=
txtBarcodeType.ClientID %>');
var btArray = source.split(':');
if (btArray.length > 1)
barcodeTypeElem.value = btArray[1];
onScanEvent(data,source,type,time,length);
}
// End Scan Capture event
// base Screen Load event - offers beep functionality
function baseLoadEvent()
{
try
{
// For Beep(s) on Windows CE
if (navigator.appVersion.indexOf("Windows CE") >= 0)
{
var count = <%= BeepCount %>;
for(var i=1; i <= count; i++)
{
<%= BeepSoundPlayString %>
for(var j=1; j<=100000; j++);
}
}
}
catch (e)
{
alert(e.message);
}
}
var onLoadEvent = function loadEvent() {
baseLoadEvent();
}
//End screen OnLoad event
// Scan Config event
function baseScanConfigEvent()
{
try
{
// First Beep on Windows CE
if (navigator.appVersion.indexOf("Windows CE") >= 0)
{
var sessIdx = external.sessionindex;
//check for any enabled symbologies
var enabledSymbologies = "<%= this.EnabledSymbologies
%>";
if (external.CETerm.ActiveSession == 3) {
if (enabledSymbologies == '') {
external.CETerm.PostIDA(
"IDA_SCAN_SUSPEND", 0 );
return;
} else {
external.CETerm.PostIDA(
"IDA_SCAN_RESUME", 0 );
}
}
var symbologies =
enabledSymbologies.split(",");
// Disable all the common symbologies
var allSymbologies = new
Array("upca","upce0","ean8","ean13","code39","code128");
for (var i=0; i < allSymbologies.length; i++) {
external.CETerm.setProperty("session"+sessIdx+".scanner."+allSymbologies+".enabled",false);
}
// Enable the required symbologies
for (var i=0; i < symbologies.length; i++) {
external.CETerm.setProperty("session"+sessIdx+".scanner."+symbologies+".enabled",true);
}
// Set the beeptime
var beepTime = <%= BeepTime %>;
external.CETerm.setProperty("session" + sessIdx +
".scanner.decodebeeptime", beepTime);
// Apply the settings
external.CETerm.PostIDA(
"IDA_SCAN_APPLYCONFIG", 0 );
}
}
catch (e)
{
alert(e.message);
}
}
var onScanConfig = function scanConfigEvent() {
baseScanConfigEvent();
}
// End Scan Config event
function OnLoad()
{
onLoadEvent();
onScanConfig();
}
function disableSelection(target) {
target.onselectstart=function() {return false}
}
function cancelBack()
{
if ((event.keyCode == 8 ||
(event.keyCode == 37 && event.altKey) ||
(event.keyCode == 39 && event.altKey))
&&
(event.srcElement.form == null || event.srcElement.isTextEdit
== false)
)
{
event.cancelBubble = true;
event.returnValue = false;
}
}
//function to toggle alert icon to "active" status
function alertRecdIcon () {
try {
document.getElementById('ctl00_GlobalNavBarArea_GlobalNavAlerts').src="<%=
Page.ResolveUrl("~/Images/new_alert_received.gif") %>";
setCookie('MWN_ALERT_ICON', '1', 1);
} catch (e) {
//ignore
}
}
//function to toggle alert icon to "normal" status
function alertNormalIcon() {
try {
document.getElementById('ctl00_GlobalNavBarArea_GlobalNavAlerts').src="<%=
Page.ResolveUrl("~/Images/alert.jpg") %>";
setCookie('MWN_ALERT_ICON', '0', 1);
} catch (e) {
//ignore
}
}
//function to handleAlert from listener app
// handleAlert must exist to receive communications from the
alerting listener client
// the 'msg' argument carries the test message of the alert
function handleAlert(type,priority,msg,id)
{
// all parameters ignored at this time
// change below to the icon that would notify of a new alert
alertRecdIcon();
}
// functions to set and get cookies -- used for alert icon state
function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
expiredays = null;
document.cookie=c_name+ "=" +escape(value)+"; path=/;
domain=xyz.com;"+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
</script>
<div id="MobileScreen" class="mobileScreen">
<form id="form1" runat="server">
<input type="hidden" value="" name="txtScannedData"
id="txtScannedData" runat="server" />
<input type="hidden" value="" name="txtBarcodeType"
id="txtBarcodeType" runat="server" />
<input type="hidden" value="K" name="txtInputType"
id="txtInputType" runat="server" />
<div id="GlobalNavBar"
class="absGlobalNav">
<asp:ContentPlaceHolder ID="GlobalNavBarArea"
runat="server">
<div id="globalNavSect">
<input type="image"
name="element1" src="<%= Page.ResolveUrl("~/Images/red1px.gif") %>"
onclick="return false;"/>
<asp:ImageButton
ID="GlobalNavHome" runat="server" AlternateText="Home"
CssClass="globalNavBtn1" ImageUrl="~/Images/home.jpg" Visible="false"
OnClick="GlobalNavBarHome_Click" />
<asp:ImageButton
ID="GlobalNavScan" runat="server" AlternateText="Scan"
CssClass="globalNavBtn2" ImageUrl="~/Images/scan.jpg" Visible="false"
OnClick="GlobalNavBarScan_Click" />
<asp:ImageButton
ID="GlobalNavToggle" runat="server" AlternateText="Toggle"
CssClass="globalNavBtn2" ImageUrl="~/Images/toggle.jpg" Visible="false"
OnClick="GlobalNavBarToggle_Click" />
<asp:ImageButton
ID="GlobalNavAlerts" runat="server" AlternateText="Alerts"
CssClass="globalNavBtn3" ImageUrl="~/Images/alert.jpg" Visible="true"
OnClientClick="alertNormalIcon();" OnClick="GlobalNavBarAlerts_Click" />
<asp:ImageButton
ID="GlobalNavInfo" runat="server" AlternateText="Info"
CssClass="globalNavBtn3" ImageUrl="~/Images/info.jpg" Visible="false"
OnClick="GlobalNavBarInfo_Click" />
<asp:ImageButton
ID="GlobalNavExit" runat="server" AlternateText="Exit"
CssClass="globalNavBtn4" ImageUrl="~/Images/exit.jpg" Visible="false"
OnClick="GlobalNavBarExit_Click" />
<asp:ImageButton
ID="GlobalNavKeyboard" runat="server" AlternateText="Keyboard"
CssClass="globalNavBtn4" ImageUrl="~/Images/key.jpg" Visible="false"
OnClientClick="setFocusTxt();sip_show();return false;" />
<asp:ImageButton
ID="GlobalNavChangeView" runat="server" AlternateText="Change View"
CssClass="globalNavBtn4" ImageUrl="~/Images/change_view.jpg" Visible="false"
OnClick="GlobalNavBarChangeView_Click" />
</div>
</asp:ContentPlaceHolder>
</div>
<div id="WaitScreen"
class="absContentArea" style='display: none'>
<table border="0" width="100%">
<tr align="center">
<td align="center">
<asp:Image
ID="ProgressImage" ImageAlign="absmiddle" ImageUrl="~/Images/progress.gif"
AlternateText="In Progress" runat="server"/>
<!--img
id="ProgressImage" align=absmiddle src="/Images/progress.gif" alt="In
Progress" /-->
</td>
</tr>
<tr align="center"
valign="top">
<td align="center"
valign="top">
<font face="Tahoma"
style="font-weight:bold" size="3"><%= BusyMessage %></font>
<% if
(this.DisplayTimer) { %>
<br /><br />
<span id="time"
class="waitTimer">
</span>
<% } %>
</td>
</tr>
</table>
</div>
<div id="Content"
class="absContentArea">
<asp:ContentPlaceHolder ID="ContentArea" runat="server" >
<h3>Default Content</h3>
</asp:ContentPlaceHolder>
</div>
<div id="AppNavBar" class="appNav">
<asp:ContentPlaceHolder ID="AppNavBarArea" runat="server">
<div id="appNavSect">
<asp:ImageButton ID="AppNavBarBack" runat="server"
AlternateText="Back" CssClass="appNavBtn1" ImageUrl="~/Images/Back.jpg"
Visible="false" OnClick="AppNavBarBack_Click" />
<asp:ImageButton ID="AppNavBarUp" runat="server"
AlternateText="Up" CssClass="appNavBtn2" ImageUrl="~/Images/up.jpg"
Visible="false" OnClick="AppNavBarUp_Click" />
<asp:ImageButton ID="AppNavBarDown" runat="server"
AlternateText="Down" CssClass="appNavBtn3" ImageUrl="~/Images/down.jpg"
Visible="false" OnClick="AppNavBarDown_Click" />
<asp:ImageButton ID="AppNavBarNext" runat="server"
AlternateText="Next" CssClass="appNavBtn4" ImageUrl="~/Images/next.jpg"
Visible="false" OnClick="AppNavBarNext_Click" />
<asp:ImageButton ID="AppNavBarGo" runat="server"
AlternateText="Go" CssClass="appNavBtn4" ImageUrl="~/Images/go.gif"
Visible="false" OnClick="AppNavBarGo_Click" />
</div>
</asp:ContentPlaceHolder>
<div class="ScreenID"><asp:Label ID="lblScreenID"
runat="server"></asp:Label></div>
</div>
</form>
<script language="javascript" type="text/javascript">
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
</script>
</div>
<script type="text/javascript" language="javascript">
disableSelection(document.getElementById("MobileScreen"));
//set alert icon based on cookie
if (getCookie('MWN_ALERT_ICON')=='1') {
alertRecdIcon();
} else {
alertNormalIcon();
}
</script>
</body>
</html>