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 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 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 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_safeCallTimer = setTimeout("dispatchQueuedSafeCalls()", 10);
}
function dispatchQueuedSafeCalls()
{
if (isWindowInitialised(window) == false)
{
g_safeCallTimer = setTimeout("dispatchQueuedSafeCalls()", 250);
}
//shift() doesn't work for mac ie  //dam
else if (typeof(g_safeCallQueue) != "undefined" && !isMacIE)
{
while (g_safeCallQueue.length > 0)
{
var fnCall = g_safeCallQueue.shift();
var strArgs = "";
for (var iArg = fnCall.nSkipArgs; iArg < fnCall.args.length; iArg++)
{
if (iArg > 1)
{
strArgs += ",";
}
strArgs += "fnCall.args[" + iArg + "]";
}
if (Trace_CLIENTEVENTS)
{
events_trace("... calling " + fnCall.fnFunction.toString());
for (var iArg = fnCall.nSkipArgs; iArg < fnCall.args.length; iArg++)
{
events_trace("... arg " + (iArg - fnCall.nSkipArgs) + ": " + fnCall.args[iArg]);
}
}
if (typeof(fnCall.fnFunction) == "string")
{
eval(fnCall.fnFunction + "(" + strArgs + ");");
}
else
{
eval("fnCall.fnFunction(" + strArgs + ");");
}
}
}
else if (typeof(g_safeCallQueue) != "undefined")
{
for (var i = 0; i < g_safeCallQueue.length; i++)
{
var fnCall = g_safeCallQueue[i];
var strArgs = "";
for (var iArg = fnCall.nSkipArgs; iArg < fnCall.args.length; iArg++)
{
if (iArg > 1)
{
strArgs += ",";
}
strArgs += "fnCall.args[" + iArg + "]";
}
if (Trace_CLIENTEVENTS)
{
events_trace("... calling " + fnCall.fnFunction.toString());
for (var iArg = fnCall.nSkipArgs; iArg < fnCall.args.length; iArg++)
{
events_trace("... arg " + (iArg - fnCall.nSkipArgs) + ": " + fnCall.args[iArg]);
}
}
if (typeof(fnCall.fnFunction) == "string")
{
eval(fnCall.fnFunction + "(" + strArgs + ");");
}
else
{
eval("fnCall.fnFunction(" + strArgs + ");")
}
}
g_safeCallQueue = [];
}
}
function SafeCall(fnFunction, args, nSkipArgs)
{
this.fnFunction = fnFunction;
this.args = args;
this.nSkipArgs = nSkipArgs;
}
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 postServerEvent(strFormId, strSrcCtrl, strHandlerCtrl, strHandlerMethod, strEventArgName, strEventArgValue)
{
if (g_serverEventLock++ != 0)
{
return;
}
if (strFormId == null)
{
if ( typeof document.forms != "undefined" &&
typeof document.forms[0] != "undefined" )
{
strFormId = document.forms[0].name;
}
}
if (strFormId != null)
{
if (strHandlerMethod == null || strHandlerMethod == "" || (typeof strHandlerMethod == "undefined"))
{
throwError("postFormEvent: strHandlerMethod is a mandatory parameter");
return;
}
if (strHandlerCtrl == null || strHandlerCtrl == "" || (typeof strHandlerCtrl == "undefined"))
{
strHandlerCtrl = strFormId;
}
var formElement = eval("document." + strFormId);
formElement.__dmfAction.value = strHandlerMethod;
formElement.__dmfHandler.value = strHandlerCtrl;
if (typeof(strSrcCtrl) != "undefined" && strSrcCtrl != null && strSrcCtrl != "")
{
formElement.__dmfControl.value = escapeUnicodeString(strSrcCtrl);
}
var strHandlerArgs = "";
var EVENTARG_OFFSET = 4;
var functionArgs = postServerEvent.arguments;
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 = 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]);
formElement.submit();
}
}
function setKeys(event)
{
getTopLevelWnd().shiftKeyPressed = event.shiftKey;
getTopLevelWnd().ctrlKeyPressed = event.ctrlKey;
getTopLevelWnd().altKeyPressed = event.altKey;
setCurrentEventKeyInfo(event);
return false;
}
function setCurrentEventKeyInfo(event)
{
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;
}
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);
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;
break;
}
}
}
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;
}
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 (navigator.appName != "Netscape")
{
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);
}
}
registerClientEventHandler(null, "evalJavaScript", onEvalJavaScript);
}
}
