function EventHandler(eventKey, fnEventHandler)
{
this.m_eventKey = eventKey;
this.m_fnHandler = fnEventHandler;
}
EventHandler.prototype.getEventKey = function()
{
return this.m_eventKey;
}
EventHandler.prototype.getHandler = function()
{
return this.m_fnHandler;
}
function HandlerRegistry()
{
this.m_handlers = new Array();
}
HandlerRegistry.prototype.registerEventHandler = function(strSrcFormName, strEventName, fnEventHandler)
{
var fnExistingHandler = this.getEventHandler(strSrcFormName, strEventName);
if (fnExistingHandler != null)
{
throwError("An Event handler for form " + strSrcFormName + " and event " + strEventName + " already registered");
return;
}
var fnEventHandler = new EventHandler(this.getEventKey(strSrcFormName, strEventName), fnEventHandler);
this.m_handlers[this.m_handlers.length] = fnEventHandler;
}
HandlerRegistry.prototype.reregisterEventHandler = function(strSrcFormName, strEventName, fnEventHandler)
{
var strEventKey = this.getEventKey(strSrcFormName, strEventName);
var bIsHandlerAlreadyRegistered = false;
for (var iHandler = 0; iHandler < this.m_handlers.length; iHandler++)
{
var eventHandler = this.m_handlers[iHandler];
if (eventHandler.getEventKey() == strEventKey)
{
var fnEventHandler = new EventHandler(strEventKey, fnEventHandler);
this.m_handlers[iHandler] = fnEventHandler;
bIsHandlerAlreadyRegistered = true;
break;
}
}
if (bIsHandlerAlreadyRegistered == false)
{
this.registerEventHandler(strSrcFormName, strEventName, fnEventHandler);
}
}
HandlerRegistry.prototype.getEventHandler = function(strSrcFormName, strEventName)
{
var fnEventHandler = null;
var strEventKey = this.getEventKey(strSrcFormName, strEventName);
for (var iHandler = 0; iHandler < this.m_handlers.length; iHandler++)
{
var eventHandler = this.m_handlers[iHandler];
if (eventHandler.getEventKey() == strEventKey)
{
fnEventHandler = eventHandler.getHandler();
break;
}
}
if (fnEventHandler == null)
{
strEventKey = this.getEventKey(null, strEventName);
for (var iHandler = 0; iHandler < this.m_handlers.length; iHandler++)
{
var eventHandler = this.m_handlers[iHandler];
if (eventHandler.getEventKey() == strEventKey)
{
fnEventHandler = eventHandler.getHandler();
break;
}
}
}
return fnEventHandler;
}
HandlerRegistry.prototype.getEventKey = function(strSrcFormName, strEventName)
{
if (strSrcFormName == null )
{
strSrcFormName = "";
}
return strSrcFormName + "." + strEventName;
}
var isNav = (navigator.appName == "Netscape");
var isMac = (navigator.platform.toLowerCase().indexOf("mac")!=-1)
var isMacIE = isMac&&!isNav;
var g_include_event;
if (g_include_event != "true")
{
if (typeof(Trace_CLIENTEVENTS) == "undefined")
{
Trace_CLIENTEVENTS = false;
}
g_include_event = "true";
var g_safeCallTimer = null;
var g_handlerRegistry = null;
var g_current_event_keycode = null;
var g_current_event_name = null;
function registerClientEventHandler(strSrcFormName, strEventName, fnEventHandler)
{
if (g_handlerRegistry == null)
{
g_handlerRegistry = new HandlerRegistry();
}
g_handlerRegistry.registerEventHandler(strSrcFormName, strEventName, fnEventHandler);
if (Trace_CLIENTEVENTS) events_trace("registered handler " + fnEventHandler.toString() +
" for event " + strEventName + " (form " + strSrcFormName + ")");
}
function registerPreSubmitClientEventHandler(strSrcFormName, strEventName, fnEventHandler)
{
registerClientEventHandler(strSrcFormName, strEventName, fnEventHandler);
}
function reregisterPreSubmitClientEventHandler(strSrcFormName, strEventName, fnEventHandler)
{
reregisterClientEventHandler(strSrcFormName, strEventName, fnEventHandler);
}
function reregisterClientEventHandler(strSrcFormName, strEventName, fnEventHandler)
{
if (g_handlerRegistry == null)
{
g_handlerRegistry = new HandlerRegistry();
}
g_handlerRegistry.reregisterEventHandler(strSrcFormName, strEventName, fnEventHandler);
if (Trace_CLIENTEVENTS) events_trace("reregistered handler " + fnEventHandler.toString() +
" for event " + strEventName + " (form " + strSrcFormName + ")");
}
function fireClientEvent(strEventName)
{
if (Trace_CLIENTEVENTS) events_trace("firing event " + strEventName);
var winWithHandler = findClientEventHandlerDispatchWindow(strEventName);
if (winWithHandler != null)
{
var fnEventHandler = winWithHandler.g_handlerRegistry.getEventHandler(this.name, strEventName);
if (fnEventHandler != null)
{
var args = new Array(fireClientEvent.arguments.length);
for (var i = 0; i < fireClientEvent.arguments.length; i++)
{
args[i] = fireClientEvent.arguments[i];
}
if (typeof(getTopLevelWnd().shiftKeyPressed) != "undefined" && getTopLevelWnd().shiftKeyPressed)
{
args[args.length] = "shiftKeyPressed";
}
if (typeof(getTopLevelWnd().ctrlKeyPressed) != "undefined" && getTopLevelWnd().ctrlKeyPressed)
{
args[args.length] = "ctrlKeyPressed";
}
if (typeof(getTopLevelWnd().altKeyPressed) != "undefined" && getTopLevelWnd().altKeyPressed)
{
args[args.length] = "altKeyPressed";
}
winWithHandler.safeCallEx(fnEventHandler, args, 1);
}
}
}
function firePreSubmitClientEvent(strEventName)
{
fireClientEvent(strEventName);
}
function isClientEventHandlerRegistered(strEventName)
{
if (Trace_CLIENTEVENTS) events_trace("testing for handler for " + strEventName);
var winWithHandler = findClientEventHandlerDispatchWindow(strEventName);
return (winWithHandler != null);
}
function findClientEventHandlerDispatchWindow(strEventName)
{
if (Trace_CLIENTEVENTS) events_trace("getting dispatch window for handler for " + strEventName);
var winWithHandler = null;
var winDispatch = this;
while (winDispatch != null && isDispatchableWindow(winDispatch) == true)
{
if (Trace_CLIENTEVENTS) events_trace("... checking window " + winDispatch.location);
if (winDispatch.g_handlerRegistry != null)
{
var fnEventHandler = winDispatch.g_handlerRegistry.getEventHandler(this.name, strEventName);
if (fnEventHandler != null)
{
// event handler found - we're done
winWithHandler = winDispatch;
if (Trace_CLIENTEVENTS) events_trace("... dispatch window found ");
break;
}
}
var winOpener = winDispatch.opener;
var winParent = (winDispatch == winDispatch.parent) ? null : winDispatch.parent;
winDispatch = (winOpener == null) ? winParent : winOpener;
}
if (Trace_CLIENTEVENTS)
{
if (winWithHandler == null) events_trace("... dispatch window cannot be found ");
}
return winWithHandler;
}
function safeCall(fnFunction)
{
if(g_current_event_keycode == "32" && g_current_event_name == "keypress")
{
return;
}
safeCallEx(fnFunction, safeCall.arguments, 1);
}
function safeCallEx(fnFunction, args, nSkipArgs)
{
if (typeof(g_safeCallQueue) == "undefined")
{
g_safeCallQueue = [];
}
g_safeCallQueue[g_safeCallQueue.length] = new SafeCall(fnFunction, args, nSkipArgs);
if (g_safeCallTimer != null)
{
clearTimeout(g_safeCallTimer);
}
g_isSafeCallInvoked = true;
if (isWindowInitialised(window) == false)
{
if (Trace_CLIENTEVENTS) events_trace("Postponing dispatchQueuedSafeCalls by 10ms");
g_safeCallTimer = setTimeout("dispatchQueuedSafeCalls()", 10);
}
else
{
dispatchQueuedSafeCalls();
}
}
var g_isSafeCallInvoked = false;
function resetIsSafeCallInvoked()
{
g_isSafeCallInvoked = false;
}
function isSafeCallInvoked()
{
return g_isSafeCallInvoked;
}
function dispatchQueuedSafeCalls()
{
if (isWindowInitialised(window) == false)
{
if (Trace_CLIENTEVENTS) events_trace("Postponing dispatchQueuedSafeCalls by 10ms");
g_safeCallTimer = setTimeout("dispatchQueuedSafeCalls()", 10);
}
else if (typeof(g_safeCallQueue) != "undefined")
{
// If Mac IE, don't use shift()
if (g_clientInfo.isPlatform(ClientInfo.MACOS) && g_clientInfo.isBrowser(ClientInfo.MSIE))
{
for (var i = 0; i < g_safeCallQueue.length; i++)
{
var fnCall = g_safeCallQueue[i];
fnCall.execute();
}
g_safeCallQueue = [];
}
else
{
while (g_safeCallQueue.length > 0)
{
var fnCall = g_safeCallQueue.shift();
fnCall.execute();
}
}
}
}
function SafeCall(fnFunction, args, nSkipArgs)
{
this.fnFunction = fnFunction;
this.args = args;
this.nSkipArgs = nSkipArgs;
this.execute = function()
{
// SAFARI FIX - If current scope for 'this' is not the same as the
// function's scope, call the function in it's actual scope [ the correct one ]
if(this != arguments.callee._originalScope)
{
if (Trace_CLIENTEVENTS) events_trace("SafeCall has incorrect Scope. Resetting Scope");
return arguments.callee.apply(arguments.callee._originalScope, arguments);
}
var strArgs = "";
for (var iArg = this.nSkipArgs; iArg < this.args.length; iArg++)
{
if (iArg > 1)
{
strArgs += ",";
}
strArgs += "this.args[" + iArg + "]";
}
if (Trace_CLIENTEVENTS)
{
events_trace("... calling " + this.fnFunction.toString());
for (var iArg = this.nSkipArgs; iArg < this.args.length; iArg++)
{
events_trace("... arg " + (iArg - this.nSkipArgs) + ": " + this.args[iArg]);
}
}
if (typeof(this.fnFunction) == "string")
{
eval(this.fnFunction + "(" + strArgs + ");");
}
else
{
eval("this.fnFunction(" + strArgs + ");");
}
}
// 'this' scope may get lost when SafeCall called via setTimeout()
this.execute._originalScope = this;
}
var g_arrXId = new Object();
var g_arrYId = new Object();
function setServerForm(strId, strHiddenXId, strHiddenYId)
{
if (strId == null || strId == "" || (typeof strId == "undefined"))
{
throwError("setForm: strId is a mandatory parameter");
return;
}
if (strHiddenXId == null || strHiddenXId == "" || (typeof strHiddenXId == "undefined"))
{
throwError("setForm: strHiddenXId is a mandatory parameter");
return;
}
if (strHiddenYId == null || strHiddenYId == "" || (typeof strHiddenYId == "undefined"))
{
throwError("setForm: strHiddenYId is a mandatory parameter");
return;
}
g_arrXId[strId] = strHiddenXId;
g_arrYId[strId] = strHiddenYId;
if (Trace_CLIENTEVENTS) events_trace("setServerForm: id = " + strId);
}
var g_serverEventLock = 0;
function acquireEventPostingLock()
{
if (g_serverEventLock++ != 0)
{
return false;
}
return true;
}
function releaseEventPostingLock()
{
g_serverEventLock = 0;
}
function isEventPostingLocked()
{
return (g_serverEventLock > 0);
}
function postServerEvent(strFormId, strSrcCtrl, strHandlerCtrl, strHandlerMethod, strEventArgName, strEventArgValue)
{
if (strHandlerMethod == null || strHandlerMethod == "" || (typeof strHandlerMethod == "undefined"))
{
throwError("postFormEvent: strHandlerMethod is a mandatory parameter");
return;
}
if (acquireEventPostingLock() == false)
{
return;
}
if (strFormId == null)
{
// If form doesn't exist, Safari returns NULL, other browsers return type 'undefined'. This check covers both.
if (document.forms && document.forms[0])
{
strFormId = document.forms[0].name;
}
}
var formElement = null;
var preSubmitHandler = null;
if (strFormId != null)
{
try
{
formElement = eval("document." + strFormId);
preSubmitHandler = eval(strFormId + "_preSubmitForm");
}
catch(e)
{
}
}
var functionArgs = arguments;
if (formElement && preSubmitHandler)
{
if (strHandlerCtrl == null || strHandlerCtrl == "" || (typeof strHandlerCtrl == "undefined"))
{
strHandlerCtrl = strFormId;
}
formElement.__dmfAction.value = strFormId + "_" + strHandlerMethod;
formElement.__dmfHandler.value = strFormId + "_" + strHandlerCtrl;
if (typeof(strSrcCtrl) != "undefined" && strSrcCtrl != null && strSrcCtrl != "")
{
formElement.__dmfControl.value = escapeUnicodeString(strFormId + "_" + strSrcCtrl);
}
else
{
formElement.__dmfControl.value = "";
}
var strHandlerArgs = "";
var EVENTARG_OFFSET = 4;
for (var iArg = EVENTARG_OFFSET; iArg < functionArgs.length; iArg+=2)
{
var strEventName = functionArgs[iArg];
if (strEventName != null)
{
var strEventValue = functionArgs[iArg+1];
if (typeof(strEventValue) != "undefined" && strEventValue != null)
{
if (strHandlerArgs != "")
{
strHandlerArgs += "&";
}
strHandlerArgs += escapeUnicodeString(strEventName) + "=" + escapeUnicodeString(strEventValue);
}
}
}
if (typeof(getTopLevelWnd().shiftKeyPressed) != "undefined" && getTopLevelWnd().shiftKeyPressed)
{
if (strHandlerArgs != "")
{
strHandlerArgs += "&";
}
strHandlerArgs += "shiftKeyPressed=true";
}
if (typeof(getTopLevelWnd().ctrlKeyPressed) != "undefined" && getTopLevelWnd().ctrlKeyPressed)
{
if (strHandlerArgs != "")
{
strHandlerArgs += "&";
}
strHandlerArgs += "ctrlKeyPressed=true";
}
if (typeof(getTopLevelWnd().altKeyPressed) != "undefined" && getTopLevelWnd().altKeyPressed)
{
if (strHandlerArgs != "")
{
strHandlerArgs += "&";
}
strHandlerArgs += "altKeyPressed=true";
}
formElement.__dmfHandlerArgs.value = strFormId + "_" + strHandlerArgs;
if (Trace_CLIENTEVENTS)
{
events_trace("posting form event");
events_trace("... action = " + formElement.__dmfAction.value);
events_trace("... handler = " + formElement.__dmfHandler.value);
events_trace("... handlerArgs = " + formElement.__dmfHandlerArgs.value);
events_trace("... source control = " + formElement.__dmfControl.value);
}
storeScrollPosition(strFormId, g_arrXId[strFormId], g_arrYId[strFormId]);
var strControlId = null;
if ( strSrcCtrl != null )
{
var elements = document.getElementsByName(strSrcCtrl);
if ( elements && elements.length > 0 )
{
strControlId = elements[0].id;
}
}
firePreSubmitClientEvent(postServerEvent.GENERIC_PRE_SUBMIT);
preSubmitHandler(strFormId, strControlId);
var popupEnabled = (formElement.__dmfModalPopupEnabled.value == "true");
var openPopup = popupEnabled && (formElement.__dmfUseModalPopup.value == "true");
formElement.__dmfUseModalPopup.value = openPopup;
if (openPopup)
{
var depth = formElement.__dmfDepth.value;
var popupWindowName = getPopupWindowName(window, depth);
formElement.__dmfTargetWindowName.value = popupWindowName;
var size = formElement.__dmfModalPopupWindowSize.value;
var strUrl = g_virtualRoot + "/wdk/popupContent.htm";
openModalPopupWindow(window, strFormId, size, popupWindowName, strUrl);
}
else
{
if (window.getWindowOpener() != null)
{
formElement.target = window.name;
}
if(window.isModalPopup())
{
window.document.body.style.cursor = "wait";
}
formElement.submit();
}
}
else
{
if(Trace_CLIENTEVENTS)
{
events_trace("postServerEvent for " + ((strFormId != null) ? strFormId : "forms[0]")
+ " in window '" + window.name + "', Form not found. Delaying Call by "
+ postServerEvent.DELAY_PERIOD + "ms");
}
if ( postServerEvent.m_delayCount++ < postServerEvent.MAX_DELAY_COUNT )
{
// Haven't reached the max delay attempt limit, so try delaying [again]
var delayed = _postServerEventClosure.apply(this, functionArgs);
return setTimeout(delayed, postServerEvent.DELAY_PERIOD);
}
else
{
g_serverEventLock = 0;
postServerEvent.m_delayCount = 0;
if (Trace_CLIENTEVENTS)
{
events_trace("postServerEvent for " + ((strFormId != null) ? strFormId : "forms[0]")
+ " in window '" + window.name + "', ABORTING. Form not found after "
+ postServerEvent.MAX_DELAY_COUNT * postServerEvent.DELAY_PERIOD + "ms");
}
}
}
}
function postServerEvent2(strFormId, prefs, strSrcCtrl, strHandlerCtrl, strHandlerMethod, strEventArgName, strEventArgValue)
{
if (typeof prefs == "undefined" || prefs == null)
{
// Some browsers don't like messing with 'arguments', so make a copy.
var args = new Array(arguments.length - 1);
args[0] = arguments[0];
for (var i = 1; i < arguments.length - 1; i++)
{
args[i] = arguments[i+1];
}
postServerEvent.apply(this, args);
}
else
{
postInlineServerEvent.apply(this, arguments);
}
}
postServerEvent.m_delayCount = 0;
postServerEvent.MAX_DELAY_COUNT = 600;
postServerEvent.DELAY_PERIOD = 100;
postServerEvent.GENERIC_PRE_SUBMIT = "genericPreSubmit";
function _postServerEventClosure()
{
var functionArgs = arguments;
return function()
{
g_serverEventLock = 0;
postServerEvent.apply(this, functionArgs);
};
}
function setKeys(event)
{
if (event != null)
{
getTopLevelWnd().shiftKeyPressed = event.shiftKey;
getTopLevelWnd().ctrlKeyPressed = event.ctrlKey;
getTopLevelWnd().altKeyPressed = event.altKey;
}
setCurrentEventKeyInfo(event);
return false;
}
function setCurrentEventKeyInfo(event)
{
if (event != null)
{
g_current_event_keycode = event.which;
if (!event.which)
{
g_current_event_keycode = event.keyCode;
}
g_current_event_keycode = g_current_event_keycode + "";
g_current_event_name = event.type;
}
else
{
g_current_event_keycode = null;
g_current_event_name = null;
}
}
function getCurrentEventKeyCode() {
return g_current_event_keycode;
}
function throwError(strErrMsg)
{
events_trace("Exception: " + strErrMsg);
alert("events.js: Exception: " + strErrMsg);
}
function events_trace(strMsg)
{
Trace_println("events.js: " + strMsg);
}
var g_arrDecimalToHex = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
function escapeUnicodeString(str)
{
var strescaped;
if (g_clientInfo.isBrowser(ClientInfo.NETSCAPE) == false)
{
strescaped = escape(str);
}
else
{
strescaped = "";
for(var idxch=0; idxch<str.length; idxch++)
{
var ch = str.charCodeAt(idxch);
var highbyte = ch & 0xFF00;
if (highbyte == 0)
{
var highbit = ch & 0xFF80;
if (highbit == 0)
{
strescaped += escape(str.substring(idxch, idxch+1));
}
else
{
strescaped +="%";
for(var idxdigit=0; idxdigit < 2; idxdigit++)
{
var decimaldigit = (ch >>> (4 - idxdigit * 4)) & 0x0F ;
strescaped += g_arrDecimalToHex[decimaldigit];
}
}
}
else
{
strescaped +="%u";
for(var idxdigit=0; idxdigit < 4; idxdigit++)
{
var decimaldigit = (ch >>> (12 - idxdigit * 4)) & 0x0F ;
strescaped += g_arrDecimalToHex[decimaldigit];
}
}
}
}
return strescaped;
}
if (getTopLevelWnd() == this)
{
function onEvalJavaScript(strScript)
{
if (strScript != null)
{
eval(strScript);
}
}
function wdkGenericPreSubmit()
{
}
registerClientEventHandler(null, "evalJavaScript", onEvalJavaScript);
registerPreSubmitClientEventHandler(null, postServerEvent.GENERIC_PRE_SUBMIT, wdkGenericPreSubmit);
}
}
function postAJAXEvent(ajaxURL, async)
{
url = addBrowserIdToURL(ajaxURL);
var isNative = false;
var msVers = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
var req = null;
if (typeof window.XMLHttpRequest != 'undefined')
{
isNative = true;
req = new XMLHttpRequest();
}
else
{
for (var i = 0; i < msVers.length; i++)
{
try
{
req = new ActiveXObject(msVers[i]);
break;
}
catch(e)
{
req = null;
}
}
}
req.open("POST", url, async);
req.send((isNative) ? "" : null);
}

