Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 30

function EchoAsyncMonitor() { } EchoAsyncMonitor.timeInterval = 500; EchoAsyncMonitor.pollServiceRequest = "?serviceId=Echo.AsyncMonitor"; EchoAsyncMonitor.timeoutId = null; EchoAsyncMonitor.connect = function() { var conn = new EchoHttpConnection(EchoClientEngine.

baseServerUri + EchoAsyncMoni tor.pollServiceRequest, "GET"); conn.responseHandler = EchoAsyncMonitor.responseHandler; conn.invalidResponseHandler = EchoAsyncMonitor.invalidResponseHandler; conn.connect(); }; EchoAsyncMonitor.invalidResponseHandler = function() { alert("Invalid response from server to asynchronous polling connection."); }; EchoAsyncMonitor.start = function() { if (!EchoServerTransaction.active) { EchoAsyncMonitor.timeoutId = window.setTimeout("EchoAsyncMonitor.connect();", EchoAsyncMonitor.timeInterval); } }; EchoAsyncMonitor.stop = function() { if (EchoAsyncMonitor.timeoutId) { window.clearTimeout(EchoAsyncMonitor.timeoutId); EchoAsyncMonitor.timeoutId = null; } }; EchoAsyncMonitor.responseHandler = function(conn) { if ("true" == conn.getResponseXml().documentElement.getAttribute("request-sync") ) { EchoServerTransaction.connect(); } else { EchoAsyncMonitor.start(); } }; function EchoClientAnalyzer() { } EchoClientAnalyzer.analyze = function() { var messagePartElement = EchoClientMessage.getMessagePart("EchoClientAnalyzer"); EchoClientAnalyzer.setTextProperty(messagePartElement, "navigatorAppName", windo w.navigator.appName); EchoClientAnalyzer.setTextProperty(messagePartElement, "navigatorAppVersion", wi ndow.navigator.appVersion); EchoClientAnalyzer.setTextProperty(messagePartElement, "navigatorAppCodeName", w indow.navigator.appCodeName); EchoClientAnalyzer.setBooleanProperty(messagePartElement, "navigatorCookieEnable d", window.navigator.cookieEnabled); EchoClientAnalyzer.setBooleanProperty(messagePartElement, "navigatorJavaEnabled" , window.navigator.javaEnabled()); EchoClientAnalyzer.setTextProperty(messagePartElement, "navigatorLanguage", window.navigator.language ? window.navigator.language : window.navigator.userLan guage); EchoClientAnalyzer.setTextProperty(messagePartElement, "navigatorPlatform", wind ow.navigator.platform); EchoClientAnalyzer.setTextProperty(messagePartElement, "navigatorUserAgent", win dow.navigator.userAgent); if (window.screen) { EchoClientAnalyzer.setIntegerProperty(messagePartElement, "screenWidth", window. screen.width); EchoClientAnalyzer.setIntegerProperty(messagePartElement, "screenHeight", window .screen.height);

EchoClientAnalyzer.setIntegerProperty(messagePartElement, "screenColorDepth", wi ndow.screen.colorDepth); } EchoClientAnalyzer.setIntegerProperty(messagePartElement, "utcOffset", 0 - parse Int((new Date()).getTimezoneOffset())); }; EchoClientAnalyzer.setBooleanProperty = function(messagePartElement, propertyNam e, propertyValue) { propertyElement = messagePartElement.ownerDocument.createElement("property"); propertyElement.setAttribute("type", "boolean"); propertyElement.setAttribute("name", propertyName); propertyElement.setAttribute("value", propertyValue ? "true" : "false"); messagePartElement.appendChild(propertyElement); }; EchoClientAnalyzer.setIntegerProperty = function(messagePartElement, propertyNam e, propertyValue) { var intValue = parseInt(propertyValue); if (isNaN(intValue)) { return; } propertyElement = messagePartElement.ownerDocument.createElement("property"); propertyElement.setAttribute("type", "integer"); propertyElement.setAttribute("name", propertyName); propertyElement.setAttribute("value", intValue); messagePartElement.appendChild(propertyElement); }; EchoClientAnalyzer.setTextProperty = function(messagePartElement, propertyName, propertyValue) { propertyElement = messagePartElement.ownerDocument.createElement("property"); propertyElement.setAttribute("type", "text"); propertyElement.setAttribute("name", propertyName); propertyElement.setAttribute("value", propertyValue); messagePartElement.appendChild(propertyElement); }; function EchoClientConfiguration() { } EchoClientConfiguration.MessageProcessor = function() { }; EchoClientConfiguration.MessageProcessor.process = function(messagePartElement) { for (var i = 0; i < messagePartElement.childNodes.length; ++i) { if (messagePartElement.childNodes[i].nodeType == 1) { switch (messagePartElement.childNodes[i].tagName) { case "store": EchoClientConfiguration.MessageProcessor.processStore(messagePartElement.childNo des[i]); break; } } } }; EchoClientConfiguration.MessageProcessor.processStore = function(storeElement) { var propertyElements = storeElement.getElementsByTagName("property"); for (var i = 0; i < propertyElements.length; ++i) { var name = propertyElements[i].getAttribute("name"); var value = propertyElements[i].getAttribute("value"); EchoClientConfiguration.propertyMap[name] = value; } }; EchoClientConfiguration.propertyMap = new Array(); EchoClientConfiguration.propertyMap["defaultOutOfSyncErrorMessage"] = "A synchronization error has occurred. Click \"Ok\" to re-synchronize.";

EchoClientConfiguration.propertyMap["defaultServerErrorMessage"] = "An application error has occurred. Your session has been reset."; EchoClientConfiguration.propertyMap["defaultSessionExpirationMessage"] = "Your session has been reset due to inactivity."; function EchoClientEngine() { } EchoClientEngine.baseServerUri = null; EchoClientEngine.debugEnabled = true; EchoClientEngine.loadStatus = 2; EchoClientEngine.transactionId = ""; EchoClientEngine.configure = function() { if (EchoClientProperties.get("quirkCssPositioningOneSideOnly")) { EchoVirtualPosition.init(); document.documentElement.style.overflow = "hidden"; } }; EchoClientEngine.dispose = function() { EchoEventProcessor.dispose(); EchoDomPropertyStore.disposeAll(); }; EchoClientEngine.init = function(baseServerUri, debugEnabled) { EchoClientEngine.baseServerUri = baseServerUri; EchoClientEngine.debugEnabled = debugEnabled; if (EchoClientEngine.debugEnabled && window.location.search && window.location.search.toLowerCase().indexOf("debug") != -1) { EchoDebugManager.launch(); } EchoClientMessage.setInitialize(); EchoClientAnalyzer.analyze(); EchoServerTransaction.connect(); EchoDomUtil.addEventListener(window, "unload", EchoClientEngine.dispose); EchoClientEngine.incrementLoadStatus(); }; EchoClientEngine.processClientError = function(message, ex) { var errorText; if (ex instanceof Error) { errorText = "Error Name: " + ex.name + "\n" + "Error Message: " + ex.message; } else { errorText = "Error: " + ex; } alert("The following client application error has occurred:\n\n" + "---------------------------------\n" + message + "\n\n" + errorText + "\n" + "---------------------------------\n\n" + "Please contact your server administrator.\n\n"); }; EchoClientEngine.processSessionExpiration = function() { var message = EchoClientConfiguration.propertyMap["sessionExpirationMessage"]; var uri = EchoClientConfiguration.propertyMap["sessionExpirationUri"]; if (message || uri) { if (message) { alert(message); } if (uri) { window.location.href = uri; } else { window.location.reload(); }

} else { message = EchoClientConfiguration.propertyMap["defaultSessionExpirationMessage"] ; alert(message); window.location.reload(); } }; EchoClientEngine.processServerError = function() { var message = EchoClientConfiguration.propertyMap["serverErrorMessage"]; var uri = EchoClientConfiguration.propertyMap["serverErrorUri"]; if (message || uri) { if (message) { alert(message); } if (uri) { window.location.href = uri; } else { if (EchoServerMessage.transactionCount > 0) { window.location.reload(); } } } else { message = EchoClientConfiguration.propertyMap["defaultServerErrorMessage"]; alert(message); if (EchoServerMessage.transactionCount > 0) { window.location.reload(); } } }; EchoClientEngine.disableLoadStatus = function() { if (EchoClientEngine.loadStatus != -1) { EchoClientEngine.loadStatus = -1; EchoClientEngine.renderLoadStatus(); } }; EchoClientEngine.incrementLoadStatus = function() { if (EchoClientEngine.loadStatus != -1) { ++EchoClientEngine.loadStatus; EchoClientEngine.renderLoadStatus(); } }; EchoClientEngine.renderLoadStatus = function() { var loadStatusDivElement = document.getElementById("loadstatus"); if (!loadStatusDivElement) { return; } if (EchoClientEngine.loadStatus == -1) { loadStatusDivElement.parentNode.removeChild(loadStatusDivElement); } else { var text = ""; for (var i = 0; i < EchoClientEngine.loadStatus; ++i) { text += "|"; } loadStatusDivElement.removeChild(loadStatusDivElement.firstChild); loadStatusDivElement.appendChild(document.createTextNode(text)); } }; EchoClientEngine.updateTransactionId = function(newValue) { EchoClientEngine.transactionId = newValue; EchoClientMessage.messageDocument.documentElement.setAttribute("trans-id", EchoC

lientEngine.transactionId); }; EchoClientEngine.verifyInput = function(element, allowInputDuringTransaction) { if (!allowInputDuringTransaction && EchoServerTransaction.active) { return false; } if (!EchoModalManager.isElementInModalContext(element)) { return false; } if (EchoDomPropertyStore.getPropertyValue(element, "EchoClientEngine.inputDisabl ed")) { return false; } return true; }; function EchoClientMessage() { } EchoClientMessage.messageDocument = null; EchoClientMessage.createPropertyElement = function(componentId, propertyName) { var messagePartElement = EchoClientMessage.getMessagePart("EchoPropertyUpdate"); var propertyElements = messagePartElement.getElementsByTagName("property"); var propertyElement = null; for (var i = 0; i < propertyElements.length; ++i) { if (componentId == propertyElements[i].getAttribute("component-id") && propertyName == propertyElements[i].getAttribute("name")) { propertyElement = propertyElements[i]; break; } } if (!propertyElement) { propertyElement = messagePartElement.ownerDocument.createElement("property"); propertyElement.setAttribute("component-id", componentId); propertyElement.setAttribute("name", propertyName); messagePartElement.appendChild(propertyElement); } return propertyElement; }; EchoClientMessage.getMessagePart = function(processor) { var messagePartElements = EchoClientMessage.messageDocument.getElementsByTagName ("message-part"); for (var i = 0; i < messagePartElements.length; ++i) { if (messagePartElements[i].getAttribute("processor") == processor) { return messagePartElements[i]; } } var messagePartElement = EchoClientMessage.messageDocument.createElement("messag e-part"); messagePartElement.setAttribute("processor", processor); EchoClientMessage.messageDocument.documentElement.appendChild(messagePartElement ); return messagePartElement; }; EchoClientMessage.getPropertyValue = function(componentId, propertyName) { var messagePartElement = EchoClientMessage.getMessagePart("EchoPropertyUpdate"); var propertyElements = messagePartElement.getElementsByTagName("property"); for (var i = 0; i < propertyElements.length; ++i) { if (componentId == propertyElements[i].getAttribute("component-id") && propertyName == propertyElements[i].getAttribute("name")) { return propertyElements[i].getAttribute("value"); } }

return null; }; EchoClientMessage.removePropertyElement = function(componentId, propertyName) { var messagePartElement = EchoClientMessage.getMessagePart("EchoPropertyUpdate"); var propertyElements = messagePartElement.getElementsByTagName("property"); var propertyElement = null; for (var i = 0; i < propertyElements.length; ++i) { if (componentId == propertyElements[i].getAttribute("component-id") && propertyName == propertyElements[i].getAttribute("name")) { propertyElement = propertyElements[i]; break; } } if (propertyElement) { messagePartElement.removeChild(propertyElement); } }; EchoClientMessage.reset = function() { EchoClientMessage.messageDocument = null; EchoClientMessage.messageDocument = EchoDomUtil.createDocument("http://www.nextapp.com/products/echo2/climsg", "cl ient-message"); }; EchoClientMessage.setActionValue = function(componentId, actionName, actionValue ) { var messagePartElement = EchoClientMessage.getMessagePart("EchoAction"); var actionElement = messagePartElement.ownerDocument.createElement("action"); actionElement.setAttribute("component-id", componentId); actionElement.setAttribute("name", actionName); if (actionValue !== undefined) { actionElement.setAttribute("value", actionValue); } messagePartElement.appendChild(actionElement); EchoDebugManager.updateClientMessage(); return actionElement; }; EchoClientMessage.setPropertyValue = function(componentId, propertyName, newValu e) { var propertyElement = EchoClientMessage.createPropertyElement(componentId, prope rtyName); propertyElement.setAttribute("value", newValue); EchoDebugManager.updateClientMessage(); }; EchoClientMessage.setInitialize = function() { EchoClientMessage.messageDocument.documentElement.setAttribute("type", "initiali ze"); }; function EchoClientProperties() { } EchoClientProperties.propertyMap = new Array(); EchoClientProperties.MessageProcessor = function() { }; EchoClientProperties.MessageProcessor.process = function(messagePartElement) { for (var i = 0; i < messagePartElement.childNodes.length; ++i) { if (messagePartElement.childNodes[i].nodeType == 1) { switch (messagePartElement.childNodes[i].tagName) { case "store": EchoClientProperties.MessageProcessor.processStore(messagePartElement.childNodes [i]); break; } }

} }; EchoClientProperties.MessageProcessor.processStore = function(storeElement) { var propertyElements = storeElement.getElementsByTagName("property"); for (var i = 0; i < propertyElements.length; ++i) { var name = propertyElements[i].getAttribute("name"); var value = propertyElements[i].getAttribute("value"); if (value == "true") { value = true; } else if (value == "false") { value = false; } EchoClientProperties.propertyMap[name] = value; } EchoClientEngine.configure(); }; EchoClientProperties.get = function(name) { return EchoClientProperties.propertyMap[name]; }; EchoCollectionsMap = function() { this.removeCount = 0; this.garbageCollectionInterval = 250; this.associations = new Array(); }; EchoCollectionsMap.prototype.get = function(key) { return this.associations[key]; }; EchoCollectionsMap.prototype.put = function(key, value) { if (value === null) { this.remove(key); return; } this.associations[key] = value; }; EchoCollectionsMap.prototype.garbageCollect = function() { this.removeCount = 0; var newAssociations = new Array(); var i = 0; for (var key in this.associations) { newAssociations[key] = this.associations[key]; ++i; } this.associations = newAssociations; }; EchoCollectionsMap.prototype.remove = function(key) { delete this.associations[key]; ++this.removeCount; if (this.removeCount >= this.garbageCollectionInterval) { this.garbageCollect(); } }; function EchoCssUtil() { } EchoCssUtil.addRule = function(selectorText, style) { var ss = document.styleSheets[0]; if (ss.insertRule) { ss.insertRule(selectorText + " {" + style + "}", ss.cssRules.length); } else if (ss.addRule) { ss.addRule(selectorText, style); } };

EchoCssUtil.applyStyle = function(element, cssText) { var styleProperties = cssText.split(";"); var styleData = new Array(); for (var i = 0; i < styleProperties.length; ++i) { var separatorIndex = styleProperties[i].indexOf(":"); if (separatorIndex == -1) { continue; } var attributeName = styleProperties[i].substring(0, separatorIndex); var propertyName = EchoDomUtil.cssAttributeNameToPropertyName(attributeName); var propertyValue = styleProperties[i].substring(separatorIndex + 1); element.style[propertyName] = propertyValue; } }; EchoCssUtil.applyTemporaryStyle = function(element, cssStyleText) { if (!EchoDomPropertyStore.getPropertyValue(element, "EchoCssUtil.originalStyle") ) { if (EchoDomUtil.getCssText(element)) { EchoDomPropertyStore.setPropertyValue(element, "EchoCssUtil.originalStyle", Echo DomUtil.getCssText(element)); } else { EchoDomPropertyStore.setPropertyValue(element, "EchoCssUtil.originalStyle", "-") ; } } EchoCssUtil.applyStyle(element, cssStyleText); }; EchoCssUtil.removeRule = function(selectorText) { selectorText = selectorText.toLowerCase(); var ss = document.styleSheets[0]; var rules = ss.cssRules ? ss.cssRules : ss.rules; for (var i = 0; i < rules.length; ++i) { if (rules[i].type == 1 && rules[i].selectorText.toLowerCase() == selectorText) { if (ss.deleteRule) { ss.deleteRule(i); break; } else if (ss.removeRule) { ss.deleteRule(i); break; } else { alert("rem fail"); } } } }; EchoCssUtil.restoreOriginalStyle = function(element) { var originalStyle = EchoDomPropertyStore.getPropertyValue(element, "EchoCssUtil. originalStyle"); if (!originalStyle) { return; } EchoDomUtil.setCssText(element, originalStyle == "-" ? "" : originalStyle); EchoDomPropertyStore.setPropertyValue(element, "EchoCssUtil.originalStyle", null ); }; EchoCssUtil.Bounds = function(element) { this.left = 0; this.top = 0; this.width = element.offsetWidth; this.height = element.offsetHeight;

while (element != null) { if (element.scrollTop) { this.top -= element.scrollTop; } if (element.scrollLeft) { this.left -= element.scrollLeft; } this.left += element.offsetLeft; this.top += element.offsetTop; element = element.offsetParent; } }; EchoCssUtil.Bounds.prototype.toString = function() { return "(" + this.left + ", " + this.top + ") [" + this.width + "x" + this.heigh t + "]"; }; function EchoDebugManager() { } EchoDebugManager.debugWindow = null; EchoDebugManager.consoleWrite = function(message) { if (!EchoDebugManager.debugWindow || EchoDebugManager.debugWindow.closed) { return; } EchoDebugManager.debugWindow.EchoDebug.Console.write(message); }; EchoDebugManager.launch = function() { EchoDebugManager.debugWindow = window.open(EchoClientEngine.baseServerUri + "?se rviceId=Echo.Debug", "EchoDebug", "width=400,height=650,resizable=yes", true); }; EchoDebugManager.updateClientMessage = function() { if (!EchoDebugManager.debugWindow || EchoDebugManager.debugWindow.closed) { return; } EchoDebugManager.debugWindow.EchoDebug.Sync.displayClientMessage(EchoClientMessa ge.messageDocument); }; EchoDebugManager.updateServerMessage = function() { if (!EchoDebugManager.debugWindow || EchoDebugManager.debugWindow.closed) { return; } EchoDebugManager.debugWindow.EchoDebug.Sync.displayServerMessage(EchoServerMessa ge.messageDocument); }; function EchoDomPropertyStore() { } EchoDomPropertyStore.MessageProcessor = function() { }; EchoDomPropertyStore.MessageProcessor.process = function(messagePartElement) { for (var i = 0; i < messagePartElement.childNodes.length; ++i) { if (messagePartElement.childNodes[i].nodeType == 1) { switch (messagePartElement.childNodes[i].tagName) { case "store-property": EchoDomPropertyStore.MessageProcessor.processStoreProperty(messagePartElement.ch ildNodes[i]); break; } } } }; EchoDomPropertyStore.MessageProcessor.processStoreProperty = function(storePrope rtyElement) { var propertyName = storePropertyElement.getAttribute("name");

var propertyValue = storePropertyElement.getAttribute("value"); var items = storePropertyElement.getElementsByTagName("item"); for (var i = 0; i < items.length; ++i) { var elementId = items[i].getAttribute("eid"); EchoDomPropertyStore.setPropertyValue(elementId, propertyName, propertyValue); } }; EchoDomPropertyStore.dispose = function(element) { if (typeof element == "string") { element = document.getElementById(element); } if (!element) { throw new Error("Element not found."); } if (element.echoDomPropertyStore) { for (var elementProperty in element.echoDomPropertyStore) { delete element.echoDomPropertyStore[elementProperty]; } } element.echoDomPropertyStore = undefined; }; EchoDomPropertyStore.disposeAll = function() { EchoDomPropertyStore.disposeAllRecurse(document.documentElement); }; EchoDomPropertyStore.disposeAllRecurse = function(element) { if (element.echoDomPropertyStore) { for (var elementProperty in element.echoDomPropertyStore) { delete element.echoDomPropertyStore[elementProperty]; } } element.echoDomPropertyStore = undefined; for (var childElement = element.firstChild; childElement; childElement = childEl ement.nextSibling) { if (childElement.nodeType == 1) { EchoDomPropertyStore.disposeAllRecurse(childElement); } } }; EchoDomPropertyStore.getPropertyValue = function(element, propertyName) { if (typeof element == "string") { element = document.getElementById(element); } if (!element) { return null; } if (element.echoDomPropertyStore) { return element.echoDomPropertyStore[propertyName]; } else { return null; } }; EchoDomPropertyStore.setPropertyValue = function(element, propertyName, property Value) { if (typeof element == "string") { element = document.getElementById(element); } if (!element) { return; } if (!element.echoDomPropertyStore) {

element.echoDomPropertyStore = new Array(); } element.echoDomPropertyStore[propertyName] = propertyValue; }; function EchoDomUpdate() { } EchoDomUpdate.MessageProcessor = function() { }; EchoDomUpdate.MessageProcessor.process = function(messagePartElement) { for (var i = 0; i < messagePartElement.childNodes.length; ++i) { if (messagePartElement.childNodes[i].nodeType == 1) { switch (messagePartElement.childNodes[i].tagName) { case "dom-add": this.processAdd(messagePartElement.childNodes[i]); break; case "dom-remove": this.processRemove(messagePartElement.childNodes[i]); break; case "dom-remove-children": this.processRemoveChildren(messagePartElement.childNodes[i]); break; case "attribute-update": this.processAttributeUpdate(messagePartElement.childNodes[i]); break; case "style-update": this.processStyleUpdate(messagePartElement.childNodes[i]); break; case "stylesheet-add-rule": this.processStyleSheetAddRule(messagePartElement.childNodes[i]); break; case "stylesheet-remove-rule": this.processStyleSheetRemoveRule(messagePartElement.childNodes[i]); break; } } } }; EchoDomUpdate.MessageProcessor.processAdd = function(domAddElement) { var contentElements = domAddElement.getElementsByTagName("content"); for (var i = 0; i < contentElements.length; ++i) { var parentId = contentElements[i].getAttribute("parent-id"); var siblingId = contentElements[i].getAttribute("sibling-id"); var parentElement = document.getElementById(parentId); var siblingElement = null; if (siblingId) { siblingElement = document.getElementById(siblingId); if (!siblingElement) { throw new EchoDomUpdate.TargetNotFoundException("Add", "sibling", siblingId); } } if (!parentElement) { throw new EchoDomUpdate.TargetNotFoundException("Add", "parent", parentId); } for (var j = 0; j < contentElements[i].childNodes.length; ++j) { var importedNode = EchoDomUtil.importNode(parentElement.ownerDocument, contentEl ements[i].childNodes[j], true); var newElementId = importedNode.getAttribute("id"); if (!newElementId) { throw "Cannot add element without id attribute."; } if (document.getElementById(newElementId)) { throw "Element " + newElementId + " already exists in document; cannot add.";

} if (siblingElement) { parentElement.insertBefore(importedNode, siblingElement); } else { parentElement.appendChild(importedNode); } } } }; EchoDomUpdate.MessageProcessor.processAttributeUpdate = function(attributeUpdate Element) { var targetId = attributeUpdateElement.getAttribute("target-id"); var targetElement = document.getElementById(targetId); if (!targetElement) { throw new EchoDomUpdate.TargetNotFoundException("AttributeUpdate", "target", tar getId); } targetElement[attributeUpdateElement.getAttribute("name")] = attributeUpdateElem ent.getAttribute("value"); }; EchoDomUpdate.MessageProcessor.processRemove = function(domRemoveElement) { var targetId = domRemoveElement.getAttribute("target-id"); var targetElement = document.getElementById(targetId); if (!targetElement) { return; } targetElement.parentNode.removeChild(targetElement); }; EchoDomUpdate.MessageProcessor.processRemoveChildren = function(domRemoveElement ) { var targetId = domRemoveElement.getAttribute("target-id"); var targetElement = document.getElementById(targetId); if (!targetElement) { return; } var childNode = targetElement.firstChild; while (childNode) { var nextChildNode = childNode.nextSibling; targetElement.removeChild(childNode); childNode = nextChildNode; } }; EchoDomUpdate.MessageProcessor.processStyleSheetAddRule = function(addRuleElemen t) { var selectorText = addRuleElement.getAttribute("selector"); var style = addRuleElement.getAttribute("style"); EchoCssUtil.addRule(selectorText, style); }; EchoDomUpdate.MessageProcessor.processStyleSheetRemoveRule = function(removeRule Element) { var selectorText = removeRuleElement.getAttribute("selector"); EchoCssUtil.removeRule(selectorText); }; EchoDomUpdate.MessageProcessor.processStyleUpdate = function(styleUpdateElement) { var targetId = styleUpdateElement.getAttribute("target-id"); var targetElement = document.getElementById(targetId); if (!targetElement) { throw new EchoDomUpdate.TargetNotFoundException("StyleUpdate", "target", targetI d);

} targetElement.style[styleUpdateElement.getAttribute("name")] = styleUpdateElemen t.getAttribute("value"); }; EchoDomUpdate.TargetNotFoundException = function(updateType, targetType, targetI d) { this.targetId = targetId; this.targetType = targetType; this.updateType = updateType; }; EchoDomUpdate.TargetNotFoundException.prototype.toString = function() { return "Failed to perform \"" + this.updateType + "\": " + this.targetType + " e lement \"" + this.targetId + "\" not found."; }; function EchoDomUtil() { } EchoDomUtil.attributeToPropertyMap = null; EchoDomUtil.addEventListener = function(eventSource, eventType, eventListener, u seCapture) { if (eventSource.addEventListener) { eventSource.addEventListener(eventType, eventListener, useCapture); } else if (eventSource.attachEvent) { eventSource.attachEvent("on" + eventType, eventListener); } }; EchoDomUtil.initAttributeToPropertyMap = function() { var m = new Array(); m["accesskey"] = "accessKey"; m["cellpadding"] = "cellPadding"; m["cellspacing"] = "cellSpacing"; m["class"] = "className"; m["codebase"] = "codeBase"; m["codetype"] = "codeType"; m["colspan"] = "colSpan"; m["datetime"] = "dateTime"; m["frameborder"] = "frameBorder"; m["longdesc"] = "longDesc"; m["marginheight"] = "marginHeight"; m["marginwidth"] = "marginWidth"; m["maxlength"] = "maxLength"; m["noresize"] = "noResize"; m["noshade"] = "noShade"; m["nowrap"] = "noWrap"; m["readonly"] = "readOnly"; m["rowspan"] = "rowSpan"; m["tabindex"] = "tabIndex"; m["usemap"] = "useMap"; m["valign"] = "vAlign"; m["valueType"] = "valueType"; EchoDomUtil.attributeToPropertyMap = m; }; EchoDomUtil.createDocument = function(namespaceUri, qualifiedName) { if (document.implementation && document.implementation.createDocument) { var dom = document.implementation.createDocument(namespaceUri, qualifiedName, nu ll); if (!dom.documentElement) { dom.appendChild(dom.createElement(qualifiedName)); } return dom; } else if (window.ActiveXObject) { var createdDocument = new ActiveXObject("Microsoft.XMLDOM");

var documentElement = createdDocument.createElement(qualifiedName); createdDocument.appendChild(documentElement); return createdDocument; } else { throw "Unable to create new Document."; } }; EchoDomUtil.cssAttributeNameToPropertyName = function(attribute) { var segments = attribute.split("-"); var out = segments[0]; for (var i = 1; i < segments.length; ++i) { out += segments[i].substring(0, 1).toUpperCase(); out += segments[i].substring(1); } return out; }; EchoDomUtil.fixSafariAttrs = function(node) { if (node.nodeType == 1) { for (i = 0; i < node.attributes.length; ++i) { var attribute = node.attributes[i]; node.setAttribute(attribute.name, attribute.value.replace("\x26\x2338\x3B", "&") ); } } for (var childNode = node.firstChild; childNode; childNode = childNode.nextSibli ng) { EchoDomUtil.fixSafariAttrs(childNode); } }; EchoDomUtil.getComponentId = function(elementId) { if ("c_" != elementId.substring(0, 2)) { return null; } var extensionStart = elementId.indexOf("_", 2); if (extensionStart == -1) { return elementId; } else { return elementId.substring(0, extensionStart); } }; EchoDomUtil.getCssText = function(element) { if (EchoClientProperties.get("quirkOperaNoCssText")) { return element.getAttribute("style"); } else { return element.style.cssText; } } EchoDomUtil.getEventTarget = function(e) { return e.target ? e.target : e.srcElement; }; EchoDomUtil.importNode = function(targetDocument, sourceNode, importChildren) { if (targetDocument.importNode) { return targetDocument.importNode(sourceNode, importChildren); } else { return EchoDomUtil.importNodeImpl(targetDocument, sourceNode, importChildren); } }; EchoDomUtil.importNodeImpl = function(targetDocument, sourceNode, importChildren ) { var targetNode;

if (importChildren || !sourceNode.hasChildNodes()) { targetNode = EchoDomUtil.importNodeByInnerHtml(targetDocument, sourceNode, impor tChildren); if (targetNode != null) { return targetNode; } } targetNode = EchoDomUtil.importNodeByDom(targetDocument, sourceNode); if (importChildren && sourceNode.hasChildNodes()) { for (var sourceChildNode = sourceNode.firstChild; sourceChildNode; sourceChildNo de = sourceChildNode.nextSibling) { var targetChildNode = EchoDomUtil.importNodeImpl(targetDocument, sourceChildNode , true); if (targetChildNode) { targetNode.appendChild(targetChildNode); } } } return targetNode; }; EchoDomUtil.importNodeByDom = function(targetDocument, sourceNode) { var targetNode, i; switch (sourceNode.nodeType) { case 1: targetNode = targetDocument.createElement(sourceNode.nodeName); for (i = 0; i < sourceNode.attributes.length; ++i) { var attribute = sourceNode.attributes[i]; if ("style" == attribute.name) { targetNode.style.cssText = attribute.value; } else { if (EchoDomUtil.attributeToPropertyMap === null) { EchoDomUtil.initAttributeToPropertyMap(); } var propertyName = EchoDomUtil.attributeToPropertyMap[attribute.name]; if (propertyName) { targetNode[propertyName] = attribute.value; } else { targetNode[attribute.name] = attribute.value; } } } break; case 3: targetNode = targetDocument.createTextNode(sourceNode.nodeValue); break; } return targetNode; }; EchoDomUtil.importNodeByInnerHtml = function(targetDocument, sourceNode) { var targetNode; if (sourceNode.nodeName.match(/tr|tbody|table|thead|tfoot|colgroup/)) { return null; } var sourceHTML = ""; for (var sourceChildNode = sourceNode.firstChild; sourceChildNode; sourceChildNo de = sourceChildNode.nextSibling) { var childHTML = sourceChildNode.xml; if (childHTML == null) { return null; }

sourceHTML += childHTML; } targetNode = EchoDomUtil.importNodeByDom(targetDocument, sourceNode); var expr = new RegExp("<(?:(?!br|img|hr)([a-zA-Z]+))([^>]*)/>", "ig"); sourceHTML = sourceHTML.replace(expr, "<$1$2></$1>"); if (EchoStringUtil.trim(sourceHTML).length > 0) { targetNode.innerHTML = sourceHTML; } return targetNode; }; EchoDomUtil.isAncestorOf = function(ancestorNode, descendantNode) { var testNode = descendantNode; while (testNode !== null) { if (testNode == ancestorNode) { return true; } testNode = testNode.parentNode; } return false; }; EchoDomUtil.preventEventDefault = function(e) { if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } }; EchoDomUtil.removeEventListener = function(eventSource, eventType, eventListener , useCapture) { if (eventSource.removeEventListener) { eventSource.removeEventListener(eventType, eventListener, useCapture); } else if (eventSource.detachEvent) { eventSource.detachEvent("on" + eventType, eventListener); } }; EchoDomUtil.setCssText = function(element, cssText) { if (EchoClientProperties.get("quirkOperaNoCssText")) { if (cssText) { element.setAttribute("style", cssText); } else { element.removeAttribute("style"); } } else { element.style.cssText = cssText; } }; EchoDomUtil.stopPropagation = function(e) { if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } }; function EchoEventProcessor() { } EchoEventProcessor.EventHandlerData = function(handlerName, capture) { this.handlerName = handlerName; this.capture = capture; }; EchoEventProcessor.MessageProcessor = function() { }; EchoEventProcessor.MessageProcessor.process = function(messagePartElement) {

var i, j, k, eventTypes, handlers, addItems, removeItems, elementId; var adds = messagePartElement.getElementsByTagName("event-add"); var removes = messagePartElement.getElementsByTagName("event-remove"); for (i = 0; i < adds.length; ++i) { eventTypes = adds[i].getAttribute("type").split(","); handlers = adds[i].getAttribute("handler").split(","); if (handlers.length != eventTypes.length) { throw "Handler count and event type count do not match."; } addItems = adds[i].getElementsByTagName("item"); for (j = 0; j < addItems.length; ++j) { elementId = addItems[j].getAttribute("eid"); for (k = 0; k < eventTypes.length; ++k) { EchoEventProcessor.addHandler(elementId, eventTypes[k], handlers[k]); } } } for (i = 0; i < removes.length; ++i) { eventTypes = removes[i].getAttribute("type").split(","); removeItems = removes[i].getElementsByTagName("item"); for (j = 0; j < removeItems.length; ++j) { elementId = removeItems[j].getAttribute("eid"); for (k = 0; k < eventTypes.length; ++k) { EchoEventProcessor.removeHandler(elementId, eventTypes[k]); } } } }; EchoEventProcessor.eventTypeToHandlersMap = new EchoCollectionsMap(); EchoEventProcessor.addHandler = function(element, eventType, handler, capture) { var elementId; if (typeof element == "string") { elementId = element; element = document.getElementById(element); } else { elementId = element.id; } EchoDomUtil.addEventListener(element, eventType, EchoEventProcessor.processEvent , false); var elementIdToHandlerMap = EchoEventProcessor.eventTypeToHandlersMap.get(eventT ype); if (!elementIdToHandlerMap) { elementIdToHandlerMap = new EchoCollectionsMap(); EchoEventProcessor.eventTypeToHandlersMap.put(eventType, elementIdToHandlerMap); } var handlerData = new EchoEventProcessor.EventHandlerData(handler, capture); elementIdToHandlerMap.put(elementId, handlerData); }; EchoEventProcessor.dispose = function() { for (var eventType in EchoEventProcessor.eventTypeToHandlersMap.associations) { var elementIdToHandlerMap = EchoEventProcessor.eventTypeToHandlersMap.associatio ns[eventType]; for (var elementId in elementIdToHandlerMap.associations) { var element = document.getElementById(elementId); if (element) { EchoDomUtil.removeEventListener(element, eventType, EchoEventProcessor.processEv ent, false); } elementIdToHandlerMap.remove(elementId); }

EchoEventProcessor.eventTypeToHandlersMap.remove(eventType); } }; EchoEventProcessor.getHandler = function(eventType, elementId) { var handlerData = EchoEventProcessor.getHandlerData(eventType, elementId); return handlerData ? handlerData.handlerName : null; }; EchoEventProcessor.getHandlerData = function(eventType, elementId) { var elementIdToHandlerMap = EchoEventProcessor.eventTypeToHandlersMap.get(eventT ype); if (!elementIdToHandlerMap) { return null; } return elementIdToHandlerMap.get(elementId); }; EchoEventProcessor.getHandlerElementIds = function(eventType) { var elementIds = new Array(); var elementIdToHandlerMap = EchoEventProcessor.eventTypeToHandlersMap.get(eventT ype); if (elementIdToHandlerMap) { for (var elementId in elementIdToHandlerMap.associations) { elementIds.push(elementId); } } return elementIds; }; EchoEventProcessor.getHandlerEventTypes = function() { var handlerTypes = new Array(); for (var eventType in EchoEventProcessor.eventTypeToHandlersMap.associations) { handlerTypes.push(eventType); } return handlerTypes; }; EchoEventProcessor.processEvent = function(e) { e = e ? e : window.event; var eventType = e.type; if (!e.target && e.srcElement) { e.target = e.srcElement; } var targetElement = e.target; var handlerDatas = new Array(); var targetElements = new Array(); var hasCapturingHandlers = false; while (targetElement) { if (targetElement.nodeType == 1) { var handlerData = EchoEventProcessor.getHandlerData(eventType, targetElement.id) ; if (handlerData) { hasCapturingHandlers |= handlerData.capture; handlerDatas.push(handlerData); targetElements.push(targetElement); } } targetElement = targetElement.parentNode; } if (handlerDatas.length == 0) { return; } var propagate = true; if (hasCapturingHandlers) {

for (var i = handlerDatas.length - 1; i >=0; --i) { if (!handlerDatas[i].capture) { continue; } var handler; try { handler = eval(handlerDatas[i].handlerName); } catch (ex) { throw "Invalid handler: " + handlerDatas[i].handlerName + " (" + ex + ")"; } e.registeredTarget = targetElements[i]; propagate = handler(e); if (!propagate) { break; } } } if (propagate) { for (var i = 0; i < handlerDatas.length; ++i) { if (handlerDatas[i].capture) { continue; } var handler; try { handler = eval(handlerDatas[i].handlerName); } catch (ex) { throw "Invalid handler: " + handlerDatas[i].handlerName + " (" + ex + ")"; } e.registeredTarget = targetElements[i]; propagate = handler(e); if (!propagate) { break; } } } if (!propagate) { EchoDomUtil.stopPropagation(e); } }; EchoEventProcessor.removeHandler = function(element, eventType) { var elementId; if (typeof element == "string") { elementId = element; element = document.getElementById(element); } else { elementId = element.id; } if (element) { EchoDomUtil.removeEventListener(element, eventType, EchoEventProcessor.processEv ent, false); } var elementIdToHandlerMap = EchoEventProcessor.eventTypeToHandlersMap.get(eventT ype); if (!elementIdToHandlerMap) { return; } elementIdToHandlerMap.remove(elementId); }; function EchoFocusManager() { } EchoFocusManager.setFocusedState = function(componentId, focusState) {

if (focusState) { EchoClientMessage.messageDocument.documentElement.setAttribute("focus", componen tId); } else { var focusedComponentId = EchoClientMessage.messageDocument.documentElement.getAt tribute("focus"); if (!focusedComponentId || componentId == focusedComponentId) { EchoClientMessage.messageDocument.documentElement.setAttribute("focus", ""); } } EchoDebugManager.updateClientMessage(); }; function EchoHttpConnection(url, method, messageObject, contentType) { this.url = url; this.contentType = contentType; this.method = method; this.messageObject = messageObject; this.responseHandler = null; this.invalidResponseHandler = null; this.disposed = false; }; EchoHttpConnection.prototype.connect = function() { if (!this.responseHandler) { throw "EchoHttpConnection response handler not set."; } var usingActiveXObject = false; if (window.XMLHttpRequest) { this.xmlHttpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { usingActiveXObject = true; this.xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else { throw "Connect failed: Cannot create XMLHttpRequest."; } var instance = this; this.xmlHttpRequest.onreadystatechange = function() { if (!instance) { return; } try { instance.processReadyStateChange(); } finally { if (instance.disposed) { instance = null; } } }; this.xmlHttpRequest.open(this.method, this.url, true); if (this.contentType && (usingActiveXObject || this.xmlHttpRequest.setRequestHea der)) { this.xmlHttpRequest.setRequestHeader("Content-Type", this.contentType); } this.xmlHttpRequest.send(this.messageObject ? this.messageObject : null); }; EchoHttpConnection.prototype.dispose = function() { this.messageObject = null; this.responseHandler = null; this.invalidResponseHandler = null; this.xmlHttpRequest = null; this.disposed = true;

}; EchoHttpConnection.prototype.getResponseText = function() { return this.xmlHttpRequest ? this.xmlHttpRequest.responseText : null; }; EchoHttpConnection.prototype.getResponseXml = function() { return this.xmlHttpRequest ? this.xmlHttpRequest.responseXML : null; }; EchoHttpConnection.prototype.processReadyStateChange = function() { if (this.disposed) { return; } if (this.xmlHttpRequest.readyState == 4) { if (this.xmlHttpRequest.status == 200) { if (!this.responseHandler) { this.dispose(); throw "EchoHttpConnection response handler not set."; } this.responseHandler(this); this.dispose(); } else { if (this.invalidResponseHandler) { this.invalidResponseHandler(this); this.dispose(); } else { var statusValue = this.xmlHttpRequest.status; this.dispose(); throw "Invalid HTTP Response code (" + statusValue + ") and no handler set."; } } } }; EchoHttpConnection.nullMethod = function() { }; function EchoModalManager() { } EchoModalManager.modalElementId = null; EchoModalManager.isElementInModalContext = function(element) { if (typeof element == "string") { element = document.getElementById(element); } if (EchoModalManager.modalElementId) { var modalElement = document.getElementById(EchoModalManager.modalElementId); return EchoDomUtil.isAncestorOf(modalElement, element); } else { return true; } }; function EchoScriptLibraryManager() { } EchoScriptLibraryManager.STATE_REQUESTED = 1; EchoScriptLibraryManager.STATE_LOADED = 2; EchoScriptLibraryManager.STATE_INSTALLED = 3; EchoScriptLibraryManager.librarySourceMap = new Array(); EchoScriptLibraryManager.libraryLoadStateMap = new Array(); EchoScriptLibraryManager.getState = function(serviceId) { return EchoScriptLibraryManager.libraryLoadStateMap[serviceId]; }; EchoScriptLibraryManager.installLibrary = function(serviceId) { if (EchoScriptLibraryManager.getState(serviceId) == EchoScriptLibraryManager.STA TE_INSTALLED) { return; } try {

var source = EchoScriptLibraryManager.librarySourceMap[serviceId]; eval(source); EchoScriptLibraryManager.librarySourceMap[serviceId] = null; EchoScriptLibraryManager.libraryLoadStateMap[serviceId] = EchoScriptLibraryManag er.STATE_INSTALLED; } catch (ex) { EchoClientEngine.processClientError("Cannot load script module \"" + serviceId + "\"", ex); throw ex; } }; EchoScriptLibraryManager.loadLibrary = function(serviceId) { if (EchoScriptLibraryManager.getState(serviceId)) { return; } var conn = new EchoHttpConnection(EchoClientEngine.baseServerUri + "?serviceId=" + serviceId, "GET"); conn.serviceId = serviceId; conn.responseHandler = EchoScriptLibraryManager.responseHandler; conn.connect(); EchoScriptLibraryManager.libraryLoadStateMap[serviceId] = EchoScriptLibraryManag er.STATE_REQUESTED; }; EchoScriptLibraryManager.responseHandler = function(conn) { EchoScriptLibraryManager.librarySourceMap[conn.serviceId] = conn.getResponseText (); EchoScriptLibraryManager.libraryLoadStateMap[conn.serviceId] = EchoScriptLibrary Manager.STATE_LOADED; EchoClientEngine.incrementLoadStatus(); }; function EchoServerDelayMessage() { } EchoServerDelayMessage.MessageProcessor = function() { }; EchoServerDelayMessage.MessageProcessor.process = function(messagePartElement) { for (var i = 0; i < messagePartElement.childNodes.length; ++i) { if (messagePartElement.childNodes[i].nodeType == 1) { switch (messagePartElement.childNodes[i].tagName) { case "set-message": EchoServerDelayMessage.MessageProcessor.processSetDelayMessage(messagePartElemen t.childNodes[i]); break; } } } }; EchoServerDelayMessage.MessageProcessor.processSetDelayMessage = function(setDir ectiveElement) { var i; var serverDelayMessage = document.getElementById(EchoServerDelayMessage.MESSAGE_ ELEMENT_ID); if (serverDelayMessage) { serverDelayMessage.parentNode.removeChild(serverDelayMessage); } var contentElement = setDirectiveElement.getElementsByTagName("content")[0]; if (!contentElement) { return; } var bodyElement = document.getElementsByTagName("body")[0]; for (i = 0; i < contentElement.childNodes.length; ++i) { bodyElement.appendChild(EchoDomUtil.importNode(document, contentElement.childNod es[i], true));

} }; EchoServerDelayMessage.MESSAGE_ELEMENT_ID = "serverDelayMessage"; EchoServerDelayMessage.MESSAGE_ELEMENT_LONG_ID = "serverDelayMessageLong"; EchoServerDelayMessage.delayMessageTimeoutId = null; EchoServerDelayMessage.timeout = 750; EchoServerDelayMessage.activate = function() { var serverDelayMessage = document.getElementById(EchoServerDelayMessage.MESSAGE_ ELEMENT_ID); if (!serverDelayMessage) { return; } serverDelayMessage.style.visibility = "visible"; EchoServerDelayMessage.delayMessageTimeoutId = window.setTimeout("EchoServerDela yMessage.activateDelayMessage()", EchoServerDelayMessage.timeout); }; EchoServerDelayMessage.activateDelayMessage = function() { EchoServerDelayMessage.cancelDelayMessageTimeout(); var longMessage = document.getElementById(EchoServerDelayMessage.MESSAGE_ELEMENT _LONG_ID); if (!longMessage) { return; } longMessage.style.visibility = "visible"; }; EchoServerDelayMessage.cancelDelayMessageTimeout = function() { if (EchoServerDelayMessage.delayMessageTimeoutId) { window.clearTimeout(EchoServerDelayMessage.delayMessageTimeoutId); EchoServerDelayMessage.delayMessageTimeoutId = null; } }; EchoServerDelayMessage.deactivate = function() { EchoServerDelayMessage.cancelDelayMessageTimeout(); var serverDelayMessage = document.getElementById(EchoServerDelayMessage.MESSAGE_ ELEMENT_ID); var longMessage = document.getElementById(EchoServerDelayMessage.MESSAGE_ELEMENT _LONG_ID); if (serverDelayMessage) { serverDelayMessage.style.visibility = "hidden"; } if (longMessage) { longMessage.style.visibility = "hidden"; } }; function EchoServerMessage() { } EchoServerMessage.STATUS_INITIALIZED = 0; EchoServerMessage.STATUS_PROCESSING = 1; EchoServerMessage.STATUS_PROCESSING_COMPLETE = 2; EchoServerMessage.STATUS_PROCESSING_FAILED = 3; EchoServerMessage.transactionCount = 0; EchoServerMessage.messageDocument = null; EchoServerMessage.backgroundIntervalId = null; EchoServerMessage.enableFixSafariAttrs = false; EchoServerMessage.processingCompleteListener = null; EchoServerMessage.temporaryProperties = null; EchoServerMessage.status = EchoServerMessage.STATUS_INITIALIZED; EchoServerMessage.getTemporaryProperty = function(key) { if (!EchoServerMessage.temporaryProperties) {

return undefined; } else { return EchoServerMessage.temporaryProperties[key]; } }; EchoServerMessage.init = function(messageDocument, processingCompleteListener) { EchoServerMessage.temporaryProperties = null; EchoServerMessage.messageDocument = messageDocument; EchoServerMessage.backgroundIntervalId = null; EchoServerMessage.processingCompleteListener = processingCompleteListener; EchoDebugManager.updateServerMessage(); }; EchoServerMessage.isLibraryLoadComplete = function() { var complete = false; try { var librariesElement = EchoServerMessage.messageDocument.getElementsByTagName("l ibraries").item(0); var libraryElements = librariesElement.getElementsByTagName("library"); var returnValue = true; for (var i = 0; i < libraryElements.length; ++i) { var serviceId = libraryElements.item(i).getAttribute("service-id"); var libraryState = EchoScriptLibraryManager.getState(serviceId); if (libraryState != EchoScriptLibraryManager.STATE_LOADED && libraryState != EchoScriptLibraryManager.STATE_INSTALLED) { returnValue = false; break; } } complete = true; return returnValue; } finally { if (!complete) { EchoServerMessage.status = EchoServerMessage.STATUS_PROCESSING_FAILED; } } }; EchoServerMessage.loadLibraries = function() { var librariesElement = EchoServerMessage.messageDocument.getElementsByTagName("l ibraries").item(0); var headElement = document.getElementsByTagName("head").item(0); if (!librariesElement) { return; } var libraryElements = librariesElement.getElementsByTagName("library"); for (var i = 0; i < libraryElements.length; ++i) { var serviceId = libraryElements.item(i).getAttribute("service-id"); EchoScriptLibraryManager.loadLibrary(serviceId); } }; EchoServerMessage.installLibraries = function() { var librariesElement = EchoServerMessage.messageDocument.getElementsByTagName("l ibraries").item(0); var headElement = document.getElementsByTagName("head").item(0); if (!librariesElement) { return; } var libraryElements = librariesElement.getElementsByTagName("library"); for (var i = 0; i < libraryElements.length; ++i) { var serviceId = libraryElements.item(i).getAttribute("service-id"); EchoScriptLibraryManager.installLibrary(serviceId);

EchoClientEngine.incrementLoadStatus(); } }; EchoServerMessage.process = function() { EchoServerMessage.prepare(); EchoServerMessage.processPhase1(); }; EchoServerMessage.prepare = function() { EchoClientEngine.updateTransactionId(EchoServerMessage.messageDocument.documentE lement.getAttribute("trans-id")); if (EchoServerMessage.messageDocument.documentElement.getAttribute("xml-attr-tes t") == "x&#38;y") { EchoServerMessage.enableFixSafariAttrs = true; } if (EchoServerMessage.enableFixSafariAttrs) { EchoDomUtil.fixSafariAttrs(EchoServerMessage.messageDocument.documentElement); } }; EchoServerMessage.processAsyncConfig = function() { var timeInterval = parseInt(EchoServerMessage.messageDocument.documentElement.ge tAttribute("async-interval")); if (!isNaN(timeInterval)) { EchoAsyncMonitor.timeInterval = timeInterval; EchoAsyncMonitor.start(); } }; EchoServerMessage.processApplicationProperties = function() { EchoModalManager.modalElementId = EchoServerMessage.messageDocument.documentElem ent.getAttribute("modal-id"); if (EchoServerMessage.messageDocument.documentElement.getAttribute("root-layoutdirection")) { document.documentElement.style.direction = EchoServerMessage.messageDocument.documentElement.getAttribute("root-layout-di rection"); } }; EchoServerMessage.processMessageParts = function() { var complete = false; try { var messagePartElements = EchoServerMessage.messageDocument.getElementsByTagName ("message-part"); for (var i = 0; i < messagePartElements.length; ++i) { var messagePartElement = messagePartElements[i]; var processorName = messagePartElement.getAttribute("processor"); var processor = eval(processorName); if (!processor || !processor.process) { throw "Processor \"" + processorName + "\" not available."; } processor.process(messagePartElement); } complete = true; } finally { EchoServerMessage.status = complete ? EchoServerMessage.STATUS_PROCESSING_COMPLE TE : EchoServerMessage.STATUS_PROCESSING_FAILED; } }; EchoServerMessage.processPhase1 = function() { try { EchoServerMessage.status = EchoServerMessage.STATUS_PROCESSING;

EchoServerMessage.loadLibraries(); if (EchoServerMessage.isLibraryLoadComplete()) { EchoServerMessage.processPhase2(); } else { EchoServerMessage.backgroundIntervalId = window.setInterval("EchoServerMessage.w aitForLibraries();", 20); } } catch (ex) { EchoServerMessage.temporaryProperties = null; EchoClientEngine.processClientError("Cannot process ServerMessage (Phase 1)", ex ); throw ex; } }; EchoServerMessage.processPhase2 = function() { try { EchoServerMessage.installLibraries(); EchoClientEngine.disableLoadStatus(); EchoServerMessage.processMessageParts(); EchoServerMessage.processApplicationProperties(); if (EchoServerMessage.processingCompleteListener) { EchoServerMessage.processingCompleteListener(); } EchoServerMessage.processAsyncConfig(); } catch (ex) { EchoClientEngine.processClientError("Cannot process ServerMessage (Phase 2)", ex ); throw ex; } finally { EchoServerMessage.temporaryProperties = null; } EchoVirtualPosition.redraw(); ++EchoServerMessage.transactionCount; }; EchoServerMessage.setTemporaryProperty = function(key, value) { if (!EchoServerMessage.temporaryProperties) { EchoServerMessage.temporaryProperties = new Array(); } EchoServerMessage.temporaryProperties[key] = value; }; EchoServerMessage.waitForLibraries = function() { if (EchoServerMessage.isLibraryLoadComplete()) { window.clearInterval(EchoServerMessage.backgroundIntervalId); EchoServerMessage.backgroundIntervalId = null; EchoServerMessage.processPhase2(); } }; function EchoServerTransaction() { } EchoServerTransaction.active = false; EchoServerTransaction.synchronizeServiceRequest = "?serviceId=Echo.Synchronize"; EchoServerTransaction.connect = function() { if (EchoServerTransaction.active) { return false; } EchoServerDelayMessage.activate(); EchoAsyncMonitor.stop(); var conn = new EchoHttpConnection(EchoClientEngine.baseServerUri + EchoServerTra nsaction.synchronizeServiceRequest, "POST", EchoClientMessage.messageDocument, "text/xml"); conn.responseHandler = EchoServerTransaction.responseHandler;

conn.invalidResponseHandler = EchoServerTransaction.invalidResponseHandler; EchoServerTransaction.active = true; conn.connect(); EchoClientMessage.reset(); return true; }; EchoServerTransaction.invalidResponseHandler = function(conn) { EchoServerTransaction.postProcess(); if (conn.xmlHttpRequest.status == 500) { EchoClientEngine.processServerError(); } else if (conn.xmlHttpRequest.status == 400) { EchoClientEngine.processSessionExpiration(); } else { alert("Invalid/unknown response from server: " + conn.getResponseText()); } }; EchoServerTransaction.postProcess = function() { EchoServerDelayMessage.deactivate(); EchoServerTransaction.active = false; }; EchoServerTransaction.responseHandler = function(conn) { EchoServerMessage.init(conn.getResponseXml(), EchoServerTransaction.postProcess) ; EchoServerMessage.process(); }; function EchoStringUtil() {}; EchoStringUtil.trim = function(s) { var result = s.replace(/^\s+/g, ""); return result.replace(/\s+$/g, ""); }; EchoVirtualPosition = function() { }; EchoVirtualPosition.elementIdList = new Array(); EchoVirtualPosition.elementIdSet = new EchoCollectionsMap(); EchoVirtualPosition.enabled = false; EchoVirtualPosition.elementIdListSorted = true; EchoVirtualPosition.adjust = function(element) { if (EchoVirtualPosition.verifyPixelValue(element.style.top) && EchoVirtualPosition.verifyPixelValue(element.style.bottom) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.paddingTop) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.paddingBottom) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.marginTop) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.marginBottom) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.borderTopWidth) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.borderBottomWid th)) { var parentHeight = element.parentNode.offsetHeight; var topPixels = parseInt(element.style.top); var bottomPixels = parseInt(element.style.bottom); var paddingPixels = EchoVirtualPosition.toInteger(element.style.paddingTop) + EchoVirtualPosition.toInteger(element.style.paddingBottom); var marginPixels = EchoVirtualPosition.toInteger(element.style.marginTop) + EchoVirtualPosition.toInteger(element.style.marginBottom); var borderPixels = EchoVirtualPosition.toInteger(element.style.borderTopWidth) + EchoVirtualPosition.toInteger(element.style.borderBottomWidth); var calculatedHeight = parentHeight - topPixels - bottomPixels - paddingPixels marginPixels - borderPixels; if (calculatedHeight <= 0) { element.style.height = 0; } else { if (element.style.height != calculatedHeight + "px") {

element.style.height = calculatedHeight + "px"; } } } if (EchoVirtualPosition.verifyPixelValue(element.style.left) && EchoVirtualPosition.verifyPixelValue(element.style.right) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.paddingLeft) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.paddingRight) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.marginLeft) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.marginRight) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.borderLeftWidth ) && EchoVirtualPosition.verifyPixelOrUndefinedValue(element.style.borderRightWidt h)) { var parentWidth = element.parentNode.offsetWidth; var leftPixels = parseInt(element.style.left); var rightPixels = parseInt(element.style.right); var paddingPixels = EchoVirtualPosition.toInteger(element.style.paddingLeft) + EchoVirtualPosition.toInteger(element.style.paddingRight); var marginPixels = EchoVirtualPosition.toInteger(element.style.marginLeft) + EchoVirtualPosition.toInteger(element.style.marginRight); var borderPixels = EchoVirtualPosition.toInteger(element.style.borderLeftWidth) + EchoVirtualPosition.toInteger(element.style.borderRightWidth); var calculatedWidth = parentWidth - leftPixels - rightPixels - paddingPixels - m arginPixels - borderPixels; if (calculatedWidth <= 0) { element.style.width = 0; } else { if (element.style.width != calculatedWidth + "px") { element.style.width = calculatedWidth + "px"; } } } }; EchoVirtualPosition.init = function() { EchoVirtualPosition.enabled = true; EchoDomUtil.addEventListener(window, "resize", EchoVirtualPosition.resizeListene r, false); }; EchoVirtualPosition.redraw = function(element) { if (!EchoVirtualPosition.enabled) { return; } var removedIds = false; if (element != undefined) { EchoVirtualPosition.adjust(element); } else { if (!EchoVirtualPosition.elementIdListSorted) { EchoVirtualPosition.sort(); } for (var i = 0; i < EchoVirtualPosition.elementIdList.length; ++i) { element = document.getElementById(EchoVirtualPosition.elementIdList[i]); if (element) { EchoVirtualPosition.adjust(element); } else { EchoVirtualPosition.elementIdSet.remove(EchoVirtualPosition.elementIdList[i]); EchoVirtualPosition.elementIdList[i] = null; removedIds = true; } }

if (removedIds) { var updatedIdList = new Array(); for (var i = 0; i < EchoVirtualPosition.elementIdList.length; ++i) { if (EchoVirtualPosition.elementIdList[i] != null) { updatedIdList.push(EchoVirtualPosition.elementIdList[i]); } } EchoVirtualPosition.elementIdList = updatedIdList; } } }; EchoVirtualPosition.register = function(elementId) { if (!EchoVirtualPosition.enabled) { return; } EchoVirtualPosition.elementIdListSorted = false; EchoVirtualPosition.elementIdList.push(elementId); EchoVirtualPosition.elementIdSet.put(elementId, 1); }; EchoVirtualPosition.resizeListener = function(e) { e = e ? e : window.event; EchoVirtualPosition.redraw(); }; EchoVirtualPosition.sort = function() { var sortedList = new Array(); EchoVirtualPosition.sortImpl(document.documentElement, sortedList); EchoVirtualPosition.elementIdList = sortedList; EchoVirtualPosition.elementIdListSorted = true; }; EchoVirtualPosition.sortImpl = function(element, sortedList) { if (element.id && EchoVirtualPosition.elementIdSet.get(element.id)) { sortedList.push(element.id); } for (var child = element.firstChild; child; child = child.nextSibling) { if (child.nodeType == 1) { EchoVirtualPosition.sortImpl(child, sortedList); } } }; EchoVirtualPosition.toInteger = function(value) { value = parseInt(value); return isNaN(value) ? 0 : value; }; EchoVirtualPosition.verifyPixelValue = function(value) { if (value == null || value == "" || value == undefined) { return false; } var valueString = value.toString(); return valueString == "0" || valueString.indexOf("px") != -1; }; EchoVirtualPosition.verifyPixelOrUndefinedValue = function(value) { if (value == null || value == "" || value == undefined) { return true; } var valueString = value.toString(); return valueString == "0" || valueString.indexOf("px") != -1; }; EchoVirtualPosition.MessageProcessor = function() { }; EchoVirtualPosition.MessageProcessor.process = function(messagePartElement) { for (var i = 0; i < messagePartElement.childNodes.length; ++i) {

if (messagePartElement.childNodes[i].nodeType == 1) { switch (messagePartElement.childNodes[i].tagName) { case "register": EchoVirtualPosition.MessageProcessor.processRegister(messagePartElement.childNod es[i]); break; } } } }; EchoVirtualPosition.MessageProcessor.processRegister = function(registerElement) { var items = registerElement.getElementsByTagName("item"); for (var i = 0; i < items.length; ++i) { var elementId = items[i].getAttribute("eid"); EchoVirtualPosition.register(elementId); } }; function EchoWindowUpdate() { } EchoWindowUpdate.process = function(messagePartElement) { for (var i = 0; i < messagePartElement.childNodes.length; ++i) { if (messagePartElement.childNodes[i].nodeType == 1) { switch (messagePartElement.childNodes[i].tagName) { case "reload": EchoWindowUpdate.processReload(messagePartElement.childNodes[i]); break; case "set-focus": EchoWindowUpdate.processSetFocus(messagePartElement.childNodes[i]); break; case "set-title": EchoWindowUpdate.processSetTitle(messagePartElement.childNodes[i]); break; } } } }; EchoWindowUpdate.processReload = function(reloadElement) { var message = EchoClientConfiguration.propertyMap["defaultOutOfSyncErrorMessage" ] if (message) { alert(message); } window.location.reload(); }; EchoWindowUpdate.processSetFocus = function(setFocusElement) { EchoVirtualPosition.redraw(); var elementId = setFocusElement.getAttribute("element-id"); var element = document.getElementById(elementId); if (element && element.focus) { element.focus(); } }; EchoWindowUpdate.processSetTitle = function(setTitleElement) { document.title = setTitleElement.getAttribute("title"); }; EchoClientMessage.reset();

You might also like