Skip to content

Instantly share code, notes, and snippets.

@wellington1993
Created May 23, 2022 04:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wellington1993/2dea9994b52dc2a217c1a078ae1e1382 to your computer and use it in GitHub Desktop.
Save wellington1993/2dea9994b52dc2a217c1a078ae1e1382 to your computer and use it in GitHub Desktop.
!function(e){var r={};function s(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,s),a.l=!0,a.exports}s.m=e,s.c=r,s.d=function(e,r,n){s.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,r){if(1&r&&(e=s(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var a in e)s.d(n,a,function(r){return e[r]}.bind(null,a));return n},s.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(r,"a",r),r},s.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},s.p="",s(s.s=249)}({249:function(e,r,s){var n=s(65),a=n.extension.getURL("injected.js"),t=document.createElement("script");t.setAttribute("defer","defer"),t.setAttribute("type","text/javascript"),t.setAttribute("src",a),document.documentElement.appendChild(t),t.parentNode.removeChild(t),n.runtime.onMessage.addListener((function(e){"injected"===e.to&&postMessage({from:"content",proxyFrom:e.from,to:e.to,action:e.action,payload:e.payload||{}},"*")})),window.addEventListener("message",(function(e){"injected"===e.data.from?e.data.action&&n.runtime.sendMessage({from:"content",proxyFrom:e.data.from,to:e.data.to,action:e.data.action,payload:e.data.payload}):"popup"===e.data.from||e.data.from}))},65:function(e,r,s){var n,a,t;a=[e],void 0===(t="function"==typeof(n=function(e){"use strict";if("undefined"==typeof browser||Object.getPrototypeOf(browser)!==Object.prototype){const r="The message port closed before a response was received.",s="Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)",n=()=>{const e={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getBrowserInfo:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(e).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class n extends WeakMap{constructor(e,r){super(r),this.createItem=e}get(e){return this.has(e)||this.set(e,this.createItem(e)),super.get(e)}}const a=(e,r)=>(...s)=>{chrome.runtime.lastError?e.reject(chrome.runtime.lastError):r.singleCallbackArg||s.length<=1?e.resolve(s[0]):e.resolve(s)},t=e=>1==e?"argument":"arguments",g=(e,r,s)=>new Proxy(r,{apply:(r,n,a)=>s.call(n,e,...a)});let m=Function.call.bind(Object.prototype.hasOwnProperty);const o=(e,r={},s={})=>{let n=Object.create(null),i={has:(r,s)=>s in e||s in n,get(i,A,l){if(A in n)return n[A];if(!(A in e))return;let c=e[A];if("function"==typeof c)if("function"==typeof r[A])c=g(e,e[A],r[A]);else if(m(s,A)){let r=((e,r)=>function(s,...n){if(n.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${t(r.minArgs)} for ${e}(), got ${n.length}`);if(n.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${t(r.maxArgs)} for ${e}(), got ${n.length}`);return new Promise((t,g)=>{if(r.fallbackToNoCallback)try{s[e](...n,a({resolve:t,reject:g},r))}catch(a){console.warn(e+" API method doesn't seem to support the callback parameter, falling back to call it without a callback: ",a),s[e](...n),r.fallbackToNoCallback=!1,r.noCallback=!0,t()}else r.noCallback?(s[e](...n),t()):s[e](...n,a({resolve:t,reject:g},r))})})(A,s[A]);c=g(e,e[A],r)}else c=c.bind(e);else{if("object"!=typeof c||null===c||!m(r,A)&&!m(s,A))return Object.defineProperty(n,A,{configurable:!0,enumerable:!0,get:()=>e[A],set(r){e[A]=r}}),c;c=o(c,r[A],s[A])}return n[A]=c,c},set:(r,s,a,t)=>(s in n?n[s]=a:e[s]=a,!0),defineProperty:(e,r,s)=>Reflect.defineProperty(n,r,s),deleteProperty:(e,r)=>Reflect.deleteProperty(n,r)},A=Object.create(e);return new Proxy(A,i)},i=e=>({addListener(r,s,...n){r.addListener(e.get(s),...n)},hasListener:(r,s)=>r.hasListener(e.get(s)),removeListener(r,s){r.removeListener(e.get(s))}});let A=!1;const l=new n(e=>"function"!=typeof e?e:function(r,n,a){let t,g,m=!1,o=new Promise(e=>{t=function(r){A||(console.warn(s,(new Error).stack),A=!0),m=!0,e(r)}});try{g=e(r,n,t)}catch(e){g=Promise.reject(e)}const i=!0!==g&&(l=g)&&"object"==typeof l&&"function"==typeof l.then;var l;if(!0!==g&&!i&&!m)return!1;const c=e=>{e.then(e=>{a(e)},e=>{let r;r=e&&(e instanceof Error||"string"==typeof e.message)?e.message:"An unexpected error occurred",a({__mozWebExtensionPolyfillReject__:!0,message:r})}).catch(e=>{console.error("Failed to send onMessage rejected reply",e)})};return c(i?g:o),!0}),c=({reject:e,resolve:s},n)=>{chrome.runtime.lastError?chrome.runtime.lastError.message===r?s():e(chrome.runtime.lastError):n&&n.__mozWebExtensionPolyfillReject__?e(new Error(n.message)):s(n)},x=(e,r,s,...n)=>{if(n.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${t(r.minArgs)} for ${e}(), got ${n.length}`);if(n.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${t(r.maxArgs)} for ${e}(), got ${n.length}`);return new Promise((e,r)=>{const a=c.bind(null,{resolve:e,reject:r});n.push(a),s.sendMessage(...n)})},d={runtime:{onMessage:i(l),onMessageExternal:i(l),sendMessage:x.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:x.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},u={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return e.privacy={network:{networkPredictionEnabled:u,webRTCIPHandlingPolicy:u},services:{passwordSavingEnabled:u},websites:{hyperlinkAuditingEnabled:u,referrersEnabled:u}},o(chrome,d,e)};e.exports=n()}else e.exports=browser})?n.apply(r,a):n)||(e.exports=t)}});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vY29udGVudC5qcyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9kaXN0L2Jyb3dzZXItcG9seWZpbGwuanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJicm93c2VyIiwicmVxdWlyZSIsImNvbnRlbnQiLCJleHRlbnNpb24iLCJnZXRVUkwiLCJzY3JpcHQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJkb2N1bWVudEVsZW1lbnQiLCJhcHBlbmRDaGlsZCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInJ1bnRpbWUiLCJvbk1lc3NhZ2UiLCJhZGRMaXN0ZW5lciIsIm1lc3NhZ2UiLCJ0byIsInBvc3RNZXNzYWdlIiwiZnJvbSIsInByb3h5RnJvbSIsImFjdGlvbiIsInBheWxvYWQiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJkYXRhIiwic2VuZE1lc3NhZ2UiLCJnZXRQcm90b3R5cGVPZiIsIkNIUk9NRV9TRU5EX01FU1NBR0VfQ0FMTEJBQ0tfTk9fUkVTUE9OU0VfTUVTU0FHRSIsIlNFTkRfUkVTUE9OU0VfREVQUkVDQVRJT05fV0FSTklORyIsIndyYXBBUElzIiwiYXBpTWV0YWRhdGEiLCJrZXlzIiwibGVuZ3RoIiwiRXJyb3IiLCJEZWZhdWx0V2Vha01hcCIsIldlYWtNYXAiLCJjcmVhdGVJdGVtIiwiaXRlbXMiLCJzdXBlciIsInRoaXMiLCJoYXMiLCJzZXQiLCJtYWtlQ2FsbGJhY2siLCJwcm9taXNlIiwibWV0YWRhdGEiLCJjYWxsYmFja0FyZ3MiLCJjaHJvbWUiLCJsYXN0RXJyb3IiLCJyZWplY3QiLCJzaW5nbGVDYWxsYmFja0FyZyIsInJlc29sdmUiLCJwbHVyYWxpemVBcmd1bWVudHMiLCJudW1BcmdzIiwid3JhcE1ldGhvZCIsInRhcmdldCIsIm1ldGhvZCIsIndyYXBwZXIiLCJQcm94eSIsImFwcGx5IiwidGFyZ2V0TWV0aG9kIiwidGhpc09iaiIsImFyZ3MiLCJGdW5jdGlvbiIsIndyYXBPYmplY3QiLCJ3cmFwcGVycyIsImNhY2hlIiwiaGFuZGxlcnMiLCJwcm94eVRhcmdldCIsInByb3AiLCJyZWNlaXZlciIsIm1pbkFyZ3MiLCJtYXhBcmdzIiwiUHJvbWlzZSIsImZhbGxiYWNrVG9Ob0NhbGxiYWNrIiwiY2JFcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwibm9DYWxsYmFjayIsIndyYXBBc3luY0Z1bmN0aW9uIiwiY29uZmlndXJhYmxlIiwiZGVzYyIsIlJlZmxlY3QiLCJkZWxldGVQcm9wZXJ0eSIsIndyYXBFdmVudCIsIndyYXBwZXJNYXAiLCJsaXN0ZW5lciIsImhhc0xpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiLCJsb2dnZWRTZW5kUmVzcG9uc2VEZXByZWNhdGlvbldhcm5pbmciLCJvbk1lc3NhZ2VXcmFwcGVycyIsInNlbmRlciIsInNlbmRSZXNwb25zZSIsIndyYXBwZWRTZW5kUmVzcG9uc2UiLCJyZXN1bHQiLCJkaWRDYWxsU2VuZFJlc3BvbnNlIiwic2VuZFJlc3BvbnNlUHJvbWlzZSIsInJlc3BvbnNlIiwic3RhY2siLCJlcnIiLCJpc1Jlc3VsdFRoZW5hYmxlIiwidGhlbiIsInNlbmRQcm9taXNlZFJlc3VsdCIsIm1zZyIsImVycm9yIiwiX19tb3pXZWJFeHRlbnNpb25Qb2x5ZmlsbFJlamVjdF9fIiwiY2F0Y2giLCJ3cmFwcGVkU2VuZE1lc3NhZ2VDYWxsYmFjayIsInJlcGx5Iiwid3JhcHBlZFNlbmRNZXNzYWdlIiwiYXBpTmFtZXNwYWNlT2JqIiwid3JhcHBlZENiIiwicHVzaCIsInN0YXRpY1dyYXBwZXJzIiwib25NZXNzYWdlRXh0ZXJuYWwiLCJ0YWJzIiwic2V0dGluZ01ldGFkYXRhIiwiY2xlYXIiLCJwcml2YWN5IiwibmV0d29yayIsIm5ldHdvcmtQcmVkaWN0aW9uRW5hYmxlZCIsIndlYlJUQ0lQSGFuZGxpbmdQb2xpY3kiLCJzZXJ2aWNlcyIsInBhc3N3b3JkU2F2aW5nRW5hYmxlZCIsIndlYnNpdGVzIiwiaHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkIiwicmVmZXJyZXJzRW5hYmxlZCJdLCJtYXBwaW5ncyI6ImFBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBS2ZGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFPLEtBUXZEckIsRUFBb0JzQixFQUFJLFNBQVNELEVBQU9FLEdBRXZDLEdBRFUsRUFBUEEsSUFBVUYsRUFBUXJCLEVBQW9CcUIsSUFDL0IsRUFBUEUsRUFBVSxPQUFPRixFQUNwQixHQUFXLEVBQVBFLEdBQThCLGlCQUFWRixHQUFzQkEsR0FBU0EsRUFBTUcsV0FBWSxPQUFPSCxFQUNoRixJQUFJSSxFQUFLWCxPQUFPWSxPQUFPLE1BR3ZCLEdBRkExQixFQUFvQmtCLEVBQUVPLEdBQ3RCWCxPQUFPQyxlQUFlVSxFQUFJLFVBQVcsQ0FBRVQsWUFBWSxFQUFNSyxNQUFPQSxJQUN0RCxFQUFQRSxHQUE0QixpQkFBVEYsRUFBbUIsSUFBSSxJQUFJTSxLQUFPTixFQUFPckIsRUFBb0JVLEVBQUVlLEVBQUlFLEVBQUssU0FBU0EsR0FBTyxPQUFPTixFQUFNTSxJQUFRQyxLQUFLLEtBQU1ELElBQzlJLE9BQU9GLEdBSVJ6QixFQUFvQjZCLEVBQUksU0FBUzFCLEdBQ2hDLElBQUlTLEVBQVNULEdBQVVBLEVBQU9xQixXQUM3QixXQUF3QixPQUFPckIsRUFBZ0IsU0FDL0MsV0FBOEIsT0FBT0EsR0FFdEMsT0FEQUgsRUFBb0JVLEVBQUVFLEVBQVEsSUFBS0EsR0FDNUJBLEdBSVJaLEVBQW9CYSxFQUFJLFNBQVNpQixFQUFRQyxHQUFZLE9BQU9qQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUt1QixFQUFRQyxJQUd6Ry9CLEVBQW9Ca0MsRUFBSSxHQUlqQmxDLEVBQW9CQSxFQUFvQm1DLEVBQUksSyxzQkNsRnJELElBQU1DLEVBQVVDLEVBQVEsSUFJbEJDLEVBQVVGLEVBQVFHLFVBQVVDLE9BQU8sZUFDbkNDLEVBQVNDLFNBQVNDLGNBQWMsVUFDdENGLEVBQU9HLGFBQWEsUUFBUyxTQUM3QkgsRUFBT0csYUFBYSxPQUFRLG1CQUM1QkgsRUFBT0csYUFBYSxNQUFPTixHQUUzQkksU0FBU0csZ0JBQWdCQyxZQUFZTCxHQUNyQ0EsRUFBT00sV0FBV0MsWUFBWVAsR0FJOUJMLEVBQVFhLFFBQVFDLFVBQVVDLGFBRTFCLFNBQWdDQyxHQUNYLGFBQWZBLEVBQVFDLElBRVZDLFlBQVksQ0FDVkMsS0FBTSxVQUNOQyxVQUFXSixFQUFRRyxLQUNuQkYsR0FBSUQsRUFBUUMsR0FDWkksT0FBUUwsRUFBUUssT0FDaEJDLFFBQVNOLEVBQVFNLFNBQVcsSUFDM0IsUUFLUEMsT0FBT0MsaUJBQWlCLFdBQVcsU0FBVUMsR0FDbkIsYUFBcEJBLEVBQU1DLEtBQUtQLEtBQ1RNLEVBQU1DLEtBQUtMLFFBQ2JyQixFQUFRYSxRQUFRYyxZQUFZLENBQzFCUixLQUFNLFVBQ05DLFVBQVdLLEVBQU1DLEtBQUtQLEtBQ3RCRixHQUFJUSxFQUFNQyxLQUFLVCxHQUNmSSxPQUFRSSxFQUFNQyxLQUFLTCxPQUNuQkMsUUFBU0csRUFBTUMsS0FBS0osVUFHSyxVQUFwQkcsRUFBTUMsS0FBS1AsTUFFWE0sRUFBTUMsS0FBS1AsUyxtQkM1Q3hCLFVBRUksRUFBZ0MsQ0FBQyxRQUFrQiwwQkFBUCxFQVV2QyxTQUFVcEQsR0FPakIsYUFFQSxHQUF1QixvQkFBWmlDLFNBQTJCdEIsT0FBT2tELGVBQWU1QixXQUFhdEIsT0FBT2tCLFVBQVcsQ0FDekYsTUFBTWlDLEVBQW1ELDBEQUNuREMsRUFBb0MseVBBT3BDQyxFQUFXLEtBSWYsTUFBTUMsRUFBYyxDQUNsQixPQUFVLENBQ1IsTUFBUyxDQUNQLFFBQVcsRUFDWCxRQUFXLEdBRWIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEdBRWIsSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLElBR2YsVUFBYSxDQUNYLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxHQUViLFlBQWUsQ0FDYixRQUFXLEVBQ1gsUUFBVyxHQUViLFVBQWEsQ0FDWCxRQUFXLEVBQ1gsUUFBVyxHQUViLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLFFBQVcsQ0FDVCxRQUFXLEVBQ1gsUUFBVyxHQUViLEtBQVEsQ0FDTixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxJQUdmLGNBQWlCLENBQ2YsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLEdBRTFCLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxFQUNYLHNCQUF3QixHQUUxQix3QkFBMkIsQ0FDekIsUUFBVyxFQUNYLFFBQVcsR0FFYixhQUFnQixDQUNkLFFBQVcsRUFDWCxRQUFXLEdBRWIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEdBRWIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsd0JBQTJCLENBQ3pCLFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLEdBRTFCLGFBQWdCLENBQ2QsUUFBVyxFQUNYLFFBQVcsRUFDWCxzQkFBd0IsR0FFMUIsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLEdBRWIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLEdBRTFCLFNBQVksQ0FDVixRQUFXLEVBQ1gsUUFBVyxFQUNYLHNCQUF3QixJQUc1QixhQUFnQixDQUNkLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLFlBQWUsQ0FDYixRQUFXLEVBQ1gsUUFBVyxHQUViLGNBQWlCLENBQ2YsUUFBVyxFQUNYLFFBQVcsR0FFYixnQkFBbUIsQ0FDakIsUUFBVyxFQUNYLFFBQVcsR0FFYixlQUFrQixDQUNoQixRQUFXLEVBQ1gsUUFBVyxHQUViLGNBQWlCLENBQ2YsUUFBVyxFQUNYLFFBQVcsR0FFYixtQkFBc0IsQ0FDcEIsUUFBVyxFQUNYLFFBQVcsR0FFYixnQkFBbUIsQ0FDakIsUUFBVyxFQUNYLFFBQVcsR0FFYixpQkFBb0IsQ0FDbEIsUUFBVyxFQUNYLFFBQVcsR0FFYixTQUFZLENBQ1YsUUFBVyxFQUNYLFFBQVcsSUFHZixTQUFZLENBQ1YsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLElBR2YsYUFBZ0IsQ0FDZCxPQUFVLENBQ1IsUUFBVyxFQUNYLFFBQVcsR0FFYixVQUFhLENBQ1gsUUFBVyxFQUNYLFFBQVcsR0FFYixPQUFVLENBQ1IsUUFBVyxFQUNYLFFBQVcsSUFHZixRQUFXLENBQ1QsSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsbUJBQXNCLENBQ3BCLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLElBR2YsU0FBWSxDQUNWLGdCQUFtQixDQUNqQixLQUFRLENBQ04sUUFBVyxFQUNYLFFBQVcsSUFHZixPQUFVLENBQ1IsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEVBQ1gsbUJBQXFCLEtBSTNCLFVBQWEsQ0FDWCxPQUFVLENBQ1IsUUFBVyxFQUNYLFFBQVcsR0FFYixTQUFZLENBQ1YsUUFBVyxFQUNYLFFBQVcsR0FFYixNQUFTLENBQ1AsUUFBVyxFQUNYLFFBQVcsR0FFYixZQUFlLENBQ2IsUUFBVyxFQUNYLFFBQVcsR0FFYixLQUFRLENBQ04sUUFBVyxFQUNYLFFBQVcsRUFDWCxzQkFBd0IsR0FFMUIsTUFBUyxDQUNQLFFBQVcsRUFDWCxRQUFXLEdBRWIsV0FBYyxDQUNaLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsS0FBUSxDQUNOLFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLElBRzVCLFVBQWEsQ0FDWCwwQkFBNkIsQ0FDM0IsUUFBVyxFQUNYLFFBQVcsR0FFYix5QkFBNEIsQ0FDMUIsUUFBVyxFQUNYLFFBQVcsSUFHZixRQUFXLENBQ1QsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsWUFBZSxDQUNiLFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLElBR2YsS0FBUSxDQUNOLGVBQWtCLENBQ2hCLFFBQVcsRUFDWCxRQUFXLEdBRWIsbUJBQXNCLENBQ3BCLFFBQVcsRUFDWCxRQUFXLElBR2YsU0FBWSxDQUNWLGtCQUFxQixDQUNuQixRQUFXLEVBQ1gsUUFBVyxJQUdmLEtBQVEsQ0FDTixXQUFjLENBQ1osUUFBVyxFQUNYLFFBQVcsSUFHZixXQUFjLENBQ1osSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLEdBRWIsV0FBYyxDQUNaLFFBQVcsRUFDWCxRQUFXLEdBRWIsY0FBaUIsQ0FDZixRQUFXLEVBQ1gsUUFBVyxJQUdmLGNBQWlCLENBQ2YsTUFBUyxDQUNQLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsbUJBQXNCLENBQ3BCLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLElBR2YsV0FBYyxDQUNaLFNBQVksQ0FDVixRQUFXLEVBQ1gsUUFBVyxHQUViLFNBQVksQ0FDVixRQUFXLEVBQ1gsUUFBVyxHQUViLEtBQVEsQ0FDTixRQUFXLEVBQ1gsUUFBVyxFQUNYLHNCQUF3QixHQUUxQixRQUFXLENBQ1QsUUFBVyxFQUNYLFFBQVcsR0FFYixTQUFZLENBQ1YsUUFBVyxFQUNYLFFBQVcsRUFDWCxzQkFBd0IsR0FFMUIsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEVBQ1gsc0JBQXdCLEdBRTFCLEtBQVEsQ0FDTixRQUFXLEVBQ1gsUUFBVyxFQUNYLHNCQUF3QixJQUc1QixZQUFlLENBQ2IsU0FBWSxDQUNWLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLElBR2YsUUFBVyxDQUNULGtCQUFxQixDQUNuQixRQUFXLEVBQ1gsUUFBVyxHQUViLGVBQWtCLENBQ2hCLFFBQVcsRUFDWCxRQUFXLEdBRWIsZ0JBQW1CLENBQ2pCLFFBQVcsRUFDWCxRQUFXLEdBRWIsZ0JBQW1CLENBQ2pCLFFBQVcsRUFDWCxRQUFXLEdBRWIsbUJBQXNCLENBQ3BCLFFBQVcsRUFDWCxRQUFXLEdBRWIsWUFBZSxDQUNiLFFBQVcsRUFDWCxRQUFXLEdBRWIsa0JBQXFCLENBQ25CLFFBQVcsRUFDWCxRQUFXLEdBRWIsZ0JBQW1CLENBQ2pCLFFBQVcsRUFDWCxRQUFXLElBR2YsU0FBWSxDQUNWLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLGtCQUFxQixDQUNuQixRQUFXLEVBQ1gsUUFBVyxHQUViLFFBQVcsQ0FDVCxRQUFXLEVBQ1gsUUFBVyxJQUdmLFFBQVcsQ0FDVCxNQUFTLENBQ1AsTUFBUyxDQUNQLFFBQVcsRUFDWCxRQUFXLEdBRWIsSUFBTyxDQUNMLFFBQVcsRUFDWCxRQUFXLEdBRWIsY0FBaUIsQ0FDZixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxJQUdmLFFBQVcsQ0FDVCxJQUFPLENBQ0wsUUFBVyxFQUNYLFFBQVcsR0FFYixjQUFpQixDQUNmLFFBQVcsRUFDWCxRQUFXLElBR2YsS0FBUSxDQUNOLE1BQVMsQ0FDUCxRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxHQUViLGNBQWlCLENBQ2YsUUFBVyxFQUNYLFFBQVcsR0FFYixPQUFVLENBQ1IsUUFBVyxFQUNYLFFBQVcsR0FFYixJQUFPLENBQ0wsUUFBVyxFQUNYLFFBQVcsS0FJakIsS0FBUSxDQUNOLGtCQUFxQixDQUNuQixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLGVBQWtCLENBQ2hCLFFBQVcsRUFDWCxRQUFXLEdBRWIsUUFBVyxDQUNULFFBQVcsRUFDWCxRQUFXLEdBRWIsVUFBYSxDQUNYLFFBQVcsRUFDWCxRQUFXLEdBRWIsY0FBaUIsQ0FDZixRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxHQUViLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLFFBQVcsQ0FDVCxRQUFXLEVBQ1gsUUFBVyxHQUViLGdCQUFtQixDQUNqQixRQUFXLEVBQ1gsUUFBVyxHQUViLFVBQWEsQ0FDWCxRQUFXLEVBQ1gsUUFBVyxHQUViLFVBQWEsQ0FDWCxRQUFXLEVBQ1gsUUFBVyxHQUViLEtBQVEsQ0FDTixRQUFXLEVBQ1gsUUFBVyxHQUViLE1BQVMsQ0FDUCxRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLFVBQWEsQ0FDWCxRQUFXLEVBQ1gsUUFBVyxHQUViLFlBQWUsQ0FDYixRQUFXLEVBQ1gsUUFBVyxHQUViLFFBQVcsQ0FDVCxRQUFXLEVBQ1gsUUFBVyxHQUViLGdCQUFtQixDQUNqQixRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxJQUdmLFNBQVksQ0FDVixJQUFPLENBQ0wsUUFBVyxFQUNYLFFBQVcsSUFHZixjQUFpQixDQUNmLGFBQWdCLENBQ2QsUUFBVyxFQUNYLFFBQVcsR0FFYixTQUFZLENBQ1YsUUFBVyxFQUNYLFFBQVcsSUFHZixXQUFjLENBQ1osdUJBQTBCLENBQ3hCLFFBQVcsRUFDWCxRQUFXLElBR2YsUUFBVyxDQUNULE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLElBQU8sQ0FDTCxRQUFXLEVBQ1gsUUFBVyxHQUViLE9BQVUsQ0FDUixRQUFXLEVBQ1gsUUFBVyxHQUViLFdBQWMsQ0FDWixRQUFXLEVBQ1gsUUFBVyxHQUViLGVBQWtCLENBQ2hCLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEdBRWIsT0FBVSxDQUNSLFFBQVcsRUFDWCxRQUFXLEtBS2pCLEdBQXdDLElBQXBDdEQsT0FBT3VELEtBQUtELEdBQWFFLE9BQzNCLE1BQU0sSUFBSUMsTUFBTSwrREFhbEIsTUFBTUMsVUFBdUJDLFFBQzNCLFlBQVlDLEVBQVlDLEdBQ3RCQyxNQUFNRCxHQUNORSxLQUFLSCxXQUFhQSxFQUdwQixJQUFJL0MsR0FLRixPQUpLa0QsS0FBS0MsSUFBSW5ELElBQ1prRCxLQUFLRSxJQUFJcEQsRUFBS2tELEtBQUtILFdBQVcvQyxJQUd6QmlELE1BQU0zRCxJQUFJVSxJQVdyQixNQStCTXFELEVBQWUsQ0FBQ0MsRUFBU0MsSUFDdEIsSUFBSUMsS0FDTEMsT0FBT25DLFFBQVFvQyxVQUNqQkosRUFBUUssT0FBT0YsT0FBT25DLFFBQVFvQyxXQUNyQkgsRUFBU0ssbUJBQXFCSixFQUFhYixRQUFVLEVBQzlEVyxFQUFRTyxRQUFRTCxFQUFhLElBRTdCRixFQUFRTyxRQUFRTCxJQUtoQk0sRUFBcUJDLEdBQXNCLEdBQVhBLEVBQWUsV0FBYSxZQWtGNURDLEVBQWEsQ0FBQ0MsRUFBUUMsRUFBUUMsSUFDM0IsSUFBSUMsTUFBTUYsRUFBUSxDQUN2QkcsTUFBSyxDQUFDQyxFQUFjQyxFQUFTQyxJQUNwQkwsRUFBUXZGLEtBQUsyRixFQUFTTixLQUFXTyxLQUs5QyxJQUFJbEUsRUFBaUJtRSxTQUFTN0YsS0FBS3FCLEtBQUtkLE9BQU9rQixVQUFVQyxnQkF5QnpELE1BQU1vRSxFQUFhLENBQUNULEVBQVFVLEVBQVcsR0FBSXBCLEVBQVcsTUFDcEQsSUFBSXFCLEVBQVF6RixPQUFPWSxPQUFPLE1BQ3RCOEUsRUFBVyxDQUNiMUIsSUFBRyxDQUFDMkIsRUFBYUMsSUFDUkEsS0FBUWQsR0FBVWMsS0FBUUgsRUFHbkMsSUFBSUUsRUFBYUMsRUFBTUMsR0FDckIsR0FBSUQsS0FBUUgsRUFDVixPQUFPQSxFQUFNRyxHQUdmLEtBQU1BLEtBQVFkLEdBQ1osT0FHRixJQUFJdkUsRUFBUXVFLEVBQU9jLEdBRW5CLEdBQXFCLG1CQUFWckYsRUFJVCxHQUE4QixtQkFBbkJpRixFQUFTSSxHQUVsQnJGLEVBQVFzRSxFQUFXQyxFQUFRQSxFQUFPYyxHQUFPSixFQUFTSSxTQUM3QyxHQUFJekUsRUFBZWlELEVBQVV3QixHQUFPLENBR3pDLElBQUlaLEVBdkhZLEVBQUNuRixFQUFNdUUsSUFDeEIsU0FBOEJVLEtBQVdPLEdBQzlDLEdBQUlBLEVBQUs3QixPQUFTWSxFQUFTMEIsUUFDekIsTUFBTSxJQUFJckMsTUFBTSxxQkFBcUJXLEVBQVMwQixXQUFXbkIsRUFBbUJQLEVBQVMwQixnQkFBZ0JqRyxZQUFld0YsRUFBSzdCLFVBRzNILEdBQUk2QixFQUFLN0IsT0FBU1ksRUFBUzJCLFFBQ3pCLE1BQU0sSUFBSXRDLE1BQU0sb0JBQW9CVyxFQUFTMkIsV0FBV3BCLEVBQW1CUCxFQUFTMkIsZ0JBQWdCbEcsWUFBZXdGLEVBQUs3QixVQUcxSCxPQUFPLElBQUl3QyxRQUFRLENBQUN0QixFQUFTRixLQUMzQixHQUFJSixFQUFTNkIscUJBSVgsSUFDRW5CLEVBQU9qRixNQUFTd0YsRUFBTW5CLEVBQWEsQ0FBRVEsVUFBU0YsVUFBVUosSUFDeEQsTUFBTzhCLEdBQ1BDLFFBQVFDLEtBQVF2RyxFQUFILDJHQUF3SHFHLEdBRXJJcEIsRUFBT2pGLE1BQVN3RixHQUloQmpCLEVBQVM2QixzQkFBdUIsRUFDaEM3QixFQUFTaUMsWUFBYSxFQUV0QjNCLFNBRU9OLEVBQVNpQyxZQUNsQnZCLEVBQU9qRixNQUFTd0YsR0FDaEJYLEtBRUFJLEVBQU9qRixNQUFTd0YsRUFBTW5CLEVBQWEsQ0FBRVEsVUFBU0YsVUFBVUosT0FzRnhDa0MsQ0FBa0JWLEVBQU14QixFQUFTd0IsSUFDL0NyRixFQUFRc0UsRUFBV0MsRUFBUUEsRUFBT2MsR0FBT1osUUFJekN6RSxFQUFRQSxFQUFNTyxLQUFLZ0UsT0FFaEIsSUFBcUIsaUJBQVZ2RSxHQUFnQyxPQUFWQSxJQUFtQlksRUFBZXFFLEVBQVVJLEtBQVN6RSxFQUFlaUQsRUFBVXdCLEdBbUJwSCxPQVhBNUYsT0FBT0MsZUFBZXdGLEVBQU9HLEVBQU0sQ0FDakNXLGNBQWMsRUFDZHJHLFlBQVksRUFDWkMsSUFBRyxJQUNNMkUsRUFBT2MsR0FFaEIsSUFBSXJGLEdBQ0Z1RSxFQUFPYyxHQUFRckYsS0FJWkEsRUFmUEEsRUFBUWdGLEVBQVdoRixFQUFPaUYsRUFBU0ksR0FBT3hCLEVBQVN3QixJQW1CckQsT0FEQUgsRUFBTUcsR0FBUXJGLEVBQ1BBLEdBR1QwRCxJQUFHLENBQUMwQixFQUFhQyxFQUFNckYsRUFBT3NGLEtBQ3hCRCxLQUFRSCxFQUNWQSxFQUFNRyxHQUFRckYsRUFFZHVFLEVBQU9jLEdBQVFyRixHQUVWLEdBR1ROLGVBQWMsQ0FBQzBGLEVBQWFDLEVBQU1ZLElBQ3pCQyxRQUFReEcsZUFBZXdGLEVBQU9HLEVBQU1ZLEdBRzdDRSxlQUFjLENBQUNmLEVBQWFDLElBQ25CYSxRQUFRQyxlQUFlakIsRUFBT0csSUFjckNELEVBQWMzRixPQUFPWSxPQUFPa0UsR0FDaEMsT0FBTyxJQUFJRyxNQUFNVSxFQUFhRCxJQW1CMUJpQixFQUFZQyxJQUFjLENBQzlCLFlBQVk5QixFQUFRK0IsS0FBYXhCLEdBQy9CUCxFQUFPekMsWUFBWXVFLEVBQVd6RyxJQUFJMEcsTUFBY3hCLElBR2xEeUIsWUFBVyxDQUFDaEMsRUFBUStCLElBQ1gvQixFQUFPZ0MsWUFBWUYsRUFBV3pHLElBQUkwRyxJQUczQyxlQUFlL0IsRUFBUStCLEdBQ3JCL0IsRUFBT2lDLGVBQWVILEVBQVd6RyxJQUFJMEcsT0FLekMsSUFBSUcsR0FBdUMsRUFFM0MsTUFBTUMsRUFBb0IsSUFBSXZELEVBQWVtRCxHQUNuQixtQkFBYkEsRUFDRkEsRUFvQkYsU0FBbUJ2RSxFQUFTNEUsRUFBUUMsR0FDekMsSUFFSUMsRUFZQUMsRUFkQUMsR0FBc0IsRUFHdEJDLEVBQXNCLElBQUl2QixRQUFRdEIsSUFDcEMwQyxFQUFzQixTQUFVSSxHQUN6QlIsSUFDSGIsUUFBUUMsS0FBS2hELEdBQW1DLElBQUlLLE9BQVFnRSxPQUM1RFQsR0FBdUMsR0FFekNNLEdBQXNCLEVBQ3RCNUMsRUFBUThDLE1BS1osSUFDRUgsRUFBU1IsRUFBU3ZFLEVBQVM0RSxFQUFRRSxHQUNuQyxNQUFPTSxHQUNQTCxFQUFTckIsUUFBUXhCLE9BQU9rRCxHQUcxQixNQUFNQyxHQUE4QixJQUFYTixJQXhVVjlHLEVBd1V3QzhHLElBdlV4QixpQkFBVjlHLEdBQTRDLG1CQUFmQSxFQUFNcUgsS0FEekNySCxNQTZVZixJQUFlLElBQVg4RyxJQUFvQk0sSUFBcUJMLEVBQzNDLE9BQU8sRUFPVCxNQUFNTyxFQUFxQjFELElBQ3pCQSxFQUFReUQsS0FBS0UsSUFFWFgsRUFBYVcsSUFDWkMsSUFHRCxJQUFJekYsRUFFRkEsRUFERXlGLElBQVVBLGFBQWlCdEUsT0FBa0MsaUJBQWxCc0UsRUFBTXpGLFNBQ3pDeUYsRUFBTXpGLFFBRU4sK0JBR1o2RSxFQUFhLENBQ1hhLG1DQUFtQyxFQUNuQzFGLGNBRUQyRixNQUFNUCxJQUVQdkIsUUFBUTRCLE1BQU0sMENBQTJDTCxNQWM3RCxPQU5FRyxFQURFRixFQUNpQk4sRUFFQUUsSUFJZCxJQUlMVyxFQUE2QixFQUFHMUQsU0FBUUUsV0FBV3lELEtBQ25EN0QsT0FBT25DLFFBQVFvQyxVQUliRCxPQUFPbkMsUUFBUW9DLFVBQVVqQyxVQUFZYSxFQUN2Q3VCLElBRUFGLEVBQU9GLE9BQU9uQyxRQUFRb0MsV0FFZjRELEdBQVNBLEVBQU1ILGtDQUd4QnhELEVBQU8sSUFBSWYsTUFBTTBFLEVBQU03RixVQUV2Qm9DLEVBQVF5RCxJQUlOQyxFQUFxQixDQUFDdkksRUFBTXVFLEVBQVVpRSxLQUFvQmhELEtBQzlELEdBQUlBLEVBQUs3QixPQUFTWSxFQUFTMEIsUUFDekIsTUFBTSxJQUFJckMsTUFBTSxxQkFBcUJXLEVBQVMwQixXQUFXbkIsRUFBbUJQLEVBQVMwQixnQkFBZ0JqRyxZQUFld0YsRUFBSzdCLFVBRzNILEdBQUk2QixFQUFLN0IsT0FBU1ksRUFBUzJCLFFBQ3pCLE1BQU0sSUFBSXRDLE1BQU0sb0JBQW9CVyxFQUFTMkIsV0FBV3BCLEVBQW1CUCxFQUFTMkIsZ0JBQWdCbEcsWUFBZXdGLEVBQUs3QixVQUcxSCxPQUFPLElBQUl3QyxRQUFRLENBQUN0QixFQUFTRixLQUMzQixNQUFNOEQsRUFBWUosRUFBMkJwSCxLQUFLLEtBQU0sQ0FBRTRELFVBQVNGLFdBQ25FYSxFQUFLa0QsS0FBS0QsR0FDVkQsRUFBZ0JwRixlQUFlb0MsTUFJN0JtRCxFQUFpQixDQUNyQnJHLFFBQVMsQ0FDUEMsVUFBV3VFLEVBQVVNLEdBQ3JCd0Isa0JBQW1COUIsRUFBVU0sR0FDN0JoRSxZQUFhbUYsRUFBbUJ0SCxLQUFLLEtBQU0sY0FBZSxDQUFFZ0YsUUFBUyxFQUFHQyxRQUFTLEtBRW5GMkMsS0FBTSxDQUNKekYsWUFBYW1GLEVBQW1CdEgsS0FBSyxLQUFNLGNBQWUsQ0FBRWdGLFFBQVMsRUFBR0MsUUFBUyxNQUcvRTRDLEVBQWtCLENBQ3RCQyxNQUFPLENBQUU5QyxRQUFTLEVBQUdDLFFBQVMsR0FDOUI1RixJQUFLLENBQUUyRixRQUFTLEVBQUdDLFFBQVMsR0FDNUI5QixJQUFLLENBQUU2QixRQUFTLEVBQUdDLFFBQVMsSUFnQjlCLE9BZEF6QyxFQUFZdUYsUUFBVSxDQUNwQkMsUUFBUyxDQUNQQyx5QkFBMEJKLEVBQzFCSyx1QkFBd0JMLEdBRTFCTSxTQUFVLENBQ1JDLHNCQUF1QlAsR0FFekJRLFNBQVUsQ0FDUkMseUJBQTBCVCxFQUMxQlUsaUJBQWtCVixJQUlmcEQsRUFBV2pCLE9BQVFrRSxFQUFnQmxGLElBSzVDakUsRUFBT0QsUUFBVWlFLFNBRWpCaEUsRUFBT0QsUUFBVWtDLFVBNXBDa0MiLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyNDkpO1xuIiwiY29uc3QgYnJvd3NlciA9IHJlcXVpcmUoJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCcpXG5cbi8vIGluamVjdGluZyB0aGUgc2NyaXB0XG5cbmNvbnN0IGNvbnRlbnQgPSBicm93c2VyLmV4dGVuc2lvbi5nZXRVUkwoJ2luamVjdGVkLmpzJylcbmNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpXG5zY3JpcHQuc2V0QXR0cmlidXRlKCdkZWZlcicsICdkZWZlcicpXG5zY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpXG5zY3JpcHQuc2V0QXR0cmlidXRlKCdzcmMnLCBjb250ZW50KVxuLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpXG5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0KVxuc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KVxuXG4vLyBjb250ZW50IHNjcmlwdCBsb2dpY1xuXG5icm93c2VyLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKG1lc3NhZ2VGcm9tQmFja2dyb3VuZClcblxuZnVuY3Rpb24gbWVzc2FnZUZyb21CYWNrZ3JvdW5kIChtZXNzYWdlKSB7XG4gIGlmIChtZXNzYWdlLnRvID09PSAnaW5qZWN0ZWQnKSB7XG4gICAgLy8gcHJveHkgbWVzc2FnZSB0byBpbmplY3RlZFxuICAgIHBvc3RNZXNzYWdlKHtcbiAgICAgIGZyb206ICdjb250ZW50JyxcbiAgICAgIHByb3h5RnJvbTogbWVzc2FnZS5mcm9tLFxuICAgICAgdG86IG1lc3NhZ2UudG8sXG4gICAgICBhY3Rpb246IG1lc3NhZ2UuYWN0aW9uLFxuICAgICAgcGF5bG9hZDogbWVzc2FnZS5wYXlsb2FkIHx8IHt9XG4gICAgfSwgJyonKVxuICB9XG59XG5cbi8vIGxpc3RlbiB0byBtZXNzYWdlcyBmcm9tIGluamVjdGVkIHNjcmlwdFxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgaWYgKGV2ZW50LmRhdGEuZnJvbSA9PT0gJ2luamVjdGVkJykge1xuICAgIGlmIChldmVudC5kYXRhLmFjdGlvbikge1xuICAgICAgYnJvd3Nlci5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgZnJvbTogJ2NvbnRlbnQnLFxuICAgICAgICBwcm94eUZyb206IGV2ZW50LmRhdGEuZnJvbSxcbiAgICAgICAgdG86IGV2ZW50LmRhdGEudG8sXG4gICAgICAgIGFjdGlvbjogZXZlbnQuZGF0YS5hY3Rpb24sXG4gICAgICAgIHBheWxvYWQ6IGV2ZW50LmRhdGEucGF5bG9hZFxuICAgICAgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXZlbnQuZGF0YS5mcm9tID09PSAncG9wdXAnKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ21lc3NhZ2UgZnJvbSBwb3B1cCcsIGV2ZW50LmRhdGEpXG4gIH0gZWxzZSBpZiAoZXZlbnQuZGF0YS5mcm9tICE9PSAnY29udGVudCcpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnc29tZSBvdGhlciBtZXNzYWdlJywgZXZlbnQuZGF0YSlcbiAgfVxufSlcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiLCBbXCJtb2R1bGVcIl0sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShtb2R1bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QpO1xuICAgIGdsb2JhbC5icm93c2VyID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHRoaXMsIGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgLyogd2ViZXh0ZW5zaW9uLXBvbHlmaWxsIC0gdjAuMy4xIC0gVHVlIEF1ZyAyMSAyMDE4IDEwOjA5OjM0ICovXG4gIC8qIC0qLSBNb2RlOiBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGpzLWluZGVudC1sZXZlbDogMiAtKi0gKi9cbiAgLyogdmltOiBzZXQgc3RzPTIgc3c9MiBldCB0dz04MDogKi9cbiAgLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovXG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGlmICh0eXBlb2YgYnJvd3NlciA9PT0gXCJ1bmRlZmluZWRcIiB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYnJvd3NlcikgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBjb25zdCBDSFJPTUVfU0VORF9NRVNTQUdFX0NBTExCQUNLX05PX1JFU1BPTlNFX01FU1NBR0UgPSBcIlRoZSBtZXNzYWdlIHBvcnQgY2xvc2VkIGJlZm9yZSBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZC5cIjtcbiAgICBjb25zdCBTRU5EX1JFU1BPTlNFX0RFUFJFQ0FUSU9OX1dBUk5JTkcgPSBcIlJldHVybmluZyBhIFByb21pc2UgaXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gc2VuZCBhIHJlcGx5IGZyb20gYW4gb25NZXNzYWdlL29uTWVzc2FnZUV4dGVybmFsIGxpc3RlbmVyLCBhcyB0aGUgc2VuZFJlc3BvbnNlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzcGVjcyAoU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvTW96aWxsYS9BZGQtb25zL1dlYkV4dGVuc2lvbnMvQVBJL3J1bnRpbWUvb25NZXNzYWdlKVwiO1xuXG4gICAgLy8gV3JhcHBpbmcgdGhlIGJ1bGsgb2YgdGhpcyBwb2x5ZmlsbCBpbiBhIG9uZS10aW1lLXVzZSBmdW5jdGlvbiBpcyBhIG1pbm9yXG4gICAgLy8gb3B0aW1pemF0aW9uIGZvciBGaXJlZm94LiBTaW5jZSBTcGlkZXJtb25rZXkgZG9lcyBub3QgZnVsbHkgcGFyc2UgdGhlXG4gICAgLy8gY29udGVudHMgb2YgYSBmdW5jdGlvbiB1bnRpbCB0aGUgZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHNpbmNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBhY3R1YWxseSBuZWVkIHRvIGJlIGNhbGxlZCwgdGhpcyBhbGxvd3MgdGhlIHBvbHlmaWxsIHRvIGJlIGluY2x1ZGVkXG4gICAgLy8gaW4gRmlyZWZveCBuZWFybHkgZm9yIGZyZWUuXG4gICAgY29uc3Qgd3JhcEFQSXMgPSAoKSA9PiB7XG4gICAgICAvLyBOT1RFOiBhcGlNZXRhZGF0YSBpcyBhc3NvY2lhdGVkIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhcGktbWV0YWRhdGEuanNvbiBmaWxlXG4gICAgICAvLyBhdCBidWlsZCB0aW1lIGJ5IHJlcGxhY2luZyB0aGUgZm9sbG93aW5nIFwiaW5jbHVkZVwiIHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlXG4gICAgICAvLyBKU09OIGZpbGUuXG4gICAgICBjb25zdCBhcGlNZXRhZGF0YSA9IHtcbiAgICAgICAgXCJhbGFybXNcIjoge1xuICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGVhckFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImJvb2ttYXJrc1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRDaGlsZHJlblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFJlY2VudFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFN1YlRyZWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRUcmVlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVRyZWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWFyY2hcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJicm93c2VyQWN0aW9uXCI6IHtcbiAgICAgICAgICBcImRpc2FibGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbmFibGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEJhZGdlVGV4dFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJvcGVuUG9wdXBcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEJhZGdlVGV4dFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEljb25cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRQb3B1cFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYnJvd3NpbmdEYXRhXCI6IHtcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUNhY2hlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlQ29va2llc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZURvd25sb2Fkc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUZvcm1EYXRhXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlSGlzdG9yeVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUxvY2FsU3RvcmFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVBhc3N3b3Jkc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVBsdWdpbkRhdGFcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImNvbW1hbmRzXCI6IHtcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRleHRNZW51c1wiOiB7XG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJjb29raWVzXCI6IHtcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbENvb2tpZVN0b3Jlc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImRldnRvb2xzXCI6IHtcbiAgICAgICAgICBcImluc3BlY3RlZFdpbmRvd1wiOiB7XG4gICAgICAgICAgICBcImV2YWxcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFuZWxzXCI6IHtcbiAgICAgICAgICAgIFwiY3JlYXRlXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDMsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzLFxuICAgICAgICAgICAgICBcInNpbmdsZUNhbGxiYWNrQXJnXCI6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZG93bmxvYWRzXCI6IHtcbiAgICAgICAgICBcImNhbmNlbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRvd25sb2FkXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZXJhc2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRGaWxlSWNvblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm9wZW5cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXVzZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUZpbGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXN1bWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWFyY2hcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzaG93XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0ZW5zaW9uXCI6IHtcbiAgICAgICAgICBcImlzQWxsb3dlZEZpbGVTY2hlbWVBY2Nlc3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpc0FsbG93ZWRJbmNvZ25pdG9BY2Nlc3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJoaXN0b3J5XCI6IHtcbiAgICAgICAgICBcImFkZFVybFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlbGV0ZUFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRlbGV0ZVJhbmdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVsZXRlVXJsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0VmlzaXRzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VhcmNoXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaTE4blwiOiB7XG4gICAgICAgICAgXCJkZXRlY3RMYW5ndWFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFjY2VwdExhbmd1YWdlc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImlkZW50aXR5XCI6IHtcbiAgICAgICAgICBcImxhdW5jaFdlYkF1dGhGbG93XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaWRsZVwiOiB7XG4gICAgICAgICAgXCJxdWVyeVN0YXRlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWFuYWdlbWVudFwiOiB7XG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRTZWxmXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0RW5hYmxlZFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInVuaW5zdGFsbFNlbGZcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RpZmljYXRpb25zXCI6IHtcbiAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiY3JlYXRlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0UGVybWlzc2lvbkxldmVsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidXBkYXRlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGFnZUFjdGlvblwiOiB7XG4gICAgICAgICAgXCJnZXRQb3B1cFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiaGlkZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEljb25cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRQb3B1cFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2hvd1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInBlcm1pc3Npb25zXCI6IHtcbiAgICAgICAgICBcImNvbnRhaW5zXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInJ1bnRpbWVcIjoge1xuICAgICAgICAgIFwiZ2V0QmFja2dyb3VuZFBhZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRCcm93c2VySW5mb1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFBsYXRmb3JtSW5mb1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm9wZW5PcHRpb25zUGFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlcXVlc3RVcGRhdGVDaGVja1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbmRNZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDNcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VuZE5hdGl2ZU1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRVbmluc3RhbGxVUkxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXNzaW9uc1wiOiB7XG4gICAgICAgICAgXCJnZXREZXZpY2VzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0UmVjZW50bHlDbG9zZWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXN0b3JlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic3RvcmFnZVwiOiB7XG4gICAgICAgICAgXCJsb2NhbFwiOiB7XG4gICAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1hbmFnZWRcIjoge1xuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3luY1wiOiB7XG4gICAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInRhYnNcIjoge1xuICAgICAgICAgIFwiY2FwdHVyZVZpc2libGVUYWJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZXRlY3RMYW5ndWFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRpc2NhcmRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkdXBsaWNhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleGVjdXRlU2NyaXB0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0Q3VycmVudFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFpvb21cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRab29tU2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJoaWdobGlnaHRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbnNlcnRDU1NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicXVlcnlcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWxvYWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVDU1NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZW5kTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFpvb21cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRab29tU2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ0b3BTaXRlc1wiOiB7XG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWJOYXZpZ2F0aW9uXCI6IHtcbiAgICAgICAgICBcImdldEFsbEZyYW1lc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEZyYW1lXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2ViUmVxdWVzdFwiOiB7XG4gICAgICAgICAgXCJoYW5kbGVyQmVoYXZpb3JDaGFuZ2VkXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2luZG93c1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRDdXJyZW50XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0TGFzdEZvY3VzZWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGFwaU1ldGFkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXBpLW1ldGFkYXRhLmpzb24gaGFzIG5vdCBiZWVuIGluY2x1ZGVkIGluIGJyb3dzZXItcG9seWZpbGxcIik7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQSBXZWFrTWFwIHN1YmNsYXNzIHdoaWNoIGNyZWF0ZXMgYW5kIHN0b3JlcyBhIHZhbHVlIGZvciBhbnkga2V5IHdoaWNoIGRvZXNcbiAgICAgICAqIG5vdCBleGlzdCB3aGVuIGFjY2Vzc2VkLCBidXQgYmVoYXZlcyBleGFjdGx5IGFzIGFuIG9yZGluYXJ5IFdlYWtNYXBcbiAgICAgICAqIG90aGVyd2lzZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjcmVhdGVJdGVtXG4gICAgICAgKiAgICAgICAgQSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBpbiBvcmRlciB0byBjcmVhdGUgdGhlIHZhbHVlIGZvciBhbnlcbiAgICAgICAqICAgICAgICBrZXkgd2hpY2ggZG9lcyBub3QgZXhpc3QsIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGFjY2Vzc2VkLiBUaGVcbiAgICAgICAqICAgICAgICBmdW5jdGlvbiByZWNlaXZlcywgYXMgaXRzIG9ubHkgYXJndW1lbnQsIHRoZSBrZXkgYmVpbmcgY3JlYXRlZC5cbiAgICAgICAqL1xuICAgICAgY2xhc3MgRGVmYXVsdFdlYWtNYXAgZXh0ZW5kcyBXZWFrTWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IoY3JlYXRlSXRlbSwgaXRlbXMgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVJdGVtID0gY3JlYXRlSXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldChrZXkpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGtleSwgdGhpcy5jcmVhdGVJdGVtKGtleSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdXBlci5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGFuIG9iamVjdCB3aXRoIGEgYHRoZW5gIG1ldGhvZCwgYW5kIGNhblxuICAgICAgICogdGhlcmVmb3JlIGJlIGFzc3VtZWQgdG8gYmVoYXZlIGFzIGEgUHJvbWlzZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB0ZXN0LlxuICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZW5hYmxlLlxuICAgICAgICovXG4gICAgICBjb25zdCBpc1RoZW5hYmxlID0gdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICB9O1xuXG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB3aGljaCwgd2hlbiBjYWxsZWQsIHdpbGwgcmVzb2x2ZSBvciByZWplY3RcbiAgICAgICAqIHRoZSBnaXZlbiBwcm9taXNlIGJhc2VkIG9uIGhvdyBpdCBpcyBjYWxsZWQ6XG4gICAgICAgKlxuICAgICAgICogLSBJZiwgd2hlbiBjYWxsZWQsIGBjaHJvbWUucnVudGltZS5sYXN0RXJyb3JgIGNvbnRhaW5zIGEgbm9uLW51bGwgb2JqZWN0LFxuICAgICAgICogICB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIHRoYXQgdmFsdWUuXG4gICAgICAgKiAtIElmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBleGFjdGx5IG9uZSBhcmd1bWVudCwgdGhlIHByb21pc2UgaXNcbiAgICAgICAqICAgcmVzb2x2ZWQgdG8gdGhhdCB2YWx1ZS5cbiAgICAgICAqIC0gT3RoZXJ3aXNlLCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB0byBhbiBhcnJheSBjb250YWluaW5nIGFsbCBvZiB0aGVcbiAgICAgICAqICAgZnVuY3Rpb24ncyBhcmd1bWVudHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHByb21pc2VcbiAgICAgICAqICAgICAgICBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x1dGlvbiBhbmQgcmVqZWN0aW9uIGZ1bmN0aW9ucyBvZiBhXG4gICAgICAgKiAgICAgICAgcHJvbWlzZS5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHByb21pc2UucmVzb2x2ZVxuICAgICAgICogICAgICAgIFRoZSBwcm9taXNlJ3MgcmVzb2x1dGlvbiBmdW5jdGlvbi5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHByb21pc2UucmVqZWN0aW9uXG4gICAgICAgKiAgICAgICAgVGhlIHByb21pc2UncyByZWplY3Rpb24gZnVuY3Rpb24uXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gbWV0YWRhdGFcbiAgICAgICAqICAgICAgICBNZXRhZGF0YSBhYm91dCB0aGUgd3JhcHBlZCBtZXRob2Qgd2hpY2ggaGFzIGNyZWF0ZWQgdGhlIGNhbGxiYWNrLlxuICAgICAgICogQHBhcmFtIHtpbnRlZ2VyfSBtZXRhZGF0YS5tYXhSZXNvbHZlZEFyZ3NcbiAgICAgICAqICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHdoaWNoIG1heSBiZSBwYXNzZWQgdG8gdGhlXG4gICAgICAgKiAgICAgICAgY2FsbGJhY2sgY3JlYXRlZCBieSB0aGUgd3JhcHBlZCBhc3luYyBmdW5jdGlvbi5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gICAgICAgKiAgICAgICAgVGhlIGdlbmVyYXRlZCBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgICAqL1xuICAgICAgY29uc3QgbWFrZUNhbGxiYWNrID0gKHByb21pc2UsIG1ldGFkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiAoLi4uY2FsbGJhY2tBcmdzKSA9PiB7XG4gICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnNpbmdsZUNhbGxiYWNrQXJnIHx8IGNhbGxiYWNrQXJncy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGNhbGxiYWNrQXJnc1swXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShjYWxsYmFja0FyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBsdXJhbGl6ZUFyZ3VtZW50cyA9IG51bUFyZ3MgPT4gbnVtQXJncyA9PSAxID8gXCJhcmd1bWVudFwiIDogXCJhcmd1bWVudHNcIjtcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgbWV0YWRhdGEuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgICAqICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHdoaWNoIGlzIGJlaW5nIHdyYXBwZWQuXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gbWV0YWRhdGFcbiAgICAgICAqICAgICAgICBNZXRhZGF0YSBhYm91dCB0aGUgbWV0aG9kIGJlaW5nIHdyYXBwZWQuXG4gICAgICAgKiBAcGFyYW0ge2ludGVnZXJ9IG1ldGFkYXRhLm1pbkFyZ3NcbiAgICAgICAqICAgICAgICBUaGUgbWluaW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHdoaWNoIG11c3QgYmUgcGFzc2VkIHRvIHRoZVxuICAgICAgICogICAgICAgIGZ1bmN0aW9uLiBJZiBjYWxsZWQgd2l0aCBmZXdlciB0aGFuIHRoaXMgbnVtYmVyIG9mIGFyZ3VtZW50cywgdGhlXG4gICAgICAgKiAgICAgICAgd3JhcHBlciB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi5cbiAgICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWV0YWRhdGEubWF4QXJnc1xuICAgICAgICogICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgd2hpY2ggbWF5IGJlIHBhc3NlZCB0byB0aGVcbiAgICAgICAqICAgICAgICBmdW5jdGlvbi4gSWYgY2FsbGVkIHdpdGggbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIGFyZ3VtZW50cywgdGhlXG4gICAgICAgKiAgICAgICAgd3JhcHBlciB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi5cbiAgICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWV0YWRhdGEubWF4UmVzb2x2ZWRBcmdzXG4gICAgICAgKiAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIHRoZVxuICAgICAgICogICAgICAgIGNhbGxiYWNrIGNyZWF0ZWQgYnkgdGhlIHdyYXBwZWQgYXN5bmMgZnVuY3Rpb24uXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKG9iamVjdCwgLi4uKil9XG4gICAgICAgKiAgICAgICBUaGUgZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24uXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHdyYXBBc3luY0Z1bmN0aW9uID0gKG5hbWUsIG1ldGFkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBhc3luY0Z1bmN0aW9uV3JhcHBlcih0YXJnZXQsIC4uLmFyZ3MpIHtcbiAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBtZXRhZGF0YS5taW5BcmdzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0ICR7bWV0YWRhdGEubWluQXJnc30gJHtwbHVyYWxpemVBcmd1bWVudHMobWV0YWRhdGEubWluQXJncyl9IGZvciAke25hbWV9KCksIGdvdCAke2FyZ3MubGVuZ3RofWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1ldGFkYXRhLm1heEFyZ3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbW9zdCAke21ldGFkYXRhLm1heEFyZ3N9ICR7cGx1cmFsaXplQXJndW1lbnRzKG1ldGFkYXRhLm1heEFyZ3MpfSBmb3IgJHtuYW1lfSgpLCBnb3QgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmZhbGxiYWNrVG9Ob0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgQVBJIG1ldGhvZCBoYXMgY3VycmVudGx5IG5vIGNhbGxiYWNrIG9uIENocm9tZSwgYnV0IGl0IHJldHVybiBhIHByb21pc2Ugb24gRmlyZWZveCxcbiAgICAgICAgICAgICAgLy8gYW5kIHNvIHRoZSBwb2x5ZmlsbCB3aWxsIHRyeSB0byBjYWxsIGl0IHdpdGggYSBjYWxsYmFjayBmaXJzdCwgYW5kIGl0IHdpbGwgZmFsbGJhY2tcbiAgICAgICAgICAgICAgLy8gdG8gbm90IHBhc3NpbmcgdGhlIGNhbGxiYWNrIGlmIHRoZSBmaXJzdCBjYWxsIGZhaWxzLlxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSguLi5hcmdzLCBtYWtlQ2FsbGJhY2soeyByZXNvbHZlLCByZWplY3QgfSwgbWV0YWRhdGEpKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoY2JFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHtuYW1lfSBBUEkgbWV0aG9kIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIsIGAgKyBcImZhbGxpbmcgYmFjayB0byBjYWxsIGl0IHdpdGhvdXQgYSBjYWxsYmFjazogXCIsIGNiRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBBUEkgbWV0aG9kIG1ldGFkYXRhLCBzbyB0aGF0IHRoZSBuZXh0IEFQSSBjYWxscyB3aWxsIG5vdCB0cnkgdG9cbiAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIHVuc3VwcG9ydGVkIGNhbGxiYWNrIGFueW1vcmUuXG4gICAgICAgICAgICAgICAgbWV0YWRhdGEuZmFsbGJhY2tUb05vQ2FsbGJhY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YS5ub0NhbGxiYWNrID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS5ub0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIHRhcmdldFtuYW1lXSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MsIG1ha2VDYWxsYmFjayh7IHJlc29sdmUsIHJlamVjdCB9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgLyoqXG4gICAgICAgKiBXcmFwcyBhbiBleGlzdGluZyBtZXRob2Qgb2YgdGhlIHRhcmdldCBvYmplY3QsIHNvIHRoYXQgY2FsbHMgdG8gaXQgYXJlXG4gICAgICAgKiBpbnRlcmNlcHRlZCBieSB0aGUgZ2l2ZW4gd3JhcHBlciBmdW5jdGlvbi4gVGhlIHdyYXBwZXIgZnVuY3Rpb24gcmVjZWl2ZXMsXG4gICAgICAgKiBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIHRoZSBvcmlnaW5hbCBgdGFyZ2V0YCBvYmplY3QsIGZvbGxvd2VkIGJ5IGVhY2ggb2ZcbiAgICAgICAqIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBvcmlnaW5hbCBtZXRob2QuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHRhcmdldFxuICAgICAgICogICAgICAgIFRoZSBvcmlnaW5hbCB0YXJnZXQgb2JqZWN0IHRoYXQgdGhlIHdyYXBwZWQgbWV0aG9kIGJlbG9uZ3MgdG8uXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2RcbiAgICAgICAqICAgICAgICBUaGUgbWV0aG9kIGJlaW5nIHdyYXBwZWQuIFRoaXMgaXMgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mIHRoZSBQcm94eVxuICAgICAgICogICAgICAgIG9iamVjdCB3aGljaCBpcyBjcmVhdGVkIHRvIHdyYXAgdGhlIG1ldGhvZC5cbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHdyYXBwZXJcbiAgICAgICAqICAgICAgICBUaGUgd3JhcHBlciBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgaW4gcGxhY2Ugb2YgYSBkaXJlY3QgaW52b2NhdGlvblxuICAgICAgICogICAgICAgIG9mIHRoZSB3cmFwcGVkIG1ldGhvZC5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7UHJveHk8ZnVuY3Rpb24+fVxuICAgICAgICogICAgICAgIEEgUHJveHkgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gbWV0aG9kLCB3aGljaCBpbnZva2VzIHRoZSBnaXZlbiB3cmFwcGVyXG4gICAgICAgKiAgICAgICAgbWV0aG9kIGluIGl0cyBwbGFjZS5cbiAgICAgICAqL1xuICAgICAgY29uc3Qgd3JhcE1ldGhvZCA9ICh0YXJnZXQsIG1ldGhvZCwgd3JhcHBlcikgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KG1ldGhvZCwge1xuICAgICAgICAgIGFwcGx5KHRhcmdldE1ldGhvZCwgdGhpc09iaiwgYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIuY2FsbCh0aGlzT2JqLCB0YXJnZXQsIC4uLmFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBsZXQgaGFzT3duUHJvcGVydHkgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogV3JhcHMgYW4gb2JqZWN0IGluIGEgUHJveHkgd2hpY2ggaW50ZXJjZXB0cyBhbmQgd3JhcHMgY2VydGFpbiBtZXRob2RzXG4gICAgICAgKiBiYXNlZCBvbiB0aGUgZ2l2ZW4gYHdyYXBwZXJzYCBhbmQgYG1ldGFkYXRhYCBvYmplY3RzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXRcbiAgICAgICAqICAgICAgICBUaGUgdGFyZ2V0IG9iamVjdCB0byB3cmFwLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbd3JhcHBlcnMgPSB7fV1cbiAgICAgICAqICAgICAgICBBbiBvYmplY3QgdHJlZSBjb250YWluaW5nIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBzcGVjaWFsIGNhc2VzLiBBbnlcbiAgICAgICAqICAgICAgICBmdW5jdGlvbiBwcmVzZW50IGluIHRoaXMgb2JqZWN0IHRyZWUgaXMgY2FsbGVkIGluIHBsYWNlIG9mIHRoZVxuICAgICAgICogICAgICAgIG1ldGhvZCBpbiB0aGUgc2FtZSBsb2NhdGlvbiBpbiB0aGUgYHRhcmdldGAgb2JqZWN0IHRyZWUuIFRoZXNlXG4gICAgICAgKiAgICAgICAgd3JhcHBlciBtZXRob2RzIGFyZSBpbnZva2VkIGFzIGRlc2NyaWJlZCBpbiB7QHNlZSB3cmFwTWV0aG9kfS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge29iamVjdH0gW21ldGFkYXRhID0ge31dXG4gICAgICAgKiAgICAgICAgQW4gb2JqZWN0IHRyZWUgY29udGFpbmluZyBtZXRhZGF0YSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVcbiAgICAgICAqICAgICAgICBQcm9taXNlLWJhc2VkIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMuIEFueSBmdW5jdGlvbiBpblxuICAgICAgICogICAgICAgIHRoZSBgdGFyZ2V0YCBvYmplY3QgdHJlZSB3aGljaCBoYXMgYSBjb3JyZXNwb25kaW5nIG1ldGFkYXRhIG9iamVjdFxuICAgICAgICogICAgICAgIGluIHRoZSBzYW1lIGxvY2F0aW9uIGluIHRoZSBgbWV0YWRhdGFgIHRyZWUgaXMgcmVwbGFjZWQgd2l0aCBhblxuICAgICAgICogICAgICAgIGF1dG9tYXRpY2FsbHktZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24sIGFzIGRlc2NyaWJlZCBpblxuICAgICAgICogICAgICAgIHtAc2VlIHdyYXBBc3luY0Z1bmN0aW9ufVxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHtQcm94eTxvYmplY3Q+fVxuICAgICAgICovXG4gICAgICBjb25zdCB3cmFwT2JqZWN0ID0gKHRhcmdldCwgd3JhcHBlcnMgPSB7fSwgbWV0YWRhdGEgPSB7fSkgPT4ge1xuICAgICAgICBsZXQgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBsZXQgaGFuZGxlcnMgPSB7XG4gICAgICAgICAgaGFzKHByb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQgfHwgcHJvcCBpbiBjYWNoZTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZ2V0KHByb3h5VGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICAgICAgaWYgKHByb3AgaW4gY2FjaGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlW3Byb3BdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIShwcm9wIGluIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCBvbiB0aGUgdW5kZXJseWluZyBvYmplY3QuIENoZWNrIGlmIHdlIG5lZWQgdG8gZG9cbiAgICAgICAgICAgICAgLy8gYW55IHdyYXBwaW5nLlxuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygd3JhcHBlcnNbcHJvcF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBzcGVjaWFsLWNhc2Ugd3JhcHBlciBmb3IgdGhpcyBtZXRob2QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwTWV0aG9kKHRhcmdldCwgdGFyZ2V0W3Byb3BdLCB3cmFwcGVyc1twcm9wXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzT3duUHJvcGVydHkobWV0YWRhdGEsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCB3ZSBoYXZlIG1ldGFkYXRhIGZvci4gQ3JlYXRlIGFcbiAgICAgICAgICAgICAgICAvLyBQcm9taXNlIHdyYXBwZXIgZm9yIGl0LlxuICAgICAgICAgICAgICAgIGxldCB3cmFwcGVyID0gd3JhcEFzeW5jRnVuY3Rpb24ocHJvcCwgbWV0YWRhdGFbcHJvcF0pO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gd3JhcE1ldGhvZCh0YXJnZXQsIHRhcmdldFtwcm9wXSwgd3JhcHBlcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG1ldGhvZCB0aGF0IHdlIGRvbid0IGtub3cgb3IgY2FyZSBhYm91dC4gUmV0dXJuIHRoZVxuICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIG1ldGhvZCwgYm91bmQgdG8gdGhlIHVuZGVybHlpbmcgb2JqZWN0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuYmluZCh0YXJnZXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAoaGFzT3duUHJvcGVydHkod3JhcHBlcnMsIHByb3ApIHx8IGhhc093blByb3BlcnR5KG1ldGFkYXRhLCBwcm9wKSkpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBvYmplY3QgdGhhdCB3ZSBuZWVkIHRvIGRvIHNvbWUgd3JhcHBpbmcgZm9yIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgICAvLyBvZi4gQ3JlYXRlIGEgc3ViLW9iamVjdCB3cmFwcGVyIGZvciBpdCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjaGlsZFxuICAgICAgICAgICAgICAvLyBtZXRhZGF0YS5cbiAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwT2JqZWN0KHZhbHVlLCB3cmFwcGVyc1twcm9wXSwgbWV0YWRhdGFbcHJvcF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgd3JhcHBpbmcgZm9yIHRoaXMgcHJvcGVydHksXG4gICAgICAgICAgICAgIC8vIHNvIGp1c3QgZm9yd2FyZCBhbGwgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIG9iamVjdC5cbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNhY2hlLCBwcm9wLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIHNldChwcm94eVRhcmdldCwgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICBpZiAocHJvcCBpbiBjYWNoZSkge1xuICAgICAgICAgICAgICBjYWNoZVtwcm9wXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkocHJveHlUYXJnZXQsIHByb3AsIGRlc2MpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGNhY2hlLCBwcm9wLCBkZXNjKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZGVsZXRlUHJvcGVydHkocHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGNhY2hlLCBwcm9wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUGVyIGNvbnRyYWN0IG9mIHRoZSBQcm94eSBBUEksIHRoZSBcImdldFwiIHByb3h5IGhhbmRsZXIgbXVzdCByZXR1cm4gdGhlXG4gICAgICAgIC8vIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSB0YXJnZXQgaWYgdGhhdCB2YWx1ZSBpcyBkZWNsYXJlZCByZWFkLW9ubHkgYW5kXG4gICAgICAgIC8vIG5vbi1jb25maWd1cmFibGUuIEZvciB0aGlzIHJlYXNvbiwgd2UgY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZVxuICAgICAgICAvLyBwcm90b3R5cGUgc2V0IHRvIGB0YXJnZXRgIGluc3RlYWQgb2YgdXNpbmcgYHRhcmdldGAgZGlyZWN0bHkuXG4gICAgICAgIC8vIE90aGVyd2lzZSB3ZSBjYW5ub3QgcmV0dXJuIGEgY3VzdG9tIG9iamVjdCBmb3IgQVBJcyB0aGF0XG4gICAgICAgIC8vIGFyZSBkZWNsYXJlZCByZWFkLW9ubHkgYW5kIG5vbi1jb25maWd1cmFibGUsIHN1Y2ggYXMgYGNocm9tZS5kZXZ0b29sc2AuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZSBwcm94eSBoYW5kbGVycyB0aGVtc2VsdmVzIHdpbGwgc3RpbGwgdXNlIHRoZSBvcmlnaW5hbCBgdGFyZ2V0YFxuICAgICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBgcHJveHlUYXJnZXRgLCBzbyB0aGF0IHRoZSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGFyZVxuICAgICAgICAvLyBkZXJlZmVyZW5jZWQgdmlhIHRoZSBvcmlnaW5hbCB0YXJnZXRzLlxuICAgICAgICBsZXQgcHJveHlUYXJnZXQgPSBPYmplY3QuY3JlYXRlKHRhcmdldCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkocHJveHlUYXJnZXQsIGhhbmRsZXJzKTtcbiAgICAgIH07XG5cbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIHNldCBvZiB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgYW4gZXZlbnQgb2JqZWN0LCB3aGljaCBoYW5kbGVzXG4gICAgICAgKiB3cmFwcGluZyBvZiBsaXN0ZW5lciBmdW5jdGlvbnMgdGhhdCB0aG9zZSBtZXNzYWdlcyBhcmUgcGFzc2VkLlxuICAgICAgICpcbiAgICAgICAqIEEgc2luZ2xlIHdyYXBwZXIgaXMgY3JlYXRlZCBmb3IgZWFjaCBsaXN0ZW5lciBmdW5jdGlvbiwgYW5kIHN0b3JlZCBpbiBhXG4gICAgICAgKiBtYXAuIFN1YnNlcXVlbnQgY2FsbHMgdG8gYGFkZExpc3RlbmVyYCwgYGhhc0xpc3RlbmVyYCwgb3IgYHJlbW92ZUxpc3RlbmVyYFxuICAgICAgICogcmV0cmlldmUgdGhlIG9yaWdpbmFsIHdyYXBwZXIsIHNvIHRoYXQgIGF0dGVtcHRzIHRvIHJlbW92ZSBhXG4gICAgICAgKiBwcmV2aW91c2x5LWFkZGVkIGxpc3RlbmVyIHdvcmsgYXMgZXhwZWN0ZWQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtEZWZhdWx0V2Vha01hcDxmdW5jdGlvbiwgZnVuY3Rpb24+fSB3cmFwcGVyTWFwXG4gICAgICAgKiAgICAgICAgQSBEZWZhdWx0V2Vha01hcCBvYmplY3Qgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIHdyYXBwZXJcbiAgICAgICAqICAgICAgICBmb3IgYSBnaXZlbiBsaXN0ZW5lciBmdW5jdGlvbiB3aGVuIG9uZSBkb2VzIG5vdCBleGlzdCwgYW5kIHJldHJpZXZlXG4gICAgICAgKiAgICAgICAgYW4gZXhpc3Rpbmcgb25lIHdoZW4gaXQgZG9lcy5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgICAgICovXG4gICAgICBjb25zdCB3cmFwRXZlbnQgPSB3cmFwcGVyTWFwID0+ICh7XG4gICAgICAgIGFkZExpc3RlbmVyKHRhcmdldCwgbGlzdGVuZXIsIC4uLmFyZ3MpIHtcbiAgICAgICAgICB0YXJnZXQuYWRkTGlzdGVuZXIod3JhcHBlck1hcC5nZXQobGlzdGVuZXIpLCAuLi5hcmdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBoYXNMaXN0ZW5lcih0YXJnZXQsIGxpc3RlbmVyKSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldC5oYXNMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lcikpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZUxpc3RlbmVyKHRhcmdldCwgbGlzdGVuZXIpIHtcbiAgICAgICAgICB0YXJnZXQucmVtb3ZlTGlzdGVuZXIod3JhcHBlck1hcC5nZXQobGlzdGVuZXIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEtlZXAgdHJhY2sgaWYgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcgaGFzIGJlZW4gbG9nZ2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgICBsZXQgbG9nZ2VkU2VuZFJlc3BvbnNlRGVwcmVjYXRpb25XYXJuaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IG9uTWVzc2FnZVdyYXBwZXJzID0gbmV3IERlZmF1bHRXZWFrTWFwKGxpc3RlbmVyID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGxpc3RlbmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdyYXBzIGEgbWVzc2FnZSBsaXN0ZW5lciBmdW5jdGlvbiBzbyB0aGF0IGl0IG1heSBzZW5kIHJlc3BvbnNlcyBiYXNlZCBvblxuICAgICAgICAgKiBpdHMgcmV0dXJuIHZhbHVlLCByYXRoZXIgdGhhbiBieSByZXR1cm5pbmcgYSBzZW50aW5lbCB2YWx1ZSBhbmQgY2FsbGluZyBhXG4gICAgICAgICAqIGNhbGxiYWNrLiBJZiB0aGUgbGlzdGVuZXIgZnVuY3Rpb24gcmV0dXJucyBhIFByb21pc2UsIHRoZSByZXNwb25zZSBpc1xuICAgICAgICAgKiBzZW50IHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gbWVzc2FnZVxuICAgICAgICAgKiAgICAgICAgVGhlIG1lc3NhZ2Ugc2VudCBieSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjaGFubmVsLlxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gc2VuZGVyXG4gICAgICAgICAqICAgICAgICBEZXRhaWxzIGFib3V0IHRoZSBzZW5kZXIgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKil9IHNlbmRSZXNwb25zZVxuICAgICAgICAgKiAgICAgICAgQSBjYWxsYmFjayB3aGljaCwgd2hlbiBjYWxsZWQgd2l0aCBhbiBhcmJpdHJhcnkgYXJndW1lbnQsIHNlbmRzXG4gICAgICAgICAqICAgICAgICB0aGF0IHZhbHVlIGFzIGEgcmVzcG9uc2UuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKiAgICAgICAgVHJ1ZSBpZiB0aGUgd3JhcHBlZCBsaXN0ZW5lciByZXR1cm5lZCBhIFByb21pc2UsIHdoaWNoIHdpbGwgbGF0ZXJcbiAgICAgICAgICogICAgICAgIHlpZWxkIGEgcmVzcG9uc2UuIEZhbHNlIG90aGVyd2lzZS5cbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBvbk1lc3NhZ2UobWVzc2FnZSwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpIHtcbiAgICAgICAgICBsZXQgZGlkQ2FsbFNlbmRSZXNwb25zZSA9IGZhbHNlO1xuXG4gICAgICAgICAgbGV0IHdyYXBwZWRTZW5kUmVzcG9uc2U7XG4gICAgICAgICAgbGV0IHNlbmRSZXNwb25zZVByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHdyYXBwZWRTZW5kUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgaWYgKCFsb2dnZWRTZW5kUmVzcG9uc2VEZXByZWNhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oU0VORF9SRVNQT05TRV9ERVBSRUNBVElPTl9XQVJOSU5HLCBuZXcgRXJyb3IoKS5zdGFjayk7XG4gICAgICAgICAgICAgICAgbG9nZ2VkU2VuZFJlc3BvbnNlRGVwcmVjYXRpb25XYXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkaWRDYWxsU2VuZFJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbGlzdGVuZXIobWVzc2FnZSwgc2VuZGVyLCB3cmFwcGVkU2VuZFJlc3BvbnNlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFByb21pc2UucmVqZWN0KGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNSZXN1bHRUaGVuYWJsZSA9IHJlc3VsdCAhPT0gdHJ1ZSAmJiBpc1RoZW5hYmxlKHJlc3VsdCk7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgbGlzdGVuZXIgZGlkbid0IHJldHVybmVkIHRydWUgb3IgYSBQcm9taXNlLCBvciBjYWxsZWRcbiAgICAgICAgICAvLyB3cmFwcGVkU2VuZFJlc3BvbnNlIHN5bmNocm9ub3VzbHksIHdlIGNhbiBleGl0IGVhcmxpZXJcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIHdpbGwgYmUgbm8gcmVzcG9uc2Ugc2VudCBmcm9tIHRoaXMgbGlzdGVuZXIuXG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSAmJiAhaXNSZXN1bHRUaGVuYWJsZSAmJiAhZGlkQ2FsbFNlbmRSZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEEgc21hbGwgaGVscGVyIHRvIHNlbmQgdGhlIG1lc3NhZ2UgaWYgdGhlIHByb21pc2UgcmVzb2x2ZXNcbiAgICAgICAgICAvLyBhbmQgYW4gZXJyb3IgaWYgdGhlIHByb21pc2UgcmVqZWN0cyAoYSB3cmFwcGVkIHNlbmRNZXNzYWdlIGhhc1xuICAgICAgICAgIC8vIHRvIHRyYW5zbGF0ZSB0aGUgbWVzc2FnZSBpbnRvIGEgcmVzb2x2ZWQgcHJvbWlzZSBvciBhIHJlamVjdGVkXG4gICAgICAgICAgLy8gcHJvbWlzZSkuXG4gICAgICAgICAgY29uc3Qgc2VuZFByb21pc2VkUmVzdWx0ID0gcHJvbWlzZSA9PiB7XG4gICAgICAgICAgICBwcm9taXNlLnRoZW4obXNnID0+IHtcbiAgICAgICAgICAgICAgLy8gc2VuZCB0aGUgbWVzc2FnZSB2YWx1ZS5cbiAgICAgICAgICAgICAgc2VuZFJlc3BvbnNlKG1zZyk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIC8vIFNlbmQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvciBpZiB0aGUgcmVqZWN0ZWQgdmFsdWVcbiAgICAgICAgICAgICAgLy8gaXMgYW4gaW5zdGFuY2Ugb2YgZXJyb3IsIG9yIHRoZSBvYmplY3QgaXRzZWxmIG90aGVyd2lzZS5cbiAgICAgICAgICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICAgICAgICAgIGlmIChlcnJvciAmJiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgZXJyb3IubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkXCI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzZW5kUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIF9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgLy8gUHJpbnQgYW4gZXJyb3Igb24gdGhlIGNvbnNvbGUgaWYgdW5hYmxlIHRvIHNlbmQgdGhlIHJlc3BvbnNlLlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHNlbmQgb25NZXNzYWdlIHJlamVjdGVkIHJlcGx5XCIsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gSWYgdGhlIGxpc3RlbmVyIHJldHVybmVkIGEgUHJvbWlzZSwgc2VuZCB0aGUgcmVzb2x2ZWQgdmFsdWUgYXMgYVxuICAgICAgICAgIC8vIHJlc3VsdCwgb3RoZXJ3aXNlIHdhaXQgdGhlIHByb21pc2UgcmVsYXRlZCB0byB0aGUgd3JhcHBlZFNlbmRSZXNwb25zZVxuICAgICAgICAgIC8vIGNhbGxiYWNrIHRvIHJlc29sdmUgYW5kIHNlbmQgaXQgYXMgYSByZXNwb25zZS5cbiAgICAgICAgICBpZiAoaXNSZXN1bHRUaGVuYWJsZSkge1xuICAgICAgICAgICAgc2VuZFByb21pc2VkUmVzdWx0KHJlc3VsdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbmRQcm9taXNlZFJlc3VsdChzZW5kUmVzcG9uc2VQcm9taXNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBMZXQgQ2hyb21lIGtub3cgdGhhdCB0aGUgbGlzdGVuZXIgaXMgcmVwbHlpbmcuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd3JhcHBlZFNlbmRNZXNzYWdlQ2FsbGJhY2sgPSAoeyByZWplY3QsIHJlc29sdmUgfSwgcmVwbHkpID0+IHtcbiAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgIC8vIERldGVjdCB3aGVuIG5vbmUgb2YgdGhlIGxpc3RlbmVycyByZXBsaWVkIHRvIHRoZSBzZW5kTWVzc2FnZSBjYWxsIGFuZCByZXNvbHZlXG4gICAgICAgICAgLy8gdGhlIHByb21pc2UgdG8gdW5kZWZpbmVkIGFzIGluIEZpcmVmb3guXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9pc3N1ZXMvMTMwXG4gICAgICAgICAgaWYgKGNocm9tZS5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlID09PSBDSFJPTUVfU0VORF9NRVNTQUdFX0NBTExCQUNLX05PX1JFU1BPTlNFX01FU1NBR0UpIHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGNocm9tZS5ydW50aW1lLmxhc3RFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcGx5ICYmIHJlcGx5Ll9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXykge1xuICAgICAgICAgIC8vIENvbnZlcnQgYmFjayB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgaW50b1xuICAgICAgICAgIC8vIGFuIEVycm9yIGluc3RhbmNlLlxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVwbHkubWVzc2FnZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVwbHkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3cmFwcGVkU2VuZE1lc3NhZ2UgPSAobmFtZSwgbWV0YWRhdGEsIGFwaU5hbWVzcGFjZU9iaiwgLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBtZXRhZGF0YS5taW5BcmdzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAke21ldGFkYXRhLm1pbkFyZ3N9ICR7cGx1cmFsaXplQXJndW1lbnRzKG1ldGFkYXRhLm1pbkFyZ3MpfSBmb3IgJHtuYW1lfSgpLCBnb3QgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1ldGFkYXRhLm1heEFyZ3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IG1vc3QgJHttZXRhZGF0YS5tYXhBcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5tYXhBcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRDYiA9IHdyYXBwZWRTZW5kTWVzc2FnZUNhbGxiYWNrLmJpbmQobnVsbCwgeyByZXNvbHZlLCByZWplY3QgfSk7XG4gICAgICAgICAgYXJncy5wdXNoKHdyYXBwZWRDYik7XG4gICAgICAgICAgYXBpTmFtZXNwYWNlT2JqLnNlbmRNZXNzYWdlKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHN0YXRpY1dyYXBwZXJzID0ge1xuICAgICAgICBydW50aW1lOiB7XG4gICAgICAgICAgb25NZXNzYWdlOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICAgIG9uTWVzc2FnZUV4dGVybmFsOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICAgIHNlbmRNZXNzYWdlOiB3cmFwcGVkU2VuZE1lc3NhZ2UuYmluZChudWxsLCBcInNlbmRNZXNzYWdlXCIsIHsgbWluQXJnczogMSwgbWF4QXJnczogMyB9KVxuICAgICAgICB9LFxuICAgICAgICB0YWJzOiB7XG4gICAgICAgICAgc2VuZE1lc3NhZ2U6IHdyYXBwZWRTZW5kTWVzc2FnZS5iaW5kKG51bGwsIFwic2VuZE1lc3NhZ2VcIiwgeyBtaW5BcmdzOiAyLCBtYXhBcmdzOiAzIH0pXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzZXR0aW5nTWV0YWRhdGEgPSB7XG4gICAgICAgIGNsZWFyOiB7IG1pbkFyZ3M6IDEsIG1heEFyZ3M6IDEgfSxcbiAgICAgICAgZ2V0OiB7IG1pbkFyZ3M6IDEsIG1heEFyZ3M6IDEgfSxcbiAgICAgICAgc2V0OiB7IG1pbkFyZ3M6IDEsIG1heEFyZ3M6IDEgfVxuICAgICAgfTtcbiAgICAgIGFwaU1ldGFkYXRhLnByaXZhY3kgPSB7XG4gICAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgICBuZXR3b3JrUHJlZGljdGlvbkVuYWJsZWQ6IHNldHRpbmdNZXRhZGF0YSxcbiAgICAgICAgICB3ZWJSVENJUEhhbmRsaW5nUG9saWN5OiBzZXR0aW5nTWV0YWRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBwYXNzd29yZFNhdmluZ0VuYWJsZWQ6IHNldHRpbmdNZXRhZGF0YVxuICAgICAgICB9LFxuICAgICAgICB3ZWJzaXRlczoge1xuICAgICAgICAgIGh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZDogc2V0dGluZ01ldGFkYXRhLFxuICAgICAgICAgIHJlZmVycmVyc0VuYWJsZWQ6IHNldHRpbmdNZXRhZGF0YVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gd3JhcE9iamVjdChjaHJvbWUsIHN0YXRpY1dyYXBwZXJzLCBhcGlNZXRhZGF0YSk7XG4gICAgfTtcblxuICAgIC8vIFRoZSBidWlsZCBwcm9jZXNzIGFkZHMgYSBVTUQgd3JhcHBlciBhcm91bmQgdGhpcyBmaWxlLCB3aGljaCBtYWtlcyB0aGVcbiAgICAvLyBgbW9kdWxlYCB2YXJpYWJsZSBhdmFpbGFibGUuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB3cmFwQVBJcygpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBicm93c2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gIH1cbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJvd3Nlci1wb2x5ZmlsbC5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./content.js","webpack:///../node_modules/webextension-polyfill/dist/browser-polyfill.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","browser","require","content","extension","getURL","script","document","createElement","setAttribute","documentElement","appendChild","parentNode","removeChild","runtime","onMessage","addListener","message","to","postMessage","from","proxyFrom","action","payload","window","addEventListener","event","data","sendMessage","getPrototypeOf","CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE","SEND_RESPONSE_DEPRECATION_WARNING","wrapAPIs","apiMetadata","keys","length","Error","DefaultWeakMap","WeakMap","createItem","items","super","this","has","set","makeCallback","promise","metadata","callbackArgs","chrome","lastError","reject","singleCallbackArg","resolve","pluralizeArguments","numArgs","wrapMethod","target","method","wrapper","Proxy","apply","targetMethod","thisObj","args","Function","wrapObject","wrappers","cache","handlers","proxyTarget","prop","receiver","minArgs","maxArgs","Promise","fallbackToNoCallback","cbError","console","warn","noCallback","wrapAsyncFunction","configurable","desc","Reflect","deleteProperty","wrapEvent","wrapperMap","listener","hasListener","removeListener","loggedSendResponseDeprecationWarning","onMessageWrappers","sender","sendResponse","wrappedSendResponse","result","didCallSendResponse","sendResponsePromise","response","stack","err","isResultThenable","then","sendPromisedResult","msg","error","__mozWebExtensionPolyfillReject__","catch","wrappedSendMessageCallback","reply","wrappedSendMessage","apiNamespaceObj","wrappedCb","push","staticWrappers","onMessageExternal","tabs","settingMetadata","clear","privacy","network","networkPredictionEnabled","webRTCIPHandlingPolicy","services","passwordSavingEnabled","websites","hyperlinkAuditingEnabled","referrersEnabled"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,K,sBClFrD,IAAMC,EAAUC,EAAQ,IAIlBC,EAAUF,EAAQG,UAAUC,OAAO,eACnCC,EAASC,SAASC,cAAc,UACtCF,EAAOG,aAAa,QAAS,SAC7BH,EAAOG,aAAa,OAAQ,mBAC5BH,EAAOG,aAAa,MAAON,GAE3BI,SAASG,gBAAgBC,YAAYL,GACrCA,EAAOM,WAAWC,YAAYP,GAI9BL,EAAQa,QAAQC,UAAUC,aAE1B,SAAgCC,GACX,aAAfA,EAAQC,IAEVC,YAAY,CACVC,KAAM,UACNC,UAAWJ,EAAQG,KACnBF,GAAID,EAAQC,GACZI,OAAQL,EAAQK,OAChBC,QAASN,EAAQM,SAAW,IAC3B,QAKPC,OAAOC,iBAAiB,WAAW,SAAUC,GACnB,aAApBA,EAAMC,KAAKP,KACTM,EAAMC,KAAKL,QACbrB,EAAQa,QAAQc,YAAY,CAC1BR,KAAM,UACNC,UAAWK,EAAMC,KAAKP,KACtBF,GAAIQ,EAAMC,KAAKT,GACfI,OAAQI,EAAMC,KAAKL,OACnBC,QAASG,EAAMC,KAAKJ,UAGK,UAApBG,EAAMC,KAAKP,MAEXM,EAAMC,KAAKP,S,mBC5CxB,UAEI,EAAgC,CAAC,QAAkB,0BAAP,EAUvC,SAAUpD,GAOjB,aAEA,GAAuB,oBAAZiC,SAA2BtB,OAAOkD,eAAe5B,WAAatB,OAAOkB,UAAW,CACzF,MAAMiC,EAAmD,0DACnDC,EAAoC,yPAOpCC,EAAW,KAIf,MAAMC,EAAc,CAClB,OAAU,CACR,MAAS,CACP,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,UAAa,CACX,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,cAAiB,CACf,QAAW,CACT,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,OAAU,CACR,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,wBAA2B,CACzB,QAAW,EACX,QAAW,GAEb,aAAgB,CACd,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,wBAA2B,CACzB,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,aAAgB,CACd,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,QAAW,CACT,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,SAAY,CACV,QAAW,EACX,QAAW,EACX,sBAAwB,IAG5B,aAAgB,CACd,OAAU,CACR,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,iBAAoB,CAClB,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,IAGf,SAAY,CACV,OAAU,CACR,QAAW,EACX,QAAW,IAGf,aAAgB,CACd,OAAU,CACR,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,QAAW,CACT,IAAO,CACL,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,IAGf,SAAY,CACV,gBAAmB,CACjB,KAAQ,CACN,QAAW,EACX,QAAW,IAGf,OAAU,CACR,OAAU,CACR,QAAW,EACX,QAAW,EACX,mBAAqB,KAI3B,UAAa,CACX,OAAU,CACR,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,MAAS,CACP,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,MAAS,CACP,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,EACX,sBAAwB,IAG5B,UAAa,CACX,0BAA6B,CAC3B,QAAW,EACX,QAAW,GAEb,yBAA4B,CAC1B,QAAW,EACX,QAAW,IAGf,QAAW,CACT,OAAU,CACR,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,KAAQ,CACN,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,IAGf,SAAY,CACV,kBAAqB,CACnB,QAAW,EACX,QAAW,IAGf,KAAQ,CACN,WAAc,CACZ,QAAW,EACX,QAAW,IAGf,WAAc,CACZ,IAAO,CACL,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,IAGf,cAAiB,CACf,MAAS,CACP,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,WAAc,CACZ,SAAY,CACV,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,QAAW,CACT,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,SAAY,CACV,QAAW,EACX,QAAW,EACX,sBAAwB,GAE1B,KAAQ,CACN,QAAW,EACX,QAAW,EACX,sBAAwB,IAG5B,YAAe,CACb,SAAY,CACV,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,IAGf,QAAW,CACT,kBAAqB,CACnB,QAAW,EACX,QAAW,GAEb,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,mBAAsB,CACpB,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,kBAAqB,CACnB,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,IAGf,SAAY,CACV,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,kBAAqB,CACnB,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,IAGf,QAAW,CACT,MAAS,CACP,MAAS,CACP,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,IAGf,QAAW,CACT,IAAO,CACL,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,IAGf,KAAQ,CACN,MAAS,CACP,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,KAIjB,KAAQ,CACN,kBAAqB,CACnB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,cAAiB,CACf,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,KAAQ,CACN,QAAW,EACX,QAAW,GAEb,MAAS,CACP,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,UAAa,CACX,QAAW,EACX,QAAW,GAEb,YAAe,CACb,QAAW,EACX,QAAW,GAEb,QAAW,CACT,QAAW,EACX,QAAW,GAEb,gBAAmB,CACjB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,IAGf,SAAY,CACV,IAAO,CACL,QAAW,EACX,QAAW,IAGf,cAAiB,CACf,aAAgB,CACd,QAAW,EACX,QAAW,GAEb,SAAY,CACV,QAAW,EACX,QAAW,IAGf,WAAc,CACZ,uBAA0B,CACxB,QAAW,EACX,QAAW,IAGf,QAAW,CACT,OAAU,CACR,QAAW,EACX,QAAW,GAEb,IAAO,CACL,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,WAAc,CACZ,QAAW,EACX,QAAW,GAEb,eAAkB,CAChB,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,GAEb,OAAU,CACR,QAAW,EACX,QAAW,KAKjB,GAAwC,IAApCtD,OAAOuD,KAAKD,GAAaE,OAC3B,MAAM,IAAIC,MAAM,+DAalB,MAAMC,UAAuBC,QAC3B,YAAYC,EAAYC,GACtBC,MAAMD,GACNE,KAAKH,WAAaA,EAGpB,IAAI/C,GAKF,OAJKkD,KAAKC,IAAInD,IACZkD,KAAKE,IAAIpD,EAAKkD,KAAKH,WAAW/C,IAGzBiD,MAAM3D,IAAIU,IAWrB,MA+BMqD,EAAe,CAACC,EAASC,IACtB,IAAIC,KACLC,OAAOnC,QAAQoC,UACjBJ,EAAQK,OAAOF,OAAOnC,QAAQoC,WACrBH,EAASK,mBAAqBJ,EAAab,QAAU,EAC9DW,EAAQO,QAAQL,EAAa,IAE7BF,EAAQO,QAAQL,IAKhBM,EAAqBC,GAAsB,GAAXA,EAAe,WAAa,YAkF5DC,EAAa,CAACC,EAAQC,EAAQC,IAC3B,IAAIC,MAAMF,EAAQ,CACvBG,MAAK,CAACC,EAAcC,EAASC,IACpBL,EAAQvF,KAAK2F,EAASN,KAAWO,KAK9C,IAAIlE,EAAiBmE,SAAS7F,KAAKqB,KAAKd,OAAOkB,UAAUC,gBAyBzD,MAAMoE,EAAa,CAACT,EAAQU,EAAW,GAAIpB,EAAW,MACpD,IAAIqB,EAAQzF,OAAOY,OAAO,MACtB8E,EAAW,CACb1B,IAAG,CAAC2B,EAAaC,IACRA,KAAQd,GAAUc,KAAQH,EAGnC,IAAIE,EAAaC,EAAMC,GACrB,GAAID,KAAQH,EACV,OAAOA,EAAMG,GAGf,KAAMA,KAAQd,GACZ,OAGF,IAAIvE,EAAQuE,EAAOc,GAEnB,GAAqB,mBAAVrF,EAIT,GAA8B,mBAAnBiF,EAASI,GAElBrF,EAAQsE,EAAWC,EAAQA,EAAOc,GAAOJ,EAASI,SAC7C,GAAIzE,EAAeiD,EAAUwB,GAAO,CAGzC,IAAIZ,EAvHY,EAACnF,EAAMuE,IACxB,SAA8BU,KAAWO,GAC9C,GAAIA,EAAK7B,OAASY,EAAS0B,QACzB,MAAM,IAAIrC,MAAM,qBAAqBW,EAAS0B,WAAWnB,EAAmBP,EAAS0B,gBAAgBjG,YAAewF,EAAK7B,UAG3H,GAAI6B,EAAK7B,OAASY,EAAS2B,QACzB,MAAM,IAAItC,MAAM,oBAAoBW,EAAS2B,WAAWpB,EAAmBP,EAAS2B,gBAAgBlG,YAAewF,EAAK7B,UAG1H,OAAO,IAAIwC,QAAQ,CAACtB,EAASF,KAC3B,GAAIJ,EAAS6B,qBAIX,IACEnB,EAAOjF,MAASwF,EAAMnB,EAAa,CAAEQ,UAASF,UAAUJ,IACxD,MAAO8B,GACPC,QAAQC,KAAQvG,EAAH,2GAAwHqG,GAErIpB,EAAOjF,MAASwF,GAIhBjB,EAAS6B,sBAAuB,EAChC7B,EAASiC,YAAa,EAEtB3B,SAEON,EAASiC,YAClBvB,EAAOjF,MAASwF,GAChBX,KAEAI,EAAOjF,MAASwF,EAAMnB,EAAa,CAAEQ,UAASF,UAAUJ,OAsFxCkC,CAAkBV,EAAMxB,EAASwB,IAC/CrF,EAAQsE,EAAWC,EAAQA,EAAOc,GAAOZ,QAIzCzE,EAAQA,EAAMO,KAAKgE,OAEhB,IAAqB,iBAAVvE,GAAgC,OAAVA,IAAmBY,EAAeqE,EAAUI,KAASzE,EAAeiD,EAAUwB,GAmBpH,OAXA5F,OAAOC,eAAewF,EAAOG,EAAM,CACjCW,cAAc,EACdrG,YAAY,EACZC,IAAG,IACM2E,EAAOc,GAEhB,IAAIrF,GACFuE,EAAOc,GAAQrF,KAIZA,EAfPA,EAAQgF,EAAWhF,EAAOiF,EAASI,GAAOxB,EAASwB,IAmBrD,OADAH,EAAMG,GAAQrF,EACPA,GAGT0D,IAAG,CAAC0B,EAAaC,EAAMrF,EAAOsF,KACxBD,KAAQH,EACVA,EAAMG,GAAQrF,EAEduE,EAAOc,GAAQrF,GAEV,GAGTN,eAAc,CAAC0F,EAAaC,EAAMY,IACzBC,QAAQxG,eAAewF,EAAOG,EAAMY,GAG7CE,eAAc,CAACf,EAAaC,IACnBa,QAAQC,eAAejB,EAAOG,IAcrCD,EAAc3F,OAAOY,OAAOkE,GAChC,OAAO,IAAIG,MAAMU,EAAaD,IAmB1BiB,EAAYC,IAAc,CAC9B,YAAY9B,EAAQ+B,KAAaxB,GAC/BP,EAAOzC,YAAYuE,EAAWzG,IAAI0G,MAAcxB,IAGlDyB,YAAW,CAAChC,EAAQ+B,IACX/B,EAAOgC,YAAYF,EAAWzG,IAAI0G,IAG3C,eAAe/B,EAAQ+B,GACrB/B,EAAOiC,eAAeH,EAAWzG,IAAI0G,OAKzC,IAAIG,GAAuC,EAE3C,MAAMC,EAAoB,IAAIvD,EAAemD,GACnB,mBAAbA,EACFA,EAoBF,SAAmBvE,EAAS4E,EAAQC,GACzC,IAEIC,EAYAC,EAdAC,GAAsB,EAGtBC,EAAsB,IAAIvB,QAAQtB,IACpC0C,EAAsB,SAAUI,GACzBR,IACHb,QAAQC,KAAKhD,GAAmC,IAAIK,OAAQgE,OAC5DT,GAAuC,GAEzCM,GAAsB,EACtB5C,EAAQ8C,MAKZ,IACEH,EAASR,EAASvE,EAAS4E,EAAQE,GACnC,MAAOM,GACPL,EAASrB,QAAQxB,OAAOkD,GAG1B,MAAMC,GAA8B,IAAXN,IAxUV9G,EAwUwC8G,IAvUxB,iBAAV9G,GAA4C,mBAAfA,EAAMqH,KADzCrH,MA6Uf,IAAe,IAAX8G,IAAoBM,IAAqBL,EAC3C,OAAO,EAOT,MAAMO,EAAqB1D,IACzBA,EAAQyD,KAAKE,IAEXX,EAAaW,IACZC,IAGD,IAAIzF,EAEFA,EADEyF,IAAUA,aAAiBtE,OAAkC,iBAAlBsE,EAAMzF,SACzCyF,EAAMzF,QAEN,+BAGZ6E,EAAa,CACXa,mCAAmC,EACnC1F,cAED2F,MAAMP,IAEPvB,QAAQ4B,MAAM,0CAA2CL,MAc7D,OANEG,EADEF,EACiBN,EAEAE,IAId,IAILW,EAA6B,EAAG1D,SAAQE,WAAWyD,KACnD7D,OAAOnC,QAAQoC,UAIbD,OAAOnC,QAAQoC,UAAUjC,UAAYa,EACvCuB,IAEAF,EAAOF,OAAOnC,QAAQoC,WAEf4D,GAASA,EAAMH,kCAGxBxD,EAAO,IAAIf,MAAM0E,EAAM7F,UAEvBoC,EAAQyD,IAINC,EAAqB,CAACvI,EAAMuE,EAAUiE,KAAoBhD,KAC9D,GAAIA,EAAK7B,OAASY,EAAS0B,QACzB,MAAM,IAAIrC,MAAM,qBAAqBW,EAAS0B,WAAWnB,EAAmBP,EAAS0B,gBAAgBjG,YAAewF,EAAK7B,UAG3H,GAAI6B,EAAK7B,OAASY,EAAS2B,QACzB,MAAM,IAAItC,MAAM,oBAAoBW,EAAS2B,WAAWpB,EAAmBP,EAAS2B,gBAAgBlG,YAAewF,EAAK7B,UAG1H,OAAO,IAAIwC,QAAQ,CAACtB,EAASF,KAC3B,MAAM8D,EAAYJ,EAA2BpH,KAAK,KAAM,CAAE4D,UAASF,WACnEa,EAAKkD,KAAKD,GACVD,EAAgBpF,eAAeoC,MAI7BmD,EAAiB,CACrBrG,QAAS,CACPC,UAAWuE,EAAUM,GACrBwB,kBAAmB9B,EAAUM,GAC7BhE,YAAamF,EAAmBtH,KAAK,KAAM,cAAe,CAAEgF,QAAS,EAAGC,QAAS,KAEnF2C,KAAM,CACJzF,YAAamF,EAAmBtH,KAAK,KAAM,cAAe,CAAEgF,QAAS,EAAGC,QAAS,MAG/E4C,EAAkB,CACtBC,MAAO,CAAE9C,QAAS,EAAGC,QAAS,GAC9B5F,IAAK,CAAE2F,QAAS,EAAGC,QAAS,GAC5B9B,IAAK,CAAE6B,QAAS,EAAGC,QAAS,IAgB9B,OAdAzC,EAAYuF,QAAU,CACpBC,QAAS,CACPC,yBAA0BJ,EAC1BK,uBAAwBL,GAE1BM,SAAU,CACRC,sBAAuBP,GAEzBQ,SAAU,CACRC,yBAA0BT,EAC1BU,iBAAkBV,IAIfpD,EAAWjB,OAAQkE,EAAgBlF,IAK5CjE,EAAOD,QAAUiE,SAEjBhE,EAAOD,QAAUkC,UA5pCkC","file":"content.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 249);\n","const browser = require('webextension-polyfill')\n\n// injecting the script\n\nconst content = browser.extension.getURL('injected.js')\nconst script = document.createElement('script')\nscript.setAttribute('defer', 'defer')\nscript.setAttribute('type', 'text/javascript')\nscript.setAttribute('src', content)\n// document.body.appendChild(script)\ndocument.documentElement.appendChild(script)\nscript.parentNode.removeChild(script)\n\n// content script logic\n\nbrowser.runtime.onMessage.addListener(messageFromBackground)\n\nfunction messageFromBackground (message) {\n if (message.to === 'injected') {\n // proxy message to injected\n postMessage({\n from: 'content',\n proxyFrom: message.from,\n to: message.to,\n action: message.action,\n payload: message.payload || {}\n }, '*')\n }\n}\n\n// listen to messages from injected script\nwindow.addEventListener('message', function (event) {\n if (event.data.from === 'injected') {\n if (event.data.action) {\n browser.runtime.sendMessage({\n from: 'content',\n proxyFrom: event.data.from,\n to: event.data.to,\n action: event.data.action,\n payload: event.data.payload\n })\n }\n } else if (event.data.from === 'popup') {\n // console.log('message from popup', event.data)\n } else if (event.data.from !== 'content') {\n // console.log('some other message', event.data)\n }\n})\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(\"webextension-polyfill\", [\"module\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module);\n } else {\n var mod = {\n exports: {}\n };\n factory(mod);\n global.browser = mod.exports;\n }\n})(this, function (module) {\n /* webextension-polyfill - v0.3.1 - Tue Aug 21 2018 10:09:34 */\n /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */\n /* vim: set sts=2 sw=2 et tw=80: */\n /* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\n \"use strict\";\n\n if (typeof browser === \"undefined\" || Object.getPrototypeOf(browser) !== Object.prototype) {\n const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = \"The message port closed before a response was received.\";\n const SEND_RESPONSE_DEPRECATION_WARNING = \"Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)\";\n\n // Wrapping the bulk of this polyfill in a one-time-use function is a minor\n // optimization for Firefox. Since Spidermonkey does not fully parse the\n // contents of a function until the first time it's called, and since it will\n // never actually need to be called, this allows the polyfill to be included\n // in Firefox nearly for free.\n const wrapAPIs = () => {\n // NOTE: apiMetadata is associated to the content of the api-metadata.json file\n // at build time by replacing the following \"include\" with the content of the\n // JSON file.\n const apiMetadata = {\n \"alarms\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"clearAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"bookmarks\": {\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getChildren\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getRecent\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getSubTree\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTree\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"move\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeTree\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"browserAction\": {\n \"disable\": {\n \"minArgs\": 0,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"enable\": {\n \"minArgs\": 0,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"getBadgeBackgroundColor\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getBadgeText\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"openPopup\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"setBadgeBackgroundColor\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setBadgeText\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"setPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"browsingData\": {\n \"remove\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"removeCache\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeCookies\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeDownloads\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeFormData\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeHistory\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeLocalStorage\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removePasswords\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removePluginData\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"settings\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"commands\": {\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"contextMenus\": {\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"cookies\": {\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAllCookieStores\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"devtools\": {\n \"inspectedWindow\": {\n \"eval\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n }\n },\n \"panels\": {\n \"create\": {\n \"minArgs\": 3,\n \"maxArgs\": 3,\n \"singleCallbackArg\": true\n }\n }\n },\n \"downloads\": {\n \"cancel\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"download\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"erase\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getFileIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"open\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"pause\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeFile\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"resume\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"show\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"extension\": {\n \"isAllowedFileSchemeAccess\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"isAllowedIncognitoAccess\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"history\": {\n \"addUrl\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"deleteAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"deleteRange\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"deleteUrl\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getVisits\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"search\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"i18n\": {\n \"detectLanguage\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAcceptLanguages\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"identity\": {\n \"launchWebAuthFlow\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"idle\": {\n \"queryState\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"management\": {\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getSelf\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"setEnabled\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"uninstallSelf\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"notifications\": {\n \"clear\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getPermissionLevel\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n },\n \"pageAction\": {\n \"getPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"hide\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setIcon\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"setPopup\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"setTitle\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n },\n \"show\": {\n \"minArgs\": 1,\n \"maxArgs\": 1,\n \"fallbackToNoCallback\": true\n }\n },\n \"permissions\": {\n \"contains\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"request\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"runtime\": {\n \"getBackgroundPage\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getBrowserInfo\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getPlatformInfo\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"openOptionsPage\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"requestUpdateCheck\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"sendMessage\": {\n \"minArgs\": 1,\n \"maxArgs\": 3\n },\n \"sendNativeMessage\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"setUninstallURL\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"sessions\": {\n \"getDevices\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getRecentlyClosed\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"restore\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"storage\": {\n \"local\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"managed\": {\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n }\n },\n \"sync\": {\n \"clear\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getBytesInUse\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"set\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n }\n },\n \"tabs\": {\n \"captureVisibleTab\": {\n \"minArgs\": 0,\n \"maxArgs\": 2\n },\n \"create\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"detectLanguage\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"discard\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"duplicate\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"executeScript\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getCurrent\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n },\n \"getZoom\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getZoomSettings\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"highlight\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"insertCSS\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"move\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n },\n \"query\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"reload\": {\n \"minArgs\": 0,\n \"maxArgs\": 2\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"removeCSS\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"sendMessage\": {\n \"minArgs\": 2,\n \"maxArgs\": 3\n },\n \"setZoom\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"setZoomSettings\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"update\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n }\n },\n \"topSites\": {\n \"get\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"webNavigation\": {\n \"getAllFrames\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"getFrame\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n }\n },\n \"webRequest\": {\n \"handlerBehaviorChanged\": {\n \"minArgs\": 0,\n \"maxArgs\": 0\n }\n },\n \"windows\": {\n \"create\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"get\": {\n \"minArgs\": 1,\n \"maxArgs\": 2\n },\n \"getAll\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getCurrent\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"getLastFocused\": {\n \"minArgs\": 0,\n \"maxArgs\": 1\n },\n \"remove\": {\n \"minArgs\": 1,\n \"maxArgs\": 1\n },\n \"update\": {\n \"minArgs\": 2,\n \"maxArgs\": 2\n }\n }\n };\n\n if (Object.keys(apiMetadata).length === 0) {\n throw new Error(\"api-metadata.json has not been included in browser-polyfill\");\n }\n\n /**\n * A WeakMap subclass which creates and stores a value for any key which does\n * not exist when accessed, but behaves exactly as an ordinary WeakMap\n * otherwise.\n *\n * @param {function} createItem\n * A function which will be called in order to create the value for any\n * key which does not exist, the first time it is accessed. The\n * function receives, as its only argument, the key being created.\n */\n class DefaultWeakMap extends WeakMap {\n constructor(createItem, items = undefined) {\n super(items);\n this.createItem = createItem;\n }\n\n get(key) {\n if (!this.has(key)) {\n this.set(key, this.createItem(key));\n }\n\n return super.get(key);\n }\n }\n\n /**\n * Returns true if the given object is an object with a `then` method, and can\n * therefore be assumed to behave as a Promise.\n *\n * @param {*} value The value to test.\n * @returns {boolean} True if the value is thenable.\n */\n const isThenable = value => {\n return value && typeof value === \"object\" && typeof value.then === \"function\";\n };\n\n /**\n * Creates and returns a function which, when called, will resolve or reject\n * the given promise based on how it is called:\n *\n * - If, when called, `chrome.runtime.lastError` contains a non-null object,\n * the promise is rejected with that value.\n * - If the function is called with exactly one argument, the promise is\n * resolved to that value.\n * - Otherwise, the promise is resolved to an array containing all of the\n * function's arguments.\n *\n * @param {object} promise\n * An object containing the resolution and rejection functions of a\n * promise.\n * @param {function} promise.resolve\n * The promise's resolution function.\n * @param {function} promise.rejection\n * The promise's rejection function.\n * @param {object} metadata\n * Metadata about the wrapped method which has created the callback.\n * @param {integer} metadata.maxResolvedArgs\n * The maximum number of arguments which may be passed to the\n * callback created by the wrapped async function.\n *\n * @returns {function}\n * The generated callback function.\n */\n const makeCallback = (promise, metadata) => {\n return (...callbackArgs) => {\n if (chrome.runtime.lastError) {\n promise.reject(chrome.runtime.lastError);\n } else if (metadata.singleCallbackArg || callbackArgs.length <= 1) {\n promise.resolve(callbackArgs[0]);\n } else {\n promise.resolve(callbackArgs);\n }\n };\n };\n\n const pluralizeArguments = numArgs => numArgs == 1 ? \"argument\" : \"arguments\";\n\n /**\n * Creates a wrapper function for a method with the given name and metadata.\n *\n * @param {string} name\n * The name of the method which is being wrapped.\n * @param {object} metadata\n * Metadata about the method being wrapped.\n * @param {integer} metadata.minArgs\n * The minimum number of arguments which must be passed to the\n * function. If called with fewer than this number of arguments, the\n * wrapper will raise an exception.\n * @param {integer} metadata.maxArgs\n * The maximum number of arguments which may be passed to the\n * function. If called with more than this number of arguments, the\n * wrapper will raise an exception.\n * @param {integer} metadata.maxResolvedArgs\n * The maximum number of arguments which may be passed to the\n * callback created by the wrapped async function.\n *\n * @returns {function(object, ...*)}\n * The generated wrapper function.\n */\n const wrapAsyncFunction = (name, metadata) => {\n return function asyncFunctionWrapper(target, ...args) {\n if (args.length < metadata.minArgs) {\n throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);\n }\n\n if (args.length > metadata.maxArgs) {\n throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);\n }\n\n return new Promise((resolve, reject) => {\n if (metadata.fallbackToNoCallback) {\n // This API method has currently no callback on Chrome, but it return a promise on Firefox,\n // and so the polyfill will try to call it with a callback first, and it will fallback\n // to not passing the callback if the first call fails.\n try {\n target[name](...args, makeCallback({ resolve, reject }, metadata));\n } catch (cbError) {\n console.warn(`${name} API method doesn't seem to support the callback parameter, ` + \"falling back to call it without a callback: \", cbError);\n\n target[name](...args);\n\n // Update the API method metadata, so that the next API calls will not try to\n // use the unsupported callback anymore.\n metadata.fallbackToNoCallback = false;\n metadata.noCallback = true;\n\n resolve();\n }\n } else if (metadata.noCallback) {\n target[name](...args);\n resolve();\n } else {\n target[name](...args, makeCallback({ resolve, reject }, metadata));\n }\n });\n };\n };\n\n /**\n * Wraps an existing method of the target object, so that calls to it are\n * intercepted by the given wrapper function. The wrapper function receives,\n * as its first argument, the original `target` object, followed by each of\n * the arguments passed to the original method.\n *\n * @param {object} target\n * The original target object that the wrapped method belongs to.\n * @param {function} method\n * The method being wrapped. This is used as the target of the Proxy\n * object which is created to wrap the method.\n * @param {function} wrapper\n * The wrapper function which is called in place of a direct invocation\n * of the wrapped method.\n *\n * @returns {Proxy<function>}\n * A Proxy object for the given method, which invokes the given wrapper\n * method in its place.\n */\n const wrapMethod = (target, method, wrapper) => {\n return new Proxy(method, {\n apply(targetMethod, thisObj, args) {\n return wrapper.call(thisObj, target, ...args);\n }\n });\n };\n\n let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);\n\n /**\n * Wraps an object in a Proxy which intercepts and wraps certain methods\n * based on the given `wrappers` and `metadata` objects.\n *\n * @param {object} target\n * The target object to wrap.\n *\n * @param {object} [wrappers = {}]\n * An object tree containing wrapper functions for special cases. Any\n * function present in this object tree is called in place of the\n * method in the same location in the `target` object tree. These\n * wrapper methods are invoked as described in {@see wrapMethod}.\n *\n * @param {object} [metadata = {}]\n * An object tree containing metadata used to automatically generate\n * Promise-based wrapper functions for asynchronous. Any function in\n * the `target` object tree which has a corresponding metadata object\n * in the same location in the `metadata` tree is replaced with an\n * automatically-generated wrapper function, as described in\n * {@see wrapAsyncFunction}\n *\n * @returns {Proxy<object>}\n */\n const wrapObject = (target, wrappers = {}, metadata = {}) => {\n let cache = Object.create(null);\n let handlers = {\n has(proxyTarget, prop) {\n return prop in target || prop in cache;\n },\n\n get(proxyTarget, prop, receiver) {\n if (prop in cache) {\n return cache[prop];\n }\n\n if (!(prop in target)) {\n return undefined;\n }\n\n let value = target[prop];\n\n if (typeof value === \"function\") {\n // This is a method on the underlying object. Check if we need to do\n // any wrapping.\n\n if (typeof wrappers[prop] === \"function\") {\n // We have a special-case wrapper for this method.\n value = wrapMethod(target, target[prop], wrappers[prop]);\n } else if (hasOwnProperty(metadata, prop)) {\n // This is an async method that we have metadata for. Create a\n // Promise wrapper for it.\n let wrapper = wrapAsyncFunction(prop, metadata[prop]);\n value = wrapMethod(target, target[prop], wrapper);\n } else {\n // This is a method that we don't know or care about. Return the\n // original method, bound to the underlying object.\n value = value.bind(target);\n }\n } else if (typeof value === \"object\" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) {\n // This is an object that we need to do some wrapping for the children\n // of. Create a sub-object wrapper for it with the appropriate child\n // metadata.\n value = wrapObject(value, wrappers[prop], metadata[prop]);\n } else {\n // We don't need to do any wrapping for this property,\n // so just forward all access to the underlying object.\n Object.defineProperty(cache, prop, {\n configurable: true,\n enumerable: true,\n get() {\n return target[prop];\n },\n set(value) {\n target[prop] = value;\n }\n });\n\n return value;\n }\n\n cache[prop] = value;\n return value;\n },\n\n set(proxyTarget, prop, value, receiver) {\n if (prop in cache) {\n cache[prop] = value;\n } else {\n target[prop] = value;\n }\n return true;\n },\n\n defineProperty(proxyTarget, prop, desc) {\n return Reflect.defineProperty(cache, prop, desc);\n },\n\n deleteProperty(proxyTarget, prop) {\n return Reflect.deleteProperty(cache, prop);\n }\n };\n\n // Per contract of the Proxy API, the \"get\" proxy handler must return the\n // original value of the target if that value is declared read-only and\n // non-configurable. For this reason, we create an object with the\n // prototype set to `target` instead of using `target` directly.\n // Otherwise we cannot return a custom object for APIs that\n // are declared read-only and non-configurable, such as `chrome.devtools`.\n //\n // The proxy handlers themselves will still use the original `target`\n // instead of the `proxyTarget`, so that the methods and properties are\n // dereferenced via the original targets.\n let proxyTarget = Object.create(target);\n return new Proxy(proxyTarget, handlers);\n };\n\n /**\n * Creates a set of wrapper functions for an event object, which handles\n * wrapping of listener functions that those messages are passed.\n *\n * A single wrapper is created for each listener function, and stored in a\n * map. Subsequent calls to `addListener`, `hasListener`, or `removeListener`\n * retrieve the original wrapper, so that attempts to remove a\n * previously-added listener work as expected.\n *\n * @param {DefaultWeakMap<function, function>} wrapperMap\n * A DefaultWeakMap object which will create the appropriate wrapper\n * for a given listener function when one does not exist, and retrieve\n * an existing one when it does.\n *\n * @returns {object}\n */\n const wrapEvent = wrapperMap => ({\n addListener(target, listener, ...args) {\n target.addListener(wrapperMap.get(listener), ...args);\n },\n\n hasListener(target, listener) {\n return target.hasListener(wrapperMap.get(listener));\n },\n\n removeListener(target, listener) {\n target.removeListener(wrapperMap.get(listener));\n }\n });\n\n // Keep track if the deprecation warning has been logged at least once.\n let loggedSendResponseDeprecationWarning = false;\n\n const onMessageWrappers = new DefaultWeakMap(listener => {\n if (typeof listener !== \"function\") {\n return listener;\n }\n\n /**\n * Wraps a message listener function so that it may send responses based on\n * its return value, rather than by returning a sentinel value and calling a\n * callback. If the listener function returns a Promise, the response is\n * sent when the promise either resolves or rejects.\n *\n * @param {*} message\n * The message sent by the other end of the channel.\n * @param {object} sender\n * Details about the sender of the message.\n * @param {function(*)} sendResponse\n * A callback which, when called with an arbitrary argument, sends\n * that value as a response.\n * @returns {boolean}\n * True if the wrapped listener returned a Promise, which will later\n * yield a response. False otherwise.\n */\n return function onMessage(message, sender, sendResponse) {\n let didCallSendResponse = false;\n\n let wrappedSendResponse;\n let sendResponsePromise = new Promise(resolve => {\n wrappedSendResponse = function (response) {\n if (!loggedSendResponseDeprecationWarning) {\n console.warn(SEND_RESPONSE_DEPRECATION_WARNING, new Error().stack);\n loggedSendResponseDeprecationWarning = true;\n }\n didCallSendResponse = true;\n resolve(response);\n };\n });\n\n let result;\n try {\n result = listener(message, sender, wrappedSendResponse);\n } catch (err) {\n result = Promise.reject(err);\n }\n\n const isResultThenable = result !== true && isThenable(result);\n\n // If the listener didn't returned true or a Promise, or called\n // wrappedSendResponse synchronously, we can exit earlier\n // because there will be no response sent from this listener.\n if (result !== true && !isResultThenable && !didCallSendResponse) {\n return false;\n }\n\n // A small helper to send the message if the promise resolves\n // and an error if the promise rejects (a wrapped sendMessage has\n // to translate the message into a resolved promise or a rejected\n // promise).\n const sendPromisedResult = promise => {\n promise.then(msg => {\n // send the message value.\n sendResponse(msg);\n }, error => {\n // Send a JSON representation of the error if the rejected value\n // is an instance of error, or the object itself otherwise.\n let message;\n if (error && (error instanceof Error || typeof error.message === \"string\")) {\n message = error.message;\n } else {\n message = \"An unexpected error occurred\";\n }\n\n sendResponse({\n __mozWebExtensionPolyfillReject__: true,\n message\n });\n }).catch(err => {\n // Print an error on the console if unable to send the response.\n console.error(\"Failed to send onMessage rejected reply\", err);\n });\n };\n\n // If the listener returned a Promise, send the resolved value as a\n // result, otherwise wait the promise related to the wrappedSendResponse\n // callback to resolve and send it as a response.\n if (isResultThenable) {\n sendPromisedResult(result);\n } else {\n sendPromisedResult(sendResponsePromise);\n }\n\n // Let Chrome know that the listener is replying.\n return true;\n };\n });\n\n const wrappedSendMessageCallback = ({ reject, resolve }, reply) => {\n if (chrome.runtime.lastError) {\n // Detect when none of the listeners replied to the sendMessage call and resolve\n // the promise to undefined as in Firefox.\n // See https://github.com/mozilla/webextension-polyfill/issues/130\n if (chrome.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {\n resolve();\n } else {\n reject(chrome.runtime.lastError);\n }\n } else if (reply && reply.__mozWebExtensionPolyfillReject__) {\n // Convert back the JSON representation of the error into\n // an Error instance.\n reject(new Error(reply.message));\n } else {\n resolve(reply);\n }\n };\n\n const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => {\n if (args.length < metadata.minArgs) {\n throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`);\n }\n\n if (args.length > metadata.maxArgs) {\n throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`);\n }\n\n return new Promise((resolve, reject) => {\n const wrappedCb = wrappedSendMessageCallback.bind(null, { resolve, reject });\n args.push(wrappedCb);\n apiNamespaceObj.sendMessage(...args);\n });\n };\n\n const staticWrappers = {\n runtime: {\n onMessage: wrapEvent(onMessageWrappers),\n onMessageExternal: wrapEvent(onMessageWrappers),\n sendMessage: wrappedSendMessage.bind(null, \"sendMessage\", { minArgs: 1, maxArgs: 3 })\n },\n tabs: {\n sendMessage: wrappedSendMessage.bind(null, \"sendMessage\", { minArgs: 2, maxArgs: 3 })\n }\n };\n const settingMetadata = {\n clear: { minArgs: 1, maxArgs: 1 },\n get: { minArgs: 1, maxArgs: 1 },\n set: { minArgs: 1, maxArgs: 1 }\n };\n apiMetadata.privacy = {\n network: {\n networkPredictionEnabled: settingMetadata,\n webRTCIPHandlingPolicy: settingMetadata\n },\n services: {\n passwordSavingEnabled: settingMetadata\n },\n websites: {\n hyperlinkAuditingEnabled: settingMetadata,\n referrersEnabled: settingMetadata\n }\n };\n\n return wrapObject(chrome, staticWrappers, apiMetadata);\n };\n\n // The build process adds a UMD wrapper around this file, which makes the\n // `module` variable available.\n module.exports = wrapAPIs(); // eslint-disable-line no-undef\n } else {\n module.exports = browser; // eslint-disable-line no-undef\n }\n});\n//# sourceMappingURL=browser-polyfill.js.map\n"],"sourceRoot":""}
'use strict'
/* eslint-env browser */
/* globals chrome, Wappalyzer, Utils */
const {
setTechnologies,
setCategories,
analyze,
analyzeManyToMany,
resolve,
getTechnology,
} = Wappalyzer
const { agent, promisify, getOption, setOption, open, globEscape } = Utils
const expiry = 1000 * 60 * 60 * 24
const hostnameIgnoreList =
/\b((local|dev(elop(ment)?)?|sandbox|stag(e|ing)?|preprod|production|preview|test(ing)?|[^a-z]demo(shop)?|cache)[.-]|dev\d|localhost|((wappalyzer|google|bing|baidu|microsoft|duckduckgo|facebook|adobe|twitter|reddit|yahoo|wikipedia|amazon|amazonaws|youtube|stackoverflow|github|stackexchange|w3schools|twitch)\.)|(live|office|herokuapp|shopifypreview)\.com|\.local|\.test|\.netlify\.app|web\.archive\.org|zoom\.us|^([0-9.]+|[\d.]+)$|^([a-f0-9:]+:+)+[a-f0-9]+$)/
const xhrDebounce = []
let xhrAnalyzed = {}
const scriptsPending = []
function getRequiredTechnologies(name, categoryId) {
return name
? Wappalyzer.requires.find(({ name: _name }) => _name === name).technologies
: categoryId
? Wappalyzer.categoryRequires.find(
({ categoryId: _categoryId }) => _categoryId === categoryId
).technologies
: undefined
}
const Driver = {
lastPing: Date.now(),
/**
* Initialise driver
*/
async init() {
await Driver.loadTechnologies()
const hostnameCache = await getOption('hostnames', {})
Driver.cache = {
hostnames: Object.keys(hostnameCache).reduce(
(cache, hostname) => ({
...cache,
[hostname]: {
...hostnameCache[hostname],
detections: hostnameCache[hostname].detections.map(
({
technology: name,
pattern: { regex, confidence },
version,
}) => ({
technology: getTechnology(name, true),
pattern: {
regex: new RegExp(regex, 'i'),
confidence,
},
version,
})
),
},
}),
{}
),
tabs: {},
robots: await getOption('robots', {}),
ads: [],
}
chrome.browserAction.setBadgeBackgroundColor({ color: '#6B39BD' }, () => {})
chrome.webRequest.onCompleted.addListener(
Driver.onWebRequestComplete,
{ urls: ['http://*/*', 'https://*/*'], types: ['main_frame'] },
['responseHeaders']
)
chrome.webRequest.onCompleted.addListener(Driver.onScriptRequestComplete, {
urls: ['http://*/*', 'https://*/*'],
types: ['script'],
})
chrome.webRequest.onCompleted.addListener(Driver.onXhrRequestComplete, {
urls: ['http://*/*', 'https://*/*'],
types: ['xmlhttprequest'],
})
chrome.tabs.onRemoved.addListener((id) => delete Driver.cache.tabs[id])
chrome.tabs.onUpdated.addListener(async (id, { status, url }) => {
if (status === 'complete') {
;({ url } = await promisify(chrome.tabs, 'get', id))
}
if (url) {
const { hostname } = new URL(url)
const cache = Driver.cache.hostnames[hostname]
Driver.cache.tabs[id] = cache ? resolve(cache.detections) : []
await Driver.setIcon(url, Driver.cache.tabs[id])
}
})
// Enable messaging between scripts
chrome.runtime.onMessage.addListener(Driver.onMessage)
const { version } = chrome.runtime.getManifest()
const previous = await getOption('version')
const upgradeMessage = await getOption('upgradeMessage', true)
if (previous === null) {
open(
'https://www.wappalyzer.com/installed/?utm_source=installed&utm_medium=extension&utm_campaign=wappalyzer'
)
} else if (version !== previous && upgradeMessage) {
open(
`https://www.wappalyzer.com/upgraded/?utm_source=upgraded&utm_medium=extension&utm_campaign=wappalyzer`,
false
)
}
await setOption('version', version)
},
/**
* Log debug messages to the console
* @param {String} message
* @param {String} source
* @param {String} type
*/
log(message, source = 'driver', type = 'log') {
// eslint-disable-next-line no-console
console[type](message)
},
/**
* Log errors to the console
* @param {String} error
* @param {String} source
*/
error(error, source = 'driver') {
Driver.log(error, source, 'error')
},
/**
* Load technologies and categories into memory
*/
async loadTechnologies() {
try {
const categories = await (
await fetch(chrome.runtime.getURL('categories.json'))
).json()
let technologies = {}
for (const index of Array(27).keys()) {
const character = index ? String.fromCharCode(index + 96) : '_'
technologies = {
...technologies,
...(await (
await fetch(chrome.runtime.getURL(`technologies/${character}.json`))
).json()),
}
}
setTechnologies(technologies)
setCategories(categories)
} catch (error) {
Driver.error(error)
}
},
/**
* Get all categories
*/
getCategories() {
return Wappalyzer.categories
},
/**
* Perform a HTTP POST request
* @param {String} url
* @param {String} body
*/
post(url, body) {
try {
return fetch(url, {
method: 'POST',
body: JSON.stringify(body),
headers: {
'Content-Type': 'application/json',
},
})
} catch (error) {
throw new Error(error.message || error.toString())
}
},
/**
* Wrapper for analyze
*/
analyze(...args) {
return analyze(...args)
},
/**
* Analyse JavaScript variables
* @param {String} url
* @param {Array} js
*/
analyzeJs(url, js, requires, categoryRequires) {
const technologies =
getRequiredTechnologies(requires, categoryRequires) ||
Wappalyzer.technologies
return Driver.onDetect(
url,
js
.map(({ name, chain, value }) => {
return analyzeManyToMany(
technologies.find(({ name: _name }) => name === _name),
'js',
{ [chain]: [value] }
)
})
.flat()
)
},
/**
* Analyse DOM nodes
* @param {String} url
* @param {Array} dom
*/
analyzeDom(url, dom, requires, categoryRequires) {
const technologies =
getRequiredTechnologies(requires, categoryRequires) ||
Wappalyzer.technologies
return Driver.onDetect(
url,
dom
.map(
(
{ name, selector, exists, text, property, attribute, value },
index
) => {
const technology = technologies.find(
({ name: _name }) => name === _name
)
if (typeof exists !== 'undefined') {
return analyzeManyToMany(technology, 'dom.exists', {
[selector]: [''],
})
}
if (typeof text !== 'undefined') {
return analyzeManyToMany(technology, 'dom.text', {
[selector]: [text],
})
}
if (typeof property !== 'undefined') {
return analyzeManyToMany(
technology,
`dom.properties.${property}`,
{
[selector]: [value],
}
)
}
if (typeof attribute !== 'undefined') {
return analyzeManyToMany(
technology,
`dom.attributes.${attribute}`,
{
[selector]: [value],
}
)
}
}
)
.flat()
)
},
/**
* Force a technology detection by URL and technology name
* @param {String} url
* @param {String} name
*/
detectTechnology(url, name) {
const technology = getTechnology(name)
return Driver.onDetect(url, [
{ technology, pattern: { regex: '', confidence: 100 }, version: '' },
])
},
/**
* Enable scripts to call Driver functions through messaging
* @param {Object} message
* @param {Object} sender
* @param {Function} callback
*/
onMessage({ source, func, args }, sender, callback) {
if (!func) {
return
}
if (func !== 'log') {
Driver.log({ source, func, args })
}
if (!Driver[func]) {
Driver.error(new Error(`Method does not exist: Driver.${func}`))
return
}
Promise.resolve(Driver[func].call(Driver[func], ...(args || [])))
.then(callback)
.catch(Driver.error)
return !!callback
},
async content(url, func, args) {
const [tab] = await promisify(chrome.tabs, 'query', {
url: globEscape(url),
})
if (!tab) {
return
}
if (tab.status !== 'complete') {
throw new Error(`Tab ${tab.id} not ready for sendMessage: ${tab.status}`)
}
return new Promise((resolve, reject) => {
chrome.tabs.sendMessage(
tab.id,
{
source: 'driver.js',
func,
args: args ? (Array.isArray(args) ? args : [args]) : [],
},
(response) => {
chrome.runtime.lastError
? func === 'error'
? resolve()
: Driver.error(
new Error(
`${
chrome.runtime.lastError.message
}: Driver.${func}(${JSON.stringify(args)})`
)
)
: resolve(response)
}
)
})
},
/**
* Analyse response headers
* @param {Object} request
*/
async onWebRequestComplete(request) {
if (request.responseHeaders) {
if (await Driver.isDisabledDomain(request.url)) {
return
}
const headers = {}
try {
await new Promise((resolve) => setTimeout(resolve, 500))
const [tab] = await promisify(chrome.tabs, 'query', {
url: globEscape(request.url),
})
if (tab) {
request.responseHeaders.forEach((header) => {
const name = header.name.toLowerCase()
headers[name] = headers[name] || []
headers[name].push(
(header.value || header.binaryValue || '').toString()
)
})
Driver.onDetect(request.url, analyze({ headers })).catch(Driver.error)
}
} catch (error) {
Driver.error(error)
}
}
},
/**
* Analyse scripts
* @param {Object} request
*/
async onScriptRequestComplete(request) {
if (await Driver.isDisabledDomain(request.url)) {
return
}
if (scriptsPending.includes(request.url)) {
scriptsPending.splice(scriptsPending.indexOf(request.url), 1)
} else if (request.statusCode === 200) {
scriptsPending.push(request.url)
const response = await fetch(request.url)
const scripts = await response.text()
Driver.onDetect(request.documentUrl, analyze({ scripts })).catch(
Driver.error
)
}
},
/**
* Analyse XHR request hostnames
* @param {Object} request
*/
async onXhrRequestComplete(request) {
if (await Driver.isDisabledDomain(request.url)) {
return
}
let hostname
let originHostname
try {
;({ hostname } = new URL(request.url))
;({ hostname: originHostname } = new URL(request.originUrl))
} catch (error) {
return
}
if (!xhrDebounce.includes(hostname)) {
xhrDebounce.push(hostname)
setTimeout(() => {
xhrDebounce.splice(xhrDebounce.indexOf(hostname), 1)
xhrAnalyzed[originHostname] = xhrAnalyzed[originHostname] || []
if (!xhrAnalyzed[originHostname].includes(hostname)) {
xhrAnalyzed[originHostname].push(hostname)
if (Object.keys(xhrAnalyzed).length > 500) {
xhrAnalyzed = {}
}
Driver.onDetect(
request.originUrl || request.initiator,
analyze({ xhr: hostname })
).catch(Driver.error)
}
}, 1000)
}
},
/**
* Process return values from content.js
* @param {String} url
* @param {Object} items
* @param {String} language
*/
async onContentLoad(url, items, language, requires, categoryRequires) {
try {
items.cookies = items.cookies || {}
//
;(
await promisify(chrome.cookies, 'getAll', {
url,
})
).forEach(
({ name, value }) => (items.cookies[name.toLowerCase()] = [value])
)
const technologies = getRequiredTechnologies(requires, categoryRequires)
await Driver.onDetect(
url,
analyze({ url, ...items }, technologies),
language,
true
)
} catch (error) {
Driver.error(error)
}
},
/**
* Get all technologies
*/
getTechnologies() {
return Wappalyzer.technologies
},
/**
* Check if Wappalyzer has been disabled for the domain
*/
async isDisabledDomain(url) {
try {
const { hostname } = new URL(url)
return (await getOption('disabledDomains', [])).includes(hostname)
} catch (error) {
return false
}
},
/**
* Callback for detections
* @param {String} url
* @param {Array} detections
* @param {String} language
* @param {Boolean} incrementHits
*/
async onDetect(
url,
detections = [],
language,
incrementHits = false,
analyzeRequires = true
) {
if (!url || !detections.length) {
return
}
url = url.split('#')[0]
const { hostname } = new URL(url)
// Cache detections
const cache = (Driver.cache.hostnames[hostname] = Driver.cache.hostnames[
hostname
] || {
detections: [],
hits: incrementHits ? 0 : 1,
https: url.startsWith('https://'),
})
cache.dateTime = Date.now()
// Remove duplicates
cache.detections = cache.detections
.concat(detections)
.filter(({ technology }) => technology)
.filter(
({ technology: { name }, pattern: { regex } }, index, detections) =>
detections.findIndex(
({ technology: { name: _name }, pattern: { regex: _regex } }) =>
name === _name &&
(!regex || regex.toString() === _regex.toString())
) === index
)
.map((detection) => {
if (
detections.find(
({ technology: { slug } }) => slug === detection.technology.slug
)
) {
detection.lastUrl = url
}
return detection
})
cache.hits += incrementHits ? 1 : 0
cache.language = cache.language || language
// Expire cache
Driver.cache.hostnames = Object.keys(Driver.cache.hostnames).reduce(
(hostnames, hostname) => {
const cache = Driver.cache.hostnames[hostname]
if (cache.dateTime > Date.now() - expiry) {
hostnames[hostname] = cache
}
return hostnames
},
{}
)
await setOption(
'hostnames',
Object.keys(Driver.cache.hostnames).reduce(
(hostnames, hostname) => ({
...hostnames,
[hostname]: {
...cache,
detections: Driver.cache.hostnames[hostname].detections
.filter(({ technology }) => technology)
.map(
({
technology: { name: technology },
pattern: { regex, confidence },
version,
lastUrl,
}) => ({
technology,
pattern: {
regex: regex.source,
confidence,
},
version,
lastUrl,
})
),
},
}),
{}
)
)
const resolved = resolve(cache.detections).map((detection) => {
detection.cached = detection.lastUrl !== url
delete detection.lastUrl
return detection
})
const requires = [
...Wappalyzer.requires.filter(({ name }) =>
resolved.some(({ name: _name }) => _name === name)
),
...Wappalyzer.categoryRequires.filter(({ categoryId }) =>
resolved.some(({ categories }) =>
categories.some(({ id }) => id === categoryId)
)
),
]
Driver.content(url, 'analyzeRequires', [url, requires])
await Driver.setIcon(url, resolved)
if (url) {
let tabs = []
try {
tabs = await promisify(chrome.tabs, 'query', {
url: globEscape(url),
})
} catch (error) {
// Continue
}
tabs.forEach(({ id }) => (Driver.cache.tabs[id] = resolved))
}
Driver.log({ hostname, technologies: resolved })
await Driver.ping()
},
/**
* Callback for onAd listener
* @param {Object} ad
*/
onAd(ad) {
Driver.cache.ads.push(ad)
},
/**
* Update the extension icon
* @param {String} url
* @param {Object} technologies
*/
async setIcon(url, technologies = []) {
if (await Driver.isDisabledDomain(url)) {
technologies = []
}
const dynamicIcon = await getOption('dynamicIcon', false)
const showCached = await getOption('showCached', true)
const badge = await getOption('badge', true)
let icon = 'default.svg'
const _technologies = technologies.filter(
({ slug, cached }) =>
slug !== 'cart-functionality' && (showCached || cached === false)
)
if (dynamicIcon) {
const pinnedCategory = parseInt(await getOption('pinnedCategory'), 10)
const pinned = _technologies.find(({ categories }) =>
categories.some(({ id }) => id === pinnedCategory)
)
;({ icon } = pinned || _technologies[0] || { icon })
}
if (!url) {
return
}
let tabs = []
try {
tabs = await promisify(chrome.tabs, 'query', {
url: globEscape(url),
})
} catch (error) {
// Continue
}
tabs.forEach(({ id: tabId }) => {
chrome.browserAction.setBadgeText(
{
tabId,
text:
badge && _technologies.length
? _technologies.length.toString()
: '',
},
() => {}
)
chrome.browserAction.setIcon(
{
tabId,
path: chrome.runtime.getURL(
`../images/icons/${
/\.svg$/i.test(icon)
? `converted/${icon.replace(/\.svg$/, '.png')}`
: icon
}`
),
},
() => {}
)
})
},
/**
* Get the detected technologies for the current tab
*/
async getDetections() {
const tab = await promisify(chrome.tabs, 'query', {
active: true,
currentWindow: true,
})
if (!tab) {
return
}
const [{ id, url }] = tab
if (await Driver.isDisabledDomain(url)) {
await Driver.setIcon(url, [])
return
}
const showCached = await getOption('showCached', true)
const resolved = (Driver.cache.tabs[id] || []).filter(
({ cached }) => showCached || cached === false
)
await Driver.setIcon(url, resolved)
return resolved
},
/**
* Fetch the website's robots.txt rules
* @param {String} hostname
* @param {Boolean} secure
*/
async getRobots(hostname, secure = false) {
if (
!(await getOption('tracking', true)) ||
hostnameIgnoreList.test(hostname)
) {
return []
}
if (typeof Driver.cache.robots[hostname] !== 'undefined') {
return Driver.cache.robots[hostname]
}
try {
Driver.cache.robots[hostname] = await Promise.race([
// eslint-disable-next-line no-async-promise-executor
new Promise(async (resolve) => {
const response = await fetch(
`http${secure ? 's' : ''}://${hostname}/robots.txt`,
{
redirect: 'follow',
mode: 'no-cors',
}
)
if (!response.ok) {
Driver.error(new Error(response.statusText))
resolve('')
}
let agent
resolve(
(await response.text()).split('\n').reduce((disallows, line) => {
let matches = /^User-agent:\s*(.+)$/i.exec(line.trim())
if (matches) {
agent = matches[1].toLowerCase()
} else if (agent === '*' || agent === 'wappalyzer') {
matches = /^Disallow:\s*(.+)$/i.exec(line.trim())
if (matches) {
disallows.push(matches[1])
}
}
return disallows
}, [])
)
}),
new Promise((resolve) => setTimeout(() => resolve(''), 5000)),
])
Driver.cache.robots = Object.keys(Driver.cache.robots)
.slice(-50)
.reduce(
(cache, hostname) => ({
...cache,
[hostname]: Driver.cache.robots[hostname],
}),
{}
)
await setOption('robots', Driver.cache.robots)
return Driver.cache.robots[hostname]
} catch (error) {
Driver.error(error)
}
},
/**
* Check if the website allows indexing of a URL
* @param {String} href
*/
async checkRobots(href) {
const url = new URL(href)
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
throw new Error('Invalid protocol')
}
const robots = await Driver.getRobots(
url.hostname,
url.protocol === 'https:'
)
if (robots.some((disallowed) => url.pathname.indexOf(disallowed) === 0)) {
throw new Error('Disallowed')
}
},
/**
* Clear caches
*/
async clearCache() {
Driver.cache.hostnames = {}
Driver.cache.tabs = {}
xhrAnalyzed = {}
await setOption('hostnames', {})
},
/**
* Anonymously send identified technologies to wappalyzer.com
* This function can be disabled in the extension settings
*/
async ping() {
const tracking = await getOption('tracking', true)
const termsAccepted =
agent === 'chrome' || (await getOption('termsAccepted', false))
if (tracking && termsAccepted) {
const urls = Object.keys(Driver.cache.hostnames).reduce(
(urls, hostname) => {
// eslint-disable-next-line standard/computed-property-even-spacing
const { language, detections, hits, https } =
Driver.cache.hostnames[hostname]
const url = `http${https ? 's' : ''}://${hostname}`
if (!hostnameIgnoreList.test(hostname) && hits >= 3) {
urls[url] = urls[url] || {
technologies: resolve(detections).reduce(
(technologies, { name, confidence, version }) => {
if (confidence === 100) {
technologies[name] = {
version,
hits,
}
}
return technologies
},
{}
),
meta: {
language,
},
}
}
return urls
},
{}
)
const count = Object.keys(urls).length
if (count && (count >= 25 || Driver.lastPing < Date.now() - expiry)) {
await Driver.post('https://api.wappalyzer.com/v2/ping/', {
version: chrome.runtime.getManifest().version,
urls,
})
await setOption('hostnames', (Driver.cache.hostnames = {}))
Driver.lastPing = Date.now()
}
if (Driver.cache.ads.length > 25) {
await Driver.post('https://ad.wappalyzer.com/log/wp/', Driver.cache.ads)
Driver.cache.ads = []
}
}
},
}
Driver.init()
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* This module contains utilities and base classes for logic which is
* common between the parent and child process, and in particular
* between ExtensionParent.jsm and ExtensionChild.jsm.
*/
/* exported ExtensionCommon */
var EXPORTED_SYMBOLS = ["ExtensionCommon"];
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyGlobalGetters(this, ["fetch"]);
XPCOMUtils.defineLazyModuleGetters(this, {
ConsoleAPI: "resource://gre/modules/Console.jsm",
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.jsm",
Schemas: "resource://gre/modules/Schemas.jsm",
SchemaRoot: "resource://gre/modules/Schemas.jsm",
});
XPCOMUtils.defineLazyServiceGetter(
this,
"styleSheetService",
"@mozilla.org/content/style-sheet-service;1",
"nsIStyleSheetService"
);
const { ExtensionUtils } = ChromeUtils.import(
"resource://gre/modules/ExtensionUtils.jsm"
);
var {
DefaultMap,
DefaultWeakMap,
ExtensionError,
filterStack,
getInnerWindowID,
getUniqueId,
} = ExtensionUtils;
function getConsole() {
return new ConsoleAPI({
maxLogLevelPref: "extensions.webextensions.log.level",
prefix: "WebExtensions",
});
}
XPCOMUtils.defineLazyGetter(this, "console", getConsole);
var ExtensionCommon;
// Run a function and report exceptions.
function runSafeSyncWithoutClone(f, ...args) {
try {
return f(...args);
} catch (e) {
dump(
`Extension error: ${e} ${e.fileName} ${
e.lineNumber
}\n[[Exception stack\n${filterStack(e)}Current stack\n${filterStack(
Error()
)}]]\n`
);
Cu.reportError(e);
}
}
// Return true if the given value is an instance of the given
// native type.
function instanceOf(value, type) {
return (
value &&
typeof value === "object" &&
ChromeUtils.getClassName(value) === type
);
}
/**
* Convert any of several different representations of a date/time to a Date object.
* Accepts several formats:
* a Date object, an ISO8601 string, or a number of milliseconds since the epoch as
* either a number or a string.
*
* @param {Date|string|number} date
* The date to convert.
* @returns {Date}
* A Date object
*/
function normalizeTime(date) {
// Of all the formats we accept the "number of milliseconds since the epoch as a string"
// is an outlier, everything else can just be passed directly to the Date constructor.
return new Date(
typeof date == "string" && /^\d+$/.test(date) ? parseInt(date, 10) : date
);
}
function withHandlingUserInput(window, callable) {
let handle = window.windowUtils.setHandlingUserInput(true);
try {
return callable();
} finally {
handle.destruct();
}
}
/**
* Defines a lazy getter for the given property on the given object. The
* first time the property is accessed, the return value of the getter
* is defined on the current `this` object with the given property name.
* Importantly, this means that a lazy getter defined on an object
* prototype will be invoked separately for each object instance that
* it's accessed on.
*
* @param {object} object
* The prototype object on which to define the getter.
* @param {string|Symbol} prop
* The property name for which to define the getter.
* @param {function} getter
* The function to call in order to generate the final property
* value.
*/
function defineLazyGetter(object, prop, getter) {
let redefine = (obj, value) => {
Object.defineProperty(obj, prop, {
enumerable: true,
configurable: true,
writable: true,
value,
});
return value;
};
Object.defineProperty(object, prop, {
enumerable: true,
configurable: true,
get() {
return redefine(this, getter.call(this));
},
set(value) {
redefine(this, value);
},
});
}
function checkLoadURL(url, principal, options) {
let ssm = Services.scriptSecurityManager;
let flags = ssm.STANDARD;
if (!options.allowScript) {
flags |= ssm.DISALLOW_SCRIPT;
}
if (!options.allowInheritsPrincipal) {
flags |= ssm.DISALLOW_INHERIT_PRINCIPAL;
}
if (options.dontReportErrors) {
flags |= ssm.DONT_REPORT_ERRORS;
}
try {
ssm.checkLoadURIWithPrincipal(principal, Services.io.newURI(url), flags);
} catch (e) {
return false;
}
return true;
}
function makeWidgetId(id) {
id = id.toLowerCase();
// FIXME: This allows for collisions.
return id.replace(/[^a-z0-9_-]/g, "_");
}
function isDeadOrRemote(obj) {
return Cu.isDeadWrapper(obj) || Cu.isRemoteProxy(obj);
}
/**
* A sentinel class to indicate that an array of values should be
* treated as an array when used as a promise resolution value, but as a
* spread expression (...args) when passed to a callback.
*/
class SpreadArgs extends Array {
constructor(args) {
super();
this.push(...args);
}
}
/**
* Like SpreadArgs, but also indicates that the array values already
* belong to the target compartment, and should not be cloned before
* being passed.
*
* The `unwrappedValues` property contains an Array object which belongs
* to the target compartment, and contains the same unwrapped values
* passed the NoCloneSpreadArgs constructor.
*/
class NoCloneSpreadArgs {
constructor(args) {
this.unwrappedValues = args;
}
[Symbol.iterator]() {
return this.unwrappedValues[Symbol.iterator]();
}
}
const LISTENERS = Symbol("listeners");
const ONCE_MAP = Symbol("onceMap");
class EventEmitter {
constructor() {
this[LISTENERS] = new Map();
this[ONCE_MAP] = new WeakMap();
}
/**
* Checks whether there is some listener for the given event.
*
* @param {string} event
* The name of the event to listen for.
* @returns {boolean}
*/
has(event) {
return this[LISTENERS].has(event);
}
/**
* Adds the given function as a listener for the given event.
*
* The listener function may optionally return a Promise which
* resolves when it has completed all operations which event
* dispatchers may need to block on.
*
* @param {string} event
* The name of the event to listen for.
* @param {function(string, ...any)} listener
* The listener to call when events are emitted.
*/
on(event, listener) {
let listeners = this[LISTENERS].get(event);
if (!listeners) {
listeners = new Set();
this[LISTENERS].set(event, listeners);
}
listeners.add(listener);
}
/**
* Removes the given function as a listener for the given event.
*
* @param {string} event
* The name of the event to stop listening for.
* @param {function(string, ...any)} listener
* The listener function to remove.
*/
off(event, listener) {
let set = this[LISTENERS].get(event);
if (set) {
set.delete(listener);
set.delete(this[ONCE_MAP].get(listener));
if (!set.size) {
this[LISTENERS].delete(event);
}
}
}
/**
* Adds the given function as a listener for the given event once.
*
* @param {string} event
* The name of the event to listen for.
* @param {function(string, ...any)} listener
* The listener to call when events are emitted.
*/
once(event, listener) {
let wrapper = (...args) => {
this.off(event, wrapper);
this[ONCE_MAP].delete(listener);
return listener(...args);
};
this[ONCE_MAP].set(listener, wrapper);
this.on(event, wrapper);
}
/**
* Triggers all listeners for the given event. If any listeners return
* a value, returns a promise which resolves when all returned
* promises have resolved. Otherwise, returns undefined.
*
* @param {string} event
* The name of the event to emit.
* @param {any} args
* Arbitrary arguments to pass to the listener functions, after
* the event name.
* @returns {Promise?}
*/
emit(event, ...args) {
let listeners = this[LISTENERS].get(event);
if (listeners) {
let promises = [];
for (let listener of listeners) {
try {
let result = listener(event, ...args);
if (result !== undefined) {
promises.push(result);
}
} catch (e) {
Cu.reportError(e);
}
}
if (promises.length) {
return Promise.all(promises);
}
}
}
}
/**
* Base class for WebExtension APIs. Each API creates a new class
* that inherits from this class, the derived class is instantiated
* once for each extension that uses the API.
*/
class ExtensionAPI extends EventEmitter {
constructor(extension) {
super();
this.extension = extension;
extension.once("shutdown", (what, isAppShutdown) => {
if (this.onShutdown) {
this.onShutdown(isAppShutdown);
}
this.extension = null;
});
}
destroy() {}
onManifestEntry(entry) {}
getAPI(context) {
throw new Error("Not Implemented");
}
}
/**
* Subclass to add APIs commonly used with persistent events.
* If a namespace uses events, it should use this subclass.
*
* this.apiNamespace = class extends ExtensionAPIPersistent {};
*/
class ExtensionAPIPersistent extends ExtensionAPI {
/**
* Check for event entry.
*
* @param {string} event The event name e.g. onStateChanged
* @returns {boolean}
*/
hasEventRegistrar(event) {
return (
this.PERSISTENT_EVENTS && Object.hasOwn(this.PERSISTENT_EVENTS, event)
);
}
/**
* Get the event registration fuction
*
* @param {string} event The event name e.g. onStateChanged
* @returns {Function} register is used to start the listener
* register returns an object containing
* a convert and unregister function.
*/
getEventRegistrar(event) {
if (this.hasEventRegistrar(event)) {
return this.PERSISTENT_EVENTS[event].bind(this);
}
}
/**
* Used when instantiating an EventManager instance to register the listener.
*
* @param {Object} options Options used for event registration
* @param {BaseContext} options.context Extension Context passed when creating an EventManager instance.
* @param {string} options.event The eAPI vent name.
* @param {Function} options.fire The function passed to the listener to fire the event.
* @param {Array<any>} params An optional array of parameters received along with the
* addListener request.
* @returns {Function} The unregister function used in the EventManager.
*/
registerEventListener(options, params) {
const apiRegistar = this.getEventRegistrar(options.event);
return apiRegistar?.(options, params).unregister;
}
/**
* Used to prime a listener for when the background script is not running.
*
* @param {string} event The event name e.g. onStateChanged or captiveURL.onChange.
* @param {Function} fire The function passed to the listener to fire the event.
* @param {Array} params Params passed to the event listener.
* @param {boolean} isInStartup unused here but passed for subclass use.
* @returns {Object} the unregister and convert functions used in the EventManager.
*/
primeListener(event, fire, params, isInStartup) {
const apiRegistar = this.getEventRegistrar(event);
return apiRegistar?.({ fire, isInStartup }, params);
}
}
/**
* A wrapper around a window that returns the window iff the inner window
* matches the inner window at the construction of this wrapper.
*
* This wrapper should not be used after the inner window is destroyed.
**/
class InnerWindowReference {
constructor(contentWindow, innerWindowID) {
this.contentWindow = contentWindow;
this.innerWindowID = innerWindowID;
this.needWindowIDCheck = false;
contentWindow.addEventListener(
"pagehide",
this,
{ mozSystemGroup: true },
false
);
contentWindow.addEventListener(
"pageshow",
this,
{ mozSystemGroup: true },
false
);
}
get() {
// If the pagehide event has fired, the inner window ID needs to be checked,
// in case the window ref is dereferenced in a pageshow listener (before our
// pageshow listener was dispatched) or during the unload event.
if (
!this.needWindowIDCheck ||
(!isDeadOrRemote(this.contentWindow) &&
getInnerWindowID(this.contentWindow) === this.innerWindowID)
) {
return this.contentWindow;
}
return null;
}
invalidate() {
// If invalidate() is called while the inner window is in the bfcache, then
// we are unable to remove the event listener, and handleEvent will be
// called once more if the page is revived from the bfcache.
if (this.contentWindow && !isDeadOrRemote(this.contentWindow)) {
this.contentWindow.removeEventListener("pagehide", this, {
mozSystemGroup: true,
});
this.contentWindow.removeEventListener("pageshow", this, {
mozSystemGroup: true,
});
}
this.contentWindow = null;
this.needWindowIDCheck = false;
}
handleEvent(event) {
if (this.contentWindow) {
this.needWindowIDCheck = event.type === "pagehide";
} else {
// Remove listener when restoring from the bfcache - see invalidate().
event.currentTarget.removeEventListener("pagehide", this, {
mozSystemGroup: true,
});
event.currentTarget.removeEventListener("pageshow", this, {
mozSystemGroup: true,
});
}
}
}
/**
* This class contains the information we have about an individual
* extension. It is never instantiated directly, instead subclasses
* for each type of process extend this class and add members that are
* relevant for that process.
* @abstract
*/
class BaseContext {
constructor(envType, extension) {
this.envType = envType;
this.onClose = new Set();
this.checkedLastError = false;
this._lastError = null;
this.contextId = getUniqueId();
this.unloaded = false;
this.extension = extension;
this.manifestVersion = extension.manifestVersion;
this.jsonSandbox = null;
this.active = true;
this.incognito = null;
this.messageManager = null;
this.contentWindow = null;
this.innerWindowID = 0;
// These two properties are assigned in ContentScriptContextChild subclass
// to keep a copy of the content script sandbox Error and Promise globals
// (which are used by the WebExtensions internals) before any extension
// content script code had any chance to redefine them.
this.cloneScopeError = null;
this.cloneScopePromise = null;
}
get Error() {
// Return the copy stored in the context instance (when the context is an instance of
// ContentScriptContextChild or the global from extension page window otherwise).
return this.cloneScopeError || this.cloneScope.Error;
}
get Promise() {
// Return the copy stored in the context instance (when the context is an instance of
// ContentScriptContextChild or the global from extension page window otherwise).
return this.cloneScopePromise || this.cloneScope.Promise;
}
get privateBrowsingAllowed() {
return this.extension.privateBrowsingAllowed;
}
/**
* Whether the extension context is using the WebIDL bindings for the
* WebExtensions APIs.
* To be overridden in subclasses (e.g. WorkerContextChild) and to be
* optionally used in ExtensionAPI classes to customize the behavior of the
* API when the calls to the extension API are originated from the WebIDL
* bindings.
*/
get useWebIDLBindings() {
return false;
}
canAccessWindow(window) {
return this.extension.canAccessWindow(window);
}
canAccessContainer(userContextId) {
return this.extension.canAccessContainer(userContextId);
}
/**
* Opens a conduit linked to this context, populating related address fields.
* Only available in child contexts with an associated contentWindow.
* @param {object} subject
* @param {ConduitAddress} address
* @returns {PointConduit}
*/
openConduit(subject, address) {
let wgc = this.contentWindow.windowGlobalChild;
let conduit = wgc.getActor("Conduits").openConduit(subject, {
id: subject.id || getUniqueId(),
extensionId: this.extension.id,
envType: this.envType,
...address,
});
this.callOnClose(conduit);
conduit.setCloseCallback(() => {
this.forgetOnClose(conduit);
});
return conduit;
}
setContentWindow(contentWindow) {
if (!this.canAccessWindow(contentWindow)) {
throw new Error(
"BaseContext attempted to load when extension is not allowed due to incognito settings."
);
}
this.innerWindowID = getInnerWindowID(contentWindow);
this.messageManager = contentWindow.docShell.messageManager;
if (this.incognito == null) {
this.incognito = PrivateBrowsingUtils.isContentWindowPrivate(
contentWindow
);
}
let windowRef = new InnerWindowReference(contentWindow, this.innerWindowID);
Object.defineProperty(this, "active", {
configurable: true,
enumerable: true,
get: () => windowRef.get() !== null,
});
Object.defineProperty(this, "contentWindow", {
configurable: true,
enumerable: true,
get: () => windowRef.get(),
});
this.callOnClose({
close: () => {
// Allow other "close" handlers to use these properties, until the next tick.
Promise.resolve().then(() => {
windowRef.invalidate();
windowRef = null;
Object.defineProperty(this, "contentWindow", { value: null });
Object.defineProperty(this, "active", { value: false });
});
},
});
}
// All child contexts must implement logActivity. This is handled if the child
// context subclasses ExtensionBaseContextChild. ProxyContextParent overrides
// this with a noop for parent contexts.
logActivity(type, name, data) {
throw new Error(`Not implemented for ${this.envType}`);
}
get cloneScope() {
throw new Error("Not implemented");
}
get principal() {
throw new Error("Not implemented");
}
runSafe(callback, ...args) {
return this.applySafe(callback, args);
}
runSafeWithoutClone(callback, ...args) {
return this.applySafeWithoutClone(callback, args);
}
applySafe(callback, args, caller) {
if (this.unloaded) {
Cu.reportError("context.runSafe called after context unloaded", caller);
} else if (!this.active) {
Cu.reportError(
"context.runSafe called while context is inactive",
caller
);
} else {
try {
let { cloneScope } = this;
args = args.map(arg => Cu.cloneInto(arg, cloneScope));
} catch (e) {
Cu.reportError(e);
dump(
`runSafe failure: cloning into ${
this.cloneScope
}: ${e}\n\n${filterStack(Error())}`
);
}
return this.applySafeWithoutClone(callback, args, caller);
}
}
applySafeWithoutClone(callback, args, caller) {
if (this.unloaded) {
Cu.reportError(
"context.runSafeWithoutClone called after context unloaded",
caller
);
} else if (!this.active) {
Cu.reportError(
"context.runSafeWithoutClone called while context is inactive",
caller
);
} else {
try {
return Reflect.apply(callback, null, args);
} catch (e) {
dump(
`Extension error: ${e} ${e.fileName} ${
e.lineNumber
}\n[[Exception stack\n${filterStack(e)}Current stack\n${filterStack(
Error()
)}]]\n`
);
Cu.reportError(e);
}
}
}
checkLoadURL(url, options = {}) {
// As an optimization, f the URL starts with the extension's base URL,
// don't do any further checks. It's always allowed to load it.
if (url.startsWith(this.extension.baseURL)) {
return true;
}
return checkLoadURL(url, this.principal, options);
}
/**
* Safely call JSON.stringify() on an object that comes from an
* extension.
*
* @param {array<any>} args Arguments for JSON.stringify()
* @returns {string} The stringified representation of obj
*/
jsonStringify(...args) {
if (!this.jsonSandbox) {
this.jsonSandbox = Cu.Sandbox(this.principal, {
sameZoneAs: this.cloneScope,
wantXrays: false,
});
}
return Cu.waiveXrays(this.jsonSandbox.JSON).stringify(...args);
}
callOnClose(obj) {
this.onClose.add(obj);
}
forgetOnClose(obj) {
this.onClose.delete(obj);
}
get lastError() {
this.checkedLastError = true;
return this._lastError;
}
set lastError(val) {
this.checkedLastError = false;
this._lastError = val;
}
/**
* Normalizes the given error object for use by the target scope. If
* the target is an error object which belongs to that scope, it is
* returned as-is. If it is an ordinary object with a `message`
* property, it is converted into an error belonging to the target
* scope. If it is an Error object which does *not* belong to the
* clone scope, it is reported, and converted to an unexpected
* exception error.
*
* @param {Error|object} error
* @param {SavedFrame?} [caller]
* @returns {Error}
*/
normalizeError(error, caller) {
if (error instanceof this.Error) {
return error;
}
let message, fileName;
if (error && typeof error === "object") {
const isPlain = ChromeUtils.getClassName(error) === "Object";
if (isPlain && error.mozWebExtLocation) {
caller = error.mozWebExtLocation;
}
if (isPlain && caller && (error.mozWebExtLocation || !error.fileName)) {
caller = Cu.cloneInto(caller, this.cloneScope);
return ChromeUtils.createError(error.message, caller);
}
if (
isPlain ||
error instanceof ExtensionError ||
this.principal.subsumes(Cu.getObjectPrincipal(error))
) {
message = error.message;
fileName = error.fileName;
}
}
if (!message) {
Cu.reportError(error);
message = "An unexpected error occurred";
}
return new this.Error(message, fileName);
}
/**
* Sets the value of `.lastError` to `error`, calls the given
* callback, and reports an error if the value has not been checked
* when the callback returns.
*
* @param {object} error An object with a `message` property. May
* optionally be an `Error` object belonging to the target scope.
* @param {SavedFrame?} caller
* The optional caller frame which triggered this callback, to be used
* in error reporting.
* @param {function} callback The callback to call.
* @returns {*} The return value of callback.
*/
withLastError(error, caller, callback) {
this.lastError = this.normalizeError(error);
try {
return callback();
} finally {
if (!this.checkedLastError) {
Cu.reportError(`Unchecked lastError value: ${this.lastError}`, caller);
}
this.lastError = null;
}
}
/**
* Captures the most recent stack frame which belongs to the extension.
*
* @returns {SavedFrame?}
*/
getCaller() {
return ChromeUtils.getCallerLocation(this.principal);
}
/**
* Wraps the given promise so it can be safely returned to extension
* code in this context.
*
* If `callback` is provided, however, it is used as a completion
* function for the promise, and no promise is returned. In this case,
* the callback is called when the promise resolves or rejects. In the
* latter case, `lastError` is set to the rejection value, and the
* callback function must check `browser.runtime.lastError` or
* `extension.runtime.lastError` in order to prevent it being reported
* to the console.
*
* @param {Promise} promise The promise with which to wrap the
* callback. May resolve to a `SpreadArgs` instance, in which case
* each element will be used as a separate argument.
*
* Unless the promise object belongs to the cloneScope global, its
* resolution value is cloned into cloneScope prior to calling the
* `callback` function or resolving the wrapped promise.
*
* @param {function} [callback] The callback function to wrap
*
* @returns {Promise|undefined} If callback is null, a promise object
* belonging to the target scope. Otherwise, undefined.
*/
wrapPromise(promise, callback = null) {
let caller = this.getCaller();
let applySafe = this.applySafe.bind(this);
if (Cu.getGlobalForObject(promise) === this.cloneScope) {
applySafe = this.applySafeWithoutClone.bind(this);
}
if (callback) {
promise.then(
args => {
if (this.unloaded) {
Cu.reportError(`Promise resolved after context unloaded\n`, caller);
} else if (!this.active) {
Cu.reportError(
`Promise resolved while context is inactive\n`,
caller
);
} else if (args instanceof NoCloneSpreadArgs) {
this.applySafeWithoutClone(callback, args.unwrappedValues, caller);
} else if (args instanceof SpreadArgs) {
applySafe(callback, args, caller);
} else {
applySafe(callback, [args], caller);
}
},
error => {
this.withLastError(error, caller, () => {
if (this.unloaded) {
Cu.reportError(
`Promise rejected after context unloaded\n`,
caller
);
} else if (!this.active) {
Cu.reportError(
`Promise rejected while context is inactive\n`,
caller
);
} else {
this.applySafeWithoutClone(callback, [], caller);
}
});
}
);
} else {
return new this.Promise((resolve, reject) => {
promise.then(
value => {
if (this.unloaded) {
Cu.reportError(
`Promise resolved after context unloaded\n`,
caller
);
} else if (!this.active) {
Cu.reportError(
`Promise resolved while context is inactive\n`,
caller
);
} else if (value instanceof NoCloneSpreadArgs) {
let values = value.unwrappedValues;
this.applySafeWithoutClone(
resolve,
values.length == 1 ? [values[0]] : [values],
caller
);
} else if (value instanceof SpreadArgs) {
applySafe(resolve, value.length == 1 ? value : [value], caller);
} else {
applySafe(resolve, [value], caller);
}
},
value => {
if (this.unloaded) {
Cu.reportError(
`Promise rejected after context unloaded: ${value &&
value.message}\n`,
caller
);
} else if (!this.active) {
Cu.reportError(
`Promise rejected while context is inactive: ${value &&
value.message}\n`,
caller
);
} else {
this.applySafeWithoutClone(
reject,
[this.normalizeError(value, caller)],
caller
);
}
}
);
});
}
}
unload() {
this.unloaded = true;
for (let obj of this.onClose) {
obj.close();
}
this.onClose.clear();
}
/**
* A simple proxy for unload(), for use with callOnClose().
*/
close() {
this.unload();
}
}
/**
* An object that runs the implementation of a schema API. Instantiations of
* this interfaces are used by Schemas.jsm.
*
* @interface
*/
class SchemaAPIInterface {
/**
* Calls this as a function that returns its return value.
*
* @abstract
* @param {Array} args The parameters for the function.
* @returns {*} The return value of the invoked function.
*/
callFunction(args) {
throw new Error("Not implemented");
}
/**
* Calls this as a function and ignores its return value.
*
* @abstract
* @param {Array} args The parameters for the function.
*/
callFunctionNoReturn(args) {
throw new Error("Not implemented");
}
/**
* Calls this as a function that completes asynchronously.
*
* @abstract
* @param {Array} args The parameters for the function.
* @param {function(*)} [callback] The callback to be called when the function
* completes.
* @param {boolean} [requireUserInput=false] If true, the function should
* fail if the browser is not currently handling user input.
* @returns {Promise|undefined} Must be void if `callback` is set, and a
* promise otherwise. The promise is resolved when the function completes.
*/
callAsyncFunction(args, callback, requireUserInput = false) {
throw new Error("Not implemented");
}
/**
* Retrieves the value of this as a property.
*
* @abstract
* @returns {*} The value of the property.
*/
getProperty() {
throw new Error("Not implemented");
}
/**
* Assigns the value to this as property.
*
* @abstract
* @param {string} value The new value of the property.
*/
setProperty(value) {
throw new Error("Not implemented");
}
/**
* Registers a `listener` to this as an event.
*
* @abstract
* @param {function} listener The callback to be called when the event fires.
* @param {Array} args Extra parameters for EventManager.addListener.
* @see EventManager.addListener
*/
addListener(listener, args) {
throw new Error("Not implemented");
}
/**
* Checks whether `listener` is listening to this as an event.
*
* @abstract
* @param {function} listener The event listener.
* @returns {boolean} Whether `listener` is registered with this as an event.
* @see EventManager.hasListener
*/
hasListener(listener) {
throw new Error("Not implemented");
}
/**
* Unregisters `listener` from this as an event.
*
* @abstract
* @param {function} listener The event listener.
* @see EventManager.removeListener
*/
removeListener(listener) {
throw new Error("Not implemented");
}
/**
* Revokes the implementation object, and prevents any further method
* calls from having external effects.
*
* @abstract
*/
revoke() {
throw new Error("Not implemented");
}
}
/**
* An object that runs a locally implemented API.
*/
class LocalAPIImplementation extends SchemaAPIInterface {
/**
* Constructs an implementation of the `name` method or property of `pathObj`.
*
* @param {object} pathObj The object containing the member with name `name`.
* @param {string} name The name of the implemented member.
* @param {BaseContext} context The context in which the schema is injected.
*/
constructor(pathObj, name, context) {
super();
this.pathObj = pathObj;
this.name = name;
this.context = context;
}
revoke() {
if (this.pathObj[this.name][Schemas.REVOKE]) {
this.pathObj[this.name][Schemas.REVOKE]();
}
this.pathObj = null;
this.name = null;
this.context = null;
}
callFunction(args) {
try {
return this.pathObj[this.name](...args);
} catch (e) {
throw this.context.normalizeError(e);
}
}
callFunctionNoReturn(args) {
try {
this.pathObj[this.name](...args);
} catch (e) {
throw this.context.normalizeError(e);
}
}
callAsyncFunction(args, callback, requireUserInput) {
let promise;
try {
if (requireUserInput) {
if (!this.context.contentWindow.windowUtils.isHandlingUserInput) {
throw new ExtensionError(
`${this.name} may only be called from a user input handler`
);
}
}
promise = this.pathObj[this.name](...args) || Promise.resolve();
} catch (e) {
promise = Promise.reject(e);
}
return this.context.wrapPromise(promise, callback);
}
getProperty() {
return this.pathObj[this.name];
}
setProperty(value) {
this.pathObj[this.name] = value;
}
addListener(listener, args) {
try {
this.pathObj[this.name].addListener.call(null, listener, ...args);
} catch (e) {
throw this.context.normalizeError(e);
}
}
hasListener(listener) {
return this.pathObj[this.name].hasListener.call(null, listener);
}
removeListener(listener) {
this.pathObj[this.name].removeListener.call(null, listener);
}
}
// Recursively copy properties from source to dest.
function deepCopy(dest, source) {
for (let prop in source) {
let desc = Object.getOwnPropertyDescriptor(source, prop);
if (typeof desc.value == "object") {
if (!(prop in dest)) {
dest[prop] = {};
}
deepCopy(dest[prop], source[prop]);
} else {
Object.defineProperty(dest, prop, desc);
}
}
}
function getChild(map, key) {
let child = map.children.get(key);
if (!child) {
child = {
modules: new Set(),
children: new Map(),
};
map.children.set(key, child);
}
return child;
}
function getPath(map, path) {
for (let key of path) {
map = getChild(map, key);
}
return map;
}
function mergePaths(dest, source) {
for (let name of source.modules) {
dest.modules.add(name);
}
for (let [name, child] of source.children.entries()) {
mergePaths(getChild(dest, name), child);
}
}
/**
* Manages loading and accessing a set of APIs for a specific extension
* context.
*
* @param {BaseContext} context
* The context to manage APIs for.
* @param {SchemaAPIManager} apiManager
* The API manager holding the APIs to manage.
* @param {object} root
* The root object into which APIs will be injected.
*/
class CanOfAPIs {
constructor(context, apiManager, root) {
this.context = context;
this.scopeName = context.envType;
this.apiManager = apiManager;
this.root = root;
this.apiPaths = new Map();
this.apis = new Map();
}
/**
* Synchronously loads and initializes an ExtensionAPI instance.
*
* @param {string} name
* The name of the API to load.
*/
loadAPI(name) {
if (this.apis.has(name)) {
return;
}
let { extension } = this.context;
let api = this.apiManager.getAPI(name, extension, this.scopeName);
if (!api) {
return;
}
this.apis.set(name, api);
deepCopy(this.root, api.getAPI(this.context));
}
/**
* Asynchronously loads and initializes an ExtensionAPI instance.
*
* @param {string} name
* The name of the API to load.
*/
async asyncLoadAPI(name) {
if (this.apis.has(name)) {
return;
}
let { extension } = this.context;
if (!Schemas.checkPermissions(name, extension)) {
return;
}
let api = await this.apiManager.asyncGetAPI(
name,
extension,
this.scopeName
);
// Check again, because async;
if (this.apis.has(name)) {
return;
}
this.apis.set(name, api);
deepCopy(this.root, api.getAPI(this.context));
}
/**
* Finds the API at the given path from the root object, and
* synchronously loads the API that implements it if it has not
* already been loaded.
*
* @param {string} path
* The "."-separated path to find.
* @returns {*}
*/
findAPIPath(path) {
if (this.apiPaths.has(path)) {
return this.apiPaths.get(path);
}
let obj = this.root;
let modules = this.apiManager.modulePaths;
let parts = path.split(".");
for (let [i, key] of parts.entries()) {
if (!obj) {
return;
}
modules = getChild(modules, key);
for (let name of modules.modules) {
if (!this.apis.has(name)) {
this.loadAPI(name);
}
}
if (!(key in obj) && i < parts.length - 1) {
obj[key] = {};
}
obj = obj[key];
}
this.apiPaths.set(path, obj);
return obj;
}
/**
* Finds the API at the given path from the root object, and
* asynchronously loads the API that implements it if it has not
* already been loaded.
*
* @param {string} path
* The "."-separated path to find.
* @returns {Promise<*>}
*/
async asyncFindAPIPath(path) {
if (this.apiPaths.has(path)) {
return this.apiPaths.get(path);
}
let obj = this.root;
let modules = this.apiManager.modulePaths;
let parts = path.split(".");
for (let [i, key] of parts.entries()) {
if (!obj) {
return;
}
modules = getChild(modules, key);
for (let name of modules.modules) {
if (!this.apis.has(name)) {
await this.asyncLoadAPI(name);
}
}
if (!(key in obj) && i < parts.length - 1) {
obj[key] = {};
}
if (typeof obj[key] === "function") {
obj = obj[key].bind(obj);
} else {
obj = obj[key];
}
}
this.apiPaths.set(path, obj);
return obj;
}
}
/**
* @class APIModule
* @abstract
*
* @property {string} url
* The URL of the script which contains the module's
* implementation. This script must define a global property
* matching the modules name, which must be a class constructor
* which inherits from {@link ExtensionAPI}.
*
* @property {string} schema
* The URL of the JSON schema which describes the module's API.
*
* @property {Array<string>} scopes
* The list of scope names into which the API may be loaded.
*
* @property {Array<string>} manifest
* The list of top-level manifest properties which will trigger
* the module to be loaded, and its `onManifestEntry` method to be
* called.
*
* @property {Array<string>} events
* The list events which will trigger the module to be loaded, and
* its appropriate event handler method to be called. Currently
* only accepts "startup".
*
* @property {Array<string>} permissions
* An optional list of permissions, any of which must be present
* in order for the module to load.
*
* @property {Array<Array<string>>} paths
* A list of paths from the root API object which, when accessed,
* will cause the API module to be instantiated and injected.
*/
/**
* This object loads the ext-*.js scripts that define the extension API.
*
* This class instance is shared with the scripts that it loads, so that the
* ext-*.js scripts and the instantiator can communicate with each other.
*/
class SchemaAPIManager extends EventEmitter {
/**
* @param {string} processType
* "main" - The main, one and only chrome browser process.
* "addon" - An addon process.
* "content" - A content process.
* "devtools" - A devtools process.
* @param {SchemaRoot} schema
*/
constructor(processType, schema) {
super();
this.processType = processType;
this.global = null;
if (schema) {
this.schema = schema;
}
this.modules = new Map();
this.modulePaths = { children: new Map(), modules: new Set() };
this.manifestKeys = new Map();
this.eventModules = new DefaultMap(() => new Set());
this.settingsModules = new Set();
this._modulesJSONLoaded = false;
this.schemaURLs = new Map();
this.apis = new DefaultWeakMap(() => new Map());
this._scriptScopes = [];
}
onStartup(extension) {
let promises = [];
for (let apiName of this.eventModules.get("startup")) {
promises.push(
extension.apiManager.asyncGetAPI(apiName, extension).then(api => {
if (api) {
api.onStartup();
}
})
);
}
return Promise.all(promises);
}
async loadModuleJSON(urls) {
let promises = urls.map(url => fetch(url).then(resp => resp.json()));
return this.initModuleJSON(await Promise.all(promises));
}
initModuleJSON(blobs) {
for (let json of blobs) {
this.registerModules(json);
}
this._modulesJSONLoaded = true;
return new StructuredCloneHolder({
modules: this.modules,
modulePaths: this.modulePaths,
manifestKeys: this.manifestKeys,
eventModules: this.eventModules,
settingsModules: this.settingsModules,
schemaURLs: this.schemaURLs,
});
}
initModuleData(moduleData) {
if (!this._modulesJSONLoaded) {
let data = moduleData.deserialize({}, true);
this.modules = data.modules;
this.modulePaths = data.modulePaths;
this.manifestKeys = data.manifestKeys;
this.eventModules = new DefaultMap(() => new Set(), data.eventModules);
this.settingsModules = new Set(data.settingsModules);
this.schemaURLs = data.schemaURLs;
}
this._modulesJSONLoaded = true;
}
/**
* Registers a set of ExtensionAPI modules to be lazily loaded and
* managed by this manager.
*
* @param {object} obj
* An object containing property for eacy API module to be
* registered. Each value should be an object implementing the
* APIModule interface.
*/
registerModules(obj) {
for (let [name, details] of Object.entries(obj)) {
details.namespaceName = name;
if (this.modules.has(name)) {
throw new Error(`Module '${name}' already registered`);
}
this.modules.set(name, details);
if (details.schema) {
let content =
details.scopes &&
(details.scopes.includes("content_parent") ||
details.scopes.includes("content_child"));
this.schemaURLs.set(details.schema, { content });
}
for (let event of details.events || []) {
this.eventModules.get(event).add(name);
}
if (details.settings) {
this.settingsModules.add(name);
}
for (let key of details.manifest || []) {
if (this.manifestKeys.has(key)) {
throw new Error(
`Manifest key '${key}' already registered by '${this.manifestKeys.get(
key
)}'`
);
}
this.manifestKeys.set(key, name);
}
for (let path of details.paths || []) {
getPath(this.modulePaths, path).modules.add(name);
}
}
}
/**
* Emits an `onManifestEntry` event for the top-level manifest entry
* on all relevant {@link ExtensionAPI} instances for the given
* extension.
*
* The API modules will be synchronously loaded if they have not been
* loaded already.
*
* @param {Extension} extension
* The extension for which to emit the events.
* @param {string} entry
* The name of the top-level manifest entry.
*
* @returns {*}
*/
emitManifestEntry(extension, entry) {
let apiName = this.manifestKeys.get(entry);
if (apiName) {
let api = extension.apiManager.getAPI(apiName, extension);
return api.onManifestEntry(entry);
}
}
/**
* Emits an `onManifestEntry` event for the top-level manifest entry
* on all relevant {@link ExtensionAPI} instances for the given
* extension.
*
* The API modules will be asynchronously loaded if they have not been
* loaded already.
*
* @param {Extension} extension
* The extension for which to emit the events.
* @param {string} entry
* The name of the top-level manifest entry.
*
* @returns {Promise<*>}
*/
async asyncEmitManifestEntry(extension, entry) {
let apiName = this.manifestKeys.get(entry);
if (apiName) {
let api = await extension.apiManager.asyncGetAPI(apiName, extension);
return api.onManifestEntry(entry);
}
}
/**
* Returns the {@link ExtensionAPI} instance for the given API module,
* for the given extension, in the given scope, synchronously loading
* and instantiating it if necessary.
*
* @param {string} name
* The name of the API module to load.
* @param {Extension} extension
* The extension for which to load the API.
* @param {string} [scope = null]
* The scope type for which to retrieve the API, or null if not
* being retrieved for a particular scope.
*
* @returns {ExtensionAPI?}
*/
getAPI(name, extension, scope = null) {
if (!this._checkGetAPI(name, extension, scope)) {
return;
}
let apis = this.apis.get(extension);
if (apis.has(name)) {
return apis.get(name);
}
let module = this.loadModule(name);
let api = new module(extension);
apis.set(name, api);
return api;
}
/**
* Returns the {@link ExtensionAPI} instance for the given API module,
* for the given extension, in the given scope, asynchronously loading
* and instantiating it if necessary.
*
* @param {string} name
* The name of the API module to load.
* @param {Extension} extension
* The extension for which to load the API.
* @param {string} [scope = null]
* The scope type for which to retrieve the API, or null if not
* being retrieved for a particular scope.
*
* @returns {Promise<ExtensionAPI>?}
*/
async asyncGetAPI(name, extension, scope = null) {
if (!this._checkGetAPI(name, extension, scope)) {
return;
}
let apis = this.apis.get(extension);
if (apis.has(name)) {
return apis.get(name);
}
let module = await this.asyncLoadModule(name);
// Check again, because async.
if (apis.has(name)) {
return apis.get(name);
}
let api = new module(extension);
apis.set(name, api);
return api;
}
/**
* Synchronously loads an API module, if not already loaded, and
* returns its ExtensionAPI constructor.
*
* @param {string} name
* The name of the module to load.
*
* @returns {class}
*/
loadModule(name) {
let module = this.modules.get(name);
if (module.loaded) {
return this.global[name];
}
this._checkLoadModule(module, name);
this.initGlobal();
Services.scriptloader.loadSubScript(module.url, this.global);
module.loaded = true;
return this.global[name];
}
/**
* aSynchronously loads an API module, if not already loaded, and
* returns its ExtensionAPI constructor.
*
* @param {string} name
* The name of the module to load.
*
* @returns {Promise<class>}
*/
asyncLoadModule(name) {
let module = this.modules.get(name);
if (module.loaded) {
return Promise.resolve(this.global[name]);
}
if (module.asyncLoaded) {
return module.asyncLoaded;
}
this._checkLoadModule(module, name);
module.asyncLoaded = ChromeUtils.compileScript(module.url).then(script => {
this.initGlobal();
script.executeInGlobal(this.global);
module.loaded = true;
return this.global[name];
});
return module.asyncLoaded;
}
asyncLoadSettingsModules() {
return Promise.all(
Array.from(this.settingsModules).map(apiName =>
this.asyncLoadModule(apiName)
)
);
}
getModule(name) {
return this.modules.get(name);
}
/**
* Checks whether the given API module may be loaded for the given
* extension, in the given scope.
*
* @param {string} name
* The name of the API module to check.
* @param {Extension} extension
* The extension for which to check the API.
* @param {string} [scope = null]
* The scope type for which to check the API, or null if not
* being checked for a particular scope.
*
* @returns {boolean}
* Whether the module may be loaded.
*/
_checkGetAPI(name, extension, scope = null) {
let module = this.getModule(name);
if (
module.permissions &&
!module.permissions.some(perm => extension.hasPermission(perm))
) {
return false;
}
if (!scope) {
return true;
}
if (!module.scopes.includes(scope)) {
return false;
}
if (!Schemas.checkPermissions(module.namespaceName, extension)) {
return false;
}
return true;
}
_checkLoadModule(module, name) {
if (!module) {
throw new Error(`Module '${name}' does not exist`);
}
if (module.asyncLoaded) {
throw new Error(`Module '${name}' currently being lazily loaded`);
}
if (this.global && this.global[name]) {
throw new Error(
`Module '${name}' conflicts with existing global property`
);
}
}
/**
* Create a global object that is used as the shared global for all ext-*.js
* scripts that are loaded via `loadScript`.
*
* @returns {object} A sandbox that is used as the global by `loadScript`.
*/
_createExtGlobal() {
let global = Cu.Sandbox(
Services.scriptSecurityManager.getSystemPrincipal(),
{
wantXrays: false,
wantGlobalProperties: ["ChromeUtils"],
sandboxName: `Namespace of ext-*.js scripts for ${this.processType} (from: resource://gre/modules/ExtensionCommon.jsm)`,
}
);
Object.assign(global, {
Cc,
ChromeWorker,
Ci,
Cr,
Cu,
ExtensionAPI,
ExtensionAPIPersistent,
ExtensionCommon,
MatchGlob,
MatchPattern,
MatchPatternSet,
Services,
StructuredCloneHolder,
WebExtensionPolicy,
XPCOMUtils,
extensions: this,
global,
});
ChromeUtils.import("resource://gre/modules/AppConstants.jsm", global);
XPCOMUtils.defineLazyGetter(global, "console", getConsole);
XPCOMUtils.defineLazyModuleGetters(global, {
ExtensionUtils: "resource://gre/modules/ExtensionUtils.jsm",
XPCOMUtils: "resource://gre/modules/XPCOMUtils.jsm",
});
return global;
}
initGlobal() {
if (!this.global) {
this.global = this._createExtGlobal();
}
}
/**
* Load an ext-*.js script. The script runs in its own scope, if it wishes to
* share state with another script it can assign to the `global` variable. If
* it wishes to communicate with this API manager, use `extensions`.
*
* @param {string} scriptUrl The URL of the ext-*.js script.
*/
loadScript(scriptUrl) {
// Create the object in the context of the sandbox so that the script runs
// in the sandbox's context instead of here.
let scope = Cu.createObjectIn(this.global);
Services.scriptloader.loadSubScript(scriptUrl, scope);
// Save the scope to avoid it being garbage collected.
this._scriptScopes.push(scope);
}
}
class LazyAPIManager extends SchemaAPIManager {
constructor(processType, moduleData, schemaURLs) {
super(processType);
this.initialized = false;
this.initModuleData(moduleData);
this.schemaURLs = schemaURLs;
}
}
defineLazyGetter(LazyAPIManager.prototype, "schema", function() {
let root = new SchemaRoot(Schemas.rootSchema, this.schemaURLs);
root.parseSchemas();
return root;
});
class MultiAPIManager extends SchemaAPIManager {
constructor(processType, children) {
super(processType);
this.initialized = false;
this.children = children;
}
async lazyInit() {
if (!this.initialized) {
this.initialized = true;
for (let child of this.children) {
if (child.lazyInit) {
let res = child.lazyInit();
if (res && typeof res.then === "function") {
await res;
}
}
mergePaths(this.modulePaths, child.modulePaths);
}
}
}
onStartup(extension) {
return Promise.all(this.children.map(child => child.onStartup(extension)));
}
getModule(name) {
for (let child of this.children) {
if (child.modules.has(name)) {
return child.modules.get(name);
}
}
}
loadModule(name) {
for (let child of this.children) {
if (child.modules.has(name)) {
return child.loadModule(name);
}
}
}
asyncLoadModule(name) {
for (let child of this.children) {
if (child.modules.has(name)) {
return child.asyncLoadModule(name);
}
}
}
}
defineLazyGetter(MultiAPIManager.prototype, "schema", function() {
let bases = this.children.map(child => child.schema);
// All API manager schema roots should derive from the global schema root,
// so it doesn't need its own entry.
if (bases[bases.length - 1] === Schemas) {
bases.pop();
}
if (bases.length === 1) {
bases = bases[0];
}
return new SchemaRoot(bases, new Map());
});
function LocaleData(data) {
this.defaultLocale = data.defaultLocale;
this.selectedLocale = data.selectedLocale;
this.locales = data.locales || new Map();
this.warnedMissingKeys = new Set();
// Map(locale-name -> Map(message-key -> localized-string))
//
// Contains a key for each loaded locale, each of which is a
// Map of message keys to their localized strings.
this.messages = data.messages || new Map();
if (data.builtinMessages) {
this.messages.set(this.BUILTIN, data.builtinMessages);
}
}
LocaleData.prototype = {
// Representation of the object to send to content processes. This
// should include anything the content process might need.
serialize() {
return {
defaultLocale: this.defaultLocale,
selectedLocale: this.selectedLocale,
messages: this.messages,
locales: this.locales,
};
},
BUILTIN: "@@BUILTIN_MESSAGES",
has(locale) {
return this.messages.has(locale);
},
// https://developer.chrome.com/extensions/i18n
localizeMessage(message, substitutions = [], options = {}) {
let defaultOptions = {
defaultValue: "",
cloneScope: null,
};
let locales = this.availableLocales;
if (options.locale) {
locales = new Set(
[this.BUILTIN, options.locale, this.defaultLocale].filter(locale =>
this.messages.has(locale)
)
);
}
options = Object.assign(defaultOptions, options);
// Message names are case-insensitive, so normalize them to lower-case.
message = message.toLowerCase();
for (let locale of locales) {
let messages = this.messages.get(locale);
if (messages.has(message)) {
let str = messages.get(message);
if (!str.includes("$")) {
return str;
}
if (!Array.isArray(substitutions)) {
substitutions = [substitutions];
}
let replacer = (matched, index, dollarSigns) => {
if (index) {
// This is not quite Chrome-compatible. Chrome consumes any number
// of digits following the $, but only accepts 9 substitutions. We
// accept any number of substitutions.
index = parseInt(index, 10) - 1;
return index in substitutions ? substitutions[index] : "";
}
// For any series of contiguous `$`s, the first is dropped, and
// the rest remain in the output string.
return dollarSigns;
};
return str.replace(/\$(?:([1-9]\d*)|(\$+))/g, replacer);
}
}
// Check for certain pre-defined messages.
if (message == "@@ui_locale") {
return this.uiLocale;
} else if (message.startsWith("@@bidi_")) {
let rtl = Services.locale.isAppLocaleRTL;
if (message == "@@bidi_dir") {
return rtl ? "rtl" : "ltr";
} else if (message == "@@bidi_reversed_dir") {
return rtl ? "ltr" : "rtl";
} else if (message == "@@bidi_start_edge") {
return rtl ? "right" : "left";
} else if (message == "@@bidi_end_edge") {
return rtl ? "left" : "right";
}
}
if (!this.warnedMissingKeys.has(message)) {
let error = `Unknown localization message ${message}`;
if (options.cloneScope) {
error = new options.cloneScope.Error(error);
}
Cu.reportError(error);
this.warnedMissingKeys.add(message);
}
return options.defaultValue;
},
// Localize a string, replacing all |__MSG_(.*)__| tokens with the
// matching string from the current locale, as determined by
// |this.selectedLocale|.
//
// This may not be called before calling either |initLocale| or
// |initAllLocales|.
localize(str, locale = this.selectedLocale) {
if (!str) {
return str;
}
return str.replace(/__MSG_([A-Za-z0-9@_]+?)__/g, (matched, message) => {
return this.localizeMessage(message, [], {
locale,
defaultValue: matched,
});
});
},
// Validates the contents of a locale JSON file, normalizes the
// messages into a Map of message key -> localized string pairs.
addLocale(locale, messages, extension) {
let result = new Map();
let isPlainObject = obj =>
obj &&
typeof obj === "object" &&
ChromeUtils.getClassName(obj) === "Object";
// Chrome does not document the semantics of its localization
// system very well. It handles replacements by pre-processing
// messages, replacing |$[a-zA-Z0-9@_]+$| tokens with the value of their
// replacements. Later, it processes the resulting string for
// |$[0-9]| replacements.
//
// Again, it does not document this, but it accepts any number
// of sequential |$|s, and replaces them with that number minus
// 1. It also accepts |$| followed by any number of sequential
// digits, but refuses to process a localized string which
// provides more than 9 substitutions.
if (!isPlainObject(messages)) {
extension.packagingError(`Invalid locale data for ${locale}`);
return result;
}
for (let key of Object.keys(messages)) {
let msg = messages[key];
if (!isPlainObject(msg) || typeof msg.message != "string") {
extension.packagingError(
`Invalid locale message data for ${locale}, message ${JSON.stringify(
key
)}`
);
continue;
}
// Substitutions are case-insensitive, so normalize all of their names
// to lower-case.
let placeholders = new Map();
if ("placeholders" in msg && isPlainObject(msg.placeholders)) {
for (let key of Object.keys(msg.placeholders)) {
placeholders.set(key.toLowerCase(), msg.placeholders[key]);
}
}
let replacer = (match, name) => {
let replacement = placeholders.get(name.toLowerCase());
if (isPlainObject(replacement) && "content" in replacement) {
return replacement.content;
}
return "";
};
let value = msg.message.replace(/\$([A-Za-z0-9@_]+)\$/g, replacer);
// Message names are also case-insensitive, so normalize them to lower-case.
result.set(key.toLowerCase(), value);
}
this.messages.set(locale, result);
return result;
},
get acceptLanguages() {
let result = Services.prefs.getComplexValue(
"intl.accept_languages",
Ci.nsIPrefLocalizedString
).data;
return result.split(/\s*,\s*/g);
},
get uiLocale() {
return Services.locale.appLocaleAsBCP47;
},
};
defineLazyGetter(LocaleData.prototype, "availableLocales", function() {
return new Set(
[this.BUILTIN, this.selectedLocale, this.defaultLocale].filter(locale =>
this.messages.has(locale)
)
);
});
/**
* This is a generic class for managing event listeners.
*
* @example
* new EventManager({
* context,
* name: "api.subAPI",
* register: fire => {
* let listener = (...) => {
* // Fire any listeners registered with addListener.
* fire.async(arg1, arg2);
* };
* // Register the listener.
* SomehowRegisterListener(listener);
* return () => {
* // Return a way to unregister the listener.
* SomehowUnregisterListener(listener);
* };
* }
* }).api()
*
* The result is an object with addListener, removeListener, and
* hasListener methods. `context` is an add-on scope (either an
* ExtensionContext in the chrome process or ExtensionContext in a
* content process).
*/
class EventManager {
/*
* A persistent event must provide module and name. Additionally the
* module must implement primeListeners in the ExtensionAPI class.
*
* A startup blocking event must also add the startupBlocking flag in
* ext-toolkit.json or ext-browser.json.
*
* Listeners synchronously added from a background extension context
* will be persisted, for a persistent background script only the
* "startup blocking" events will be persisted.
*
* EventManager instances created in a child process can't persist any listener.
*
* @param {object} params
* Parameters that control this EventManager.
* @param {BaseContext} params.context
* An object representing the extension instance using this event.
* @param {string} params.module
* The API module name, required for persistent events.
* @param {string} params.event
* The API event name, required for persistent events.
* @param {ExtensionAPI} params.extensionApi
* The API intance. If the API uses the ExtensionAPIPersistent class, some simplification is
* possible by passing the api (self or this) and the internal register function will be used.
* @param {string} [params.name]
* A name used only for debugging. If not provided, name is built from module and event.
* @param {functon} params.register
* A function called whenever a new listener is added.
* @param {boolean} [params.inputHandling=false]
* If true, the "handling user input" flag is set while handlers
* for this event are executing.
*/
constructor(params) {
let {
context,
module,
event,
name,
register,
extensionApi,
inputHandling = false,
resetIdleOnEvent = true,
} = params;
this.context = context;
this.module = module;
this.event = event;
this.name = name;
this.register = register;
this.inputHandling = inputHandling;
this.resetIdleOnEvent = resetIdleOnEvent;
if (!name) {
this.name = `${module}.${event}`;
}
if (!this.register && extensionApi instanceof ExtensionAPIPersistent) {
this.register = (fire, ...params) => {
return extensionApi.registerEventListener(
{ context, event, fire },
params
);
};
}
if (!this.register) {
throw new Error(
`EventManager requires register method for ${this.name}.`
);
}
this.canPersistEvents =
module &&
event &&
["background", "background_worker"].includes(this.context.viewType) &&
this.context.envType == "addon_parent";
if (this.canPersistEvents) {
let { extension } = context;
if (extension.persistentBackground) {
// Persistent backgrounds will only persist startup blocking APIs.
let api_module = extension.apiManager.getModule(this.module);
if (!api_module?.startupBlocking) {
this.canPersistEvents = false;
}
} else {
// Event pages will persist all APIs that implement primeListener.
// The api is already loaded so this does not have performance effect.
let api = extension.apiManager.getAPI(
this.module,
extension,
"addon_parent"
);
// If the api doesn't implement primeListener we do not persist the events.
if (!api?.primeListener) {
this.canPersistEvents = false;
}
}
}
this.unregister = new Map();
this.remove = new Map();
}
/*
* Information about listeners to persistent events is associated with
* the extension to which they belong. Any extension thas has such
* listeners has a property called `persistentListeners` that is a
* 3-level Map. The first 2 keys are the module name (e.g., webRequest)
* and the name of the event within the module (e.g., onBeforeRequest).
* The third level of the map is used to track multiple listeners for
* the same event, these listeners are distinguished by the extra arguments
* passed to addListener(). For quick lookups, the key to the third Map
* is the result of calling uneval() on the array of extra arguments.
*
* The value stored in the Map is a plain object with a property called
* `params` that is the original (ie, not uneval()ed) extra arguments to
* addListener(). For a primed listener (i.e., the stub listener created
* during browser startup before the extension background page is started,
* the object also has a `primed` property that holds the things needed
* to handle events during startup and eventually connect the listener
* with a callback registered from the extension.
*
* @param {Extension} extension
* @returns {boolean} True if the extension had any persistent listeners.
*/
static _initPersistentListeners(extension) {
if (extension.persistentListeners) {
return !!extension.persistentListeners.size;
}
let listeners = new DefaultMap(() => new DefaultMap(() => new Map()));
extension.persistentListeners = listeners;
let persistentListeners = extension.startupData?.persistentListeners;
if (!persistentListeners) {
return false;
}
let found = false;
for (let [module, entry] of Object.entries(persistentListeners)) {
for (let [event, paramlists] of Object.entries(entry)) {
for (let paramlist of paramlists) {
let key = uneval(paramlist);
listeners
.get(module)
.get(event)
.set(key, { params: paramlist });
found = true;
}
}
}
return found;
}
// Extract just the information needed at startup for all persistent
// listeners, and arrange for it to be saved. This should be called
// whenever the set of persistent listeners for an extension changes.
static _writePersistentListeners(extension) {
let startupListeners = {};
for (let [module, moduleEntry] of extension.persistentListeners) {
startupListeners[module] = {};
for (let [event, eventEntry] of moduleEntry) {
startupListeners[module][event] = Array.from(
eventEntry.values(),
listener => listener.params
);
}
}
extension.startupData.persistentListeners = startupListeners;
extension.saveStartupData();
}
// Set up "primed" event listeners for any saved event listeners
// in an extension's startup data.
// This function is only called during browser startup, it stores details
// about all primed listeners in the extension's persistentListeners Map.
static primeListeners(extension, isInStartup = false) {
if (!EventManager._initPersistentListeners(extension)) {
return;
}
for (let [module, moduleEntry] of extension.persistentListeners) {
// If we're in startup, we only want to continue attempting to prime a
// subset of events that should be startup blocking.
if (isInStartup) {
let api_module = extension.apiManager.getModule(module);
if (!api_module.startupBlocking) {
continue;
}
}
let api = extension.apiManager.getAPI(module, extension, "addon_parent");
// If an extension is upgraded and a permission, such as webRequest, is
// removed, we will have been called but the API is no longer available.
if (!api?.primeListener) {
// The runtime module no longer implements primed listeners, drop them.
extension.persistentListeners.delete(module);
EventManager._writePersistentListeners(extension);
continue;
}
for (let [event, listeners] of moduleEntry) {
for (let [key, listener] of listeners) {
let primed = { pendingEvents: [] };
let fireEvent = (...args) =>
new Promise((resolve, reject) => {
if (!listener.primed) {
reject(
new Error(
`primed listener ${module}.${event} not re-registered`
)
);
return;
}
primed.pendingEvents.push({ args, resolve, reject });
extension.emit("background-script-event");
});
let fire = {
wakeup: () => extension.wakeupBackground(),
sync: fireEvent,
async: fireEvent,
// fire.async for ProxyContextParent is already not cloning.
raw: fireEvent,
};
try {
let handler = api.primeListener(
event,
fire,
listener.params,
isInStartup
);
if (handler) {
listener.primed = primed;
Object.assign(primed, handler);
}
} catch (e) {
Cu.reportError(
`Error priming listener ${module}.${event}: ${e} :: ${e.stack}`
);
// Force this listener to be cleared.
listener.error = true;
}
// If an attempt to prime a listener failed, ensure it is cleared now.
// If a module is a startup blocking module, not all listeners may
// get primed during early startup. For that reason, we don't clear
// persisted listeners during early startup. At the end of background
// execution any listeners that were not renewed will be cleared.
if (listener.error || (!isInStartup && !listener.primed)) {
EventManager.clearPersistentListener(extension, module, event, key);
}
}
}
}
}
/**
* This is called as a result of background script startup-finished and shutdown.
*
* After startup, it removes any remaining primed listeners. These exist if the
* listener was not renewed during startup. In this case the persisted listener
* data is also removed.
*
* During shutdown, care should be taken to set clearPersistent to false.
* persisted listener data should NOT be cleared during shutdown.
*
* @param {Extension} extension
* @param {boolean} clearPersistent whether the persisted listener data should be cleared.
*/
static clearPrimedListeners(extension, clearPersistent = true) {
if (!extension.persistentListeners) {
return;
}
for (let [module, moduleEntry] of extension.persistentListeners) {
for (let [event, listeners] of moduleEntry) {
for (let [key, listener] of listeners) {
let { primed, added } = listener;
// When a primed listener is added or renewed during initial
// background execution we set an added flag. If it was primed
// when added, primed is set to null.
if (added) {
continue;
}
if (primed) {
// When a primed listener was not renewed, primed will still be truthy.
// These need to be cleared on shutdown (important for event pages), but
// we only clear the persisted listener data after the startup of a background.
// Release any pending events and unregister the primed handler.
listener.primed = null;
for (let evt of primed.pendingEvents) {
evt.reject(new Error("listener not re-registered"));
}
primed.unregister();
}
// Clear any persisted events that were not renewed, should typically
// only be done at the end of the background page load.
if (clearPersistent) {
EventManager.clearPersistentListener(extension, module, event, key);
}
}
}
}
}
// Record the fact that there is a listener for the given event in
// the given extension. `args` is an Array containing any extra
// arguments that were passed to addListener().
static savePersistentListener(extension, module, event, args = []) {
EventManager._initPersistentListeners(extension);
let key = uneval(args);
extension.persistentListeners
.get(module)
.get(event)
// when writing, only args are written, other properties are dropped
.set(key, { params: args, added: true });
EventManager._writePersistentListeners(extension);
}
// Remove the record for the given event listener from the extension's
// startup data. `key` must be a string, the result of calling uneval()
// on the array of extra arguments originally passed to addListener().
static clearPersistentListener(extension, module, event, key = uneval([])) {
let listeners = extension.persistentListeners.get(module).get(event);
listeners.delete(key);
if (listeners.size == 0) {
let moduleEntry = extension.persistentListeners.get(module);
moduleEntry.delete(event);
if (moduleEntry.size == 0) {
extension.persistentListeners.delete(module);
}
}
EventManager._writePersistentListeners(extension);
}
addListener(callback, ...args) {
if (this.unregister.has(callback)) {
return;
}
this.context.logActivity("api_call", `${this.name}.addListener`, { args });
let shouldFire = () => {
if (this.context.unloaded) {
dump(`${this.name} event fired after context unloaded.\n`);
} else if (!this.context.active) {
dump(`${this.name} event fired while context is inactive.\n`);
} else if (this.unregister.has(callback)) {
return true;
}
return false;
};
let { extension } = this.context;
const resetIdle = () => {
if (this.resetIdleOnEvent) {
extension?.emit("background-script-reset-idle");
}
};
let fire = {
// Bug 1754866 fire.sync doesn't match documentation.
sync: (...args) => {
if (shouldFire()) {
resetIdle();
let result = this.context.applySafe(callback, args);
this.context.logActivity("api_event", this.name, { args, result });
return result;
}
},
async: (...args) => {
return Promise.resolve().then(() => {
if (shouldFire()) {
resetIdle();
let result = this.context.applySafe(callback, args);
this.context.logActivity("api_event", this.name, { args, result });
return result;
}
});
},
raw: (...args) => {
if (!shouldFire()) {
throw new Error("Called raw() on unloaded/inactive context");
}
resetIdle();
let result = Reflect.apply(callback, null, args);
this.context.logActivity("api_event", this.name, { args, result });
return result;
},
asyncWithoutClone: (...args) => {
return Promise.resolve().then(() => {
if (shouldFire()) {
resetIdle();
let result = this.context.applySafeWithoutClone(callback, args);
this.context.logActivity("api_event", this.name, { args, result });
return result;
}
});
},
};
let { module, event } = this;
let unregister = null;
let recordStartupData = false;
// If this is a persistent event, check for a listener that was already
// created during startup. If there is one, use it and don't create a
// new one.
if (this.canPersistEvents) {
// Once a background is started, listenerPromises is set to null. At
// that point, we stop recording startup data.
recordStartupData = !!this.context.listenerPromises;
let key = uneval(args);
EventManager._initPersistentListeners(extension);
let listener = extension.persistentListeners
.get(module)
.get(event)
.get(key);
if (listener) {
// During startup only a subset of persisted listeners are primed. As
// well, each API determines whether to prime a specific listener.
let { primed } = listener;
if (primed) {
listener.primed = null;
primed.convert(fire, this.context);
unregister = primed.unregister;
for (let evt of primed.pendingEvents) {
evt.resolve(fire.async(...evt.args));
}
}
listener.added = true;
recordStartupData = false;
this.remove.set(callback, () => {
EventManager.clearPersistentListener(
extension,
module,
event,
uneval(args)
);
});
}
}
if (!unregister) {
unregister = this.register(fire, ...args);
}
this.unregister.set(callback, unregister);
this.context.callOnClose(this);
// If this is a new listener for a persistent event, record
// the details for subsequent startups.
if (recordStartupData) {
EventManager.savePersistentListener(extension, module, event, args);
this.remove.set(callback, () => {
EventManager.clearPersistentListener(
extension,
module,
event,
uneval(args)
);
});
}
}
removeListener(callback, clearPersistentListener = true) {
if (!this.unregister.has(callback)) {
return;
}
this.context.logActivity("api_call", `${this.name}.removeListener`, {
args: [],
});
let unregister = this.unregister.get(callback);
this.unregister.delete(callback);
try {
unregister();
} catch (e) {
Cu.reportError(e);
}
if (clearPersistentListener && this.remove.has(callback)) {
let cleanup = this.remove.get(callback);
this.remove.delete(callback);
cleanup();
}
if (this.unregister.size == 0) {
this.context.forgetOnClose(this);
}
}
hasListener(callback) {
return this.unregister.has(callback);
}
revoke() {
for (let callback of this.unregister.keys()) {
this.removeListener(callback, false);
}
}
close() {
this.revoke();
}
api() {
return {
addListener: (...args) => this.addListener(...args),
removeListener: (...args) => this.removeListener(...args),
hasListener: (...args) => this.hasListener(...args),
setUserInput: this.inputHandling,
[Schemas.REVOKE]: () => this.revoke(),
};
}
}
// Simple API for event listeners where events never fire.
function ignoreEvent(context, name) {
return {
addListener: function(callback) {
let id = context.extension.id;
let frame = Components.stack.caller;
let msg = `In add-on ${id}, attempting to use listener "${name}", which is unimplemented.`;
let scriptError = Cc["@mozilla.org/scripterror;1"].createInstance(
Ci.nsIScriptError
);
scriptError.init(
msg,
frame.filename,
null,
frame.lineNumber,
frame.columnNumber,
Ci.nsIScriptError.warningFlag,
"content javascript"
);
Services.console.logMessage(scriptError);
},
removeListener: function(callback) {},
hasListener: function(callback) {},
};
}
const stylesheetMap = new DefaultMap(url => {
let uri = Services.io.newURI(url);
return styleSheetService.preloadSheet(uri, styleSheetService.AGENT_SHEET);
});
ExtensionCommon = {
BaseContext,
CanOfAPIs,
EventManager,
ExtensionAPI,
EventEmitter,
LocalAPIImplementation,
LocaleData,
NoCloneSpreadArgs,
SchemaAPIInterface,
SchemaAPIManager,
SpreadArgs,
checkLoadURL,
defineLazyGetter,
getConsole,
ignoreEvent,
instanceOf,
makeWidgetId,
normalizeTime,
runSafeSyncWithoutClone,
stylesheetMap,
withHandlingUserInput,
MultiAPIManager,
LazyAPIManager,
};
/*
* Zimbra Collaboration Suite Web Client
* Copyright (C) 2004-2017 Synacor, Inc.
* https://www.zimbra.com/license
*/
if(AjxPackage.define("NewWindow_1")){if(AjxPackage.define("ajax.core.AjxCore")){AjxCore=function(){};
AjxCore._objectIds=[null];
AjxCore.assignId=function(a){var c=AjxCore._objectIds.length;
AjxCore._objectIds[c]=a;
return c
};
AjxCore.unassignId=function(a){AjxCore._objectIds[a]=null
};
AjxCore.objectWithId=function(a){return AjxCore._objectIds[a]
};
AjxCore.addListener=function(d,a,c){d=AjxCore._getEventSource(d);
var e=AjxCore._getListenerStruct(d,a,true);
e.list[e.list.length]=c
};
AjxCore.setEventHandler=function(d,a,c){d=AjxCore._getEventSource(d);
var e=AjxCore._getListenerStruct(d,a,true);
e.single=c
};
AjxCore.removeListener=function(f,c,e){f=AjxCore._getEventSource(f);
var g=AjxCore._getListenerStruct(f,c);
if(g){var h=g.list;
var a=h.length;
for(var d=0;
d<a;
d++){if(h[d]==e){h[d]=null
}}}};
AjxCore.removeAllListeners=function(e,c){e=AjxCore._getEventSource(e);
var f=AjxCore._getListenerStruct(e,c);
if(f){var g=f.list;
var a=g.length;
for(var d=0;
d<a;
d++){g[d]=null
}}AjxCore.unassignId(f.id)
};
AjxCore.notifyListeners=function(d,a,c){d=AjxCore._getEventSource(d);
var e=AjxCore._getListenerStruct(d,a);
if(e){d[a](c)
}};
AjxCore._getEventSource=function(a){if(typeof(a)=="string"){a=document.getElementById(a)
}return a
};
AjxCore.getListenerStruct=function(c,a){return AjxCore._getListenerStruct(c,a)
};
AjxCore._getListenerStruct=function(d,a,c){var e=null;
if(d[a]){var f=d[a]._lsListenerStructId;
e=AjxCore.objectWithId(f)
}else{if(c){e=AjxCore._setupListener(d,a)
}}return e
};
AjxCore._setupListener=function(d,a,f){var e=new Object();
e.list=new Array();
e.single=null;
var f=e.id=AjxCore.assignId(e);
var c=AjxCore._createListenerClosure(f);
d[a]=c;
d[a]._lsListenerStructId=f;
return e
};
AjxCore._createListenerClosure=function(id){var closure=function(arg1){var listenerStruct=AjxCore.objectWithId(id);
var listenerList=listenerStruct.list;
var len=listenerList.length;
for(var i=0;
i<len;
i++){var callback=listenerList[i];
if(callback){if(typeof(callback)=="string"){eval(callback)
}else{if(callback.handleEvent){callback.handleEvent(arg1,this)
}else{callback(arg1,this)
}}}}if(listenerStruct.single){var callback=listenerStruct.single;
if(typeof(callback)=="string"){eval(callback)
}else{return callback.handleEvent?callback.handleEvent(arg1,this):callback(arg1,this)
}}};
return closure
};
AjxCore.addOnloadListener=function(a){if(window.onload&&(!window.onload._lsListenerStructId)){var c=window.onload;
window.onload=null;
AjxCore.addListener(window,"onload",c)
}AjxCore.addListener(window,"onload",a)
};
AjxCore.addOnunloadListener=function(a){if(window.onunload&&(!window.onunload._lsListenerStructId)){var c=window.onunload;
window.onunload=null;
AjxCore.addListener(window,"onunload",c)
}AjxCore.addListener(window,"onunload",a)
}
}if(AjxPackage.define("ajax.debug.AjxDebug")){AjxDebug=function(a){if(arguments.length==0){a={}
}else{if(typeof arguments[0]=="number"){a={level:arguments[0],name:arguments[1],showTime:arguments[2]}
}}this._showTime=a.showTime;
this._target=a.target||AjxDebug.TGT_WINDOW;
this._showTiming=false;
this._startTimePt=this._lastTimePt=0;
this._dbgWindowInited=false;
this._msgQueue=[];
this._isPrevWinOpen=false;
this.setDebugLevel(a.level)
};
AjxDebug.prototype.toString=function(){return"AjxDebug"
};
AjxDebug.prototype.isAjxDebug=true;
AjxDebug.NONE=0;
AjxDebug.DBG1=1;
AjxDebug.DBG2=2;
AjxDebug.DBG3=3;
AjxDebug.TGT_WINDOW="window";
AjxDebug.TGT_CONSOLE="console";
AjxDebug.BUFFER={};
AjxDebug.BUFFER_MAX={};
AjxDebug.DEFAULT_TYPE="debug";
AjxDebug.RPC="rpc";
AjxDebug.NOTIFY="notify";
AjxDebug.EXCEPTION="exception";
AjxDebug.CALENDAR="calendar";
AjxDebug.REPLY="reply";
AjxDebug.SCROLL="scroll";
AjxDebug.BAD_JSON="bad_json";
AjxDebug.PREFS="prefs";
AjxDebug.PROGRESS="progress";
AjxDebug.REMINDER="reminder";
AjxDebug.OFFLINE="offline";
AjxDebug.TAG_ICON="tagIcon";
AjxDebug.DATA_URI="dataUri";
AjxDebug.MSG_DISPLAY="msgDisplay";
AjxDebug.ZIMLET="zimlet";
AjxDebug.KEYBOARD="kbnav";
AjxDebug.FOCUS="focus";
AjxDebug.FOCUS1="focus1";
AjxDebug.ACCESSIBILITY="a11y";
AjxDebug.DRAFT="draft";
AjxDebug.BUFFER_MAX[AjxDebug.DEFAULT_TYPE]=0;
AjxDebug.BUFFER_MAX[AjxDebug.RPC]=200;
AjxDebug.BUFFER_MAX[AjxDebug.NOTIFY]=400;
AjxDebug.BUFFER_MAX[AjxDebug.EXCEPTION]=100;
AjxDebug.BUFFER_MAX[AjxDebug.CALENDAR]=400;
AjxDebug.BUFFER_MAX[AjxDebug.REPLY]=400;
AjxDebug.BUFFER_MAX[AjxDebug.SCROLL]=100;
AjxDebug.BUFFER_MAX[AjxDebug.BAD_JSON]=200;
AjxDebug.BUFFER_MAX[AjxDebug.PREFS]=200;
AjxDebug.BUFFER_MAX[AjxDebug.REMINDER]=200;
AjxDebug.BUFFER_MAX[AjxDebug.OFFLINE]=400;
AjxDebug.BUFFER_MAX[AjxDebug.TAG_ICON]=200;
AjxDebug.BUFFER_MAX[AjxDebug.PROGRESS]=200;
AjxDebug.BUFFER_MAX[AjxDebug.DATA_URI]=200;
AjxDebug.BUFFER_MAX[AjxDebug.MSG_DISPLAY]=200;
AjxDebug.BUFFER_MAX[AjxDebug.ZIMLET]=200;
AjxDebug.BUFFER_MAX[AjxDebug.KEYBOARD]=null;
AjxDebug.BUFFER_MAX[AjxDebug.FOCUS]=null;
AjxDebug.BUFFER_MAX[AjxDebug.ACCESSIBILITY]=null;
AjxDebug.BUFFER_MAX[AjxDebug.DRAFT]=200;
AjxDebug.MAX_OUT=25000;
AjxDebug._CONTENT_FRAME_ID="AjxDebug_CF";
AjxDebug._LINK_FRAME_ID="AjxDebug_LF";
AjxDebug._BOTTOM_FRAME_ID="AjxDebug_BFI";
AjxDebug._BOTTOM_FRAME_NAME="AjxDebug_BFN";
AjxDebug.prototype.setTitle=function(a){if(this._document&&!AjxEnv.isIE){this._document.title=a
}};
AjxDebug.prototype.setDebugLevel=function(a){this._level=parseInt(a)||a;
this._enable(this._level!=AjxDebug.NONE)
};
AjxDebug.prototype.getDebugLevel=function(){return this._level
};
AjxDebug.prototype.println=function(g,f,e){if(!this._isWriteable()){return
}try{var a=this._handleArgs(arguments);
if(!a){return
}f=a.args.join("");
var d=(this._target!=AjxDebug.TGT_CONSOLE)?"<br>":"";
this._add({msg:this._timestamp()+f+d,linkName:a.linkName,level:g})
}catch(c){}};
AjxDebug.prototype.isDisabled=function(){return !this._enabled
};
AjxDebug.prototype.dumpObj=function(f,d,c,e){if(!this._isWriteable()){return
}var a=this._handleArgs(arguments);
if(!a){return
}d=a.args[0];
if(!d){return
}c=a.args[1];
this._add({obj:d,linkName:a.linkName,showFuncs:c,level:f})
};
AjxDebug.prototype.printRaw=function(e,d,c){if(!this._isWriteable()){return
}var a=this._handleArgs(arguments);
if(!a){return
}this._add({obj:a.args[0],isRaw:true,linkName:a.linkName,level:e})
};
AjxDebug.prototype.printXML=function(e,d,c){if(!this._isWriteable()){return
}var a=this._handleArgs(arguments);
if(!a){return
}d=a.args[0];
if(!d){return
}if(d.length>AjxDebug.MAX_OUT){this.printRaw(d);
return
}this._add({obj:d,isXml:true,linkName:a.linkName,level:e})
};
AjxDebug.prototype.display=function(e,d,c){if(!this._isWriteable()){return
}var a=this._handleArgs(arguments);
if(!a){return
}d=a.args[0];
d=d.replace(/\r?\n/g,"[crlf]");
d=d.replace(/ /g,"[space]");
d=d.replace(/\t/g,"[tab]");
this.printRaw(e,d,c)
};
AjxDebug.prototype.showTiming=function(c,f){this._showTiming=c;
if(c){this._enable(true)
}var d=c?"on":"off";
var e="Turning timing info "+d;
if(f){e=e+": "+f
}var a=new DebugMessage({msg:e});
this._addMessage(a);
this._startTimePt=this._lastTimePt=new Date().getTime()
};
AjxDebug.prototype.timePt=function(i,d){if(!this._showTiming||!this._isWriteable()){return
}if(d){this._startTimePt=this._lastTimePt=new Date().getTime()
}var f=new Date().getTime();
var a=f-this._startTimePt;
var c=f-this._lastTimePt;
this._lastTimePt=f;
var e=d?"<br/>":"";
i=i?" "+i:"";
var h=[e,"[",a," / ",c,"]",i].join("");
var g="<div>"+h+"</div>";
this._addMessage(new DebugMessage({msg:g}));
return c
};
AjxDebug.prototype.getContentFrame=function(){if(this._contentFrame){return this._contentFrame
}if(this._debugWindow&&this._debugWindow.document){return this._debugWindow.document.getElementById(AjxDebug._CONTENT_FRAME_ID)
}return null
};
AjxDebug.prototype.getLinkFrame=function(a){if(this._linkFrame){return this._linkFrame
}if(this._debugWindow&&this._debugWindow.document){return this._debugWindow.document.getElementById(AjxDebug._LINK_FRAME_ID)
}if(!a){this._openDebugWindow();
return this.getLinkFrame(true)
}return null
};
AjxDebug.prototype._enable=function(a){this._enabled=a;
if(this._target==AjxDebug.TGT_WINDOW){if(a){if(!this._dbgName){this._dbgName="AjxDebugWin_"+location.hostname.replace(/\./g,"_")
}if(this._debugWindow==null||this._debugWindow.closed){this._openDebugWindow()
}}else{if(this._debugWindow){this._debugWindow.close();
this._debugWindow=null
}}}};
AjxDebug.prototype._isWriteable=function(){if(this.isDisabled()){return false
}if(this._target==AjxDebug.TGT_WINDOW){try{return(!this._isPaused&&this._debugWindow&&!this._debugWindow.closed)
}catch(a){return false
}}return true
};
AjxDebug.prototype._getHtmlForObject=function(f,g){g=g||{};
var d=[];
var c=0;
if(f===undefined){d[c++]="<span>Undefined</span>"
}else{if(f===null){d[c++]="<span>NULL</span>"
}else{if(AjxUtil.isBoolean(f)){d[c++]="<span>"+f+"</span>"
}else{if(AjxUtil.isNumber(f)){d[c++]="<span>"+f+"</span>"
}else{if(g.isRaw){d[c++]=this._timestamp();
d[c++]="<textarea rows='25' style='width:100%' readonly='true'>";
d[c++]=f;
d[c++]="</textarea><p></p>"
}else{if(g.isXml){var a=new AjxDebugXmlDocument;
var e=a.create();
if(e&&("loadXML" in e)){e.loadXML(f);
d[c++]="<div style='border-width:2px; border-style:inset; width:100%; height:300px; overflow:auto'>";
d[c++]=this._createXmlTree(e,0,{authToken:true});
d[c++]="</div>"
}else{d[c++]="<span>Unable to create XmlDocument to show XML</span>"
}}else{d[c++]="<div style='border-width:2px; border-style:inset; width:100%; height:300px; overflow:auto'><pre>";
d[c++]=this._dump(f,true,g.showFuncs,{ZmAppCtxt:true,authToken:true});
d[c++]="</div></pre>"
}}}}}}return d.join("")
};
AjxDebug.prototype._dump=function(e,d,a,c){return AjxStringUtil.prettyPrint(e,d,a,c)
};
AjxDebug.prototype._handleArgs=function(f){if(this._level==AjxDebug.NONE||this._showTiming||f.length==0){return
}var a=new Array(f.length);
for(var d=0;
d<f.length;
d++){a[d]=f[d]
}var k={args:null,linkName:null};
var h=a.length;
if(a.length>1){var j=a[a.length-1];
if(j&&j.indexOf&&(j.indexOf("DebugWarn")!=-1||((j.indexOf(" ")==-1)&&(/Request|Response$/.test(j))))){k.linkName=j;
a.pop()
}}var g=null;
var c=a[0];
var e=(typeof c=="number"||((h>1)&&c.length<=8&&/^[a-z0-9]+$/.test(c)));
if(e){g=c;
a.shift()
}if(g&&(AjxDebug.BUFFER_MAX[g]==null)){if(typeof this._level=="number"){if(typeof g!="number"||(g>this._level)){return
}}else{if(g!=this._level){return
}}}k.args=a;
return k
};
AjxDebug.prototype._openDebugWindow=function(e){var c=AjxEnv.isIE?"_blank":this._dbgName;
this._debugWindow=window.open("",c,"width=600,height=400,resizable=yes,scrollbars=yes");
if(this._debugWindow==null){this._enabled=false;
return
}this._enabled=true;
this._isPrevWinOpen=this._debugWindow.debug;
this._debugWindow.debug=true;
try{this._document=this._debugWindow.document;
this.setTitle("Debug");
if(!this._isPrevWinOpen){this._document.write("<html>","<head>","<script>","function blank() {return [","'<html><head><style type=\"text/css\">',","'P, TD, DIV, SPAN, SELECT, INPUT, TEXTAREA, BUTTON {',","'font-family: Tahoma, Arial, Helvetica, sans-serif;',","'font-size:11px;}',","'.Content {display:block;margin:0.25em 0em;}',","'.Link {cursor: pointer;color:blue;text-decoration:underline;white-space:nowrap;width:100%;}',","'.DebugWarn {color:red;font-weight:bold;}',","'.Run {color:black; background-color:red;width:100%;font-size:18px;font-weight:bold;}',","'.RunLink {display:block;color:black;background-color:red;font-weight:bold;white-space:nowrap;width:100%;}',","'</style></head><body></body></html>'].join(\"\");}","<\/script>","</head>","<frameset cols='125, *'>","<frameset rows='*,40'>","<frame name='",AjxDebug._LINK_FRAME_ID,"' id='",AjxDebug._LINK_FRAME_ID,"' src='javascript:parent.parent.blank();'>","<frame name='",AjxDebug._BOTTOM_FRAME_NAME,"' id='",AjxDebug._BOTTOM_FRAME_ID,"' src='javascript:parent.parent.blank();' scrolling=no frameborder=0>","</frameset>","<frame name='",AjxDebug._CONTENT_FRAME_ID,"' id='",AjxDebug._CONTENT_FRAME_ID,"' src='javascript:parent.blank();'>","</frameset>","</html>");
this._document.close();
var a=new AjxTimedAction(this,AjxDebug.prototype._finishInitWindow);
AjxTimedAction.scheduleAction(a,2500)
}else{this._finishInitWindow();
this._contentFrame=this._document.getElementById(AjxDebug._CONTENT_FRAME_ID);
this._linkFrame=this._document.getElementById(AjxDebug._LINK_FRAME_ID);
this._createLinkNContent("RunLink","NEW RUN","Run","NEW RUN");
this._attachHandlers();
this._dbgWindowInited=true;
this._showMessages()
}}catch(d){if(this._debugWindow){this._debugWindow.close()
}this._openDebugWindow(true)
}};
AjxDebug.prototype._finishInitWindow=function(){try{this._contentFrame=this._debugWindow.document.getElementById(AjxDebug._CONTENT_FRAME_ID);
this._linkFrame=this._debugWindow.document.getElementById(AjxDebug._LINK_FRAME_ID);
var f=this._debugWindow.document.getElementById(AjxDebug._BOTTOM_FRAME_ID);
var e=f.contentWindow.document;
var d=[];
var c=0;
d[c++]="<table><tr><td><button id='";
d[c++]=AjxDebug._BOTTOM_FRAME_ID;
d[c++]="_clear'>Clear</button></td><td><button id='";
d[c++]=AjxDebug._BOTTOM_FRAME_ID;
d[c++]="_pause'>Pause</button></td></tr></table>";
if(e.body){e.body.innerHTML=d.join("")
}}catch(a){}if(e){this._clearBtn=e.getElementById(AjxDebug._BOTTOM_FRAME_ID+"_clear");
this._pauseBtn=e.getElementById(AjxDebug._BOTTOM_FRAME_ID+"_pause")
}this._attachHandlers();
this._dbgWindowInited=true;
this._showMessages()
};
AjxDebug.prototype._attachHandlers=function(){var a=AjxCallback.simpleClosure(this._unloadHandler,this);
if(this._debugWindow.attachEvent){this._unloadHandler=a;
this._debugWindow.attachEvent("onunload",a)
}else{this._debugWindow.onunload=a
}if(this._clearBtn){this._clearBtn.onclick=AjxCallback.simpleClosure(this._clear,this)
}if(this._pauseBtn){this._pauseBtn.onclick=AjxCallback.simpleClosure(this._pause,this)
}};
AjxDebug.prototype._scrollToBottom=function(){var c=this.getContentFrame();
var a=c?c.contentWindow.document.body:null;
var e=this.getLinkFrame();
var d=e?e.contentWindow.document.body:null;
if(a&&d){a.scrollTop=a.scrollHeight;
d.scrollTop=d.scrollHeight
}};
AjxDebug.prototype._timestamp=function(){return this._showTime?this._getTimeStamp()+": ":""
};
AjxDebug.prototype.setShowTimestamps=function(a){this._showTime=a
};
AjxDebug.prototype._createXmlTree=function(e,d,a){if(e==null){return""
}var j="";
var h;
switch(e.nodeType){case 1:j+="<div style='color: blue; padding-left: 16px;'>&lt;<span style='color: DarkRed;'>"+e.nodeName+"</span>";
if(a&&a[e.nodeName]){return j+"/&gt;</div>"
}var k=e.attributes;
h=k.length;
for(var f=0;
f<h;
f++){j+=this._createXmlAttribute(k[f])
}if(!e.hasChildNodes()){return j+"/&gt;</div>"
}j+="&gt;<br />";
var g=e.childNodes;
h=g.length;
for(var f=0;
f<h;
f++){j+=this._createXmlTree(g[f],d+3,a)
}j+="&lt;/<span style='color: DarkRed;'>"+e.nodeName+"</span>&gt;</div>";
break;
case 9:var g=e.childNodes;
h=g.length;
for(var f=0;
f<h;
f++){j+=this._createXmlTree(g[f],d,a)
}break;
case 3:if(!/^\s*$/.test(e.nodeValue)){var c=e.nodeValue.replace(/</g,"&lt;").replace(/>/g,"&gt;");
j+="<span style='color: WindowText; padding-left: 16px;'>"+c+"</span><br />"
}break;
case 7:j+="&lt;?"+e.nodeName;
var k=e.attributes;
h=k.length;
for(var f=0;
f<h;
f++){j+=this._createXmlAttribute(k[f])
}j+="?&gt;<br />";
break;
case 4:j="<div style=''>&lt;![CDATA[<span style='color: WindowText; font-family: \"Courier New\"; white-space: pre; display: block; border-left: 1px solid Gray; padding-left: 16px;'>"+e.nodeValue+"</span>]]></div>";
break;
case 8:j="<div style='color: blue; padding-left: 16px;'>&lt;!--<span style='white-space: pre; font-family: \"Courier New\"; color: Gray; display: block;'>"+e.nodeValue+"</span>--></div>";
break;
case 10:j="<div style='color: blue; padding-left: 16px'>&lt;!DOCTYPE "+e.name;
if(e.publicId){j+=' PUBLIC "'+e.publicId+'"';
if(e.systemId){j+=' "'+e.systemId+'"'
}}else{if(e.systemId){j+=' SYSTEM "'+e.systemId+'"'
}}j+="&gt;</div>";
break;
default:this._inspect(e)
}return j
};
AjxDebug.prototype._createXmlAttribute=function(c){return[" <span style='color: red'>",c.nodeName,"</span><span style='color: blue'>=\"",c.nodeValue,'"</span>'].join("")
};
AjxDebug.prototype._inspect=function(c){var d="";
for(var a in c){d+="obj."+a+" = "+c[a]+"\n"
}window.alert(d)
};
AjxDebug.prototype._add=function(a){a.extraHtml=a.obj&&this._getHtmlForObject(a.obj,a);
this._addMessage(new DebugMessage(a))
};
AjxDebug.prototype._addMessage=function(a){this._msgQueue.push(a);
this._showMessages()
};
AjxDebug.prototype._showMessages=function(){switch(this._target){case AjxDebug.TGT_WINDOW:this._showMessagesInWindow();
break;
case AjxDebug.TGT_CONSOLE:this._showMessagesInConsole()
}this._addMessagesToBuffer();
this._msgQueue=[]
};
AjxDebug.prototype._showMessagesInWindow=function(){if(!this._dbgWindowInited){return
}try{if(this._msgQueue.length>0){var a=this.getContentFrame();
var e=this.getLinkFrame();
if(!a||!e){return
}var l=a.contentWindow.document;
var h=e.contentWindow.document;
var c=new Date();
for(var f=0,g=this._msgQueue.length;
f<g;
++f){var d=this._msgQueue[f];
var m=d.linkName;
var k=[d.message,d.extraHtml].join("");
this._createLinkNContent("Link",m,"Content",k,c)
}}this._scrollToBottom()
}catch(j){}};
AjxDebug.prototype._addMessagesToBuffer=function(){var d=(this._target==AjxDebug.TGT_CONSOLE)?"<br>":"";
for(var c=0,a=this._msgQueue.length;
c<a;
++c){var e=this._msgQueue[c];
AjxDebug._addMessageToBuffer(e.type,e.message+e.extraHtml+d)
}};
AjxDebug._addMessageToBuffer=function(d,e){d=d||AjxDebug.DEFAULT_TYPE;
var a=AjxDebug.BUFFER_MAX[d];
if(a>0){var c=AjxDebug.BUFFER[d]=AjxDebug.BUFFER[d]||[];
while(c.length>=a){c.shift()
}c.push(e)
}};
AjxDebug.prototype._showMessagesInConsole=function(){if(!window.console){return
}var c=new Date();
for(var d=0,a=this._msgQueue.length;
d<a;
++d){var e=this._msgQueue[d];
if(window.console&&window.console.log){window.console.log(AjxStringUtil.stripTags(e.message+e.extraHtml))
}}};
AjxDebug.prototype._getTimeStamp=function(a){if(!AjxDebug._timestampFormatter){AjxDebug._timestampFormatter=new AjxDateFormat("HH:mm:ss.SSS")
}a=a||new Date();
return AjxStringUtil.htmlEncode(AjxDebug._timestampFormatter.format(a),true)
};
AjxDebug.prototype._createLinkNContent=function(h,n,e,j,d){var f=this.getLinkFrame();
if(!f){return
}d=d||new Date();
var g=["[",this._getTimeStamp(d),"]"].join("");
var c="Lnk_"+d.getTime();
if(n){var i=f.contentWindow.document;
var m=i.createElement("DIV");
m.className=h;
m.innerHTML=[n,g].join(" - ");
m._targetId=c;
m._dbg=this;
m.onclick=AjxDebug._linkClicked;
var l=i.body;
l.appendChild(m)
}var k=this.getContentFrame().contentWindow.document;
var a=k.createElement("DIV");
a.className=e;
a.id=c;
a.innerHTML=j;
k.body.appendChild(a);
this._scrollToBottom()
};
AjxDebug._linkClicked=function(){var c=this._dbg.getContentFrame();
var a=c.contentWindow.document.getElementById(this._targetId);
var d=0;
while(a){d+=a.offsetTop;
a=a.offsetParent
}c.contentWindow.scrollTo(0,d)
};
AjxDebug.prototype._clear=function(){this.getContentFrame().contentWindow.document.body.innerHTML="";
this.getLinkFrame().contentWindow.document.body.innerHTML=""
};
AjxDebug.prototype._pause=function(){this._isPaused=!this._isPaused;
this._pauseBtn.innerHTML=this._isPaused?"Resume":"Pause"
};
AjxDebug.prototype._unloadHandler=function(){if(!this._debugWindow){return
}if(this._debugWindow.detachEvent){this._debugWindow.detachEvent("onunload",this._unloadHandler)
}else{this._debugWindow.onunload=null
}};
AjxDebug.println=function(a,c){AjxDebug._addMessageToBuffer(a,c+"<br>")
};
AjxDebug.dumpObj=function(a,c){AjxDebug._addMessageToBuffer(a,"<pre>"+AjxStringUtil.prettyPrint(c,true)+"</pre>")
};
AjxDebug.logSoapMessage=function(f){if(f.methodNameStr=="NoOpRequest"||f.methodNameStr=="NoOpResponse"){return
}var c=AjxDebug._getTimeStamp();
var e=["<b>",f.methodNameStr,f.asyncMode?"":" (SYNCHRONOUS)"," - ",c,"</b>"].join("");
for(var a in AjxDebug.BUFFER){if(a==AjxDebug.DEFAULT_TYPE){continue
}AjxDebug.println(a,e)
}if(window.DBG){var d=f.methodNameStr;
if(!f.asyncMode){d="<span class='DebugWarn'>SYNCHRONOUS </span>"+d
}window.DBG.println(window.DBG._level,e,d)
}};
AjxDebug._getTimeStamp=function(a){return AjxDebug.prototype._getTimeStamp.apply(null,arguments)
};
AjxDebug.getDebugLog=function(c){c=c||AjxDebug.DEFAULT_TYPE;
var a=AjxDebug.BUFFER[c];
return a?a.join(""):""
};
DebugMessage=function(a){a=a||{};
this.message=a.msg||"";
this.type=a.type||null;
this.category=a.category||"";
this.time=a.time||(new Date().getTime());
this.extraHtml=a.extraHtml||"";
this.linkName=a.linkName;
this.type=(a.level&&typeof(a.level)=="string")?a.level:AjxDebug.DEFAULT_TYPE
}
}if(AjxPackage.define("ajax.util.AjxUtil")){AjxUtil=function(){};
AjxUtil.FLOAT_RE=/^[+\-]?((\d+(\.\d*)?)|((\d*\.)?\d+))([eE][+\-]?\d+)?$/;
AjxUtil.NOTFLOAT_RE=/[^\d\.]/;
AjxUtil.NOTINT_RE=/[^0-9]+/;
AjxUtil.LIFETIME_FIELD=/^([0-9])+([dhms]|ms)?$/;
AjxUtil.INT_RE=/^\-?(0|[1-9]\d*)$/;
AjxUtil.isSpecified=function(a){return((a!==void 0)&&(a!==null))
};
AjxUtil.isUndefined=function(a){return(a===void 0)
};
AjxUtil.isNull=function(a){return(a===null)
};
AjxUtil.isBoolean=function(a){return(typeof(a)==="boolean")
};
AjxUtil.isString=function(a){return(typeof(a)==="string")
};
AjxUtil.isNumber=function(a){return(typeof(a)==="number")
};
AjxUtil.isObject=function(a){return((typeof(a)==="object")&&(a!==null))
};
AjxUtil.isArray=function(a){return AjxUtil.isInstance(a,Array)
};
AjxUtil.isArrayLike=function(a){return typeof a!=="string"&&typeof a.length==="number"
};
AjxUtil.isFunction=function(a){return(typeof(a)==="function")
};
AjxUtil.isDate=function(a){return AjxUtil.isInstance(a,Date)
};
AjxUtil.isLifeTime=function(a){return AjxUtil.LIFETIME_FIELD.test(a)
};
AjxUtil.isNumeric=function(a){return(!isNaN(parseFloat(a))&&AjxUtil.FLOAT_RE.test(a)&&!AjxUtil.NOTFLOAT_RE.test(a))
};
AjxUtil.isInt=function(a){return AjxUtil.INT_RE.test(a)
};
AjxUtil.isPositiveInt=function(a){return AjxUtil.isInt(a)&&parseInt(a,10)>0
};
AjxUtil.isLong=AjxUtil.isInt;
AjxUtil.isNonNegativeLong=function(a){return AjxUtil.isLong(a)&&parseInt(a,10)>=0
};
AjxUtil.isEmpty=function(a){return(AjxUtil.isNull(a)||AjxUtil.isUndefined(a)||(a==="")||(AjxUtil.isArray(a)&&(a.length==0)))
};
AjxUtil.IPv4_ADDRESS_RE=/^\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?$/;
AjxUtil.IPv4_ADDRESS_WITH_PORT_RE=/^\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?:\d{1,5}$/;
AjxUtil.IPv6_ADDRESS_RE=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|(?:%[-\w.~]+)?$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})(?:%[-\w.~]+)?$/i;
AjxUtil.IPv6_ADDRESS_WITH_PORT_RE=new RegExp(AjxUtil.IPv6_ADDRESS_RE.source.replace("^","^\\[").replace("$","\\]:\\d{1,5}$"),"i");
AjxUtil.SUBNET_RE=/^\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?\/\d{1,2}$/;
AjxUtil.DOMAIN_NAME_SHORT_RE=/^[A-Za-z0-9\-]{2,}$/;
AjxUtil.DOMAIN_NAME_FULL_RE=/^[A-Za-z0-9\-]{1,}(\.[A-Za-z0-9\-]{2,}){1,}$/;
AjxUtil.HOST_NAME_RE=/^[A-Za-z0-9\-]{2,}(\.[A-Za-z0-9\-]{1,})*(\.[A-Za-z0-9\-]{2,})*$/;
AjxUtil.HOST_NAME_WITH_PORT_RE=/^[A-Za-z0-9\-]{2,}(\.[A-Za-z0-9\-]{2,})*:([0-9])+$/;
AjxUtil.EMAIL_SHORT_RE=/^[^@\s]+$/;
AjxUtil.EMAIL_FULL_RE=/^[^@\s]+@[A-Za-z0-9\-]{2,}(\.[A-Za-z0-9\-]{2,})+$/;
AjxUtil.FULL_URL_RE=/^[A-Za-z0-9]{2,}:\/\/[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)*(:([0-9])+)?(\/[\w\.\|\^\*\[\]\{\}\(\)\-<>~,'#_;@:!%]+)*(\/)?(\?[\w\.\|\^\*\+\[\]\{\}\(\)\-<>~,'#_;@:!%&=]*)?$/;
AjxUtil.IP_FULL_URL_RE=/^[A-Za-z0-9]{2,}:\/\/\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?(:([0-9])+)?(\/[\w\.\|\^\*\[\]\{\}\(\)\-<>~,'#_;@:!%]+)*(\/)?(\?[\w\.\|\^\*\+\[\]\{\}\(\)\-<>~,'#_;@:!%&=]*)?$/;
AjxUtil.SHORT_URL_RE=/^[A-Za-z0-9]{2,}:\/\/[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)*(:([0-9])+)?$/;
AjxUtil.IP_SHORT_URL_RE=/^[A-Za-z0-9]{2,}:\/\/\d{1,3}(\.\d{1,3}){3}(\.\d{1,3}\.\d{1,3})?(:([0-9])+)?$/;
AjxUtil.isHostName=function(a){return AjxUtil.HOST_NAME_RE.test(a)
};
AjxUtil.isDomainName=function(c,a){return a?AjxUtil.DOMAIN_NAME_SHORT_RE.test(c):AjxUtil.DOMAIN_NAME_FULL_RE.test(c)
};
AjxUtil.isEmailAddress=function(c,a){return a?AjxUtil.EMAIL_SHORT_RE.test(c):AjxUtil.EMAIL_FULL_RE.test(c)
};
AjxUtil.isValidEmailNonReg=function(a){return((a.indexOf("@")>0)&&(a.lastIndexOf("@")==a.indexOf("@"))&&(a.indexOf(".@")<0))
};
AjxUtil.isHash=function(a){var c=a&&a.toString?a.toString():Object.prototype.toString.call(a);
return AjxUtil.isObject(a)&&c==="[object Object]"
};
AjxUtil.SIZE_GIGABYTES="GB";
AjxUtil.SIZE_MEGABYTES="MB";
AjxUtil.SIZE_KILOBYTES="KB";
AjxUtil.SIZE_BYTES="B";
AjxUtil.formatSize=function(f,e,g){if(e==null){e=true
}if(g==null){g=20
}var c=AjxMsg.sizeBytes;
var d=AjxMsg.SIZE_BYTES;
if(f>=1073741824){c=AjxMsg.sizeGigaBytes;
d=AjxUtil.SIZE_GIGABYTES
}else{if(f>=1048576){c=AjxMsg.sizeMegaBytes;
d=AjxUtil.SIZE_MEGABYTES
}else{if(f>1023){c=AjxMsg.sizeKiloBytes;
d=AjxUtil.SIZE_KILOBYTES
}}}var a=AjxUtil.formatSizeForUnits(f,d,e,g);
return AjxMessageFormat.format(AjxMsg.formatSizeAndUnits,[a,c])
};
AjxUtil.formatSizeForUnits=function(f,d,c,h){if(d==null){d=AjxUtil.SIZE_BYTES
}if(c==null){c=true
}if(h==null){h=20
}switch(d){case AjxUtil.SIZE_GIGABYTES:f/=1073741824;
break;
case AjxUtil.SIZE_MEGABYTES:f/=1048576;
break;
case AjxUtil.SIZE_KILOBYTES:f/=1024;
break
}var a=I18nMsg.numberSeparatorDecimal!=""?I18nMsg.numberSeparatorDecimal:".";
var g=I18nMsg.formatNumber.replace(/\..*$/,"");
g=g.replace(/,/,"");
if(!c&&h){g=g+=a;
for(var e=0;
e<h;
e++){g+="#"
}}return AjxNumberFormat.format(g,f)
};
AjxUtil.parseSize=function(c,e){if(typeof c!=_STRING_){c=c.toString()
}var f=parseFloat(c.replace(/^\s*/,""));
var d=/[GMK]?B$/i;
var a=d.exec(c);
if(a){e=a[0].toUpperCase()
}switch(e){case AjxUtil.SIZE_GIGABYTES:f*=1073741824;
break;
case AjxUtil.SIZE_MEGABYTES:f*=1048576;
break;
case AjxUtil.SIZE_KILOBYTES:f*=1024;
break
}return f
};
AjxUtil.isInstance=function(a,c){return !!(a&&a.constructor&&(a.constructor===c))
};
AjxUtil.assert=function(a,c){if(!a&&AjxUtil.onassert){AjxUtil.onassert(c)
}};
AjxUtil.onassert=function(a){var k=new Object();
k.message=a;
var l=new Array();
if(AjxEnv.isIE){var d=arguments.callee.caller;
var f=0;
while(d&&f++<20){l[l.length]=d;
d=d.caller
}}else{try{var d=arguments.callee.caller;
while(d){l[l.length]=d;
if(l.length>2){break
}d=d.caller
}}catch(j){}}k.stack=l;
var h="";
var c=170;
for(var f=1;
f<l.length;
f++){if(f>1){h+="\n"
}if(f<11){var g=l[f].toString();
if(g.length>c){g=g.substr(0,c)+"...";
g=g.replace(/\n/g,"")
}h+=f+": "+g
}else{h+="("+(l.length-11)+" frames follow)";
break
}}alert("assertion:\n\n"+a+"\n\n---- Call Stack ---\n"+h);
throw k
};
AjxUtil.ELEMENT_NODE=1;
AjxUtil.TEXT_NODE=3;
AjxUtil.DOCUMENT_NODE=9;
AjxUtil.getInnerText=function(a){if(AjxEnv.isIE){return a.innerText
}function c(f){if(f){if(f.nodeType==3){return f.data
}if(f.nodeType==1){if(/^br$/i.test(f.tagName)){return"\r\n"
}var e="";
for(var d=f.firstChild;
d;
d=d.nextSibling){e+=c(d)
}return e
}}return""
}return c(a)
};
AjxUtil.createProxy=function(d,h){var f;
var c=function(){};
c.prototype=d;
if(d instanceof Array){f=new Array();
var e=d.length;
for(var a=0;
a<e;
a++){f[a]=d[a]
}}else{f=new c
}if(h){for(var g in d){if(typeof d[g]=="object"&&d[g]!==null){f[g]=AjxUtil.createProxy(d[g],h-1)
}}}f._object_=d;
return f
};
AjxUtil.unProxy=function(c){var a=c&&c._object_;
if(a){for(var d in c){if(c.hasOwnProperty(d)&&d!="_object_"){a[d]=c[d]
}}return a
}return null
};
AjxUtil.collapseList=function(d){var c=[];
for(var a=0;
a<d.length;
a++){if(d[a]){c.push(d[a])
}}return c
};
AjxUtil.arrayAsHash=function(h,e){h=AjxUtil.toArray(h);
var g={};
var d=typeof e=="function"&&e;
var f=e||true;
for(var c=0;
c<h.length;
c++){var a=h[c];
g[a]=d?d(a,g,c,h):f
}return g
};
AjxUtil.arrayAdd=function(d,c,a){d=d||[];
if(a==null||a<0||a>=d.length){d.push(c)
}else{d.splice(a,0,c)
}};
AjxUtil.arrayRemove=function(d,c){if(d){for(var a=0;
a<d.length;
a++){if(d[a]==c){d.splice(a,1);
return true
}}}return false
};
AjxUtil.indexOf=function(f,c,a){if(f){for(var d=0;
d<f.length;
d++){var e=f[d];
if((a&&e===c)||(!a&&e==c)){return d
}}}return -1
};
AjxUtil.arrayContains=function(d,c,a){return AjxUtil.indexOf(d,c,a)!=-1
};
AjxUtil.keys=function(c,a){var d=[];
for(var e in c){if(a&&!a(e,c)){continue
}d.push(e)
}return d
};
AjxUtil.values=function(d,c){var a=[];
for(var e in d){if(c&&!c(e,d)){continue
}a.push(d[e])
}return a
};
AjxUtil.valueHash=function(g,d){var e=Object.prototype.hasOwnProperty.bind(g);
var f={};
for(var c in g){var a=g[c];
if(!e(c)||(d&&!d(c,g))){continue
}f[a]=c
}return f
};
AjxUtil.backMap=AjxUtil.valueHash;
AjxUtil.foreach=function(f,e){if(!e||!f){return
}if(AjxUtil.isArrayLike(f)){var g=f;
for(var c=0;
c<g.length;
c++){e(g[c],c)
}}else{var d=Object.prototype.hasOwnProperty.bind(f);
for(var a in f){if(d(a)){e(f[a],a)
}}}};
AjxUtil.map=function(e,d){if(!e){return[]
}var a=new Array(e.length);
for(var c=0;
c<e.length;
c++){a[c]=d?d(e[c],c):e[c]
}return a
};
AjxUtil.uniq=function(d){if(!d){return[]
}var a={};
for(var c=0;
c<d.length;
c++){a[d[c]]=true
}return AjxUtil.keys(a)
};
AjxUtil.dedup=function(f,c){if(!f){return[]
}if(!c){c=function(g){return g
}
}var a={};
for(var e=0;
e<f.length;
e++){var d=c(f[e]);
if(d!==undefined&&a[d]){f.splice(e,1);
e-=1
}a[d]=true
}};
AjxUtil.concat=function(c){var d=[];
for(var a=0;
a<arguments.length;
a++){d.push.apply(d,arguments[a])
}return d
};
AjxUtil.union=function(a){var c=[];
return AjxUtil.uniq(c.concat.apply(c,arguments))
};
AjxUtil.intersection=function(c){var e=AjxUtil.concat.apply(this,arguments);
var a=AjxUtil.arrayAsHash(e,AjxUtil.__intersection_count);
for(var d in a){if(a[d]==1){delete a[d]
}}return AjxUtil.keys(a)
};
AjxUtil.__intersection_count=function(c,d,a,e){return d[c]!=null?d[c]+1:1
};
AjxUtil.complement=function(e,c){var d=AjxUtil.arrayAsHash(e);
var a=AjxUtil.arrayAsHash(c);
for(var f in a){if(f in d){delete a[f]
}}return AjxUtil.keys(a)
};
AjxUtil.filter=function(f,d,c){var a=[];
if(f==null){return a
}var e=Array.prototype.filter;
if(e&&f.filter===e){return f.filter(d,c)
}AjxUtil.foreach(f,function(h,g){if(d.call(c,h,g)){a.push(h)
}});
return a
};
AjxUtil.getFirstElement=function(f,e,d,c){for(var g=f.firstChild;
g;
g=g.nextSibling){if(g.nodeType!=AjxUtil.ELEMENT_NODE){continue
}if(e&&g.nodeName!=e){continue
}if(d){var a=g.getAttributeNode(d);
if(a.nodeName!=d){continue
}if(c&&a.nodeValue!=c){continue
}}return g
}return null
};
AjxUtil.formatUrl=function(g){g=g||{};
var d=[];
var e=0;
if(!g.relative){var f=g.protocol||location.protocol;
if(f.indexOf(":")==-1){f=f+":"
}d[e++]=f;
d[e++]="//";
d[e++]=g.host||location.hostname;
var c=Number(g.port||location.port);
if(c&&((f==ZmSetting.PROTO_HTTP&&c!=ZmSetting.HTTP_DEFAULT_PORT)||(f==ZmSetting.PROTO_HTTPS&&c!=ZmSetting.HTTPS_DEFAULT_PORT))){d[e++]=":";
d[e++]=c
}}d[e++]=g.path||location.pathname;
var a="";
if(g.qsArgs){a=AjxStringUtil.queryStringSet(g.qsArgs,g.qsReset)
}else{a=g.qsReset?"":location.search
}d[e++]=a;
return d.join("")
};
AjxUtil.byNumber=function(d,c){return Number(d)-Number(c)
};
AjxUtil.byStringProp=function(e,d,c){return d[e].localeCompare(c[e])
};
AjxUtil.arraySize=function(c){var d=0;
for(var f in c){if(c.hasOwnProperty(f)){d++
}}return d
};
AjxUtil.mergeArrays=function(j,f,a){if(!a){a=AjxUtil.__mergeArrays_orderfunc
}var k=[];
var e=j.length;
for(var c=0;
c<e;
c++){k.push(j[c])
}var g=[];
var d=f.length;
for(var c=0;
c<d;
c++){g.push(f[c])
}var h=[];
while(k.length>0&&g.length>0){if(a(k[0],h[h.length-1])==0){k.shift();
continue
}if(a(g[0],h[h.length-1])==0){g.shift();
continue
}if(a(k[0],g[0])<0){h.push(k.shift())
}else{if(a(k[0],g[0])==0){h.push(k.shift());
g.shift()
}else{h.push(g.shift())
}}}while(k.length>0){if(a(k[0],h[h.length-1])==0){k.shift();
continue
}h.push(k.shift())
}while(g.length>0){if(a(g[0],h[h.length-1])==0){g.shift();
continue
}h.push(g.shift())
}return h
};
AjxUtil.__mergeArrays_orderfunc=function(c,a){if(c>a){return 1
}if(c<a){return -1
}if(c==a){return 0
}};
AjxUtil.arraySubtract=function(j,f,a){if(!a){a=function(l,i){if(l>i){return 1
}if(l<i){return -1
}if(l==i){return 0
}}
}var k=[];
var e=j.length;
for(var c=0;
c<e;
c++){k.push(j[c])
}var g=[];
var d=f.length;
for(var c=0;
c<d;
c++){g.push(f[c])
}g.sort(a);
k.sort(a);
var h=[];
while(k.length>0&&g.length>0){if(a(k[0],g[0])==0){k.shift();
g.shift();
continue
}if(a(k[0],g[0])<0){h.push(k.shift());
continue
}if(a(k[0],g[0])>0){g.shift();
continue
}}while(k.length>0){h.push(k.shift())
}return h
};
AjxUtil.arraySubstract=AjxUtil.arraySubtract;
AjxUtil.getHashKeys=function(d){var c=[];
for(var a in d){c.push(a)
}c.sort();
return c
};
AjxUtil.arrayCompare=function(c,a){if((!c||!a)&&(c!=a)){return false
}if(c.length!=a.length){return false
}for(var d=0;
d<c.length;
d++){if(c[d]!=a[d]){return false
}}return true
};
AjxUtil.hashCompare=function(h,g){var d=AjxUtil.getHashKeys(h);
var c=AjxUtil.getHashKeys(g);
if(!AjxUtil.arrayCompare(d,c)){return false
}for(var f=0,a=d.length;
f<a;
f++){var e=d[f];
if(h[e]!=g[e]){return false
}}return true
};
AjxUtil.hashCopy=function(e,d,a){d=d&&AjxUtil.arrayAsHash(d);
a=a&&AjxUtil.arrayAsHash(a);
var f={};
for(var c in e){if((!d||!d[c])&&(!a||a[c])){f[c]=e[c]
}}return f
};
AjxUtil.hashUpdate=function(g,f,c,e,a){e=e&&AjxUtil.arrayAsHash(e);
a=a&&AjxUtil.arrayAsHash(a);
for(var d in f){if((c||!(d in g))&&(!e||!e[d])&&(!a||a[d])){g[d]=f[d]
}}};
AjxUtil.isArray1=function(a){return !!(a&&(a.length!=null)&&a.splice&&a.slice)
};
AjxUtil.toArray=function(a){if(!a){return[]
}else{if(AjxUtil.isArray1(a)){return a
}else{if(AjxUtil.isArrayLike(a)){return Array.prototype.slice.call(a)
}else{if(a.isAjxVector){return a.getArray()
}else{return[a]
}}}}};
AjxUtil.get=function(a){for(var c=1;
a&&c<arguments.length;
c++){a=a[arguments[c]]
}return a
};
AjxUtil.convertToEntities=function(g){var a="";
var f=0;
if(!g||!(f=g.length)){return g
}for(var e=0;
e<f;
e++){var c=g.charCodeAt(e);
if((c>127)||(c==34)){var d=c.toString(10);
while(d.length<4){d="0"+d
}a+="&#"+d+";"
}else{a+=g.charAt(e)
}}return a
};
AjxUtil.getClassAttr=function(c){var a=[];
if(c&&c.length>0){c=AjxUtil.uniq(c);
return["class='",c.join(" "),"'"].join("")
}return""
};
AjxUtil.dataURItoBlob=function(g){if(!(g&&typeof window.atob==="function"&&typeof window.Blob==="function")){return
}var k=g.split(",");
if(k.length===2){if(k[0].indexOf("base64")===-1){return
}try{var f=window.atob(k[1])
}catch(j){return
}if(!f){return
}var d=k[0].split(":");
if(!d[1]){return
}d=d[1].split(";")[0];
if(d){var a=f.length,l=new ArrayBuffer(a),c=new Uint8Array(l);
for(var h=0;
h<a;
h++){c[h]=f.charCodeAt(h)
}return new Blob([l],{type:d})
}}};
AjxUtil.reduce=function(d,c,a){return Array.prototype.reduce.call(d,c,a)
};
AjxUtil.getBrightness=function(c){var e,d,a;
if(c&&c.length===7&&c.indexOf("#")===0){c=c.substr(1)
}else{return null
}e=parseInt(c.substr(0,2),16);
d=parseInt(c.substr(2,2),16);
a=parseInt(c.substr(4,2),16);
return Math.sqrt(e*e*0.299+d*d*0.587+a*a*0.114)
};
AjxUtil.getForegroundColor=function(a){var c=AjxUtil.getBrightness(a);
return(c!=null&&c<130)?"white":"black"
};
AjxUtil.htmlEncode=function(a){if(AjxUtil.isArray(a)){a=a.map(function(c){return AjxStringUtil.htmlEncode(c)
})
}else{if(AjxUtil.isString(a)){a=AjxStringUtil.htmlEncode(a)
}}return a
};
AjxUtil.htmlDecode=function(a){if(AjxUtil.isArray(a)){a=a.map(function(c){return AjxStringUtil.htmlDecode(c)
})
}else{if(AjxUtil.isString(a)){a=AjxStringUtil.htmlDecode(a)
}}return a
}
}if(AjxPackage.define("ajax.core.AjxException")){AjxException=function(d,c,e,a){if(arguments.length==0){return
}this.msg=d;
this.code=c;
this.method=e;
this.detail=a
};
AjxException.prototype.toString=function(){return"AjxException"
};
AjxException.prototype.dump=function(){return"AjxException: msg="+this.msg+" code="+this.code+" method="+this.method+" detail="+this.detail
};
AjxException.INVALIDPARENT="AjxException.INVALIDPARENT";
AjxException.INVALID_OP="AjxException.INVALID_OP";
AjxException.INTERNAL_ERROR="AjxException.INTERNAL_ERROR";
AjxException.INVALID_PARAM="AjxException.INVALID_PARAM";
AjxException.UNIMPLEMENTED_METHOD="AjxException.UNIMPLEMENTED_METHOD";
AjxException.NETWORK_ERROR="AjxException.NETWORK_ERROR";
AjxException.OUT_OF_RPC_CACHE="AjxException.OUT_OF_RPC_CACHE";
AjxException.UNSUPPORTED="AjxException.UNSUPPORTED";
AjxException.UNKNOWN_ERROR="AjxException.UNKNOWN_ERROR";
AjxException.CANCELED="AjxException.CANCELED";
AjxException.defaultScriptErrorHandler=function(a){alert(a)
};
AjxException.setScriptErrorHandler=function(a){AjxException.scriptErrorHandler=a
};
AjxException.reportScriptError=function(a){if(AjxException.reportScriptErrors&&AjxException.scriptErrorHandler&&!(a instanceof AjxException)){AjxException.scriptErrorHandler(a)
}throw a
};
AjxException.reportScriptErrors=false;
AjxException.scriptErrorHandler=AjxException.defaultScriptErrorHandler
}if(AjxPackage.define("ajax.util.AjxCookie")){AjxCookie=function(){};
AjxCookie.prototype.toString=function(){return"AjxCookie"
};
AjxCookie.getCookie=function(k,c){var l=c+"=";
var e=l.length;
var h=k.cookie.length;
var d=k.cookie;
var g=0;
while(g<h){var f=g+e;
if(d.substring(g,f)==l){var a=d.indexOf(";",f);
if(a==-1){a=d.length
}return unescape(d.substring(f,a))
}g=d.indexOf(" ",g)+1;
if(g==0){break
}}return null
};
AjxCookie.setCookie=function(h,c,e,a,g,d,f){h.cookie=c+"="+escape(e)+((a)?"; expires="+a.toGMTString():"")+((g)?"; path="+g:"")+((d)?"; domain="+d:"")+((f)?"; secure":"")
};
AjxCookie.deleteCookie=function(e,a,d,c){e.cookie=a+"="+((d)?"; path="+d:"")+((c)?"; domain="+c:"")+"; expires=Fri, 31 Dec 1999 23:59:59 GMT"
};
AjxCookie.areCookiesEnabled=function(e){var a="ZM_COOKIE_TEST";
var d="Zimbra";
AjxCookie.setCookie(e,a,d);
var c=AjxCookie.getCookie(e,a);
AjxCookie.deleteCookie(e,a);
return c==d
}
}if(AjxPackage.define("ajax.soap.AjxSoapException")){AjxSoapException=function(d,c,e,a){AjxException.call(this,d,c,e,a)
};
AjxSoapException.prototype.toString=function(){return"AjxSoapException"
};
AjxSoapException.prototype=new AjxException;
AjxSoapException.prototype.constructor=AjxSoapException;
AjxSoapException.INTERNAL_ERROR="INTERNAL_ERROR";
AjxSoapException.INVALID_PDU="INVALID_PDU";
AjxSoapException.ELEMENT_EXISTS="ELEMENT_EXISTS"
}if(AjxPackage.define("ajax.soap.AjxSoapFault")){AjxSoapFault=function(c){if(arguments.length==0){return
}var h=c.prefix;
var g=h+":Code";
var f=h+":Reason";
var d=h+":Detail";
var j=c.childNodes.length;
for(var e=0;
e<j;
e++){var a=c.childNodes[e];
if(a.nodeName==g){var k=a.firstChild.firstChild.nodeValue;
if(k==(h+":VersionMismatch")){this.faultCode=AjxSoapFault.VERSION_MISMATCH
}else{if(k==(h+":MustUnderstand")){this.faultCode=AjxSoapFault.MUST_UNDERSTAND
}else{if(k==(h+":DataEncodingUnknown")){this.faultCode=AjxSoapFault.DATA_ENCODING_UNKNOWN
}else{if(k==(h+":Sender")){this.faultCode=AjxSoapFault.SENDER
}else{if(k==(h+":Receiver")){this.faultCode=AjxSoapFault.RECEIVER
}else{this.faultCode=AjxSoapFault.UNKNOWN
}}}}}}else{if(a.nodeName==f){this.reason=a.firstChild.firstChild.nodeValue
}else{if(a.nodeName==d){this.errorCode=a.firstChild.firstChild.firstChild.nodeValue
}}}}};
AjxSoapFault.prototype.toString=function(){return"AjxSoapFault"
};
AjxSoapFault.SENDER=-1;
AjxSoapFault.RECEIVER=-2;
AjxSoapFault.VERSION_MISMATCH=-3;
AjxSoapFault.MUST_UNDERSTAND=-4;
AjxSoapFault.DATA_ENCODING_UNKNOWN=-5;
AjxSoapFault.UNKNOWN=-6
}if(AjxPackage.define("ajax.soap.AjxSoapDoc")){AjxSoapDoc=function(){this._soapURI=AjxSoapDoc._SOAP_URI
};
AjxSoapDoc.prototype.isAjxSoapDoc=true;
AjxSoapDoc.prototype.toString=function(){return"AjxSoapDoc"
};
AjxSoapDoc._SOAP_URI="http://www.w3.org/2003/05/soap-envelope";
AjxSoapDoc._XMLNS_URI="http://www.w3.org/2000/xmlns";
AjxSoapDoc.create=function(a,e,j,i){var h=new AjxSoapDoc();
h._xmlDoc=AjxXmlDoc.create();
var g=h._xmlDoc.getDoc();
if(!i){i=AjxSoapDoc._SOAP_URI
}h._soapURI=i;
var c=g.createElementNS&&!AjxEnv.isSafari;
var f=c?g.createElementNS(i,"soap:Envelope"):g.createElement("soap:Envelope");
if(!c){f.setAttribute("xmlns:soap",i)
}g.appendChild(f);
var k=c?g.createElementNS(i,"soap:Body"):g.createElement("soap:Body");
f.appendChild(k);
h._methodEl=e&&c?g.createElementNS(e,a):g.createElement(a);
if(e!=null&&!c){if(j==null){h._methodEl.setAttribute("xmlns",e)
}else{h._methodEl.setAttribute("xmlns:"+j,e)
}}k.appendChild(h._methodEl);
return h
};
AjxSoapDoc.createFromDom=function(c){var a=new AjxSoapDoc();
a._xmlDoc=AjxXmlDoc.createFromDom(c);
a._methodEl=a._check(a._xmlDoc);
return a
};
AjxSoapDoc.createFromXml=function(a){var c=new AjxSoapDoc();
c._xmlDoc=AjxXmlDoc.createFromXml(a);
c._methodEl=c._check(c._xmlDoc);
return c
};
AjxSoapDoc.element2FaultObj=function(c){var a=c.firstChild;
if(!AjxEnv.isSafari){if(a!=null&&a.namespaceURI!=AjxSoapDoc._SOAP_URI||a.nodeName!=(c.prefix+":Fault")){return null
}}else{if(a!=null&&a.nodeName!=(c.prefix+":Fault")){return null
}}return new AjxSoapFault(a)
};
AjxSoapDoc.prototype.setMethodAttribute=function(a,c){this._methodEl.setAttribute(a,c)
};
AjxSoapDoc.prototype.set=function(c,l,m,f){var k=this.getDoc();
var a=k.createElementNS&&!AjxEnv.isSafari;
var d=c?(f&&a?k.createElementNS(f,c):k.createElement(c)):k.createDocumentFragment();
if((f!==undefined)&&(f!==null)&&!a){d.setAttribute("xmlns",f)
}if(l!=null){if(typeof l=="object"){for(var h in l){var e=l[h];
if(h.charAt(0)=="!"){d.setAttribute(h.substr(1),e)
}else{if(e instanceof Array){for(var g=0;
g<e.length;
++g){this.set(h,e[g],d)
}}else{this.set(h,e,d)
}}}}else{d.appendChild(k.createTextNode(l))
}}if(!m){m=this._methodEl
}return m.appendChild(d)
};
AjxSoapDoc.prototype.getMethod=function(){return this._methodEl
};
AjxSoapDoc.prototype.createHeaderElement=function(){var e=this._xmlDoc.getDoc();
var c=e.firstChild;
var f=this.getHeader();
if(f!=null){throw new AjxSoapException("SOAP header already exists",AjxSoapException.ELEMENT_EXISTS,"AjxSoapDoc.prototype.createHeaderElement")
}var a=e.createElementNS&&!AjxEnv.isSafari;
f=a?e.createElementNS(this._soapURI,"soap:Header"):e.createElement("soap:Header");
c.insertBefore(f,c.firstChild);
return f
};
AjxSoapDoc.prototype.getHeader=function(){var c=this._xmlDoc.getDoc();
var a=!c.getElementsByTagNameNS?(c.getElementsByTagName(c.firstChild.prefix+":Header")):(c.getElementsByTagNameNS(this._soapURI,"Header"));
return a?a[0]:null
};
AjxSoapDoc.prototype.getBody=function(){var c=this._xmlDoc.getDoc();
var a=!c.getElementsByTagNameNS?(c.getElementsByTagName(c.firstChild.prefix+":Body")):(c.getElementsByTagNameNS(this._soapURI,"Body"));
return a?a[0]:null
};
AjxSoapDoc.prototype.getByTagName=function(d){if(d.indexOf(":")==-1){d="soap:"+d
}var c=this.getDoc().getElementsByTagName(d);
if(c.length==1){return c[0]
}else{if(c.length>0){return c
}else{return null
}}};
AjxSoapDoc.prototype.ensureHeader=function(){return(this.getHeader()||this.createHeaderElement())
};
AjxSoapDoc.prototype.getDoc=function(){return this._xmlDoc.getDoc()
};
AjxSoapDoc.prototype.adoptNode=function(c){if(AjxEnv.isFirefox3up||!AjxEnv.isFirefox){try{var d=this.getDoc();
if(d.adoptNode){return d.adoptNode(c,true)
}}catch(a){}}return c.parentNode.removeChild(c)
};
AjxSoapDoc.prototype.getXml=function(){return this._xmlDoc.getXml()
};
AjxSoapDoc.prototype._check=function(c){var d=c.getDoc();
if(d.childNodes.length!=1){throw new AjxSoapException("Invalid SOAP PDU",AjxSoapException.INVALID_PDU,"AjxSoapDoc.createFromXml:1")
}var a=d.firstChild;
if(!AjxEnv.isSafari){if(a.namespaceURI!=AjxSoapDoc._SOAP_URI||a.nodeName!=(a.prefix+":Envelope")||(a.childNodes.length<1||a.childNodes.length>2)){throw new AjxSoapException("Invalid SOAP PDU",AjxSoapException.INVALID_PDU,"AjxSoapDoc.createFromXml:2")
}}else{if(a.nodeName!=(a.prefix+":Envelope")){throw new AjxSoapException("Invalid SOAP PDU",AjxSoapException.INVALID_PDU,"AjxSoapDoc.createFromXml:2")
}}}
}if(AjxPackage.define("ajax.net.AjxRpcRequest")){AjxRpcRequest=function(a){if(!AjxRpcRequest.__inited){AjxRpcRequest.__init()
}this.id=a;
this.__httpReq=AjxRpcRequest.__msxmlVers?(new ActiveXObject(AjxRpcRequest.__msxmlVers)):(new XMLHttpRequest())
};
AjxRpcRequest.prototype.isAjxRpcRequest=true;
AjxRpcRequest.prototype.toString=function(){return"AjxRpcRequest"
};
AjxRpcRequest.TIMEDOUT=-1000;
AjxRpcRequest.HTTP_GET="get";
AjxRpcRequest.HTTP_POST="post";
AjxRpcRequest.HTTP_PUT="put";
AjxRpcRequest.HTTP_DELETE="delete";
AjxRpcRequest.__inited=false;
AjxRpcRequest.__msxmlVers=null;
AjxRpcRequest.prototype.invoke=function(f,e,j,m,a,k){var c=(m!=null);
this.methodName=e||"";
var d=AjxRpcRequest.HTTP_POST;
if(a){d=a===true?AjxRpcRequest.HTTP_GET:a
}if(window.csrfToken&&(d===AjxRpcRequest.HTTP_POST||d===AjxRpcRequest.HTTP_PUT||d===AjxRpcRequest.HTTP_DELETE)){j=j||{};
j["X-Zimbra-Csrf-Token"]=window.csrfToken
}this.__httpReq.open(d,e,c);
if(c){if(k){var g=new AjxTimedAction(this,this.__handleTimeout,[m]);
m._timedActionId=AjxTimedAction.scheduleAction(g,k)
}var l=this;
this.__httpReq.onreadystatechange=function(i){if(window.AjxRpcRequest){AjxRpcRequest.__handleResponse(l,m)
}}
}else{this.__httpReq.onreadystatechange=function(i){}
}if(j){for(var h in j){if(j.hasOwnProperty(h)){this.__httpReq.setRequestHeader(h,j[h])
}}}AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" RPC send: "+this.id);
this.__httpReq.send(f);
if(c){return this.id
}else{if(this.__httpReq.status==200||this.__httpReq.status==201){return{text:this.__httpReq.responseText,xml:this.__httpReq.responseXML,success:true}
}else{return{text:this.__httpReq.responseText,xml:this.__httpReq.responseXML,success:false,status:this.__httpReq.status}
}}};
AjxRpcRequest.prototype.cancel=function(){AjxRpc.freeRpcCtxt(this);
if(AjxEnv.isFirefox3_5up){this.__httpReq.onreadystatechange=function(){}
}this.__httpReq.abort()
};
AjxRpcRequest.prototype.__handleTimeout=function(a){this.cancel();
a.run({text:null,xml:null,success:false,status:AjxRpcRequest.TIMEDOUT})
};
AjxRpcRequest.__handleResponse=function(d,e){try{if(!d||!d.__httpReq){d.cancel();
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" Async RPC request: Lost request object!!!");
e.run({text:null,xml:null,success:false,status:500});
AjxRpc.freeRpcCtxt(d);
return
}if(d.__httpReq.readyState==4){if(e._timedActionId!==null){AjxTimedAction.cancelAction(e._timedActionId)
}var a=500;
try{a=d.__httpReq.status
}catch(c){}if(a==200||a==201){e.run({text:d.__httpReq.responseText,xml:d.__httpReq.responseXML,success:true,reqId:d.id})
}else{e.run({text:d.__httpReq.responseText,xml:d.__httpReq.responseXML,success:false,status:a,reqId:d.id})
}AjxRpc.freeRpcCtxt(d)
}}catch(c){if(window.AjxException){AjxException.reportScriptError(c)
}}};
AjxRpcRequest.__init=function(){if(!window.XMLHttpRequest&&window.ActiveXObject){var c=["MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
for(var e=0;
e<c.length;
e++){try{var a=new ActiveXObject(c[e]);
AjxRpcRequest.__msxmlVers=c[e];
break
}catch(d){}}if(!AjxRpcRequest.__msxmlVers){throw new AjxException("MSXML not installed",AjxException.INTERNAL_ERROR,"AjxRpc._init")
}}AjxRpcRequest.__inited=true
}
}if(AjxPackage.define("ajax.net.AjxRpc")){AjxRpc=function(){};
AjxRpc.__rpcCache=[];
AjxRpc.__rpcOutstanding={};
AjxRpc.__RPC_CACHE_MAX=50;
AjxRpc.__RPC_ID=0;
AjxRpc.__RPC_IN_USE=0;
AjxRpc.__RPC_HIGH_WATER=0;
AjxRpc.__RPC_REAP_AGE=300000;
AjxRpc.__RPC_REAP_INTERVAL=1800000;
AjxRpc.invoke=function(e,d,h,l,a,k){var c=(l!=null);
var g=AjxRpc.__getFreeRpcCtxt();
try{var f=g.invoke(e,d,h,l,a,k)
}catch(i){var j=new AjxException();
j.method="AjxRpc.prototype._invoke";
if(i instanceof Error){j.detail=i.message;
j.code=AjxException.NETWORK_ERROR;
j.msg="Network error"
}else{if(i.code==101){j.detail=i.message;
j.code=AjxException.NETWORK_ERROR;
j.msg="Network error"
}else{j.detail=i.toString();
j.code=AjxException.UNKNOWN_ERROR;
j.msg="Unknown Error"
}}AjxRpc.freeRpcCtxt(g);
throw j
}if(!c){AjxRpc.freeRpcCtxt(g)
}return f
};
AjxRpc.freeRpcCtxt=function(a){if(AjxRpc.__rpcOutstanding[a.id]){AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" --- freeing rpcCtxt "+a.id);
AjxRpc.__rpcCache.push(a);
delete AjxRpc.__rpcOutstanding[a.id];
AjxRpc.__RPC_IN_USE--
}};
AjxRpc.removeRpcCtxt=function(a){AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" REMOVE rpcCtxt "+a.id);
if(AjxRpc.__rpcOutstanding[a.id]){delete AjxRpc.__rpcOutstanding[a.id];
AjxRpc.__RPC_IN_USE--
}AjxUtil.arrayRemove(AjxRpc.__rpcCache,a)
};
AjxRpc.getRpcRequestById=function(a){return(AjxRpc.__rpcOutstanding[a])
};
AjxRpc.__getFreeRpcCtxt=function(){var a;
if(AjxRpc.__rpcCache.length>0){a=AjxRpc.__rpcCache.pop();
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" reusing RPC ID "+a.id)
}else{if(AjxRpc.__RPC_IN_USE<AjxRpc.__RPC_CACHE_MAX){var f="__RpcCtxt_"+AjxRpc.__RPC_ID;
a=new AjxRpcRequest(f);
AjxRpc.__RPC_ID++;
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" Created RPC "+f)
}else{a=AjxRpc.__reap();
if(!a){var e=[];
for(var c in AjxRpc.__rpcOutstanding){var a=AjxRpc.__rpcOutstanding[c];
e.push(a.methodName)
}var d=e.join("<br>")+"<br>";
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" Out of RPC cache!!! Outstanding requests: "+d);
throw new AjxException("Out of RPC cache",AjxException.OUT_OF_RPC_CACHE,"AjxRpc.__getFreeRpcCtxt",d)
}}}AjxRpc.__rpcOutstanding[a.id]=a;
AjxRpc.__RPC_IN_USE++;
if(AjxRpc.__RPC_IN_USE>AjxRpc.__RPC_HIGH_WATER){AjxRpc.__RPC_HIGH_WATER=AjxRpc.__RPC_IN_USE;
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" High water mark: "+AjxRpc.__RPC_HIGH_WATER)
}a.timestamp=(new Date()).getTime();
return a
};
AjxRpc.__reap=function(d){var a;
var e=(new Date()).getTime();
AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" Running RPC context reaper");
for(var c in AjxRpc.__rpcOutstanding){a=AjxRpc.__rpcOutstanding[c];
if((a.timestamp+AjxRpc.__RPC_REAP_AGE)<e){AjxDebug.println(AjxDebug.RPC,AjxDebug._getTimeStamp()+" AjxRpc.__reap: cleared RPC context "+a.id);
a.cancel();
delete AjxRpc.__rpcOutstanding[c];
AjxRpc.__RPC_IN_USE--;
if(!d){return a
}}}return null
};
window.setInterval(AjxRpc.__reap.bind(null,true),AjxRpc.__RPC_REAP_INTERVAL)
}if(AjxPackage.define("ajax.net.AjxPost")){AjxPost=function(a){this._callback=null;
this._iframeId=a
};
AjxPost._reqIds=0;
AjxPost._outStandingRequests=new Object();
AjxPost.SC_CONTINUE=100;
AjxPost.SC_OK=200;
AjxPost.SC_ACCEPTED=202;
AjxPost.SC_NO_CONTENT=204;
AjxPost.SC_BAD_REQUEST=400;
AjxPost.SC_UNAUTHORIZED=401;
AjxPost.SC_REQUEST_TIMEOUT=408;
AjxPost.SC_CONFLICT=409;
AjxPost.SC_REQUEST_ENTITY_TOO_LARGE=413;
AjxPost.SC_INTERNAL_SERVER_ERROR=500;
AjxPost.SC_BAD_GATEWAY=502;
AjxPost.SC_SERVICE_UNAVAILABLE=503;
AjxPost.prototype.execute=function(k,a,j){var l=a.getElementsByTagName("input");
var e=new Array();
for(var d=0;
d<l.length;
d++){var m=l[d];
if(m.type=="file"){e.push(m);
continue
}if(m.name&&m.name.match(/^filename\d+$/)){m.parentNode.removeChild(m);
d--;
continue
}}if(window.csrfToken){this._addHiddenField(e[0],"csrfToken",window.csrfToken)
}this._addHiddenFileNames(e);
a.target=this._iframeId;
this._callback=k;
var h=new AjxPostRequest(a);
var c=new AjxTimedAction(this,this._onFailure,[h.id]);
var g=j?j:5000;
AjxPost._outStandingRequests[h.id]=h;
try{h.send(c,g)
}catch(f){if(AjxEnv.isIE){if(f.number==-2147024891){throw new AjxException(ZmMsg.uploadErrorAccessDenied,f.number)
}}throw f
}};
AjxPost.prototype._addHiddenFileNames=function(c){var a=0;
for(var e=0;
e<c.length;
e++){var h=c[e];
if(h.files&&h.files.length>1){var g=h.files,l=[];
for(var d=0;
d<g.length;
d++){var k=g[d];
l.push(k.name||k.fileName)
}this._addHiddenFileName(c[e],l.join("\n"),++a)
}else{this._addHiddenFileName(c[e],c[e].value,++a)
}}};
AjxPost.prototype._addHiddenFileName=function(a,d,c){this._addHiddenField(a,"filename"+(c),d)
};
AjxPost.prototype._addHiddenField=function(e,d,c){var a=document.createElement("input");
a.type="hidden";
a.name=d;
a.value=c;
e.parentNode.insertBefore(a,e)
};
AjxPost.prototype._onFailure=function(c){var a=AjxPost._outStandingRequests[c];
a.cancel();
delete AjxPost._outStandingRequests[c];
if(this._callback){this._callback.run([404]);
this._callback=null
}};
AjxPost.prototype.loaded=function(a,d,e){var c=AjxPost._outStandingRequests[d];
if(c&&!c.hasBeenCancelled()){c.cancelTimeout()
}delete AjxPost._outStandingRequests[d];
if(this._callback){this._callback.run(a,e);
this._callback=null
}};
AjxPostRequest=function(c){this.id=AjxPost._reqIds++;
this._cancelled=false;
this._form=c;
var a=c.elements.namedItem("requestId");
if(!a){a=c.ownerDocument.createElement("input");
a.type="hidden";
a.name="requestId"
}a.value=this.id;
c.appendChild(a)
};
AjxPostRequest.prototype.send=function(c,a){this._form.submit()
};
AjxPostRequest.prototype.hasBeenCancelled=function(){return this._cancelled
};
AjxPostRequest.prototype.cancelTimeout=function(){AjxTimedAction.cancelAction(this._timeoutId)
};
AjxPostRequest.prototype.cancel=function(){this._cancelled=true
}
}if(AjxPackage.define("ajax.util.AjxVector")){AjxVector=function(a){this._array=a||[]
};
AjxVector.prototype.isAjxVector=true;
AjxVector.prototype.toString=function(f,d){if(d!==true){return this._array.join(f)
}var e=new Array();
for(var g=0;
g<this._array.length;
g++){var c=this._array[g];
if(c!=undefined&&c!=null&&c!=""){e.push(c)
}}return e.join(f)
};
AjxVector.fromArray=function(c){var a=new AjxVector();
if(AjxUtil.isArray1(c)){a._array=c
}return a
};
AjxVector.prototype.size=function(){return this._array.length
};
AjxVector.prototype.add=function(d,a,c){if(c&&this.contains(d)){return
}AjxUtil.arrayAdd(this._array,d,a)
};
AjxVector.prototype.addList=function(d){if(!d){return
}if(d.length){this._array=this._array.concat(d)
}else{if(d.size&&d.size()){if(AjxEnv.isIE&&(!(d._array instanceof Array))){var c=[];
for(var a=0;
a<d._array.length;
a++){c.push(d._array[a])
}d._array=c
}this._array=this._array.concat(d._array)
}}};
AjxVector.prototype.remove=function(a){return AjxUtil.arrayRemove(this._array,a)
};
AjxVector.prototype.removeAt=function(c){if(c>=this._array.length||c<0){return null
}var d=this._array.splice(c,1);
var a=null;
if(d){a=d[0]
}return a
};
AjxVector.prototype.removeAll=function(){for(var a=0;
a<this._array.length;
a++){this._array[a]=null
}this._array.length=0
};
AjxVector.prototype.removeLast=function(){return this._array.length>0?this._array.pop():null
};
AjxVector.prototype.reverse=function(){this._array.reverse()
};
AjxVector.prototype.replace=function(d,c){var a=this._array[d];
this._array[d]=c;
return a
};
AjxVector.prototype.replaceObject=function(d,a){for(var c=0;
c<this._array.length;
c++){if(this._array[c]==d){this._array[c]=a;
return d
}}return null
};
AjxVector.prototype.indexOf=function(d,c){if(d==null){return -1
}d=c?c.call(d):d;
for(var a=0;
a<this._array.length;
a++){var f=this._array[a],e=c?c.call(f):f;
if(e===d){return a
}}return -1
};
AjxVector.prototype.indexOfLike=AjxVector.prototype.indexOf;
AjxVector.prototype.lastIndexOf=function(d,c){if(d==null){return -1
}d=c?c.call(d):d;
for(var a=this._array.length-1;
a>=0;
a--){var f=this._array[a],e=c?c.call(f):f;
if(f===d){return a
}}return -1
};
AjxVector.prototype.lastIndexOfLike=AjxVector.prototype.lastIndexOf;
AjxVector.prototype.lastIndexOfLike=function(e,d){var c=d.call(e);
for(var a=this._array.length-1;
a>=0;
a--){var f=d.call(this._array[a]);
if(f==c){return a
}}return -1
};
AjxVector.prototype.clone=function(){var a=new AjxVector();
a.addList(this);
return a
};
AjxVector.prototype.contains=function(a){return AjxUtil.arrayContains(this._array,a)
};
AjxVector.prototype.containsLike=function(e,d){var c=d.call(e);
for(var a=0;
a<this._array.length;
a++){var f=d.call(this._array[a]);
if(f==c){return true
}}return false
};
AjxVector.prototype.get=function(a){return a>=this._array.length||a<0?null:this._array[a]
};
AjxVector.prototype.getArray=function(){return this._array
};
AjxVector.prototype.getLast=function(){return this._array.length==0?null:this._array[this._array.length-1]
};
AjxVector.prototype.getNext=function(c){var a=this.indexOf(c);
if(a==-1){return null
}return this.get(++a)
};
AjxVector.prototype.getPrev=function(c){var a=this.indexOf(c);
if(a==-1){return null
}return this.get(--a)
};
AjxVector.prototype.sort=function(a){if(!a){a=AjxVector._defaultArrayComparator
}this._array.sort(a)
};
AjxVector.prototype.binarySearch=function(g,h){if(!h){h=AjxVector._defaultArrayComparator
}var d=0;
var a=this._array;
var e=a.length-1;
while(true){if(e<d){return -1
}var f=Math.floor((d+e)/2);
var c=h(g,a[f]);
if(c<0){e=f-1
}else{if(c>0){d=f+1
}else{return f
}}}};
AjxVector.prototype.merge=function(f,e){if(f<0){return
}var g=e instanceof AjxVector?e.getArray():e;
var a=this._array.length<(f+g.length)?this._array.length:f+g.length;
if(f<this._array.length){var d=0;
for(var c=f;
c<a;
c++){this._array[c]=g[d++]
}if(d<g.length){this._array=this._array.concat(g.slice(d))
}}else{this._array=this._array.concat(g)
}};
AjxVector._defaultArrayComparator=function(d,c){return d<c?-1:(d>c?1:0)
};
AjxVector.prototype.foreach=function(e,g){var a=this.size(),c=0,d;
if(typeof e=="function"){while(--a>=0){e.call(g,this.get(c),c++)
}}else{while(--a>=0){d=this.get(c++);
if(d!=null){d[e].call(d)
}}}};
AjxVector.prototype.map=function(g,h){var c=[],d=this.size(),e;
if(typeof g=="function"){while(--d>=0){c[d]=g.call(h,this.get(d),d)
}}else{if(g instanceof AjxCallback){while(--d>=0){c[d]=g.run(this.get(d),d)
}}else{while(--d>=0){e=this.get(d);
if(e!=null){if(typeof e[g]=="function"){c.unshift(e[g].call(e))
}else{c.unshift(e[g])
}}}}}return AjxVector.fromArray(c)
};
AjxVector.prototype.filter=function(c,a){return AjxVector.fromArray(AjxUtil.filter(this._array,c,a))
};
AjxVector.prototype.join=function(a){return this._array.join(a)
};
AjxVector.prototype.some=function(a,c){return this._array.some(a,c)
};
AjxVector.prototype.sub=function(h,j){var d=[],c=this.size(),e=0,g;
while(--c>=0){g=this.get(e++);
if(!h.call(j,g,e)){d.push(g)
}}return AjxVector.fromArray(d)
};
AjxVector.prototype.slice=function(c,a){return AjxVector.fromArray(this._array.slice(c,a))
}
}if(AjxPackage.define("ajax.util.AjxStringUtil")){AjxStringUtil=function(){};
AjxStringUtil.TRIM_RE=/^\s+|\s+$/g;
AjxStringUtil.COMPRESS_RE=/\s+/g;
AjxStringUtil.ELLIPSIS=" ... ";
AjxStringUtil.ELLIPSIS_NO_SPACE="...";
AjxStringUtil.LIST_SEP=", ";
AjxStringUtil.CRLF="\r\n";
AjxStringUtil.CRLF2="\r\n\r\n";
AjxStringUtil.CRLF_HTML="<br>";
AjxStringUtil.CRLF2_HTML="<div><br></div><div><br></div>";
AjxStringUtil.IMG_SRC_CID_REGEX=/<img([^>]*)\ssrc=["']cid:/gi;
AjxStringUtil.makeString=function(a){return a?String(a):""
};
AjxStringUtil.capitalize=function(a){return a&&a.length>0?a.charAt(0).toUpperCase()+a.substr(1).toLowerCase():""
};
AjxStringUtil.capitalizeFirstLetter=function(a){return a&&a.length>0?a.charAt(0).toUpperCase()+a.substr(1):""
};
AjxStringUtil.capitalizeWords=function(a){return a?AjxUtil.map(a.split(/\s+/g),AjxStringUtil.capitalizeFirstLetter).join(" "):""
};
AjxStringUtil.toMixed=function(g,a,e){if(!g||(typeof g!="string")){return""
}a=a||/\s+/;
var d=g.split(a);
var f=[];
f.push(e?d[0].toLowerCase():d[0].substring(0,1).toUpperCase()+d[0].substring(1).toLowerCase());
for(var c=1;
c<d.length;
c++){f.push(d[c].substring(0,1).toUpperCase()+d[c].substring(1).toLowerCase())
}return f.join("")
};
AjxStringUtil.fromMixed=function(c,a){a=["$1",a||" ","$2"].join("");
return AjxStringUtil.trim(c.replace(/([a-z])([A-Z]+)/g,a))
};
AjxStringUtil.trim=function(f,a,e){if(!f){return""
}var d=AjxStringUtil.TRIM_RE;
var c=AjxStringUtil.COMPRESS_RE;
if(e){d=new RegExp("^"+e+"+|"+e+"+$","g");
c=new RegExp(e+"+","g")
}else{e=" "
}f=f.replace(d,"");
if(a){f=f.replace(c,e)
}return f
};
AjxStringUtil.repeat=function(e,a){var d="";
for(var c=0;
c<a;
c++){d+=e
}return d
};
AjxStringUtil.getUnitsFromSizeString=function(c){var d="px";
if(typeof(c)=="string"){var a=Number(parseInt(c,10)).toString();
if(c.length>a.length){d=c.substr(a.length,(c.length-a.length));
if(!(d=="em"||d=="ex"||d=="px"||d=="in"||d=="cm"==d=="mm"||d=="pt"||d=="pc"||d=="%")){d="px"
}}}return d
};
AjxStringUtil.split=function(m,f){if(!m){return[]
}var h=0;
f=f?f:",";
var o=new Object();
if(typeof f=="string"){o[f]=1
}else{for(h=0;
h<f.length;
h++){o[f[h]]=1
}}var a=false;
var e=0;
var d=0;
var n;
var k=[];
var g=0;
for(h=0;
h<m.length;
h++){var l=m.charAt(h);
if(l=='"'){a=!a
}else{if(l=="("){e++
}else{if(l==")"){e--
}else{if(o[l]){if(!a&&!e){n=m.substring(d,h);
k[g++]=n;
d=h+1
}}}}}}n=m.substring(d,m.length);
k[g++]=n;
return k
};
AjxStringUtil.SPACE_WORD_RE=new RegExp("\\s*\\S+","g");
AjxStringUtil.splitKeepLeadingWhitespace=function(c){var d=[],a;
while(a=AjxStringUtil.SPACE_WORD_RE.exec(c)){d.push(a[0])
}return d
};
AjxStringUtil.WRAP_LENGTH=80;
AjxStringUtil.HDR_WRAP_LENGTH=120;
AjxStringUtil.MAX_HTMLNODE_COUNT=250;
AjxStringUtil.HTML_QUOTE_COLOR="#1010FF";
AjxStringUtil.HTML_QUOTE_STYLE="color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;";
AjxStringUtil.HTML_QUOTE_PREFIX_PRE='<blockquote style="border-left:2px solid '+AjxStringUtil.HTML_QUOTE_COLOR+";margin-left:5px;padding-left:5px;"+AjxStringUtil.HTML_QUOTE_STYLE+'">';
AjxStringUtil.HTML_QUOTE_PREFIX_POST="</blockquote>";
AjxStringUtil.HTML_QUOTE_NONPREFIX_PRE='<div style="'+AjxStringUtil.HTML_QUOTE_STYLE+'">';
AjxStringUtil.HTML_QUOTE_NONPREFIX_POST="</div><br/>";
AjxStringUtil.wordWrap=function(G){if(!(G&&G.text)){return""
}var q=G.text;
var r=G.before||"";
var c=G.after||"";
var d=G.isFlowed;
if(G.htmlMode){r=G.before||(G.prefix?AjxStringUtil.HTML_QUOTE_PREFIX_PRE:AjxStringUtil.HTML_QUOTE_NONPREFIX_PRE);
c=G.after||(G.prefix?AjxStringUtil.HTML_QUOTE_PREFIX_POST:AjxStringUtil.HTML_QUOTE_NONPREFIX_POST);
return[r,q,c].join("")
}var A=G.len||(G.isHeaders?AjxStringUtil.HDR_WRAP_LENGTH:AjxStringUtil.WRAP_LENGTH);
var H=G.prefix||"";
var g="\n";
var a=q.split(AjxStringUtil.SPLIT_RE);
var t=[];
for(var x=0,F=a.length;
x<F;
x++){var o=a[x];
var v=o.match(/^([\s>\|]+)/);
var y=v?v[1]:"";
if(y){o=o.substr(y.length)
}if(AjxStringUtil._NON_WHITESPACE.test(o)){var j=AjxStringUtil.splitKeepLeadingWhitespace(o);
if(j&&j[0]&&j[0].length){var u=AjxStringUtil.MSG_SEP_RE.test(o)||AjxStringUtil.COLON_RE.test(o)||AjxStringUtil.HDR_RE.test(o)||G.isHeaders||AjxStringUtil.SIG_RE.test(o);
var s=G.preserveReturns;
if(d){var v=o.match(/( +)$/);
if(v){j[j.length-1]+=v[1];
s=false
}else{s=true
}}for(var n=0,p=j.length;
n<p;
n++){t.push({w:j[n],prefix:y,mustStart:(n===0)&&u,mustEnd:(n===p-1)&&s})
}}}else{t.push({para:true,prefix:y})
}}var k="",f=0,j=[],h=null;
for(var z=0,B=t.length;
z<B;
z++){var C=t[z];
var n=C.w,y=C.prefix;
var e=!H?"":h?H:H+" ";
var D=(h===null)?0:h.length;
D=0;
var E=e+(h||"");
if(C.para){if(j.length){k+=E+j.join("").replace(/^ +/,"")+g
}if(z<t.length-1){h=y;
e=!H?"":h?H:H+" ";
E=e+(h||"");
k+=E+g
}j=[];
f=0;
h=null
}else{if((D+f+n.length<=A)&&(y===h||h===null)&&!C.mustStart){j.push(n);
f+=n.length;
h=y;
if(C.mustEnd&&t[z+1]){t[z+1].mustStart=true
}}else{if(j.length){k+=E+j.join("").replace(/^ +/,"")+g
}j=[n];
f=n.length;
h=y;
if(C.mustEnd&&t[z+1]){t[z+1].mustStart=true
}}}}if(j.length){var e=!H?"":j[0].prefix?H:H+" ";
var E=e+(h||"");
k+=E+j.join("").replace(/^ /,"")+g
}return[r,k,c].join("")
};
AjxStringUtil.quoteText=function(e){if(!(e&&e.text)){return""
}var j=e.text;
var i=e.before||"",a=e.after||"";
if(e.htmlMode||!e.pre){return[i,j,a].join("")
}var g=e.len||80;
var d=e.pre||"";
var h="\n";
j=AjxStringUtil.trim(j);
j=j.replace(/\n\r/g,h);
var n=j.split(h);
var m=[];
for(var c=0,f=n.length;
c<f;
c++){var k=AjxStringUtil.trim(n[c]);
m.push(d+k+h)
}return i+m.join("")+a
};
AjxStringUtil.SHIFT_CHAR={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'};
AjxStringUtil.shiftChar=function(a,c){return c?AjxStringUtil.SHIFT_CHAR[a]||String.fromCharCode(a):String.fromCharCode(a)
};
AjxStringUtil.diffPoint=function(e,d){if(!(e&&d)){return 0
}var a=Math.min(e.length,d.length);
var c=0;
while(c<a&&(e.charAt(c)==d.charAt(c))){c++
}return c
};
AjxStringUtil.resolve=function(c,a){return AjxMessageFormat.format(c,a)
};
AjxStringUtil.urlEncode=function(c){if(!c){return""
}var a=window.encodeURL||window.encodeURI;
return a(c)
};
AjxStringUtil.urlComponentEncode=function(c){if(!c){return""
}var a=window.encodeURLComponent||window.encodeURIComponent;
return a(c)
};
AjxStringUtil.urlDecode=function(d){if(!d){return""
}var a=window.decodeURL||window.decodeURI;
try{return a(d)
}catch(c){return""
}};
AjxStringUtil.urlComponentDecode=function(f){if(!f){return""
}var c=window.decodeURLComponent||window.decodeURIComponent;
var a;
try{a=c(f)
}catch(d){a=unescape(f)
}return a||f
};
AjxStringUtil.ENCODE_MAP={">":"&gt;","<":"&lt;","&":"&amp;"};
AjxStringUtil.htmlEncode=function(c,a){if(!c){return""
}if(typeof(c)!="string"){c=c.toString?c.toString():""
}if(!AjxEnv.isSafari||AjxEnv.isSafariNightly){if(a){return c.replace(/[<>&]/g,function(d){return AjxStringUtil.ENCODE_MAP[d]
}).replace(/ /g," &nbsp;")
}else{return c.replace(/[<>&]/g,function(d){return AjxStringUtil.ENCODE_MAP[d]
})
}}else{if(a){return c.replace(/[&]/g,"&amp;").replace(/ /g," &nbsp;").replace(/[<]/g,"&lt;").replace(/[>]/g,"&gt;")
}else{return c.replace(/[&]/g,"&amp;").replace(/[<]/g,"&lt;").replace(/[>]/g,"&gt;")
}}};
AjxStringUtil.encodeQuotes=function(a){return a.replace(/"/g,"&quot;").replace(/'/g,"&#39;")
};
AjxStringUtil.htmlDecode=function(c,a){if(a){c=c.replace(/&nbsp;/g," ")
}return c.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">")
};
AjxStringUtil.__jsEscapeChar=function(d){var a=d.charCodeAt(0).toString(16);
if(a.length==1){return"\\u000"+a
}else{if(a.length==2){return"\\u00"+a
}else{if(a.length==3){return"\\u0"+a
}else{if(a.length==4){return"\\u"+a
}}}}DBG.println(AjxDebug.NONE,"unexpected condition in AjxStringUtil.__jsEscapeChar -- code point 0x"+a+" doesn't fit in 16 bits")
};
AjxStringUtil.jsEncode=function(a){return a.replace(/[^\u0020-\u007e]/g,AjxStringUtil.__jsEscapeChar)
};
AjxStringUtil.stripTags=function(c,a){if(typeof c!=="string"){return""
}if(a){c=c.replace(/(<(\w+)[^>]*>).*(<\/\2[^>]*>)/,"$1$3")
}return c.replace(/<\/?[^>]+>/gi,"")
};
AjxStringUtil.convertToHtml=function(j,d,c,h){c=c||"<blockquote>";
h=h||"</blockquote>";
if(!j){return""
}j=AjxStringUtil.htmlEncode(j);
if(d){var e=/^(>|&gt;|\|\s+)/;
var l=j.split(/\r?\n/);
var a=0;
for(var f=0;
f<l.length;
f++){var k=l[f];
if(k.length>0){var g=0;
while(k.match(e)){k=k.replace(e,"");
g++
}while(g>a){k=c+k;
a++
}while(g<a){l[f-1]=l[f-1]+h;
a--
}}l[f]=k
}while(a>0){l.push(h);
a--
}j=l.join("\n")
}j=j.replace(/ /mg," &nbsp;").replace(/^ /mg,"&nbsp;").replace(/\t/mg,"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;").replace(/\r?\n/mg,"<br>");
return j
};
AjxStringUtil.SPACE_ENCODE_MAP={" ":"&nbsp;",">":"&gt;","<":"&lt;","&":"&amp;","\n":"<br>"};
AjxStringUtil.htmlEncodeSpace=function(a){if(!a){return""
}return a.replace(/[&]/g,"&amp;").replace(/ /g,"&nbsp;").replace(/[<]/g,"&lt;").replace(/[>]/g,"&gt;")
};
AjxStringUtil.htmlRubyEncode=function(a,c){if(a&&c){return["<ruby>","<rb>",AjxStringUtil.htmlEncode(a),"</rb> ","<rp>(</rp><rt>",AjxStringUtil.htmlEncode(c),"</rt><rp>)</rp>","</ruby>"].join("")
}return AjxStringUtil.htmlEncode(a||c||"")
};
AjxStringUtil.nl2br=function(a){if(!a){return""
}return a.replace(/^ /mg,"&nbsp;").replace(/\t/mg,"<span style='white-space:pre'>\t</span>").replace(/\n/g,"<br>")
};
AjxStringUtil.xmlEncode=function(a){if(a){a=""+a;
return a.replace(/&/g,"&amp;").replace(/</g,"&lt;")
}return""
};
AjxStringUtil.xmlDecode=function(a){return a?a.replace(/&amp;/g,"&").replace(/&lt;/g,"<"):""
};
AjxStringUtil.xmlAttrEncode=function(a){return a?a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\x22/g,"&quot;").replace(/\x27/g,"&apos;"):""
};
AjxStringUtil.xmlAttrDecode=function(a){return a?a.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&quot;/g,'"').replace(/&apos;/g,"'"):""
};
AjxStringUtil.__RE_META={" ":" ","\n":"\\n","\r":"\\r","\t":"\\t"};
AjxStringUtil.__reMetaEscape=function(c,a){return AjxStringUtil.__RE_META[a]||"\\"+a
};
AjxStringUtil.regExEscape=function(a){return a.replace(/(\W)/g,AjxStringUtil.__reMetaEscape)
};
AjxStringUtil._calcDIV=null;
AjxStringUtil.calcDIV=function(){if(AjxStringUtil._calcDIV==null){AjxStringUtil._calcDIV=document.createElement("div");
AjxStringUtil._calcDIV.style.zIndex=0;
AjxStringUtil._calcDIV.style.position=DwtControl.ABSOLUTE_STYLE;
AjxStringUtil._calcDIV.style.visibility="hidden";
document.body.appendChild(AjxStringUtil._calcDIV)
}return AjxStringUtil._calcDIV
};
AjxStringUtil.clip=function(a,g,f){var e=AjxStringUtil.calcDIV();
if(arguments.length==3){e.className=f
}e.innerHTML=a;
if(e.offsetWidth<=g){return a
}for(var d=a.length-1;
d>0;
d--){var c=a.substr(0,d);
e.innerHTML=c+AjxStringUtil.ELLIPSIS;
if(e.offsetWidth<=g){return c+AjxStringUtil.ELLIPSIS
}}return a
};
AjxStringUtil.clipByLength=function(d,c){var a=d.length;
return(a<=c)?d:[d.substr(0,c/2),"...",d.substring(a-((c/2)-3),a)].join("")
};
AjxStringUtil.wrap=function(g,h,i){var n=AjxStringUtil.calcDIV();
if(arguments.length==3){n.className=i
}var j="";
var f="";
var a=g.split("/n");
for(var e=0;
e<a.length;
e++){if(e!=0){j+=f+"<br>";
f=""
}htmlRows=a[e].split("<br>");
for(var l=0;
l<htmlRows.length;
l++){if(l!=0){j+=f+"<br>";
f=""
}words=htmlRows[l].split(" ");
var m=0;
while(m<words.length){n.innerHTML=f+" "+words[m];
var d=n.offsetWidth;
if(d>h){n.innerHTML=words[m];
d=d-n.offsetWidth;
if((d>=h)||(n.offsetWidth<=h)){j+=f+"<br>";
f=""
}else{var k=true;
var c=0;
while(k){c++;
n.innerHTML=f+" "+words[m].substring(0,c);
k=(n.offsetWidth<=h)
}c--;
j+=f+words[m].substring(0,c)+"<br>";
words[m]=words[m].substr(c);
f=""
}}else{f+=" "+words[m];
m++
}}}}j+=f;
return j
};
AjxStringUtil.MSG_SEP_RE=new RegExp("^\\s*--+\\s*("+AjxMsg.origMsg+"|"+AjxMsg.forwardedMessage+")\\s*--+","i");
AjxStringUtil.SIG_RE=/^(- ?-+)|(__+)\r?$/;
AjxStringUtil.SPLIT_RE=/\r\n|\r|\n/;
AjxStringUtil.HDR_RE=/^\s*\w+:/;
AjxStringUtil.COLON_RE=/\S+:$/;
AjxStringUtil._NO_LIST=0;
AjxStringUtil._ORDERED_LIST=1;
AjxStringUtil._UNORDERED_LIST=2;
AjxStringUtil._INDENT=" ";
AjxStringUtil._NON_WHITESPACE=/\S+/;
AjxStringUtil._LF=/\n/;
AjxStringUtil.convertHtml2Text=function(e,g,f){if(!e){return""
}if(g&&AjxUtil.isFunction(g._before)){e=g._before(e)
}if(typeof e=="string"){var h=document.createElement("SPAN");
h.innerHTML=e;
e=h
}var i=[];
var d=0;
var c={};
AjxStringUtil._traverse(e,i,d,AjxStringUtil._NO_LIST,0,0,c,g,f);
var a=i.join("");
if(g&&AjxUtil.isFunction(g._after)){a=g._after(a)
}return a
};
AjxStringUtil._traverse=function(a,p,m,k,h,f,g,l,n){var j=a.nodeName.toLowerCase();
var q=null;
if(l&&l[j]){q=l[j](a,g)
}if(q!=null){p[m++]=q
}else{if(j=="#text"){if(a.nodeValue.search(AjxStringUtil._NON_WHITESPACE)!=-1){if(g.lastNode=="ol"||g.lastNode=="ul"){p[m++]="\n"
}if(g.isPreformatted){p[m++]=AjxStringUtil.trim(a.nodeValue)+" "
}else{p[m++]=AjxStringUtil.trim(a.nodeValue.replace(AjxStringUtil._LF," "),true)+" "
}}}else{if(j=="p"){p[m++]=n?"\n":"\n\n"
}else{if(j==="a"){if(a.href){p[m++]="[ ";
p[m++]=a.href;
if(a.textContent){p[m++]=" | ";
p[m++]=a.textContent
}p[m++]=" ] ";
return m
}}else{if(k==AjxStringUtil._NO_LIST&&(j=="br"||j=="hr")){p[m++]="\n"
}else{if(j=="ol"||j=="ul"){p[m++]="\n";
if(a.parentNode.nodeName.toLowerCase()!="li"&&g.lastNode!="br"&&g.lastNode!="hr"){p[m++]="\n"
}k=(j=="ol")?AjxStringUtil._ORDERED_LIST:AjxStringUtil._UNORDERED_LIST;
h++;
f=0
}else{if(j=="li"){for(var d=0;
d<h;
d++){p[m++]=AjxStringUtil._INDENT
}if(k==AjxStringUtil._ORDERED_LIST){p[m++]=f+". "
}else{p[m++]="\u002A "
}}else{if(j=="tr"&&a.parentNode.firstChild!=a){p[m++]="\n"
}else{if(j=="td"&&a.parentNode.firstChild!=a){p[m++]="\t"
}else{if(j=="div"||j=="address"){if(m&&p[m-1]!=="\n"){p[m++]="\n"
}}else{if(j=="blockquote"){p[m++]="\n\n"
}else{if(j=="pre"){if(m&&p[m-1]!=="\n"){p[m++]="\n"
}g.isPreformatted=true
}else{if(j=="#comment"||j=="script"||j=="select"||j=="style"){return m
}}}}}}}}}}}}}var o=a.childNodes;
var e=o.length;
for(var d=0;
d<e;
d++){var c=o[d];
if(c.nodeType==1&&c.tagName.toLowerCase()=="li"){f++
}m=AjxStringUtil._traverse(c,p,m,k,h,f,g,l,n)
}if(l&&l["/"+j]){p[m++]=l["/"+j](a)
}if(j=="h1"||j=="h2"||j=="h3"||j=="h4"||j=="h5"||j=="h6"||j=="div"||j=="address"){if(m&&p[m-1]!=="\n"){p[m++]="\n"
}g.list=false
}else{if(j=="pre"){if(m&&p[m-1]!=="\n"){p[m++]="\n"
}g.isPreformatted=false
}else{if(j=="li"){if(!g.list){p[m++]="\n"
}g.list=false
}else{if(j=="ol"||j=="ul"){g.list=true
}else{if(j!="#text"){g.list=false
}}}}}g.lastNode=j;
return m
};
AjxStringUtil.queryStringSet=function(j,l){var k=l?"":location.search;
if(k.indexOf("?")==0){k=k.substr(1)
}var h=k.split("&");
var d={};
for(var e=0;
e<h.length;
e++){var g=h[e].split("=");
d[g[0]]=g[1]
}for(var a in j){d[a]=j[a]
}var c=[];
var e=0;
for(var a in d){if(a){c[e++]=[a,d[a]].join("=")
}}return"?"+c.join("&")
};
AjxStringUtil.queryStringRemove=function(a,d){a=a?a:"";
if(a.indexOf("?")==0){a=a.substr(1)
}var f=a.split("&");
var c=[];
for(var e=0;
e<f.length;
e++){if(f[e].indexOf(d)!=0){c.push(f[e])
}}return"?"+c.join("&")
};
AjxStringUtil.getAsString=function(a){return !a?"":(typeof(a)=="object")?a.toString():a
};
AjxStringUtil.isWhitespace=function(a){return(a.charCodeAt(0)<=32)
};
AjxStringUtil.isDigit=function(c){var a=c.charCodeAt(0);
return(a>=48&&a<=57)
};
AjxStringUtil.compareRight=function(f,d){var g=0;
var i=0;
var h=0;
var e;
var c;
for(;
(i<f.length||h<d.length);
i++,h++){e=f.charAt(i);
c=d.charAt(h);
if(!AjxStringUtil.isDigit(e)&&!AjxStringUtil.isDigit(c)){return g
}else{if(!AjxStringUtil.isDigit(e)){return -1
}else{if(!AjxStringUtil.isDigit(c)){return +1
}else{if(e<c){if(g==0){g=-1
}}else{if(e>c){if(g==0){g=+1
}}}}}}}};
AjxStringUtil.natCompare=function(j,i){var h=0,f=0;
var d=0,c=0;
var g,e;
while(h<j.length||f<i.length){d=c=0;
g=j.charAt(h);
e=i.charAt(f);
while(AjxStringUtil.isWhitespace(g)||g=="0"){d=(g=="0")?(d+1):0;
g=j.charAt(++h)
}while(AjxStringUtil.isWhitespace(e)||e=="0"){c=(e=="0")?(c+1):0;
e=i.charAt(++f)
}if(AjxStringUtil.isDigit(g)&&AjxStringUtil.isDigit(e)){var k=AjxStringUtil.compareRight(j.substring(h),i.substring(f));
if(k&&k!=0){return k
}}if(g==0&&e==0){return d-c
}if(g<e){return -1
}else{if(g>e){return +1
}}++h;
++f
}};
AjxStringUtil.clipFile=function(f,a){var c=f.lastIndexOf(".");
if(c<=0){c=f.length
}if(c<=a){return f
}var e=f.slice(0,c);
var d=f.slice(c);
return[e.slice(0,a/2),AjxMsg.ellipsis,e.slice(-Math.ceil(a/2)+AjxMsg.ellipsis.length),d].join("")
};
AjxStringUtil.URL_PARSE_RE=new RegExp("^(?:([^:/?#.]+):)?(?://)?(([^:/?#]*)(?::(\\d*))?)?((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[\\?#]|$)))*/?)?([^?#/]*))?(?:\\?([^#]*))?(?:#(.*))?");
AjxStringUtil.parseURL=function(d){var f=["source","protocol","authority","domain","port","path","directoryPath","fileName","query","anchor"];
var e=AjxStringUtil.URL_PARSE_RE.exec(d);
var c={};
for(var a=0;
a<f.length;
a++){c[f[a]]=(e[a]?e[a]:"")
}if(c.directoryPath.length>0){c.directoryPath=c.directoryPath.replace(/\/?$/,"/")
}return c
};
AjxStringUtil.parseMailtoLink=function(d){var c={};
if(!d){return c
}if(d.toLowerCase().indexOf("mailto:")===-1){c.to=d;
return c
}var a=d.match(/\bsubject=([^&]+)/i);
c.subject=a?decodeURIComponent(a[1]):null;
a=d.match(/\bto\:([^&]+)/);
if(!a){a=d.match(/\bmailto\:([^\?]+)/i)
}c.to=a?decodeURIComponent(a[1]):null;
a=d.match(/\bbody=([^&]+)/i);
c.body=a?decodeURIComponent(a[1]):null;
return c
};
AjxStringUtil.parseQueryString=function(f){var j=f||(""+window.location);
var k=j.indexOf("?");
var g=(k===-1)?j:j.substring(k+1);
g=g.replace(/#.*$/,"");
var e=g.split("&");
var a={},c,l,h;
for(var d=0;
d<e.length;
d++){c=e[d].split("=");
l=decodeURIComponent(c[0]),h=c[1]?decodeURIComponent(c[1]):true;
a[l]=h
}return a
};
AjxStringUtil.prettyPrint=function(e,d,a,c){AjxStringUtil._visited=new AjxVector();
var f=AjxStringUtil._prettyPrint(e,d,a,c);
AjxStringUtil._visited=null;
return f
};
AjxStringUtil._visited=null;
AjxStringUtil._prettyPrint=function(h,c,s,d){var m=0;
var e=false;
var n=false;
if(arguments.length>4){m=arguments[4];
e=arguments[5];
n=arguments[6]
}if(AjxUtil.isObject(h)){var q=h.toString?h.toString():"";
if(d&&q&&d[q]){return"["+q+"]"
}if(AjxStringUtil._visited.contains(h)){return"[visited object]"
}else{AjxStringUtil._visited.add(h)
}}var g=AjxStringUtil.repeat(" ",m);
var j="";
if(h===undefined){j+="[undefined]"
}else{if(h===null){j+="[null]"
}else{if(AjxUtil.isBoolean(h)){j+=h?"true":"false"
}else{if(AjxUtil.isString(h)){j+='"'+AjxStringUtil._escapeForHTML(h)+'"'
}else{if(AjxUtil.isNumber(h)){j+=h
}else{if(AjxUtil.isObject(h)){var f=AjxUtil.isArray(h)||AjxUtil.isArray1(h);
if(n){j+=f?"[Array]":h.toString()
}else{n=!c;
var k=new Array();
for(var o in h){if(h.hasOwnProperty(o)){k.push(o)
}}if(f){k.sort(function(u,i){return u-i
})
}else{k.sort()
}if(e){j+=f?"[":"{"
}var p=k.length;
for(var o=0;
o<p;
o++){var t=k[o];
var r=h[t];
var l=null;
if(r==window||r==document||(!AjxEnv.isIE&&r instanceof Node)){l=r.toString()
}if((typeof(r)=="function")){if(s){l="[function]"
}else{continue
}}if(o>0){j+=","
}j+="\n"+g;
var a;
if(f){a="// ["+t+"]:\n"+g
}else{a=t+": "
}if(d&&d[t]){j+=a+"["+t+"]"
}else{if(l!=null){j+=a+l
}else{j+=a+AjxStringUtil._prettyPrint(r,c,s,d,m+2,true,n)
}}}if(o>0){j+="\n"+AjxStringUtil.repeat(" ",m-1)
}if(e){j+=f?"]":"}"
}}}}}}}}return j
};
AjxStringUtil._escapeForHTML=function(c){if(typeof(c)!="string"){return c
}var a=c;
a=a.replace(/\&/g,"&amp;");
a=a.replace(/\</g,"&lt;");
a=a.replace(/\>/g,"&gt;");
a=a.replace(/\"/g,"&quot;");
a=a.replace(/\xA0/g,"&nbsp;");
return a
};
AjxStringUtil._testSpan=null;
AjxStringUtil._testSpanBold=null;
AjxStringUtil.WIDTH={};
AjxStringUtil.WIDTH_BOLD={};
AjxStringUtil.MAX_CACHE=1000;
AjxStringUtil._cacheSize=0;
AjxStringUtil.getWidth=function(f,e,j){if(!AjxStringUtil._testSpan){var d=AjxStringUtil._testSpan=document.createElement("SPAN");
var c=AjxStringUtil._testSpanBold=document.createElement("SPAN");
d.style.position=c.style.position=Dwt.ABSOLUTE_STYLE;
var k=DwtShell.getShell(window).getHtmlElement();
k.appendChild(d);
k.appendChild(c);
Dwt.setLocation(d,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE);
Dwt.setLocation(c,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE);
c.style.fontWeight="bold"
}if(AjxUtil.isString(j)){j=DwtCssStyle.asPixelCount(j)
}var g=""+(j||0);
var a=e?AjxStringUtil.WIDTH_BOLD:AjxStringUtil.WIDTH;
if(a[f]&&a[f][g]){return a[f][g]
}if(AjxStringUtil._cacheSize>=AjxStringUtil.MAX_CACHE){AjxStringUtil.WIDTH={};
AjxStringUtil.WIDTH_BOLD={};
AjxStringUtil._cacheSize=0
}var i=e?AjxStringUtil._testSpanBold:AjxStringUtil._testSpan;
i.innerHTML=f;
i.style.fontSize=j?(j+"px"):null;
if(!a[f]){a[f]={}
}var h=a[f][g]=Dwt.getSize(i).x;
AjxStringUtil._cacheSize++;
return h
};
AjxStringUtil.fitString=function(f,c){var d=AjxStringUtil.getWidth(f);
if(d<c){return f
}var a=AjxStringUtil.ELLIPSIS_NO_SPACE,e=AjxStringUtil.getWidth(a);
while(f.length>0){if(AjxStringUtil.getWidth(f)+e<c){return f+a
}else{f=f.substring(0,f.length-1)
}}return""
};
AjxStringUtil.fixCrossDomainReference=function(c,e,d){var g=AjxStringUtil.parseURL(c);
if(g.authority==window.location.host){return c
}if((e&&c.indexOf(e)>=0)||!e){if(d){c=g.path
}else{var f=g.protocol+"://"+g.authority;
var a=window.location.protocol+"//"+window.location.host;
c=c.replace(f,a)
}}return c
};
AjxStringUtil._dummyDiv=document.createElement("DIV");
AjxStringUtil.htmlPlatformIndependent=function(c){var d=AjxStringUtil._dummyDiv;
d.innerHTML=c;
var a=d.innerHTML;
d.innerHTML="";
return a
};
AjxStringUtil.equalsHtmlPlatformIndependent=function(c,a){return AjxStringUtil.htmlPlatformIndependent(c)==AjxStringUtil.htmlPlatformIndependent(a)
};
AjxStringUtil.ORIG_UNKNOWN="UNKNOWN";
AjxStringUtil.ORIG_QUOTED="QUOTED";
AjxStringUtil.ORIG_SEP_STRONG="SEP_STRONG";
AjxStringUtil.ORIG_SEP_WEAK="SEP_WEAK";
AjxStringUtil.ORIG_WROTE_STRONG="WROTE_STRONG";
AjxStringUtil.ORIG_WROTE_WEAK="WROTE_WEAK";
AjxStringUtil.ORIG_HEADER="HEADER";
AjxStringUtil.ORIG_LINE="LINE";
AjxStringUtil.ORIG_SIG_SEP="SIG_SEP";
AjxStringUtil.MSG_REGEXES=[{type:AjxStringUtil.ORIG_QUOTED,regex:/^\s*(>|\|)/},{type:AjxStringUtil.ORIG_SEP_STRONG,regex:new RegExp("^\\s*--+\\s*("+AjxMsg.origMsg+"|"+AjxMsg.forwardedMessage+"|"+AjxMsg.origAppt+")\\s*--+\\s*$","i")},{type:AjxStringUtil.ORIG_SEP_STRONG,regex:new RegExp("^"+AjxMsg.forwardedMessage1+"$","i")},{type:AjxStringUtil.ORIG_HEADER,regex:new RegExp("^\\s*("+[AjxMsg.from,AjxMsg.to,AjxMsg.subject,AjxMsg.date,AjxMsg.sent,AjxMsg.cc].join("|")+")")},{type:AjxStringUtil.ORIG_LINE,regex:/^\s*_{5,}\s*$/}];
AjxStringUtil.HTML_SEP_ID="zwchr";
AjxStringUtil.ORIG_EMAIL_RE=/[^@\s]+@[A-Za-z0-9\-]{2,}(\.[A-Za-z0-9\-]{2,})+/;
AjxStringUtil.ORIG_DATE_RE=/\d+\s*(\/|\-|, )20\d\d/;
AjxStringUtil.ORIG_INTRO_RE=new RegExp("^(-{2,}|"+AjxMsg.on+"\\s+)","i");
AjxStringUtil._writeToTestIframeDoc=function(c){var d;
if(!AjxStringUtil.__curIframeId){d=document.createElement("IFRAME");
AjxStringUtil.__curIframeId=d.id=Dwt.getNextId();
d.setAttribute("aria-hidden",true);
document.body.appendChild(d);
Dwt.setPosition(d,Dwt.ABSOLUTE_STYLE);
Dwt.setLocation(d,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE)
}else{d=document.getElementById(AjxStringUtil.__curIframeId)
}var a=Dwt.getIframeDoc(d);
c=c&&c.replace(AjxStringUtil.IMG_SRC_CID_REGEX,'<img $1 pnsrc="cid:');
a.open();
a.write(c);
a.close();
return a.childNodes[0]
};
AjxStringUtil._removeTestIframeDoc=function(){if(AjxEnv.isFirefox){var a=document.getElementById(AjxStringUtil.__curIframeId);
if(a){a.parentNode.removeChild(a)
}AjxStringUtil.__curIframeId=null
}};
AjxStringUtil.getOriginalContent=function(p,o){if(!p){return""
}if(o){return AjxStringUtil._getOriginalHtmlContent(p)
}var r=[];
var a=p.split(AjxStringUtil.SPLIT_RE);
var e,n=[],g={},h,t,q=false;
for(var v=0;
v<a.length;
v++){var m=a[v];
var w=AjxStringUtil.trim(m);
if(!AjxStringUtil._NON_WHITESPACE.test(w)){n.push(m);
continue
}if((w.indexOf("| DO NOT REPLY")===0)&&(a[v+2].indexOf("bugzilla")!==-1)){q=true
}var d=AjxStringUtil._getLineType(w);
if(d===AjxStringUtil.ORIG_QUOTED){d=q?AjxStringUtil.ORIG_UNKNOWN:d
}else{q=false
}var z=a[v+1];
var h=false;
if(z&&(d===AjxStringUtil.ORIG_UNKNOWN)&&AjxStringUtil.ORIG_INTRO_RE.test(w)&&z.match(/\w+:$/)){w=[w,z].join(" ");
d=AjxStringUtil._getLineType(w);
h=true
}if(d===AjxStringUtil.ORIG_LINE){var u=v+1;
z=a[u];
while(!AjxStringUtil._NON_WHITESPACE.test(z)&&u<a.length){z=a[++u]
}var s=z&&AjxStringUtil._getLineType(z);
if(s===AjxStringUtil.ORIG_HEADER){d=AjxStringUtil.ORIG_HEADER
}else{d=AjxStringUtil.ORIG_UNKNOWN
}}if(e){if(e!==d){r.push({type:e,block:n});
t=(e===AjxStringUtil.ORIG_UNKNOWN)?n:t;
g[e]=g[e]?g[e]+1:1;
n=[];
e=d
}}else{e=d
}if(h&&(d===AjxStringUtil.ORIG_WROTE_WEAK||d===AjxStringUtil.ORIG_WROTE_STRONG)){n.push(m);
n.push(z);
v++;
h=false
}else{n.push(m)
}}if(n.length){r.push({type:e,block:n});
t=(e===AjxStringUtil.ORIG_UNKNOWN)?n:t;
g[e]=g[e]?g[e]+1:1
}var f=r[0],y=r[1];
if(f&&f.type===AjxStringUtil.ORIG_UNKNOWN&&y&&(y.type===AjxStringUtil.ORIG_HEADER||y.type===AjxStringUtil.ORIG_WROTE_STRONG)){var A=AjxStringUtil._getTextFromBlock(f.block);
if(A){var x=r[2];
if(x&&x.type===AjxStringUtil.ORIG_UNKNOWN){var c=AjxStringUtil._getTextFromBlock(x.block);
if(c&&c.indexOf(ZmItem.NOTES_SEPARATOR)!==-1){return A+c
}}return A
}}var A=AjxStringUtil._checkInlineWrote(g,r,false);
if(A){return A
}if(g[AjxStringUtil.ORIG_UNKNOWN]===1&&g[AjxStringUtil.ORIG_QUOTED]>0){var A=AjxStringUtil._getTextFromBlock(t);
if(A){return A
}}if(g[AjxStringUtil.ORIG_SEP_STRONG]>0){var k=[];
for(var v=0;
v<r.length;
v++){var l=r[v];
if(l.type===AjxStringUtil.ORIG_SEP_STRONG){break
}k=k.concat(l.block)
}var A=AjxStringUtil._getTextFromBlock(k);
if(A){return A
}}return p
};
AjxStringUtil._getLineType=function(f){var g=AjxStringUtil.ORIG_UNKNOWN;
for(var d=0;
d<AjxStringUtil.MSG_REGEXES.length;
d++){var e=AjxStringUtil.MSG_REGEXES[d];
var h=e.regex;
if(h.test(f.toLowerCase())){if(e.type==AjxStringUtil.ORIG_QUOTED&&/^\s*\|.*\|\s*$/.test(f)){continue
}g=e.type;
break
}}if(g===AjxStringUtil.ORIG_UNKNOWN){var c=f.match(/(\w+):$/);
var a=c&&c[1]&&c[1].toLowerCase();
if(a){var i=0;
i=i+(a===AjxMsg.wrote)?5:(a===AjxMsg.changed)?0:2;
if(AjxStringUtil.ORIG_EMAIL_RE.test(f)){i+=4
}if(AjxStringUtil.ORIG_DATE_RE.test(f)){i+=3
}var k=new RegExp("^(--|"+AjxMsg.on+")","i");
if(AjxStringUtil.ORIG_INTRO_RE.test(f)){i+=1
}if(i>=7){g=AjxStringUtil.ORIG_WROTE_STRONG
}else{if(i>=5){g=AjxStringUtil.ORIG_WROTE_WEAK
}}}}return g
};
AjxStringUtil._getTextFromBlock=function(c){if(!(c&&c.length)){return null
}var a=c.join("\n")+"\n";
a=a.replace(/\s+$/,"\n");
return(AjxStringUtil._NON_WHITESPACE.test(a))?a:null
};
AjxStringUtil.SCRIPT_REGEX=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
AjxStringUtil.IGNORE_NODE_LIST=["#comment","br","script","select","style"];
AjxStringUtil.IGNORE_NODE=AjxUtil.arrayAsHash(AjxStringUtil.IGNORE_NODE_LIST);
AjxStringUtil._getOriginalHtmlContent=function(m){var g=AjxStringUtil._writeToTestIframeDoc(m);
while(AjxStringUtil.SCRIPT_REGEX.test(m)){m=m.replace(AjxStringUtil.SCRIPT_REGEX,"")
}var n=false,u=[];
AjxStringUtil._flatten(g,u);
var h=u.length,t,q=[],f={},c,p,a,e,d,l;
for(t=0;
t<h;
t++){c=u[t];
if(c.nodeType===AjxUtil.ELEMENT_NODE){c.normalize()
}a=c.nodeName.toLowerCase();
e=AjxStringUtil._checkNode(u[t]);
if(e===AjxStringUtil.ORIG_UNKNOWN&&c.nodeName==="#text"&&(AjxStringUtil.ORIG_DATE_RE.test(c.nodeValue)||AjxStringUtil.ORIG_INTRO_RE.test(c.nodeValue))){var r=c.nodeValue;
for(var s=1;
s<10;
s++){var o=u[t+s];
if(o&&o.nodeName==="#text"){r+=o.nodeValue;
if(/:$/.test(r)){e=AjxStringUtil._getLineType(AjxStringUtil.trim(r));
if(e===AjxStringUtil.ORIG_WROTE_STRONG){t=t+s;
break
}}}}}if(e!==null){q.push({type:e,node:c,nodeName:a});
f[e]=f[e]?f[e]+1:1;
if(e===AjxStringUtil.ORIG_SEP_STRONG||e===AjxStringUtil.ORIG_WROTE_STRONG){l=c;
n=true;
break
}if(e===AjxStringUtil.ORIG_HEADER&&d===AjxStringUtil.ORIG_LINE){l=p;
n=true;
break
}p=c;
d=e
}}if(l){AjxStringUtil._prune(l,true)
}var k=n&&g.textContent?"<html>"+g.innerHTML+"</html>":m;
AjxStringUtil._removeTestIframeDoc();
return k
};
AjxStringUtil._flatten=function(d,e){var f=d&&d.nodeName.toLowerCase();
if(AjxStringUtil.IGNORE_NODE[f]){return
}e.push(d);
var c=d.childNodes||[];
for(var a=0;
a<c.length;
a++){this._flatten(c[a],e)
}};
AjxStringUtil._prune=function(c,a){var d=c&&c.parentNode;
while(d&&d.lastChild&&d.lastChild!==c){d.removeChild(d.lastChild)
}if(a&&d&&d.lastChild===c){d.removeChild(d.lastChild)
}var e=d&&d.nodeName.toLowerCase();
if(d&&e!=="body"&&e!=="html"){AjxStringUtil._prune(d,false)
}};
AjxStringUtil._checkNode=function(c){if(!c){return null
}var f=c.nodeName.toLowerCase();
var a=null;
if(f==="#text"){var d=AjxStringUtil.trim(c.nodeValue);
if(AjxStringUtil._NON_WHITESPACE.test(d)){a=AjxStringUtil._getLineType(d)
}}else{if(f==="hr"){if(c.id===AjxStringUtil.HTML_SEP_ID||(c.size==="2"&&c.width==="100%"&&c.align==="center")){a=AjxStringUtil.ORIG_SEP_STRONG
}else{a=AjxStringUtil.ORIG_LINE
}}else{if(f==="pre"){a=AjxStringUtil._checkNodeContent(c)
}else{if(f==="div"){if(c.className==="OutlookMessageHeader"||c.className==="gmail_quote"){a=AjxStringUtil.ORIG_SEP_STRONG
}else{if(c.style.borderTop){var e=DwtCssStyle.getComputedStyleObject(c);
if(e&&e.borderTopWidth&&parseInt(e.borderTopWidth)===1&&e.borderTopColor){a=AjxStringUtil.ORIG_SEP_STRONG
}}}a=a||AjxStringUtil._checkNodeContent(c)
}else{if(f==="span"){a=a||AjxStringUtil._checkNodeContent(c)
}else{if(f==="img"){a=AjxStringUtil.ORIG_UNKNOWN
}else{if(f==="blockquote"){a=AjxStringUtil.ORIG_QUOTED
}}}}}}}return a
};
AjxStringUtil._checkNodeContent=function(d){var c=d.textContent||"";
if(!AjxStringUtil._NON_WHITESPACE.test(c)||c.length>200){return null
}var a=AjxStringUtil._getLineType(c);
return(a===AjxStringUtil.ORIG_SEP_STRONG||a===AjxStringUtil.ORIG_WROTE_STRONG)?a:null
};
AjxStringUtil.checkForCleanHtml=function(d,f,g){var h=AjxStringUtil._writeToTestIframeDoc(d);
var c={allowedTags:AjxUtil.arrayAsHash(f),untrustedAttrs:g||[]};
AjxStringUtil._traverseCleanHtml(h,c);
var a="<html>"+h.innerHTML+"</html>";
var e=Math.max(h.scrollWidth,h.lastChild.scrollWidth);
AjxStringUtil._removeTestIframeDoc();
return{html:a,width:e,useIframe:c.fail}
};
AjxStringUtil._traverseCleanHtml=function(e,m){var c=true;
var o=e.nodeName.toLowerCase();
if(o==="style"&&e.innerHTML==="p { margin: 0; }"){e.doDelete=true
}else{if(o==="title"&&!e.innerHTML){}else{if(m.allowedTags[o]){if(e.style){var d=e.style&&e.style.cssText;
if(d!==""){d=d.toLowerCase();
if(!AjxStringUtil._checkStyle(d)){c=false
}e.style.cssText=AjxStringUtil._fixStyle(d)
}}if(e.removeAttribute&&e.attributes&&e.attributes.length){for(var g=0;
g<m.untrustedAttrs.length;
g++){if(e.hasAttribute(m.untrustedAttrs[g])){c=false
}}for(var g=0,p=e.attributes,f=p.length;
g<f;
g++){var k=p.item(g);
if(!k){continue
}var n=k.nodeName&&k.nodeName.toLowerCase();
if(n&&n.indexOf("on")===0){e.removeAttribute(n);
continue
}var h=k.nodeValue&&String(k.nodeValue);
if(h){h=h.toLowerCase();
if(o==="table"&&(n==="cellpadding"||n==="cellspacing"||n==="border")&&h!=="0"){c=false
}}}}}else{c=false
}}}for(var g=0,j=e.childNodes.length;
g<j;
g++){var a=e.childNodes[g];
AjxStringUtil._traverseCleanHtml(a,m)
}for(var g=e.childNodes.length-1;
g>=0;
g--){var a=e.childNodes[g];
if(a.doDelete){e.removeChild(a)
}}if(!c){m.fail=true
}};
AjxStringUtil._checkStyle=function(a){if(a.match(/\bposition\s*:\s*absolute[^;]*;?/)){return false
}if(a.match(/\bfont-[^;]*;?/)){return false
}return true
};
AjxStringUtil._fixStyle=function(a){a=a.replace(/\bmargin-?(top|left|right|bottom)?\s*:[^;]*-\d+[^;]*;?/gi,"");
a=a.replace(/\bpadding-?(top|left|right|bottom)?\s*:[^;]*-\d+[^;]*;?/gi,"");
a=a.replace(/\bposition\s*:\s*(absolute|fixed)[^;]*;?/,"");
return a
};
AjxStringUtil._checkInlineWrote=function(h,f){if(h[AjxStringUtil.ORIG_WROTE_STRONG]>0){var l,d=false,a={};
for(var g=0;
g<f.length;
g++){var m=f[g],j=m.type;
if(j===AjxStringUtil.ORIG_WROTE_STRONG){d=true
}else{if(j===AjxStringUtil.ORIG_UNKNOWN&&!d){if(l){return null
}else{l=m.block
}}else{if(d){a[j]=true
}}}}var k=(a[AjxStringUtil.ORIG_UNKNOWN]&&a[AjxStringUtil.ORIG_QUOTED]);
var c=(h[AjxStringUtil.ORIG_UNKNOWN]===2&&f[f.length-1].type===AjxStringUtil.ORIG_UNKNOWN);
if(l&&(!k||c)){var e=AjxStringUtil._getTextFromBlock(l);
if(e){return e
}}}};
AjxStringUtil.trimHtml=function(e){if(!e){return""
}var d=e;
d=d.replace(AjxStringUtil.DOC_TAG_REGEX,"");
d=d.replace(/<div><br ?\/?><\/div>/gi,"<br>");
var c=0;
while(d.length!==c&&(/^<br ?\/?>/i.test(d)||/<br ?\/?>$/i.test(d))){c=d.length;
d=d.replace(/^<br ?\/?>/i,"").replace(/<br ?\/?>$/i,"")
}var a=d&&d.match(/((<br ?\/?>)+)((<\/\w+>)+)$/i);
if(a&&a.length){var f=new RegExp(a[1]+a[3]+"$","i");
d=d.replace(f,a[3])
}d=d.replace(/(<div><\/div>)+/gi,"");
return AjxStringUtil.trim(d)
};
AjxStringUtil.DOC_TAG_REGEX=/<\/?(html|head|body)>/gi;
AjxStringUtil.defangHtmlContent=function(f){var k=AjxStringUtil._writeToTestIframeDoc(f);
var j=k.getElementsByTagName("img");
if(j&&j.length){var a;
var h;
var d;
for(var e=0;
e<j.length;
e++){a=j[e];
h=a.getAttribute("dfsrc");
if(h&&(h!=="#")){a.setAttribute("src",h)
}else{d=a.getAttribute("pnsrc");
if(d&&(d!=="#")){a.setAttribute("src",d)
}}a.removeAttribute("dfsrc")
}}var g="";
var c=k.childNodes;
for(var e=0;
e<c.length;
e++){if(c[e].tagName&&(c[e].tagName.toLowerCase()==="body")){g=c[e].innerHTML;
break
}}AjxStringUtil._removeTestIframeDoc();
return g
}
}if(AjxPackage.define("ajax.xml.AjxXmlDoc")){AjxXmlDoc=function(){if(!AjxXmlDoc._inited){AjxXmlDoc._init()
}};
AjxXmlDoc.prototype.isAjxXmlDoc=true;
AjxXmlDoc.prototype.toString=function(){return"AjxXmlDoc"
};
AjxXmlDoc.INVALID_CHARS_RE=/[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/g;
AjxXmlDoc.REC_AVOID_CHARS_RE=/[\u007F-\u0084\u0086-\u009F\uFDD0-\uFDDF]/g;
AjxXmlDoc._inited=false;
AjxXmlDoc._msxmlVers=null;
AjxXmlDoc._useDOM=Boolean(document.implementation&&document.implementation.createDocument);
AjxXmlDoc._useActiveX=!AjxXmlDoc._useDOM&&Boolean(window.ActiveXObject);
AjxXmlDoc.create=function(){var c=new AjxXmlDoc();
var a=null;
if(AjxXmlDoc._useActiveX){a=new ActiveXObject(AjxXmlDoc._msxmlVers);
a.async=true;
if(AjxXmlDoc._msxmlVers=="MSXML2.DOMDocument.4.0"){a.setProperty("SelectionLanguage","XPath");
a.setProperty("SelectionNamespaces","xmlns:zimbra='urn:zimbra' xmlns:mail='urn:zimbraMail' xmlns:account='urn:zimbraAccount'")
}}else{if(AjxXmlDoc._useDOM){a=document.implementation.createDocument("","",null)
}else{throw new AjxException("Unable to create new Doc",AjxException.INTERNAL_ERROR,"AjxXmlDoc.create")
}}c._doc=a;
return c
};
AjxXmlDoc.createFromDom=function(c){var a=new AjxXmlDoc();
a._doc=c;
return a
};
AjxXmlDoc.createFromXml=function(a){var c=AjxXmlDoc.create();
c.loadFromString(a);
return c
};
AjxXmlDoc.replaceInvalidChars=function(a){AjxXmlDoc.INVALID_CHARS_RE.lastIndex=0;
return a.replace(AjxXmlDoc.INVALID_CHARS_RE,"?")
};
AjxXmlDoc.getXml=function(d){if(!d){return""
}var c=d.xml;
if(!c){var a=new XMLSerializer();
c=a.serializeToString(d)
}return AjxXmlDoc.replaceInvalidChars(c)
};
AjxXmlDoc.prototype.getDoc=function(){return this._doc
};
AjxXmlDoc.prototype.loadFromString=function(c){var a=this._doc;
a.loadXML(c);
if(AjxXmlDoc._useActiveX){if(a.parseError.errorCode!=0){throw new AjxException(a.parseError.reason,AjxException.INVALID_PARAM,"AjxXmlDoc.loadFromString")
}}};
AjxXmlDoc.prototype.loadFromUrl=function(a){if(AjxEnv.isChrome||AjxEnv.isSafari){var c=new window.XMLHttpRequest();
c.open("GET",a,false);
c.send(null);
var d=c.responseXML;
this._doc=d
}else{this._doc.load(a)
}};
AjxXmlDoc.prototype.toJSObject=function(d,c,a){_node=function(){this.__msh_content=""
};
_node.prototype.toString=function(){return this.__msh_content
};
rec=function(j,k){var g={},h,l;
for(j=j.firstChild;
j;
j=j.nextSibling){if(j.nodeType==1){h=j.tagName;
if(d){h=h.replace(/^.*?:/,"")
}if(c){h=h.toLowerCase()
}l=new _node();
if(g[h]){if(g[h]==1){k[h]=[k[h]];
g[h]=2
}k[h].push(l)
}else{k[h]=l;
g[h]=1
}if(a){if(j.attributes&&j.attributes.length){for(var f=0;
f<j.attributes.length;
f++){attr=j.attributes[f];
l[attr.name]=AjxUtil.isNumeric(attr.value)?attr.value:String(attr.value)
}}}rec(j,l)
}else{if(j.nodeType==3){k.__msh_content+=j.nodeValue
}}}};
var e=new _node();
rec(this._doc.documentElement,e);
return e
};
AjxXmlDoc.prototype.getElementsByTagNameNS=function(c,a){var d=this.getDoc();
return !d.getElementsByTagNameNS?d.getElementsByTagName(c+":"+a):d.getElementsByTagNameNS(c,a)
};
AjxXmlDoc.prototype.getFirstElementByTagNameNS=function(c,a){return this.getElementsByTagNameNS(c,a)[0]
};
AjxXmlDoc.prototype.getElementsByTagName=function(a){var c=this.getDoc();
return c.getElementsByTagName(a)
};
AjxXmlDoc._init=function(){if(AjxXmlDoc._useActiveX){var a=["MSXML4.DOMDocument","MSXML3.DOMDocument","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XmlDom"];
for(var d=0;
d<a.length;
d++){try{new ActiveXObject(a[d]);
AjxXmlDoc._msxmlVers=a[d];
break
}catch(c){}}if(!AjxXmlDoc._msxmlVers){throw new AjxException("MSXML not installed",AjxException.INTERNAL_ERROR,"AjxXmlDoc._init")
}}else{if(!Document.prototype.loadXML){Document.prototype.loadXML=function(k){var j=new DOMParser();
var f=j.parseFromString(k,"text/xml");
while(this.hasChildNodes()){this.removeChild(this.lastChild)
}var e=f.childNodes.length;
for(var g=0;
g<e;
g++){var h=this.importNode(f.childNodes[g],true);
this.appendChild(h)
}};
if(AjxEnv.isNav){_NodeGetXml=function(){var e=new XMLSerializer();
return e.serializeToString(this)
};
Node.prototype.__defineGetter__("xml",_NodeGetXml)
}}}AjxXmlDoc._inited=true
};
AjxXmlDoc.prototype.set=function(a,e,c){var f=this._doc.createElement(a);
if(e!=null){var d=this._doc.createTextNode("");
f.appendChild(d);
d.nodeValue=e
}if(c==null){this.root.appendChild(f)
}else{c.appendChild(f)
}return f
};
AjxXmlDoc.prototype.getXml=function(){return AjxXmlDoc.getXml(this.getDoc())
};
AjxXmlDoc.prototype.getDocXml=AjxXmlDoc.prototype.getXml;
AjxXmlDoc.createRoot=function(e){var a=AjxXmlDoc.create();
var c=a.getDoc();
a.root=c.createElement(e);
c.appendChild(a.root);
return a
};
AjxXmlDoc.createElement=function(c,f){var a=AjxXmlDoc.create();
var g=a.getDoc();
a.root=g.createElement(c);
if(f!=null){var e=g.createTextNode("");
a.root.appendChild(e);
e.nodeValue=f
}g.appendChild(a.root);
return a
};
AjxXmlDoc.prototype.appendChild=function(a){if(this._doc!=a._doc&&(AjxEnv.isChrome||AjxEnv.isSafari)){this.root.appendChild(this.getDoc().importNode(a.root,true))
}else{this.root.appendChild(a.root)
}}
}if(AjxPackage.define("ajax.core.AjxImg")){AjxImg=function(){};
AjxImg.prototype=new Object;
AjxImg.prototype.constructor=null;
AjxImg._VIEWPORT_ID="AjxImg_VP";
AjxImg.DISABLED=true;
AjxImg.RE_COLOR=/^(.*?),color=(.*)$/;
AjxImg.setImage=function(j,o,p,h,d,r){if(!j){return
}d=d||[];
var n=o;
var e,c=o&&o.match(AjxImg.RE_COLOR);
if(c){o=c&&c[1];
e=c&&c[2]
}var l=AjxImg.getClassForImage(o,h);
if(p){d.push(l);
j.className=d.join(" ");
return
}var a=j.firstChild&&j.firstChild.id;
var q=l+"Overlay";
var k=l+"Mask";
if(e&&window.AjxImgData&&AjxImgData[q]&&AjxImgData[k]){e=(e.match(/^\d$/)?ZmOrganizer.COLOR_VALUES[e]:e)||ZmOrganizer.COLOR_VALUES[ZmOrganizer.ORG_DEFAULT_COLOR];
j.innerHTML=AjxImg.getImageHtml({imageName:n,attrStr:a?"id='"+a+"'":null,altText:r,disabled:h});
return
}if(j.firstChild==null||j.firstChild.nodeName.toLowerCase()!="div"){var g=[],f=0;
g[f++]="<div ";
if(a){g[f++]=" id='";
g[f++]=a;
g[f++]="' "
}if(l){d.push(l)
}g[f++]=AjxUtil.getClassAttr(d);
g[f++]=">";
if(r){g[f++]="<div class='ScreenReaderOnly'>";
g[f++]=AjxStringUtil.htmlEncode(r);
g[f++]="</div>"
}g[f++]="</div>";
j.innerHTML=g.join("");
return
}if(l){d.push(l)
}j.firstChild.className=d.join(" ")
};
AjxImg.setDisabledImage=function(d,e,a,c){return AjxImg.setImage(d,e,a,true,c)
};
AjxImg.getClassForImage=function(d,c){var a=d?"Img"+d:"";
if(c){a+=" ZDisabledImage"
}return a
};
AjxImg.getImageClass=function(a){return a.firstChild?a.firstChild.className:a.className
};
AjxImg.getImageElement=function(a){return a.firstChild?a.firstChild:a
};
AjxImg.getParentElement=function(a){return a.parentNode
};
AjxImg.GET_IMAGE_HTML_PARAMS=["imageName","styles","attrStr","wrapInTable","disabled","classes","altText"];
AjxImg.getImageHtml=function(){var C=Dwt.getParams(arguments,AjxImg.GET_IMAGE_HTML_PARAMS);
var y=C.imageName;
var h=C.styles||"";
var k=h?" style='"+h+"'":"";
var n=C.attrStr?" "+C.attrStr:"";
var e=C.disabled;
var B=C.classes||[];
var f=C.altText;
var p=C.wrapInTable?"<table style='display:inline' cellpadding=0 cellspacing=0 border=0><tr><td align=center valign=bottom>":"";
var i="";
var w=C.wrapInTable?"</td></tr></table>":"";
if(y){var u,r=y.match(AjxImg.RE_COLOR);
if(r){y=r&&r[1];
u=r&&r[2]
}var c=AjxImg.getClassForImage(y,e);
var A=c+"Overlay";
var l=c+"Mask";
if(u&&window.AjxImgData&&AjxImgData[A]&&AjxImgData[l]){u=(u.match(/^\d$/)?ZmOrganizer.COLOR_VALUES[u]:u)||ZmOrganizer.COLOR_VALUES[ZmOrganizer.ORG_DEFAULT_COLOR];
var z=AjxImgData[A],v=AjxImgData[l];
if(f){n+=" alt='"+AjxStringUtil.encodeQuotes(f)+"'"
}if(!z[u]){var q=z.w,o=z.h;
var d=document.createElement("CANVAS");
d.width=q;
d.height=o;
var s=d.getContext("2d");
s.save();
s.clearRect(0,0,q,o);
s.save();
var t=n;
if(!t){t=Dwt.getNextId("CANVAS_IMG_");
n=" id='"+t+"'"
}else{var g=n.match(/id=[\"\']([^\"\']+)[\"\']+/);
if(g&&g.length>1){t=g[1]
}AjxDebug.println(AjxDebug.TAG_ICON,"imgId = "+t)
}var a=document.getElementById(l);
var x=document.getElementById(A);
if(!a.complete||!x.complete){AjxDebug.println(AjxDebug.TAG_ICON,"mask status = "+a.complete+" for "+t);
AjxDebug.println(AjxDebug.TAG_ICON,"overlay status = "+x.complete+" for "+t);
var j=new Image();
j.onload=function(){AjxDebug.println(AjxDebug.TAG_ICON,"mask image loaded");
var m=new Image();
m.onload=function(){AjxImg._drawCanvasImage(s,j,m,v,z,u,q,o);
AjxDebug.println(AjxDebug.TAG_ICON,"overlay image loaded");
var D=document.getElementById(t);
if(D){AjxDebug.println(AjxDebug.TAG_ICON,"element found for id = "+t);
D.src=d.toDataURL();
z[u]=d.toDataURL()
}else{AjxDebug.println(AjxDebug.TAG_ICON,"no element found for id = "+t)
}};
m.src=document.getElementById(A).src
};
j.src=document.getElementById(l).src
}else{AjxImg._drawCanvasImage(s,a,x,v,z,u,q,o);
z[u]=d.toDataURL()
}}i=["<img src='",z[u],"'"," border=0 ",AjxUtil.getClassAttr(B),k,n,">"].join("")
}else{B.push("Img"+y);
i=["<div ",AjxUtil.getClassAttr(B),k,n,">"];
if(f){i.push("<span class='ScreenReaderOnly'>",AjxStringUtil.htmlEncode(f),"</span>")
}i.push("</div>");
i=i.join("")
}}else{i=["<div",k,n,">"];
if(f){i.push("<span class='ScreenReaderOnly'>",AjxStringUtil.htmlEncode(f),"</span>")
}i.push("</div>");
i=i.join("")
}return p||w?[p,i,w].join(""):i
};
AjxImg.getImageSpanHtml=function(f,g,c,d,a){a=a||"inlineIcon";
var e=["<span style='white-space:nowrap'>","<span class='",a,"'>",AjxImg.getImageHtml(f,g,c),(d||""),"</span>","</span>"];
return e.join("")
};
AjxImg._drawCanvasImage=function(d,h,i,c,f,e,g,a){d.drawImage(h,c.l,c.t);
d.globalCompositeOperation="source-out";
d.fillStyle=e;
d.fillRect(0,0,g,a);
d.restore();
d.drawImage(i,f.l,f.t);
d.restore()
}
}if(AjxPackage.define("ajax.core.AjxColor")){AjxColor=function(d,c,a){if(arguments.length==0){return
}this.r=d;
this.g=c;
this.b=a
};
AjxColor.prototype.toString=function(){return AjxColor.color(this.r,this.g,this.b)
};
AjxColor.components=function(c){var a=AjxColor.__RE.exec(c);
return a?[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]:null
};
AjxColor.color=function(d,c,a){return["#",AjxColor.__pad(Number(Math.round(d)).toString(16),2),AjxColor.__pad(Number(Math.round(c)).toString(16),2),AjxColor.__pad(Number(Math.round(a)).toString(16),2)].join("")
};
AjxColor.lighten=function(a,d){var c=AjxColor.components(a);
return c?AjxColor.color(AjxColor.__lighten(c[0],d),AjxColor.__lighten(c[1],d),AjxColor.__lighten(c[2],d)):""
};
AjxColor.darken=function(a,d){var c=AjxColor.components(a);
return c?AjxColor.color(AjxColor.__darken(c[0],d),AjxColor.__darken(c[1],d),AjxColor.__darken(c[2],d)):""
};
AjxColor.deepen=function(a,d){var g=AjxColor.components(a);
var c=0;
for(var e=1;
e<g.length;
e++){if(g[e]>g[c]){c=e
}}for(var e=0;
e<g.length;
e++){var f=g[c]?(g[e]/g[c]):1;
g[e]=Math.floor(g[e]*f*(d||1))
}return AjxColor.color(g[0],g[1],g[2])
};
AjxColor.__RE=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i;
AjxColor.__pad=function(f,d,e){if(!e){e="0"
}var c=String(f);
for(var a=c.length;
a<d;
a++){c=e+c
}return c
};
AjxColor.__lighten=function(a,c){return Math.max(0,Math.min(255,a+(255-a)*c))
};
AjxColor.__darken=function(a,c){return Math.max(0,Math.min(255,a+(1-a)*c))
}
}if(AjxPackage.define("ajax.events.AjxEvent")){AjxEvent=function(){this.data=null
};
AjxEvent.HISTORY="HISTORY";
AjxEvent.prototype.toString=function(){return"AjxEvent"
}
}if(AjxPackage.define("ajax.events.AjxEventMgr")){AjxEventMgr=function(){this._listeners=new Object()
};
AjxEventMgr.prototype.toString=function(){return"AjxEventMgr"
};
AjxEventMgr.prototype.addListener=function(c,d,a){var e=this._listeners[c];
if(e==null){e=this._listeners[c]=new AjxVector()
}if(!e.contains(d)){if(this._notifyingListeners){e=this._listeners[c]=e.clone()
}e.add(d,a);
return true
}return false
};
AjxEventMgr.prototype.notifyListeners=function(f,h){this._notifyingListeners=true;
var k=this._listeners[f];
if(k!=null){var d=k.getArray();
var g=k.size();
var j=null;
var l=null;
for(var e=0;
e<g;
e++){l=d[e];
if(!(l&&((l instanceof AjxListener)||(typeof l=="function")))){continue
}j=l.handleEvent?l.handleEvent(h):l(h);
if(j===false){break
}}}this._notifyingListeners=false;
return j
};
AjxEventMgr.prototype.isListenerRegistered=function(a){var c=this._listeners[a];
return(c!=null&&c.size()>0)
};
AjxEventMgr.prototype.removeListener=function(a,c){var d=this._listeners[a];
if(d!=null){if(this._notifyingListeners){d=this._listeners[a]=d.clone()
}d.remove(c);
return true
}return false
};
AjxEventMgr.prototype.removeAll=function(a){var c=this._listeners[a];
if(c!=null){if(this._notifyingListeners){c=this._listeners[a]=c.clone()
}c.removeAll();
return true
}return false
};
AjxEventMgr.prototype.clearAllEvents=function(){var c=this._listeners;
for(var a in c){this.removeAll(a)
}}
}if(AjxPackage.define("ajax.util.AjxTimedAction")){AjxTimedAction=function(d,c,a){AjxCallback.call(this,d,c,a);
this._tid=-1;
this._id=-1;
this._runResult=null
};
AjxTimedAction.prototype=new AjxCallback();
AjxTimedAction.prototype.constructor=AjxTimedAction;
AjxTimedAction.MAX_TIMEOUT=20*24*60*60*1000;
AjxTimedAction.prototype.toString=function(){return"AjxTimedAction"
};
AjxTimedAction.prototype.getRunResult=function(){return this._runResult
};
AjxTimedAction._pendingActions={};
AjxTimedAction._nextActionId=1;
AjxTimedAction.scheduleAction=function(d,c){if(!d){return
}if(d._tid&&d._tid!=-1){AjxTimedAction.cancelAction(d._id)
}c=c||0;
if(c>AjxTimedAction.MAX_TIMEOUT){if(window.DBG){}c=AjxTimedAction.MAX_TIMEOUT
}var e=d._id=AjxTimedAction._nextActionId++;
AjxTimedAction._pendingActions[e]=d;
var a="AjxTimedAction._exec("+e+")";
d._tid=window.setTimeout(a,c);
return d._id
};
AjxTimedAction.cancelAction=function(c){var a=AjxTimedAction._pendingActions[c];
if(a){window.clearTimeout(a._tid);
delete AjxTimedAction._pendingActions[c];
delete a._tid
}};
AjxTimedAction._exec=function(d){try{var c=AjxTimedAction._pendingActions[d];
if(c){delete AjxTimedAction._pendingActions[d];
delete c._tid;
c._runResult=c.run()
}}catch(a){AjxException.reportScriptError(a)
}}
}if(AjxPackage.define("ajax.net.AjxInclude")){AjxInclude=function(e,g,f,d){var c=document.getElementsByTagName("head")[0];
function a(h){if(AjxEnv.isIE&&h&&!/loaded|complete/.test(h.readyState)){return
}if(h){h[AjxInclude.eventName]=null
}window.status="";
if(e.length>0){var i=e.shift();
var k=typeof i=="string"?i:i.src;
var m=k;
if(!/^((https?|ftps?):\x2f\x2f|\x2f)/.test(k)){if(g){k=g+k
}if(cacheKillerVersion){k+="?v="+cacheKillerVersion
}}else{if(d&&k.indexOf("/")!=0){k=d+AjxStringUtil.urlEncode(k)
}}var h=document.createElement("script");
var j=AjxCallback.simpleClosure(a,null,h);
if(h.attachEvent){h.attachEvent("onreadystatechange",j);
h.attachEvent("onerror",j)
}else{if(h.addEventListener){h.addEventListener("load",j,true);
h.addEventListener("error",j,true)
}}h.type="text/javascript";
h.src=k;
window.status="Loading script: "+m;
var l=null;
if(i.id){h.id=i.id;
l=document.getElementById(i.id)
}if(l){l.parentNode.replaceChild(h,l)
}else{c.appendChild(h)
}}else{if(e.length==0){h=null;
c=null;
if(f){f.run()
}}}}a(null)
}
}if(AjxPackage.define("ajax.events.AjxListener")){AjxListener=function(c,d,a){AjxCallback.call(this,c,d,a)
};
AjxListener.prototype=new AjxCallback();
AjxListener.prototype.constructor=AjxListener;
AjxListener.prototype.isAjxListener=true;
AjxListener.prototype.toString=function(){return"AjxListener"
};
AjxListener.prototype.handleEvent=function(a){return this.run(a)
}
}if(AjxPackage.define("ajax.util.AjxText")){AjxFormat=function(a){if(arguments.length==0){return
}this._pattern=a;
this._segments=[]
};
AjxFormat.prototype.toString=function(){var c=[];
c.push('pattern="',this._pattern,'"');
if(this._segments.length>0){c.push(", segments={ ");
for(var a=0;
a<this._segments.length;
a++){if(a>0){c.push(", ")
}c.push(String(this._segments[a]))
}c.push(" }")
}return c.join("")
};
AjxFormat.initialize=function(){AjxDateFormat.initialize();
AjxNumberFormat.initialize()
};
AjxFormat.prototype.format=function(a){var d=[];
for(var c=0;
c<this._segments.length;
c++){d.push(this._segments[c].format(a))
}return d.join("")
};
AjxFormat.prototype.parse=function(e){var c=this._createParseObject();
var a=0;
for(var d=0;
d<this._segments.length;
d++){var f=this._segments[d];
a=f.parse(c,e,a)
}if(a<e.length){throw new AjxFormat.ParsingException(this,null,"input too long")
}return c
};
AjxFormat.prototype.getSegments=function(){return this._segments
};
AjxFormat.prototype.toPattern=function(){return this._pattern
};
AjxFormat.prototype.clone=function(){return new this.constructor(this._pattern)
};
AjxFormat.prototype._createParseObject=function(a){throw new AjxFormat.ParsingException(this,null,"not implemented")
};
AjxFormat._zeroPad=function(f,g,d,h){f=typeof f=="string"?f:String(f);
if(f.length>=g){return f
}d=d||"0";
var c=[];
for(var e=f.length;
e<g;
e++){c.push(d)
}c[h?"unshift":"push"](f);
return c.join("")
};
AjxFormat.FormatException=function(c,a){this._format=c;
this._message=a
};
AjxFormat.FormatException.prototype.toString=function(){return this._message
};
AjxFormat.FormattingException=function(d,c,a){AjxFormat.FormatException.call(this,d,a);
this._segment=c
};
AjxFormat.FormattingException.prototype=new AjxFormat.FormatException;
AjxFormat.FormattingException.prototype.constructor=AjxFormat.FormattingException;
AjxFormat.ParsingException=function(d,c,a){AjxFormat.FormatException.call(this,d,a);
this._segment=c
};
AjxFormat.ParsingException.prototype=new AjxFormat.FormatException;
AjxFormat.ParsingException.prototype.constructor=AjxFormat.ParsingException;
AjxFormat.Segment=function(c,a){if(arguments.length==0){return
}this._parent=c;
this._s=a
};
AjxFormat.Segment.prototype.toString=function(){return'segment: "'+this._s+'"'
};
AjxFormat.Segment.prototype.format=function(a){return this._s
};
AjxFormat.Segment.prototype.parse=function(d,c,a){throw new AjxFormat.ParsingException(this._parent,this,"not implemented")
};
AjxFormat.Segment.prototype.getFormat=function(){return this._parent
};
AjxFormat.Segment.prototype.toSubPattern=function(){return this._s
};
AjxFormat.Segment.prototype._getFixedLength=function(){var a;
if(this._index+1<this._parent._segments.length){var c=this._parent._segments[this._index+1];
if(!(c instanceof AjxFormat.TextSegment)){a=this._s.length
}}return a
};
AjxFormat.Segment._parseLiteral=function(e,d,a){if(d.length-a<e.length){throw new AjxFormat.ParsingException(this._parent,this,"input too short")
}for(var c=0;
c<e.length;
c++){if(e.charAt(c)!=d.charAt(a+c)){throw new AjxFormat.ParsingException(this._parent,this,"input doesn't match")
}}return a+e.length
};
AjxFormat.Segment._parseLiterals=function(c,h,m,a,p,j){for(var g=0;
g<a.length;
g++){try{var n=a[g];
var d=AjxFormat.Segment._parseLiteral(n,p,j);
if(h){var l=c||window;
if(typeof h=="function"){h.call(l,g+m)
}else{l[h]=g+m
}}return d
}catch(k){}}return -1
};
AjxFormat.Segment._parseInt=function(c,e,p,q,g,a,m){var h=a||q.length-g;
var l=g;
for(var d=0;
d<h;
d++){if(!q.charAt(g++).match(/\d/)){g--;
break
}}var k=g;
if(l==k){throw new AjxFormat.ParsingException(this._parent,this,"number not present")
}if(a&&k-l!=a){throw new AjxFormat.ParsingException(this._parent,this,"number too short")
}var n=parseInt(q.substring(l,k),m||10);
if(e){var j=c||window;
if(typeof e=="function"){e.call(j,n+p)
}else{j[e]=n+p
}}return k
};
AjxDateFormat=function(h){if(arguments.length==0){return
}AjxFormat.call(this,h);
if(h==null){return
}if(typeof h=="number"){switch(h){case AjxDateFormat.SHORT:h=I18nMsg.formatDateShort;
break;
case AjxDateFormat.MEDIUM:h=I18nMsg.formatDateMedium;
break;
case AjxDateFormat.LONG:h=I18nMsg.formatDateLong;
break;
case AjxDateFormat.FULL:h=I18nMsg.formatDateFull;
break;
case AjxDateFormat.NUMBER:h=I18nMsg.formatDateNumber;
break
}}for(var e=0;
e<h.length;
e++){var k=h.charAt(e);
if(k=="'"){var d=e+1;
for(e++;
e<h.length;
e++){var k=h.charAt(e);
if(k=="'"){if(e+1<h.length&&h.charAt(e+1)=="'"){h=h.substr(0,e)+h.substr(e+1)
}else{break
}}}var a=e;
var g=new AjxFormat.TextSegment(this,h.substring(d,a));
this._segments.push(g);
continue
}var d=e;
while(e<h.length){k=h.charAt(e);
if(AjxDateFormat._META_CHARS.indexOf(k)!=-1||k=="'"){break
}e++
}var a=e;
if(d!=a){var g=new AjxFormat.TextSegment(this,h.substring(d,a));
this._segments.push(g);
e--;
continue
}var d=e;
while(++e<h.length){if(h.charAt(e)!=k){break
}}var a=e--;
var f=a-d;
var j=h.substr(d,f);
var g=null;
switch(k){case"G":g=new AjxDateFormat.EraSegment(this,j);
break;
case"y":g=new AjxDateFormat.YearSegment(this,j);
break;
case"M":g=new AjxDateFormat.MonthSegment(this,j);
break;
case"w":g=new AjxDateFormat.WeekSegment(this,j);
break;
case"W":g=new AjxDateFormat.WeekSegment(this,j);
break;
case"D":g=new AjxDateFormat.DaySegment(this,j);
break;
case"d":g=new AjxDateFormat.DaySegment(this,j);
break;
case"F":g=new AjxDateFormat.WeekdaySegment(this,j);
break;
case"E":g=new AjxDateFormat.WeekdaySegment(this,j);
break;
case"a":g=new AjxDateFormat.AmPmSegment(this,j);
break;
case"H":g=new AjxDateFormat.HourSegment(this,j);
break;
case"k":g=new AjxDateFormat.HourSegment(this,j);
break;
case"K":g=new AjxDateFormat.HourSegment(this,j);
break;
case"h":g=new AjxDateFormat.HourSegment(this,j);
break;
case"m":g=new AjxDateFormat.MinuteSegment(this,j);
break;
case"s":g=new AjxDateFormat.SecondSegment(this,j);
break;
case"S":g=new AjxDateFormat.SecondSegment(this,j);
break;
case"z":g=new AjxDateFormat.TimezoneSegment(this,j);
break;
case"Z":g=new AjxDateFormat.TimezoneSegment(this,j);
break
}if(g!=null){g._index=this._segments.length;
this._segments.push(g)
}}};
AjxDateFormat.prototype=new AjxFormat;
AjxDateFormat.prototype.constructor=AjxDateFormat;
AjxDateFormat.prototype.toString=function(){return"[AjxDateFormat: "+AjxFormat.prototype.toString.call(this)+"]"
};
AjxDateFormat.SHORT=0;
AjxDateFormat.MEDIUM=1;
AjxDateFormat.LONG=2;
AjxDateFormat.FULL=3;
AjxDateFormat.DEFAULT=AjxDateFormat.MEDIUM;
AjxDateFormat._META_CHARS="GyMwWDdFEaHkKhmsSzZ";
AjxDateFormat.NUMBER=4;
AjxDateFormat.getDateInstance=function(a){a=a!=null?a:AjxDateFormat.DEFAULT;
if(!AjxDateFormat._DATE_FORMATTERS[a]){AjxDateFormat._DATE_FORMATTERS[a]=new AjxDateFormat(AjxDateFormat._dateFormats[a])
}return AjxDateFormat._DATE_FORMATTERS[a]
};
AjxDateFormat.getTimeInstance=function(a){a=a!=null?a:AjxDateFormat.DEFAULT;
if(!AjxDateFormat._TIME_FORMATTERS[a]){AjxDateFormat._TIME_FORMATTERS[a]=new AjxDateFormat(AjxDateFormat._timeFormats[a])
}return AjxDateFormat._TIME_FORMATTERS[a]
};
AjxDateFormat.getDateTimeInstance=function(a,c){a=a!=null?a:AjxDateFormat.DEFAULT;
c=c!=null?c:AjxDateFormat.DEFAULT;
var e=a*10+c;
if(!AjxDateFormat._DATETIME_FORMATTERS[e]){var f=I18nMsg.formatDateTime;
var g=[AjxDateFormat._dateFormats[a],AjxDateFormat._timeFormats[c]];
var d=AjxMessageFormat.format(f,g);
AjxDateFormat._DATETIME_FORMATTERS[e]=new AjxDateFormat(d)
}return AjxDateFormat._DATETIME_FORMATTERS[e]
};
AjxDateFormat.format=function(c,a){return new AjxDateFormat(c).format(a)
};
AjxDateFormat.parse=function(c,a){return new AjxDateFormat(c).parse(a)
};
AjxDateFormat.initialize=function(){AjxDateFormat._dateFormats=[I18nMsg.formatDateShort,I18nMsg.formatDateMedium,I18nMsg.formatDateLong,I18nMsg.formatDateFull,I18nMsg.formatDateNumber];
AjxDateFormat._timeFormats=[I18nMsg.formatTimeShort,I18nMsg.formatTimeMedium,I18nMsg.formatTimeLong,I18nMsg.formatTimeFull];
AjxDateFormat._timeParsers=[];
for(var c=1,a;
a=I18nMsg["parseTime"+c];
c++){AjxDateFormat._timeParsers.push(new RegExp(a,"i"))
}AjxDateFormat._DATE_FORMATTERS={};
AjxDateFormat._TIME_FORMATTERS={};
AjxDateFormat._DATETIME_FORMATTERS={};
AjxDateFormat.MonthSegment.initialize();
AjxDateFormat.WeekdaySegment.initialize()
};
AjxDateFormat.parseTime=function(h){for(var g=0;
g<AjxDateFormat._timeParsers.length;
g++){var a=AjxDateFormat._timeParsers[g].exec(h);
if(a){var d=parseInt(a[1],10)||0;
var f=parseInt(a[2],10)||0;
var e=a[3];
if(e){var c=I18nMsg.parseTimePMChars;
if(d==12){d=0
}if(c.indexOf(e)!=-1){d+=12
}}if(d<24&&f<60){date=new Date();
date.setHours(d);
date.setMinutes(f);
date.setSeconds(0);
return date
}}}};
AjxDateFormat.prototype.parse=function(f){var d=null;
try{d=AjxFormat.prototype.parse.call(this,f);
var c=new Date(0,0,2,0,0,0,0);
if(d.year!=null){c.setFullYear(d.year)
}if(d.month!=null){c.setMonth(d.month)
}c.setDate(1);
if(d.dayofmonth!=null){c.setDate(d.dayofmonth)
}else{if(d.dayofyear!=null){c.setMonth(0,d.dayofyear)
}}if(d.hours!=null){c.setHours(d.hours)
}if(d.minutes!=null){c.setMinutes(d.minutes)
}if(d.seconds!=null){c.setSeconds(d.seconds)
}if(d.milliseconds!=null){c.setMilliseconds(d.milliseconds)
}if(d.ampm!=null){var a=c.getHours();
if(a==12&&d.ampm==0){a=0
}else{if(a!=12&&d.ampm==1){a+=12
}}c.setHours(a)
}if(d.timezone!=null){c.setMinutes(c.getMinutes()-d.timezone)
}if(isNaN(c.getTime())){return null
}d=c
}catch(g){}return d
};
AjxDateFormat.prototype._createParseObject=function(){return{year:null,month:null,dayofmonth:null,dayofyear:null,hours:null,minutes:null,seconds:null,milliseconds:null,ampm:null,era:null,timezone:null}
};
AjxFormat.TextSegment=function(c,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,c,a)
};
AjxFormat.TextSegment.prototype=new AjxFormat.Segment;
AjxFormat.TextSegment.prototype.constructor=AjxFormat.TextSegment;
AjxFormat.TextSegment.prototype.toString=function(){return'text: "'+this._s+'"'
};
AjxFormat.TextSegment.prototype.parse=function(d,c,a){return AjxFormat.Segment._parseLiteral(this._s,c,a)
};
AjxDateFormat.DateSegment=function(c,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,c,a)
};
AjxDateFormat.DateSegment.prototype=new AjxFormat.Segment;
AjxDateFormat.DateSegment.prototype.constructor=AjxDateFormat.DateSegment;
AjxDateFormat.EraSegment=function(c,a){if(arguments.length==0){return
}AjxDateFormat.DateSegment.call(this,c,a)
};
AjxDateFormat.EraSegment.prototype=new AjxDateFormat.DateSegment;
AjxDateFormat.EraSegment.prototype.constructor=AjxDateFormat.EraSegment;
AjxDateFormat.EraSegment.prototype.toString=function(){return'dateEra: "'+this._s+'"'
};
AjxDateFormat.EraSegment.prototype.format=function(a){return I18nMsg.eraAD
};
AjxDateFormat.YearSegment=function(c,a){if(arguments.length==0){return
}AjxDateFormat.DateSegment.call(this,c,a)
};
AjxDateFormat.YearSegment.prototype=new AjxDateFormat.DateSegment;
AjxDateFormat.YearSegment.prototype.constructor=AjxDateFormat.YearSegment;
AjxDateFormat.YearSegment.prototype.toString=function(){return'dateYear: "'+this._s+'"'
};
AjxDateFormat.YearSegment.prototype.format=function(a){var c=String(a.getFullYear());
return this._s.length<4?c.substr(c.length-2):AjxFormat._zeroPad(c,this._s.length)
};
AjxDateFormat.YearSegment.prototype.parse=function(d,j,f){var a=this._getFixedLength();
var c=AjxFormat.Segment._parseInt(d,"year",0,j,f,a);
if(c-f==2){if(!AjxDateFormat._2digitStartYear){AjxDateFormat._2digitStartYear=parseInt(AjxMsg.dateParsing2DigitStartYear)
}var h=AjxDateFormat._2digitStartYear;
var i=parseInt(j.substr(f,2),10);
var e=(Math.floor(h/100)+(i<(h%100)?1:0))*100;
var g=e+i;
d.year=g
}return c
};
AjxDateFormat.MonthSegment=function(c,a){if(arguments.length==0){return
}AjxDateFormat.DateSegment.call(this,c,a)
};
AjxDateFormat.MonthSegment.prototype=new AjxDateFormat.DateSegment;
AjxDateFormat.MonthSegment.prototype.constructor=AjxDateFormat.MonthSegment;
AjxDateFormat.MonthSegment.prototype.toString=function(){return'dateMonth: "'+this._s+'"'
};
AjxDateFormat.MonthSegment.initialize=function(){AjxDateFormat.MonthSegment.MONTHS={};
AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.SHORT]=[AjxMsg.monthJanShort,AjxMsg.monthFebShort,AjxMsg.monthMarShort,AjxMsg.monthAprShort,AjxMsg.monthMayShort,AjxMsg.monthJunShort,AjxMsg.monthJulShort,AjxMsg.monthAugShort,AjxMsg.monthSepShort,AjxMsg.monthOctShort,AjxMsg.monthNovShort,AjxMsg.monthDecShort];
AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.MEDIUM]=[I18nMsg.monthJanMedium,I18nMsg.monthFebMedium,I18nMsg.monthMarMedium,I18nMsg.monthAprMedium,I18nMsg.monthMayMedium,I18nMsg.monthJunMedium,I18nMsg.monthJulMedium,I18nMsg.monthAugMedium,I18nMsg.monthSepMedium,I18nMsg.monthOctMedium,I18nMsg.monthNovMedium,I18nMsg.monthDecMedium];
AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.LONG]=[I18nMsg.monthJanLong,I18nMsg.monthFebLong,I18nMsg.monthMarLong,I18nMsg.monthAprLong,I18nMsg.monthMayLong,I18nMsg.monthJunLong,I18nMsg.monthJulLong,I18nMsg.monthAugLong,I18nMsg.monthSepLong,I18nMsg.monthOctLong,I18nMsg.monthNovLong,I18nMsg.monthDecLong]
};
AjxDateFormat.MonthSegment.prototype.format=function(a){var c=a.getMonth();
switch(this._s.length){case 1:return String(c+1);
case 2:return AjxFormat._zeroPad(c+1,2);
case 3:return AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.MEDIUM][c];
case 5:return AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.SHORT][c]
}return AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.LONG][c]
};
AjxDateFormat.MonthSegment.prototype.parse=function(d,f,c){var a;
switch(this._s.length){case 3:a=AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.MEDIUM];
case 4:a=a||AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.LONG];
case 5:a=a||AjxDateFormat.MonthSegment.MONTHS[AjxDateFormat.SHORT];
var e=AjxFormat.Segment._parseLiterals(d,"month",0,a,f,c);
if(e==-1){throw new AjxFormat.ParsingException(this._parent,this,"no match")
}return e
}var g=this._getFixedLength();
return AjxFormat.Segment._parseInt(d,"month",-1,f,c,g)
};
AjxDateFormat.WeekSegment=function(c,a){if(arguments.length==0){return
}AjxDateFormat.DateSegment.call(this,c,a)
};
AjxDateFormat.WeekSegment.prototype=new AjxDateFormat.DateSegment;
AjxDateFormat.WeekSegment.prototype.constructor=AjxDateFormat.WeekSegment;
AjxDateFormat.WeekSegment.prototype.toString=function(){return'weekMonth: "'+this._s+'"'
};
AjxDateFormat.WeekSegment.prototype.format=function(c){var e=c.getYear();
var g=c.getMonth();
var a=c.getDate();
var h=/w/.test(this._s);
var f=new Date(e,h?0:g,1);
var d=0;
while(true){d++;
if(f.getMonth()>g||(f.getMonth()==g&&f.getDate()>=a)){break
}f.setDate(f.getDate()+7)
}return AjxFormat._zeroPad(d,this._s.length)
};
AjxDateFormat.WeekSegment.prototype.parse=function(c,d,a){var e=this._getFixedLength();
return AjxFormat.Segment._parseInt(null,null,0,d,a,e)
};
AjxDateFormat.DaySegment=function(c,a){if(arguments.length==0){return
}AjxDateFormat.DateSegment.call(this,c,a)
};
AjxDateFormat.DaySegment.prototype=new AjxDateFormat.DateSegment;
AjxDateFormat.DaySegment.prototype.constructor=AjxDateFormat.DaySegment;
AjxDateFormat.DaySegment.prototype.toString=function(){return'dateDay: "'+this._s+'"'
};
AjxDateFormat.DaySegment.prototype.format=function(c){var f=c.getMonth();
var a=c.getDate();
if(/D/.test(this._s)&&f>0){var d=c.getYear();
do{var e=new Date(d,f,1);
e.setDate(0);
a+=e.getDate();
f--
}while(f>0)
}return AjxFormat._zeroPad(a,this._s.length)
};
AjxDateFormat.DaySegment.prototype.parse=function(c,f,a){var g=this._getFixedLength();
var e=function(h){if(h>AjxDateUtil.MAX_DAYS_PER_MONTH){throw new AjxFormat.ParsingException(this._parent,this,"number too long")
}else{c.dayofmonth=h
}};
var d=/D/.test(this._s)?"dayofyear":e;
return AjxFormat.Segment._parseInt(c,d,0,f,a,g)
};
AjxDateFormat.WeekdaySegment=function(c,a){if(arguments.length==0){return
}AjxDateFormat.DateSegment.call(this,c,a)
};
AjxDateFormat.WeekdaySegment.prototype=new AjxDateFormat.DateSegment;
AjxDateFormat.WeekdaySegment.prototype.constructor=AjxDateFormat.WeekdaySegment;
AjxDateFormat.DaySegment.prototype.toString=function(){return'dateDay: "'+this._s+'"'
};
AjxDateFormat.WeekdaySegment.initialize=function(){AjxDateFormat.WeekdaySegment.WEEKDAYS={};
AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.SHORT]=[AjxMsg.weekdaySunShort,AjxMsg.weekdayMonShort,AjxMsg.weekdayTueShort,AjxMsg.weekdayWedShort,AjxMsg.weekdayThuShort,AjxMsg.weekdayFriShort,AjxMsg.weekdaySatShort];
AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.MEDIUM]=[I18nMsg.weekdaySunMedium,I18nMsg.weekdayMonMedium,I18nMsg.weekdayTueMedium,I18nMsg.weekdayWedMedium,I18nMsg.weekdayThuMedium,I18nMsg.weekdayFriMedium,I18nMsg.weekdaySatMedium];
AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.LONG]=[I18nMsg.weekdaySunLong,I18nMsg.weekdayMonLong,I18nMsg.weekdayTueLong,I18nMsg.weekdayWedLong,I18nMsg.weekdayThuLong,I18nMsg.weekdayFriLong,I18nMsg.weekdaySatLong]
};
AjxDateFormat.WeekdaySegment.prototype.format=function(a){var d=a.getDay();
if(/E/.test(this._s)){var c;
switch(this._s.length){case 4:c=AjxDateFormat.LONG;
break;
case 5:c=AjxDateFormat.SHORT;
break;
default:c=AjxDateFormat.MEDIUM
}return AjxDateFormat.WeekdaySegment.WEEKDAYS[c][d]
}return AjxFormat._zeroPad(d,this._s.length)
};
AjxDateFormat.WeekdaySegment.prototype.parse=function(d,f,c){var a;
switch(this._s.length){case 3:a=AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.MEDIUM];
case 4:a=a||AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.LONG];
case 5:a=a||AjxDateFormat.WeekdaySegment.WEEKDAYS[AjxDateFormat.SHORT];
var e=AjxFormat.Segment._parseLiterals(null,null,0,a,f,c);
if(e==-1){throw new AjxFormat.ParsingException(this._parent,this,"no match")
}return e
}var g=this._getFixedLength();
return AjxFormat.Segment._parseInt(null,null,0,f,c,g)
};
AjxDateFormat.TimeSegment=function(c,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,c,a)
};
AjxDateFormat.TimeSegment.prototype=new AjxFormat.Segment;
AjxDateFormat.TimeSegment.prototype.constructor=AjxDateFormat.TimeSegment;
AjxDateFormat.HourSegment=function(c,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,c,a)
};
AjxDateFormat.HourSegment.prototype=new AjxDateFormat.TimeSegment;
AjxDateFormat.HourSegment.prototype.constructor=AjxDateFormat.HourSegment;
AjxDateFormat.HourSegment.prototype.toString=function(){return'timeHour: "'+this._s+'"'
};
AjxDateFormat.HourSegment.prototype.format=function(c){var a=c.getHours();
if(a>12&&/[hK]/.test(this._s)){a-=12
}else{if(a==0&&/[h]/.test(this._s)){a=12
}else{if(a===12&&/K/.test(this._s)){a=0
}else{if(a===0&&/k/.test(this._s)){a=24
}}}}return AjxFormat._zeroPad(a,this._s.length)
};
AjxDateFormat.HourSegment.prototype.parse=function(c,d,a){var e=this._getFixedLength();
return AjxFormat.Segment._parseInt(c,"hours",0,d,a,e)
};
AjxDateFormat.MinuteSegment=function(c,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,c,a)
};
AjxDateFormat.MinuteSegment.prototype=new AjxDateFormat.TimeSegment;
AjxDateFormat.MinuteSegment.prototype.constructor=AjxDateFormat.MinuteSegment;
AjxDateFormat.MinuteSegment.prototype.toString=function(){return'timeMinute: "'+this._s+'"'
};
AjxDateFormat.MinuteSegment.prototype.format=function(a){var c=a.getMinutes();
return AjxFormat._zeroPad(c,this._s.length)
};
AjxDateFormat.MinuteSegment.prototype.parse=function(c,d,a){var e=this._getFixedLength();
return AjxFormat.Segment._parseInt(c,"minutes",0,d,a,e)
};
AjxDateFormat.SecondSegment=function(c,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,c,a)
};
AjxDateFormat.SecondSegment.prototype=new AjxDateFormat.TimeSegment;
AjxDateFormat.SecondSegment.prototype.constructor=AjxDateFormat.SecondSegment;
AjxDateFormat.SecondSegment.prototype.toString=function(){return'timeSecond: "'+this._s+'"'
};
AjxDateFormat.SecondSegment.prototype.format=function(a){var c=/s/.test(this._s)?a.getSeconds():a.getMilliseconds();
return AjxFormat._zeroPad(c,this._s.length)
};
AjxDateFormat.SecondSegment.prototype.parse=function(d,f,c){var a=/s/.test(this._s);
var e=a?"seconds":"milliseconds";
var g=a?this._getFixedLength():0;
return AjxFormat.Segment._parseInt(d,e,0,f,c,g)
};
AjxDateFormat.AmPmSegment=function(c,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,c,a)
};
AjxDateFormat.AmPmSegment.prototype=new AjxDateFormat.TimeSegment;
AjxDateFormat.AmPmSegment.prototype.constructor=AjxDateFormat.AmPmSegment;
AjxDateFormat.AmPmSegment.prototype.toString=function(){return'timeAmPm: "'+this._s+'"'
};
AjxDateFormat.AmPmSegment.prototype.format=function(c){var a=c.getHours();
return a<12?I18nMsg.periodAm:I18nMsg.periodPm
};
AjxDateFormat.AmPmSegment.prototype.parse=function(c,e,a){var f=[I18nMsg.periodAm.toLowerCase(),I18nMsg.periodPm.toLowerCase(),I18nMsg.periodAm.toUpperCase(),I18nMsg.periodPm.toUpperCase()];
var d=AjxFormat.Segment._parseLiterals(c,"ampm",0,f,e,a);
if(d==-1){throw new AjxFormat.ParsingException(this._parent,this,"no match")
}c.ampm=c.ampm%2;
return d
};
AjxDateFormat.TimezoneSegment=function(c,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,c,a)
};
AjxDateFormat.TimezoneSegment.prototype=new AjxDateFormat.TimeSegment;
AjxDateFormat.TimezoneSegment.prototype.constructor=AjxDateFormat.TimezoneSegment;
AjxDateFormat.TimezoneSegment.prototype.toString=function(){return'timeTimezone: "'+this._s+'"'
};
AjxDateFormat.TimezoneSegment.prototype.format=function(c){var a=c.timezone||AjxTimezone.DEFAULT;
if(/Z/.test(this._s)){return AjxTimezone.getShortName(a)
}return this._s.length<4?AjxTimezone.getMediumName(a):AjxTimezone.getLongName(a)
};
AjxMessageFormat=function(h){if(arguments.length==0){return
}AjxFormat.call(this,h);
if(h==null){return
}for(var d=0;
d<h.length;
d++){var j=h.charAt(d);
if(j=="'"){if(d+1<h.length&&h.charAt(d+1)=="'"){var e=new AjxFormat.TextSegment(this,"'");
this._segments.push(e);
d++;
continue
}var k=d+1;
for(d++;
d<h.length;
d++){var j=h.charAt(d);
if(j=="'"){if(d+1<h.length&&h.charAt(d+1)=="'"){h=h.substr(0,d)+h.substr(d+1)
}else{break
}}}var g=d;
var e=new AjxFormat.TextSegment(this,h.substring(k,g));
this._segments.push(e);
continue
}var k=d;
while(d<h.length){j=h.charAt(d);
if(j=="{"||j=="'"){break
}d++
}var g=d;
if(k!=g){var e=new AjxFormat.TextSegment(this,h.substring(k,g));
this._segments.push(e);
d--;
continue
}var k=d+1;
var a=0;
while(++d<h.length){var j=h.charAt(d);
if(j=="{"){a++
}else{if(j=="}"){if(a==0){break
}a--
}}}var g=d;
var f=g-k;
var l=h.substr(k,f);
var e=new AjxMessageFormat.MessageSegment(this,l);
if(e!=null){this._segments.push(e)
}}};
AjxMessageFormat.prototype=new AjxFormat;
AjxMessageFormat.prototype.constructor=AjxMessageFormat;
AjxMessageFormat.prototype.toString=function(){return"[AjxMessageFormat: "+AjxFormat.prototype.toString.call(this)+"]"
};
AjxMessageFormat.format=function(a,c){return new AjxMessageFormat(a).format(c)
};
AjxMessageFormat.prototype.format=function(a){if(!(a instanceof Array)){a=[a]
}return AjxFormat.prototype.format.call(this,a)
};
AjxMessageFormat.prototype.getFormats=function(){var a=[];
for(var c=0;
c<this._segments.length;
c++){var d=this._segments[c];
if(d instanceof AjxMessageFormat.MessageSegment){a.push(d.getSegmentFormat())
}}return a
};
AjxMessageFormat.prototype.getFormatsByArgumentIndex=function(){var a=[];
for(var c=0;
c<this._segments.length;
c++){var d=this._segments[c];
if(d instanceof AjxMessageFormat.MessageSegment){a[d.getIndex()]=d.getSegmentFormat()
}}return a
};
AjxMessageFormat.MessageSegment=function(e,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,e,a);
var d=AjxMessageFormat.MessageSegment._split(a,",");
this._index=Number(d[0]);
this._type=d[1]||"string";
this._style=d[2];
if(this._type=="list"){this._isList=true;
this._type=d[2]||"string";
this._style=d[3]
}switch(this._type){case"number":switch(this._style){case"integer":this._formatter=AjxNumberFormat.getIntegerInstance();
break;
case"currency":this._formatter=AjxNumberFormat.getCurrencyInstance();
break;
case"percent":this._formatter=AjxNumberFormat.getPercentInstance();
break;
default:this._formatter=this._style==null?AjxNumberFormat.getInstance():new AjxNumberFormat(this._style)
}break;
case"date":case"time":var c=this._type=="date"?AjxDateFormat.getDateInstance:AjxDateFormat.getTimeInstance;
switch(this._style){case"short":this._formatter=c(AjxDateFormat.SHORT);
break;
case"medium":this._formatter=c(AjxDateFormat.MEDIUM);
break;
case"long":this._formatter=c(AjxDateFormat.LONG);
break;
case"full":this._formatter=c(AjxDateFormat.FULL);
break;
default:this._formatter=this._style==null?c(AjxDateFormat.DEFAULT):new AjxDateFormat(this._style)
}break;
case"choice":this._formatter=new AjxChoiceFormat(this._style);
break
}if(this._isList){this._formatter=new AjxListFormat(this._formatter)
}};
AjxMessageFormat.MessageSegment.prototype=new AjxFormat.Segment;
AjxMessageFormat.MessageSegment.prototype.constructor=AjxMessageFormat.MessageSegment;
AjxMessageFormat.MessageSegment.prototype.toString=function(){var c=['message: "',this._s,'", index: ',this._index];
if(this._isList){c.push(", list: ",this._isList)
}if(this._type){c.push(", type: ",this._type)
}if(this._style){c.push(", style: ",this._style)
}if(this._formatter){c.push(", formatter: ",this._formatter.toString())
}return c.join("")
};
AjxMessageFormat.MessageSegment.prototype._isList=false;
AjxMessageFormat.MessageSegment.prototype.format=function(c){var a=c[this._index];
if(this._formatter instanceof AjxChoiceFormat){return this._formatter.format(c,this._index)
}return this._formatter?this._formatter.format(a):String(a)
};
AjxMessageFormat.MessageSegment.prototype.getIndex=function(){return this._index
};
AjxMessageFormat.MessageSegment.prototype.getType=function(){return this._type
};
AjxMessageFormat.MessageSegment.prototype.getStyle=function(){return this._style
};
AjxMessageFormat.MessageSegment.prototype.getSegmentFormat=function(){return this._formatter
};
AjxMessageFormat.MessageSegment._split=function(f,a){var g=[];
var e=0;
var d;
var h=0;
for(d=0;
d<f.length;
d++){var i=f.charAt(d);
if(i=="{"){h++
}else{if(i=="}"){h--
}else{if(i==a&&h==0){g.push(f.substring(e,d));
e=d+1
}}}}if(d>e){g.push(f.substring(e,d))
}return g
};
AjxNumberFormat=function(r,s){if(arguments.length==0){return
}AjxFormat.call(this,r);
if(!r){return
}var c=r.split(/;/);
var r=c[0];
var p=0;
var n=this.__parseStatic(r,p);
p=n.offset;
var g=n.text!="";
if(g){this._segments.push(new AjxFormat.TextSegment(this,n.text))
}var h=p;
while(p<r.length&&AjxNumberFormat._META_CHARS.indexOf(r.charAt(p))!=-1){p++
}var f=p;
var a=r.substring(h,f);
var t=a.indexOf("E");
var l=t!=-1?a.substring(t+1):null;
if(l){a=a.substring(0,t);
this._showExponent=true
}var m=a.indexOf(I18nMsg.numberSeparatorDecimal!=""?I18nMsg.numberSeparatorDecimal:".");
var u=m!=-1?a.substring(0,m):a;
if(u){var v=u.lastIndexOf(I18nMsg.numberSeparatorGrouping!=""?I18nMsg.numberSeparatorGrouping:",");
if(v!=-1){this._groupingOffset=u.length-v-1
}u=u.replace(/[^#0]/g,"");
var k=u.indexOf("0");
if(k!=-1){this._minIntDigits=u.length-k
}this._maxIntDigits=u.length
}var q=m!=-1?a.substring(m+1):null;
if(q){var k=q.lastIndexOf("0");
if(k!=-1){this._minFracDigits=k+1
}this._maxFracDigits=q.replace(/[^#0]/g,"").length
}this._segments.push(new AjxNumberFormat.NumberSegment(this,a));
var n=this.__parseStatic(r,p);
p=n.offset;
if(n.text!=""){this._segments.push(new AjxFormat.TextSegment(this,n.text))
}if(s){return
}if(c.length>1){var r=c[1];
this._negativeFormatter=new AjxNumberFormat(r,true)
}else{var o=new AjxNumberFormat("");
o._segments=o._segments.concat(this._segments);
var j=g?1:0;
var d=new AjxFormat.TextSegment(o,I18nMsg.numberSignMinus);
o._segments.splice(j,0,d);
this._negativeFormatter=o
}};
AjxNumberFormat.prototype=new AjxFormat;
AjxNumberFormat.prototype.constructor=AjxNumberFormat;
AjxNumberFormat.prototype.toString=function(){var a=["[AjxNumberFormat: ","formatter=",AjxFormat.prototype.toString.call(this)];
if(this._negativeFormatter){a.push(", negativeFormatter=",this._negativeFormatter.toString())
}a.push("]");
return a.join("")
};
AjxNumberFormat._NUMBER="number";
AjxNumberFormat._INTEGER="integer";
AjxNumberFormat._CURRENCY="currency";
AjxNumberFormat._PERCENT="percent";
AjxNumberFormat._META_CHARS="0#.,E";
AjxNumberFormat.prototype._groupingOffset=Number.MAX_VALUE;
AjxNumberFormat.prototype._minIntDigits=1;
AjxNumberFormat.prototype._isCurrency=false;
AjxNumberFormat.prototype._isPercent=false;
AjxNumberFormat.prototype._isPerMille=false;
AjxNumberFormat.prototype._showExponent=false;
AjxNumberFormat.getInstance=function(){if(!AjxNumberFormat._FORMATTERS[AjxNumberFormat._NUMBER]){AjxNumberFormat._FORMATTERS[AjxNumberFormat._NUMBER]=new AjxNumberFormat(I18nMsg.formatNumber)
}return AjxNumberFormat._FORMATTERS[AjxNumberFormat._NUMBER]
};
AjxNumberFormat.getNumberInstance=AjxNumberFormat.getInstance;
AjxNumberFormat.getCurrencyInstance=function(){if(!AjxNumberFormat._FORMATTERS[AjxNumberFormat._CURRENCY]){AjxNumberFormat._FORMATTERS[AjxNumberFormat._CURRENCY]=new AjxNumberFormat(I18nMsg.formatNumberCurrency)
}return AjxNumberFormat._FORMATTERS[AjxNumberFormat._CURRENCY]
};
AjxNumberFormat.getIntegerInstance=function(){if(!AjxNumberFormat._FORMATTERS[AjxNumberFormat._INTEGER]){AjxNumberFormat._FORMATTERS[AjxNumberFormat._INTEGER]=new AjxNumberFormat(I18nMsg.formatNumberInteger)
}return AjxNumberFormat._FORMATTERS[AjxNumberFormat._INTEGER]
};
AjxNumberFormat.getPercentInstance=function(){if(!AjxNumberFormat._FORMATTERS[AjxNumberFormat._PERCENT]){AjxNumberFormat._FORMATTERS[AjxNumberFormat._PERCENT]=new AjxNumberFormat(I18nMsg.formatNumberPercent)
}return AjxNumberFormat._FORMATTERS[AjxNumberFormat._PERCENT]
};
AjxNumberFormat.format=function(c,a){return new AjxNumberFormat(c).format(a)
};
AjxNumberFormat.initialize=function(){AjxNumberFormat._FORMATTERS={}
};
AjxNumberFormat.prototype.format=function(a){if(a<0&&this._negativeFormatter){return this._negativeFormatter.format(a)
}return AjxFormat.prototype.format.call(this,a)
};
AjxNumberFormat.prototype.__parseStatic=function(e,d){var f=[];
while(d<e.length){var h=e.charAt(d++);
if(AjxNumberFormat._META_CHARS.indexOf(h)!=-1){d--;
break
}switch(h){case"'":var g=d;
while(d<e.length&&e.charAt(d++)!="'"){}var a=d;
h=a-g==0?"'":e.substring(g,a);
break;
case"%":h=I18nMsg.numberSignPercent;
this._isPercent=true;
break;
case"\u2030":h=I18nMsg.numberSignPerMill;
this._isPerMille=true;
break;
case"\u00a4":h=e.charAt(d)=="\u00a4"?I18nMsg.currencyCode:I18nMsg.currencySymbol;
this._isCurrency=true;
break
}f.push(h)
}return{text:f.join(""),offset:d}
};
AjxNumberFormat.NumberSegment=function(c,a){if(arguments.length==0){return
}AjxFormat.Segment.call(this,c,a)
};
AjxNumberFormat.NumberSegment.prototype=new AjxFormat.Segment;
AjxNumberFormat.NumberSegment.prototype.constructor=AjxNumberFormat.NumberSegment;
AjxNumberFormat.NumberSegment.prototype.toString=function(){return'number: "'+this._s+'"'
};
AjxNumberFormat.NumberSegment.prototype.format=function(c){if(isNaN(c)){return I18nMsg.numberNaN
}if(c===Number.NEGATIVE_INFINITY||c===Number.POSITIVE_INFINITY){return I18nMsg.numberInfinity
}if(typeof c!="number"){c=Number(c)
}c=Math.abs(c);
if(this._parent._isPercent){c*=100
}else{if(this._parent._isPerMille){c*=1000
}}var a=this._parent._showExponent?c.toExponential(this._parent._maxFracDigits).toUpperCase().replace(/E\+/,"E"):c.toFixed(this._parent._maxFracDigits||0);
a=this._normalize(a);
return a
};
AjxNumberFormat.NumberSegment.prototype._normalize=function(g){var e=g.split(/[\.Ee]/);
var h=e.shift();
if(h.length<this._parent._minIntDigits){h=AjxFormat._zeroPad(h,this._parent._minIntDigits,I18nMsg.numberZero)
}if(h.length>this._parent._groupingOffset){var d=[];
var f=h.length-this._parent._groupingOffset;
while(f>0){d.unshift(h.substr(f,this._parent._groupingOffset));
d.unshift(I18nMsg.numberSeparatorGrouping);
f-=this._parent._groupingOffset
}d.unshift(h.substring(0,f+this._parent._groupingOffset));
h=d.join("")
}var j="0";
var k;
if(g.match(/\./)){j=e.shift()
}else{if(g.match(/\e/)||g.match(/\E/)){k=e.shift()
}}j=j.replace(/0+$/,"");
if(j.length<this._parent._minFracDigits){j=AjxFormat._zeroPad(j,this._parent._minFracDigits,I18nMsg.numberZero,true)
}var d=[h];
if(j.length>0){var c=this._parent._isCurrency?I18nMsg.numberSeparatorMoneyDecimal:I18nMsg.numberSeparatorDecimal;
d.push(c,j)
}if(k){d.push("E",k.replace(/^\+/,""))
}return d.join("")
};
AjxChoiceFormat=function(g){if(arguments.length==0){return
}AjxFormat.call(this,g);
if(g==null){return
}var k=g.split("|");
if(arguments.length==1){this._limits=new Array(k.length);
this._lessThan=new Array(k.length);
this._formats=new Array(k.length);
var h=new RegExp("^([^#<\u2264]+)([#<\u2264])(.*)$");
for(var d=0;
d<k.length;
d++){var c=k[d];
var e=h.exec(c);
var a=e[1];
var f=e[2];
var j=e[3];
if(a=="\u221E"){this._limits[d]=Number.POSITIVE_INFINITY
}else{if(a=="-\u221E"){this._limits[d]=Number.NEGATIVE_INFINITY
}else{this._limits[d]=parseFloat(a)
}}this._lessThan[d]=f=="#"||f=="\u2264";
this._formats[d]=new AjxMessageFormat(j)
}}else{this._limits=arguments[0];
this._lessThan=new Array(arguments[0].length);
this._formats=arguments[1];
this._pattern=[];
for(var d=0;
d<this._formats.length;
d++){if(d>0){this._pattern.push("|")
}this._pattern.push(this._limits[d],"#",this._formats[d]);
this._lessThan[d]=false;
this._formats[d]=new AjxMessageFormat(this._formats[d])
}this._pattern=this._pattern.join("")
}};
AjxChoiceFormat.prototype=new AjxFormat;
AjxChoiceFormat.prototype.constructor=AjxChoiceFormat;
AjxChoiceFormat.prototype.toString=function(){return["[AjxChoiceFormat: ","limits={ ",this._limits.join(", ")," }, ","formats={ ",this._formats.join(", ")," }, ","lessThan={ ",this._lessThan.join(", ")," }]"].join("")
};
AjxChoiceFormat.prototype.getLimits=function(){return this._limits
};
AjxChoiceFormat.prototype.getFormats=function(){return this._formats
};
AjxChoiceFormat.prototype.format=function(c,f){var e=c instanceof Array?c[f]:c;
var k;
if(isNaN(e)||e<this._limits[0]){k=this._formats[0]
}else{for(var d=0;
d<this._limits.length-1;
d++){var j=this._limits[d];
var h=this._limits[d+1];
var l=e>=j;
var g=this._lessThan[d+1]?e<h:e<=h;
if(l&&g){k=this._formats[d];
break
}}if(!k){k=this._formats[this._formats.length-1]
}}return k.format(c)
};
AjxListFormat=function(c,e,d,a){AjxFormat.call(this,c?c.toPattern():"");
this._formatter=c;
this._separator=e||AjxMsg.listSeparator;
this._lastSeparator=d||AjxMsg.listSeparatorLast;
this._twoSeparator=a||AjxMsg.listSeparatorTwo
};
AjxListFormat.prototype=new AjxFormat;
AjxListFormat.prototype.constructor=AjxListFormat;
AjxListFormat.prototype.format=function(f){f=f instanceof Array?f:[f];
var e=[];
var a=f.length;
for(var c=0;
c<a;
c++){if(c>0){e.push((c<a-1)?this._separator:(a==2)?this._twoSeparator:this._lastSeparator)
}var d=f[c];
e.push(this._formatter?this._formatter.format(d):String(d))
}return e.join("")
};
AjxFormat.initialize()
}if(AjxPackage.define("ajax.util.AjxEmailAddress")){AjxEmailAddress=function(c,f,d,e,g,a){this.address=c;
this.name=this._setName(d);
this.dispName=e;
this.type=f||AjxEmailAddress.TO;
this.isGroup=g;
this.canExpand=a
};
AjxEmailAddress.prototype.isAjxEmailAddress=true;
AjxEmailAddress.customInvalidEmailPats=[];
AjxEmailAddress.FROM="FROM";
AjxEmailAddress.TO="TO";
AjxEmailAddress.CC="CC";
AjxEmailAddress.BCC="BCC";
AjxEmailAddress.REPLY_TO="REPLY_TO";
AjxEmailAddress.SENDER="SENDER";
AjxEmailAddress.READ_RECEIPT="READ_RECEIPT";
AjxEmailAddress.RESENT_FROM="RESENT_FROM";
AjxEmailAddress.TYPE_STRING={};
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.FROM]="from";
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.TO]="to";
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.CC]="cc";
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.BCC]="bcc";
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.REPLY_TO]="replyTo";
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.SENDER]="sender";
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.READ_RECEIPT]="readReceipt";
AjxEmailAddress.TYPE_STRING[AjxEmailAddress.RESENT_FROM]="resentFrom";
AjxEmailAddress.fromSoapType={};
AjxEmailAddress.fromSoapType.f=AjxEmailAddress.FROM;
AjxEmailAddress.fromSoapType.t=AjxEmailAddress.TO;
AjxEmailAddress.fromSoapType.c=AjxEmailAddress.CC;
AjxEmailAddress.fromSoapType.b=AjxEmailAddress.BCC;
AjxEmailAddress.fromSoapType.r=AjxEmailAddress.REPLY_TO;
AjxEmailAddress.fromSoapType.s=AjxEmailAddress.SENDER;
AjxEmailAddress.fromSoapType.n=AjxEmailAddress.READ_RECEIPT;
AjxEmailAddress.fromSoapType.rf=AjxEmailAddress.RESENT_FROM;
AjxEmailAddress.toSoapType={};
AjxEmailAddress.toSoapType[AjxEmailAddress.FROM]="f";
AjxEmailAddress.toSoapType[AjxEmailAddress.TO]="t";
AjxEmailAddress.toSoapType[AjxEmailAddress.CC]="c";
AjxEmailAddress.toSoapType[AjxEmailAddress.BCC]="b";
AjxEmailAddress.toSoapType[AjxEmailAddress.REPLY_TO]="r";
AjxEmailAddress.toSoapType[AjxEmailAddress.SENDER]="s";
AjxEmailAddress.toSoapType[AjxEmailAddress.READ_RECEIPT]="n";
AjxEmailAddress.SEPARATOR="; ";
AjxEmailAddress.DELIMS=[";",",","\n"," "];
AjxEmailAddress.IS_DELIM=AjxUtil.arrayAsHash(AjxEmailAddress.DELIMS);
AjxEmailAddress.addrAnglePat=/(\s*<(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))>\s*)$/;
AjxEmailAddress.addrOnlyPat=/^((((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*))))$/;
AjxEmailAddress.addrAngleQuotePat=/(\s*<'(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))'>\s*)/;
AjxEmailAddress.addrPat=/(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))/;
AjxEmailAddress.addrPat1=/(^|"|\s)(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))/;
AjxEmailAddress.accountPat=/^([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)$/;
AjxEmailAddress.commentPat=/\((.*)\)/g;
AjxEmailAddress.phrasePat=/(((\s*[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\"\s]+\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))+)/;
AjxEmailAddress.boundAddrPat=/(\s*<?(((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*"(([^\\"])|(\\([^\x0A\x0D])))+"\s*))\@((\s*([^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+(\.[^\x00-\x1F\x7F\u0080-\uFFFF()<>\[\]:;@\,."\s]+)*)\s*)|(\s*\[(\s*(([^\[\]\\])|(\\([^\x0A\x0D])))+)*\s*\]\s*)))>?\s*)$/;
AjxEmailAddress.validateAddress=function(a){a=AjxStringUtil.trim(a);
return AjxEmailAddress._prelimCheck(a)&&AjxEmailAddress.addrOnlyPat.test(a)
};
AjxEmailAddress.parse=function(g){var h,c;
var g=AjxStringUtil.trim(g);
var e=AjxEmailAddress._prelimCheck(g);
if(!(e&&g.match(AjxEmailAddress.addrPat))){return null
}var f=g.match(AjxEmailAddress.addrAngleQuotePat)||g.match(AjxEmailAddress.addrAnglePat);
if(f&&f.length){h=f[2];
g=g.replace(AjxEmailAddress.addrAnglePat,"")
}else{f=g.match(AjxEmailAddress.addrPat1);
if(f&&f.length){if(f[1]==='"'){return null
}var a=g.match(AjxEmailAddress.addrPat);
h=a&&a.length&&a[0]?AjxStringUtil.trim(a[0]):f[0];
g=g.replace(AjxEmailAddress.addrPat,"")
}}if(!h||!AjxEmailAddress.validateAddress(h)){return null
}for(var d=0;
d<AjxEmailAddress.customInvalidEmailPats.length;
d++){if(AjxEmailAddress.customInvalidEmailPats[d].test(h)){return null
}}if(g){c=AjxStringUtil.trim(g);
c=c.replace(/\\"/g,"&quot;");
c=AjxStringUtil.trim(c,null,'"');
c=c.replace(/&quot;/g,'"')
}return new AjxEmailAddress(h,null,c)
};
AjxEmailAddress.parseEmailString=function(d,m,n){var f=new AjxVector();
var c=new AjxVector();
var o=new AjxVector();
var j=AjxEmailAddress.split(d);
for(var h=0;
h<j.length;
h++){var k=AjxStringUtil.trim(j[h]);
if(k){var l=AjxEmailAddress.parse(k);
if(!l&&!n){var p=k;
var g=p.match(AjxEmailAddress.addrAnglePat);
if(g&&g.length){var a=p.replace(AjxEmailAddress.addrAnglePat,"");
var e=['"',a,'" ',g[0]].join("");
l=AjxEmailAddress.parse(e);
if(l){l.name=a
}}}if(l){l.type=m;
f.add(l);
o.add(l)
}else{c.add(k);
o.add(new AjxEmailAddress(k))
}}}return{good:f,bad:c,all:o}
};
AjxEmailAddress.getValidAddresses=function(c,d,a){return AjxEmailAddress.parseEmailString(c,d,a).good
};
AjxEmailAddress.isValid=function(a){return AjxEmailAddress.parse(a)!=null
};
AjxEmailAddress._prelimCheck=function(d){var a=d.indexOf("@");
var c=d.lastIndexOf(".");
return((a!=-1)&&(c!=-1)&&(c>a)&&(c!=d.length-1))
};
AjxEmailAddress.split=function(q){q=AjxStringUtil.trim(q);
var p=[];
var r=0,n=0;
var s="",g="";
var h=false;
while(r<q.length){var d=q.charAt(r);
if((d=='"'||d=="(")&&s!="\\"){h=true;
g=d;
n=r;
r++;
while(h&&r<q.length){var d=q.charAt(r);
if(((g=='"'&&d=='"')||(g=="("&&d==")"))&&(s!="\\")){p.push({start:n,end:r});
h=false
}r++;
s=d
}}else{r++
}s=d
}if(p.length){AjxEmailAddress.IS_DELIM[" "]=false
}n=0;
var m=[];
while(n<q.length){var c=q.substring(n,q.length);
r=0;
var f=c.length;
while((f==c.length)&&(r<c.length)){var d=c.charAt(r);
if(AjxEmailAddress.IS_DELIM[d]){var e=false;
if(d!="\n"){for(var k=0;
k<p.length;
k++){var l=p[k];
var a=n+r;
e=(a>=l.start&&a<=l.end);
if(e){break
}}}if(!e){var j=true;
var o=c.substring(0,r);
if(d==","||d==" "){j=o.match(AjxEmailAddress.boundAddrPat)
}if(j){m.push(AjxStringUtil.trim(o));
f=r;
n+=o.length+1
}}d=q.charAt(n);
while((n<q.length)&&AjxEmailAddress.IS_DELIM[d]){n++;
d=q.charAt(n)
}r++
}else{r++
}}if(f==c.length){m.push(AjxStringUtil.trim(c));
n+=c.length+1
}}AjxEmailAddress.IS_DELIM[" "]=true;
return m
};
AjxEmailAddress.prototype.toString=function(d,e){if(this.name){var c=this.name;
if(!d&&!e){c=c.replace(/\\+"/g,'"');
c=c.replace(/"/g,'\\"')
}var a=(d||e)?[c]:['"',c,'"'];
if(this.address&&!d){a.push(" <",this.address,">")
}return a.join("")
}else{return this.address
}};
AjxEmailAddress.prototype.getAddress=function(){return this.address
};
AjxEmailAddress.prototype.setAddress=function(a){this.address=a
};
AjxEmailAddress.prototype.getType=function(){return this.type
};
AjxEmailAddress.prototype.setType=function(a){this.type=a
};
AjxEmailAddress.prototype.getTypeAsString=function(){return AjxEmailAddress.TYPE_STRING[this.type]
};
AjxEmailAddress.prototype.getName=function(){return this.name
};
AjxEmailAddress.prototype.getDispName=function(){return this.dispName
};
AjxEmailAddress.prototype.getText=function(){return this.getName()||this.getDispName()||this.getAddress()
};
AjxEmailAddress.prototype.clone=function(){var a=new AjxEmailAddress(this.address,this.type,this.name,this.dispName,this.isGroup,this.canExpand);
a.icon=this.icon;
return a
};
AjxEmailAddress.copy=function(a){var c=new AjxEmailAddress(a.address,a.type,a.name,a.dispName,a.isGroup,a.canExpand);
c.icon=a.icon;
return c
};
AjxEmailAddress.prototype._setName=function(a){if(!a){return""
}if(a&&a.charAt(0)=="'"&&a.charAt(a.length-1)=="'"){a=a.substring(1,a.length-1)
}return a
};
AjxEmailAddress.sortCompareByAddress=function(e,d){var c=e.getAddress()||"";
var f=d.getAddress()||"";
if(c.toLowerCase()>f.toLowerCase()){return 1
}if(c.toLowerCase()<f.toLowerCase()){return -1
}return 0
};
AjxEmailAddress.dedup=function(d){var e=[],c={};
if(d&&d.length){for(var a=0;
a<d.length;
a++){var f=d[a];
if(!c[f.address]){e.push(f)
}c[f.address]=true
}}return e
}
}if(AjxPackage.define("ajax.util.AjxTimezone")){AjxTimezone=function(){};
AjxTimezone.convertTimezone=function(c,a,f){if(a==f){return c
}var e=AjxTimezone.getOffset(f,c);
var d=AjxTimezone.getOffset(a,c);
return new Date(c.getTime()+(e-d)*60*1000)
};
AjxTimezone.getTransition=function(e,d){var c=[d||new Date().getFullYear(),e.mon,1];
if(e.mday){c[2]=e.mday
}else{if(e.wkday){var a=new Date(d,e.mon-1,1,e.hour,e.min,e.sec);
if(e.week==-1){var g=new Date(new Date(a.getTime()).setMonth(e.mon,0));
var f=g.getDate();
var i=g.getDay()+1;
var h=i>=e.wkday?i-e.wkday:7-e.wkday-i;
c[2]=f-h
}else{var i=a.getDay()+1;
var h=e.wkday==i?1:0;
c[2]=e.wkday+7*(e.week-h)-i+1
}}}return c
};
AjxTimezone.createMDayTransition=function(a,d){if(a instanceof Date){d=d!=null?d:a.getTimezoneOffset();
a=[a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds()]
}var c={offset:d,trans:a};
return AjxTimezone.addMDayTransition(c)
};
AjxTimezone.addMDayTransition=function(c){var a=c.trans;
c.mon=a[1];
c.mday=a[2];
c.hour=a[3];
c.min=a[4];
c.sec=a[5];
return c
};
AjxTimezone.createWkDayTransition=function(a,d){if(a instanceof Date){d=d!=null?d:a.getTimezoneOffset();
a=[a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds()]
}var c={offset:d,trans:a};
return AjxTimezone.addWkDayTransition(c)
};
AjxTimezone.addWkDayTransition=function(f){var d=f.trans;
var e=d[1];
var i=d[2];
var c=Math.floor((i-1)/7);
var a=new Date(d[0],d[1]-1,d[2],12,0,0);
var h=new Date(new Date(a.getTime()).setMonth(e-1,0)).getDate();
var g=h-i<7;
f.mon=e;
f.week=g?-1:c+1;
f.wkday=a.getDay()+1;
f.hour=d[3];
f.min=d[4];
f.sec=d[5];
return f
};
AjxTimezone.createTransitionDate=function(e){var a=new Date(AjxTimezoneData.TRANSITION_YEAR,e.mon-1,1,12,0,0);
if(e.mday){a.setDate(e.mday)
}else{if(e.week==-1){a.setMonth(a.getMonth()+1,0);
for(var d=0;
d<7;
d++){if(a.getDay()+1==e.wkday){break
}a.setDate(a.getDate()-1)
}}else{for(var d=0;
d<7;
d++){if(a.getDay()+1==e.wkday){break
}a.setDate(a.getDate()+1)
}a.setDate(a.getDate()+7*(e.week-1))
}}var c=[a.getFullYear(),a.getMonth()+1,a.getDate()];
return c
};
AjxTimezone.getZonePreferences=function(){if(AjxTimezone._PREF_ZONE_DISPLAY){var d=AjxTimezone._PREF_ZONE_DISPLAY.length;
var c=AjxTimezone.STANDARD_RULES.length+AjxTimezone.DAYLIGHT_RULES.length;
if(d!=c){AjxTimezone._PREF_ZONE_DISPLAY=null
}}if(!AjxTimezone._PREF_ZONE_DISPLAY){AjxTimezone._PREF_ZONE_DISPLAY=[];
AjxTimezone.getAbbreviatedZoneChoices();
for(var a=0;
a<AjxTimezone._ABBR_ZONE_OPTIONS.length;
a++){AjxTimezone._PREF_ZONE_DISPLAY.push(AjxTimezone._ABBR_ZONE_OPTIONS[a].displayValue)
}}return AjxTimezone._PREF_ZONE_DISPLAY
};
AjxTimezone.getZonePreferencesOptions=function(){if(AjxTimezone._PREF_ZONE_OPTIONS){var d=AjxTimezone._PREF_ZONE_OPTIONS.length;
var c=AjxTimezone.STANDARD_RULES.length+AjxTimezone.DAYLIGHT_RULES.length;
if(d!=c){AjxTimezone._PREF_ZONE_OPTIONS=null
}}if(!AjxTimezone._PREF_ZONE_OPTIONS){AjxTimezone._PREF_ZONE_OPTIONS=[];
AjxTimezone.getAbbreviatedZoneChoices();
for(var a=0;
a<AjxTimezone._ABBR_ZONE_OPTIONS.length;
a++){AjxTimezone._PREF_ZONE_OPTIONS.push(AjxTimezone._ABBR_ZONE_OPTIONS[a].value)
}}return AjxTimezone._PREF_ZONE_OPTIONS
};
AjxTimezone.getServerId=function(a){return AjxTimezone._CLIENT2SERVER[a]||a
};
AjxTimezone.getClientId=function(a){return AjxTimezone._SERVER2CLIENT[a]||a
};
AjxTimezone.getShortName=function(c){var d=AjxTimezone.getRule(c);
if(d&&d.shortName){return d.shortName
}var a=["GMT",AjxTimezone._SHORT_NAMES[c]].join("");
if(d){d.shortName=a
}return a
};
AjxTimezone.getMediumName=function(a){var d=AjxTimezone.getRule(a);
if(d&&d.mediumName){return d.mediumName
}var c=TzMsg[a]||["(",AjxTimezone.getShortName(a),") ",a].join("");
if(d){d.mediumName=c
}return c
};
AjxTimezone.getLongName=AjxTimezone.getMediumName;
AjxTimezone.addRule=function(d){var c=d.serverId;
var a=d.clientId;
AjxTimezone._CLIENT2SERVER[a]=c;
AjxTimezone._SERVER2CLIENT[c]=a;
AjxTimezone._SHORT_NAMES[a]=AjxTimezone._generateShortName(d.standard.offset);
AjxTimezone._CLIENT2RULE[a]=d;
var e=d.daylight?AjxTimezone.DAYLIGHT_RULES:AjxTimezone.STANDARD_RULES;
e.push(d)
};
AjxTimezone.getRule=function(a,e){var m=AjxTimezone._CLIENT2RULE[a];
if(!m){a=AjxTimezone._SERVER2CLIENT[a];
m=AjxTimezone._CLIENT2RULE[a]
}if(!m&&e){var l=["standard","daylight"];
var n=e.daylight?AjxTimezone.DAYLIGHT_RULES:AjxTimezone.STANDARD_RULES;
for(var g=0;
g<n.length;
g++){m=n[g];
var o=true;
for(var f=0;
f<l.length;
f++){var c=l[f];
var h=m[c];
if(!h){continue
}var k=false;
for(var d in e[c]){if(e[c][d]!=h[d]){o=false;
k=true;
break
}}if(k){break
}}if(o){return m
}}return null
}return m
};
AjxTimezone.getOffset=function(a,f){var n=AjxTimezone.getRule(a||AjxTimezone.DEFAULT);
if(n&&n.daylight){var l=f.getFullYear();
var h=n.standard,c=n.daylight;
var k=AjxTimezone.getTransition(h,l);
var p=AjxTimezone.getTransition(c,l);
var j=f.getMonth()+1,m=f.getDate();
var g=k[1],o=k[2];
var i=p[1],e=p[2];
var d=false;
if(i<g){d=j>i&&j<g;
d=d||(j==i&&m>=e);
d=d||(j==g&&m<o)
}else{d=j<g||j>i;
d=d||(j==i&&m>=e);
d=d||(j==g&&m<o)
}return d?c.offset:h.offset
}return n?n.standard.offset:-(new Date().getTimezoneOffset())
};
AjxTimezone.guessMachineTimezone=function(){return AjxTimezone._guessMachineTimezone().clientId
};
AjxTimezone.getAbbreviatedZoneChoices=function(){if(AjxTimezone._ABBR_ZONE_OPTIONS){var f=AjxTimezone._ABBR_ZONE_OPTIONS.length;
var e=AjxTimezone.STANDARD_RULES.length+AjxTimezone.DAYLIGHT_RULES.length;
if(f!=e){AjxTimezone._ABBR_ZONE_OPTIONS=null
}}if(!AjxTimezone._ABBR_ZONE_OPTIONS){AjxTimezone._ABBR_ZONE_OPTIONS=[];
for(var a in AjxTimezone._CLIENT2SERVER){var g=AjxTimezone._CLIENT2RULE[a];
var c=g.serverId;
var d={displayValue:AjxTimezone.getMediumName(a),value:c,standard:g.standard,serverId:c,clientId:a};
AjxTimezone._ABBR_ZONE_OPTIONS.push(d)
}AjxTimezone._ABBR_ZONE_OPTIONS.sort(AjxTimezone._BY_OFFSET)
}return AjxTimezone._ABBR_ZONE_OPTIONS
};
AjxTimezone.getMatchingTimezoneChoices=function(){if(AjxTimezone._MATCHING_ZONE_OPTIONS){var g=AjxTimezone._MATCHING_ZONE_OPTIONS.length;
var f=AjxTimezone.STANDARD_RULES.length+AjxTimezone.DAYLIGHT_RULES.length;
if(g!=f){AjxTimezone._MATCHING_ZONE_OPTIONS=null
}}if(!AjxTimezone._MATCHING_ZONE_OPTIONS){AjxTimezone._MATCHING_ZONE_OPTIONS=[];
for(var d in AjxTimezone.MATCHING_RULES){var h=AjxTimezone.MATCHING_RULES[d];
var a=h.clientId;
var c=h.serverId;
if(a==AjxTimezone.AUTO_DETECTED){continue
}var e={displayValue:AjxTimezone.getMediumName(a),value:c,standard:h.standard,serverId:c,clientId:a};
AjxTimezone._MATCHING_ZONE_OPTIONS.push(e)
}AjxTimezone._MATCHING_ZONE_OPTIONS.sort(AjxTimezone._BY_OFFSET)
}return AjxTimezone._MATCHING_ZONE_OPTIONS
};
AjxTimezone._BY_OFFSET=function(d,c){var f=d.standard.offset-c.standard.offset;
if(f==0){var a=d.serverId;
var e=c.serverId;
if(a<e){f=-1
}else{if(a>e){f=1
}}}return f
};
AjxTimezone.GMT="Europe/London";
AjxTimezone.GMT_NO_DST="UTC";
AjxTimezone.AUTO_DETECTED="Auto-Detected";
AjxTimezone._CLIENT2SERVER={};
AjxTimezone._SERVER2CLIENT={};
AjxTimezone._SHORT_NAMES={};
AjxTimezone._CLIENT2RULE={};
AjxTimezone.STANDARD_RULES=[];
AjxTimezone.DAYLIGHT_RULES=[];
(function(){for(var a=0;
a<AjxTimezoneData.TIMEZONE_RULES.length;
a++){var c=AjxTimezoneData.TIMEZONE_RULES[a];
var d=c.daylight?AjxTimezone.DAYLIGHT_RULES:AjxTimezone.STANDARD_RULES;
d.push(c)
}})();
AjxTimezone._guessMachineTimezone=function(p){var n=new Date(AjxTimezoneData.TRANSITION_YEAR,11,1,0,0,0);
var u=new Date(AjxTimezoneData.TRANSITION_YEAR,5,1,0,0,0);
var c=-n.getTimezoneOffset();
var r=-u.getTimezoneOffset();
AjxTimezone.MATCHING_RULES=[];
AjxTimezone.TIMEZONE_CONFLICT=false;
var l=[];
var g={};
var h=[];
var q=false;
if(r==c){var o=AjxTimezone.STANDARD_RULES;
for(var s=0;
s<o.length;
++s){var j=o[s];
if(j.standard.offset==r){if(!g[j.serverId]){l.push(j);
g[j.serverId]=true
}AjxTimezone.MATCHING_RULES.push(j)
}}}else{var o=AjxTimezone.DAYLIGHT_RULES;
var x=Math.max(c,r);
var v=Math.min(c,r);
var e=new Date();
var t=-e.getTimezoneOffset();
for(var s=0;
s<o.length;
++s){var j=o[s];
if(j.standard.offset==v&&j.daylight.offset==x){var k=j.standard.trans;
var m=j.daylight.trans;
var f=new Date(k[0],k[1]-1,k[2]-1);
var d=new Date(k[0],k[1]-1,k[2]+2);
var a=new Date(m[0],m[1]-1,m[2]-1);
var w=new Date(m[0],m[1]-1,m[2]+2);
if(-d.getTimezoneOffset()==v&&-w.getTimezoneOffset()==x&&-f.getTimezoneOffset()==x&&-a.getTimezoneOffset()==v){if(!g[j.serverId]){l.push(j);
g[j.serverId]=true
}q=true
}}if(j.standard.offset==t||j.daylight.offset==t){AjxTimezone.MATCHING_RULES.push(j)
}}}if((l.length>0)&&p!=null){var o=l;
for(var s in o){if(o[s].serverId==p){return o[s]
}}}if(l.length>0){if(l.length>1){l.sort(AjxTimezone.__BY_SCORE);
if(l[0].score!=l[1].score){l.length=1
}}AjxTimezone.TIMEZONE_CONFLICT=(l.length>1);
return l[0]
}if((AjxTimezone.MATCHING_RULES.length>0)&&p!=null){var o=AjxTimezone.MATCHING_RULES;
for(var s in o){if(o[s].serverId==p){return o[s]
}}}return AjxTimezone._generateDefaultRule()
};
AjxTimezone.__BY_SCORE=function(d,c){return c.score-d.score
};
AjxTimezone._generateDefaultRule=function(){var k=0;
var d=1;
var e=2;
var h=3;
var f=4;
function l(n,m,t,u){var p=m.getTime();
var s=new Date();
s.setTime(n.getTime());
var r=new Date();
r.setTime(s.getTime());
var v=n.getTimezoneOffset()*-1;
if(!u){u={clientId:AjxTimezone.AUTO_DETECTED,autoDetected:true}
}while(s.getTime()<=p){if(t==k){s.setUTCMonth(s.getUTCMonth()+1)
}else{if(t==d){s.setUTCDate(s.getUTCDate()+1)
}else{if(t==e){s.setUTCHours(s.getUTCHours()+1)
}else{if(t==h){s.setUTCMinutes(s.getUTCMinutes()+1)
}else{if(t==f){s.setUTCSeconds(s.getUTCSeconds()+1)
}else{return u
}}}}}var o=s.getTimezoneOffset()*-1;
if(o!=v){if(t<f){u=l(r,s,t+1,u)
}else{var w=new Date();
w.setUTCFullYear(r.getFullYear(),r.getMonth(),r.getDate());
w.setUTCHours(r.getHours(),r.getMinutes(),r.getSeconds()+1);
var q=u[v<o?"daylight":"standard"]={offset:o,trans:[w.getUTCFullYear(),w.getUTCMonth()+1,w.getUTCDate(),w.getUTCHours(),w.getUTCMinutes(),w.getUTCSeconds()]};
AjxTimezone.addWkDayTransition(q);
return u
}}r.setTime(s.getTime());
v=o
}return u
}var c=new Date();
var a=new Date();
var i=c.getFullYear();
c.setUTCFullYear(i,c.getMonth(),c.getDate()-1);
c.setUTCHours(0,0,0,0);
a.setTime(c.getTime());
a.setUTCFullYear(i+1,c.getMonth(),c.getDate()+1);
var j=l(c,a,k);
if(!j.daylight||!j.standard){j.standard={offset:c.getTimezoneOffset()*-1};
delete j.daylight
}j.serverId=["(GMT",AjxTimezone._generateShortName(j.standard.offset,true),") ",AjxTimezone.AUTO_DETECTED].join("");
if(j.daylight&&j.daylight.offset<j.standard.offset){var g=j.daylight;
j.daylight=j.standard;
j.standard=g
}return j
};
AjxTimezone._generateShortName=function(g,f){if(g==0){return""
}var c=g<0?"-":"+";
var d=Math.abs(g);
var a=Math.floor(d/60);
var e=d%60;
a=a<10?"0"+a:a;
e=e<10?"0"+e:e;
return[c,a,f?".":"",e].join("")
};
AjxTimezone.DEFAULT_RULE=AjxTimezone._guessMachineTimezone();
(function(){AjxTimezoneData.TIMEZONE_RULES.sort(AjxTimezone._BY_OFFSET);
for(var a=0;
a<AjxTimezoneData.TIMEZONE_RULES.length;
a++){var c=AjxTimezoneData.TIMEZONE_RULES[a];
AjxTimezone.addRule(c)
}})();
AjxTimezone.DEFAULT=AjxTimezone.getClientId(AjxTimezone.DEFAULT_RULE.serverId)
}if(AjxPackage.define("ajax.dwt.core.Dwt")){Dwt=function(){};
Dwt.STATIC_STYLE="static";
Dwt.ABSOLUTE_STYLE="absolute";
Dwt.RELATIVE_STYLE="relative";
Dwt.FIXED_STYLE="fixed";
Dwt.NO_REPEAT="no-repeat";
Dwt.REPEAT="repeat";
Dwt.REPEAT_X="repeat-x";
Dwt.REPEAT_Y="repeat-y";
Dwt.DISPLAY_INLINE="inline";
Dwt.DISPLAY_BLOCK="block";
Dwt.DISPLAY_NONE="none";
Dwt.DISPLAY_TABLE_ROW="table-row";
Dwt.DISPLAY_TABLE_CELL="table-cell";
Dwt.CLIP=1;
Dwt.VISIBLE=2;
Dwt.SCROLL=3;
Dwt.FIXED_SCROLL=4;
Dwt.SCROLL_Y=5;
Dwt.SCROLL_X=6;
Dwt.Z_HIDDEN=100;
Dwt.Z_CURTAIN=200;
Dwt.Z_VIEW=300;
Dwt.Z_MENU=500;
Dwt.Z_VEIL=600;
Dwt.Z_DIALOG=700;
Dwt.Z_DIALOG_MENU=750;
Dwt.Z_TOOLTIP=775;
Dwt.Z_DND=800;
Dwt.Z_BUSY=900;
Dwt.Z_TOAST=950;
Dwt.Z_SPLASH=1000;
Dwt.DEFAULT=-123456789;
Dwt.CLEAR=-20000;
Dwt.LOC_NOWHERE=-10000;
Dwt.DND_DROP_NONE=0;
Dwt.DND_DROP_COPY=1;
Dwt.DND_DROP_MOVE=2;
Dwt.SCROLLBAR_WIDTH=22;
Dwt.HTML="text/html";
Dwt.TEXT="text/plain";
Dwt.KEY_OBJECT="_object_";
Dwt.KEY_ID="_id_";
Dwt._Z_INC=1;
Dwt.__nextId={};
Dwt.getNextId=function(a){a=a||"DWT";
if(!Dwt.__nextId[a]){Dwt.__nextId[a]=1
}return a+Dwt.__nextId[a]++
};
Dwt.getId=function(a,c){return a?a.id||(a.id=Dwt.getNextId(c)):null
};
Dwt.associateElementWithObject=function(d,a,c){d[c||"dwtObj"]=a.__internalId=AjxCore.assignId(a)
};
Dwt.disassociateElementFromObject=function(d,a,c){if(d){d.removeAttribute(c||"dwtObj")
}if(a.__internalId){AjxCore.unassignId(a.__internalId)
}};
Dwt.getObjectFromElement=function(c,a){return AjxCore.objectWithId(c[a||"dwtObj"])
};
Dwt.getElement=function(a){return(typeof(a)=="string")?document.getElementById(a):a
};
Dwt.findAncestor=function(d,c){var a=Dwt.getAttr(d,c);
while(d&&(a==null||a=="")){d=d.parentNode;
a=Dwt.getAttr(d,c)
}return d
};
Dwt.isAncestor=function(c,a){if(c==a){return true
}var d=a;
while(d){d=d.parentNode;
if(d==c){return true
}}return false
};
Dwt.setHandler=function(d,c,a){if(!(d=Dwt.getElement(d))){return
}if(c==DwtEvent.ONMOUSEWHEEL&&AjxEnv.isGeckoBased){Dwt.clearHandler(d,c)
}d[c]=a;
if(c==DwtEvent.ONMOUSEWHEEL&&AjxEnv.isGeckoBased){d.addEventListener("DOMMouseScroll",a,true)
}};
Dwt.clearHandler=function(d,c){if(!(d=Dwt.getElement(d))){return
}if(c==DwtEvent.ONMOUSEWHEEL&&AjxEnv.isGeckoBased){if(d[c]){var a=d[c];
d.removeEventListener("DOMMouseScroll",a,true)
}}d[c]=null
};
Dwt.getBackgroundRepeat=function(a){if(!(a=Dwt.getElement(a))){return
}return DwtCssStyle.getProperty(a,"background-repeat")
};
Dwt.setBackgroundRepeat=function(c,a){if(!(c=Dwt.getElement(c))){return
}c.style.backgroundRepeat=a
};
Dwt.getBounds=function(f,d){if(!(f=Dwt.getElement(f))){return null
}var e=DwtPoint.tmp;
Dwt.getLocation(f,e);
var c=e.x;
var a=e.y;
Dwt.getSize(f,e);
if(!d){return new DwtRectangle(c,a,e.x,e.y)
}else{d.set(c,a,e.x,e.y);
return d
}};
Dwt.setBounds=function(e,c,f,d,a){if(!(e=Dwt.getElement(e))){return
}Dwt.setLocation(e,c,f);
Dwt.setSize(e,d,a)
};
Dwt.getCursor=function(a){if(!(a=Dwt.getElement(a))){return""
}return DwtCssStyle.getProperty(a,"cursor")
};
Dwt.setCursor=function(c,a){if(!(c=Dwt.getElement(c))){return
}c.style.cursor=a
};
Dwt.getLocation=function(c,a){if(!(c=Dwt.getElement(c))){return null
}a=a||new DwtPoint(0,0);
if(c.style.position==Dwt.ABSOLUTE_STYLE){a.set(parseInt(DwtCssStyle.getProperty(c,"left")),parseInt(DwtCssStyle.getProperty(c,"top")));
return a
}return Dwt.toWindow(c,0,0,null,null,a)
};
Dwt.setLocation=function(d,c,e){if(!(d=Dwt.getElement(d))){return
}var a=DwtCssStyle.getProperty(d,"position");
if(a!=Dwt.ABSOLUTE_STYLE&&a!=Dwt.RELATIVE_STYLE&&a!=Dwt.FIXED_STYLE){throw new DwtException("Static widgets may not be positioned",DwtException.INVALID_OP,"Dwt.setLocation")
}if(c=Dwt.__checkPxVal(c)){d.style.left=c
}if(e=Dwt.__checkPxVal(e)){d.style.top=e
}};
Dwt.getPosition=function(a){if(!(a=Dwt.getElement(a))){return
}return a.style.position
};
Dwt.setPosition=function(c,a){if(!(c=Dwt.getElement(c))){return
}c.style.position=a
};
Dwt.getScrollStyle=function(d){if(!(d=Dwt.getElement(d))){return""
}var e=DwtCssStyle.getProperty(d,"overflow");
if(e=="hidden"){return Dwt.CLIP
}if(e=="auto"){return Dwt.SCROLL
}if(e=="scroll"){return Dwt.FIXED_SCROLL
}if(e==""){var c=DwtCssStyle.getProperty(d,"overflowX");
var a=DwtCssStyle.getProperty(d,"overflowY");
if(c=="scroll"){return Dwt.SCROLL_X
}if(a=="scroll"){return Dwt.SCROLL_Y
}}return Dwt.VISIBLE
};
Dwt.setScrollStyle=function(c,a){if(!(c=Dwt.getElement(c))){return
}if(a==Dwt.CLIP){c.style.overflow="hidden"
}else{if(a==Dwt.SCROLL){c.style.overflow="auto"
}else{if(a==Dwt.FIXED_SCROLL){c.style.overflow="scroll"
}else{if(a==Dwt.SCROLL_Y){c.style.overflowX="hidden";
c.style.overflowY="auto"
}else{if(a==Dwt.SCROLL_X){c.style.overflowY="hidden";
c.style.overflowX="auto"
}else{c.style.overflow="visible"
}}}}}};
Dwt.getSize=function(e,a,c){if(!(e=Dwt.getElement(e))){return
}var d;
if(!a){d=new DwtPoint(0,0)
}else{d=a;
d.set(0,0)
}if(!e){return d
}if(c){if(e.style.width){d.x=parseInt(e.style.width)
}if(e.style.height){d.y=parseInt(e.style.height)
}return d
}d.x=e.offsetWidth;
if(d.x!=null){d.y=e.offsetHeight
}else{if(e.clip&&e.clip.width!=null){d.x=parseInt(e.clip.width);
d.y=parseInt(e.clip.height)
}else{if(e.style&&e.style.pixelWidth!=null){d.x=parseInt(e.style.pixelWidth);
d.y=parseInt(e.style.pixelHeight)
}}}return d
};
Dwt.getOuterSize=function(f,a){var e=Dwt.getSize(f,a);
if(e&&Dwt.getVisible(f)){var d=Dwt.getMargins(f);
var c=Dwt.getInsets(f);
e.x+=d.left+d.right+c.left+c.right;
e.y+=d.top+d.bottom+c.top+c.bottom
}return e
};
Dwt.setSize=function(d,c,a){if(!(d=Dwt.getElement(d))){return
}if(!d.style){return
}if(c==Dwt.CLEAR){d.style.width=null
}else{if(c=Dwt.__checkPxVal(c,true)){d.style.width=c
}}if(a==Dwt.CLEAR){d.style.height=null
}else{if(a=Dwt.__checkPxVal(a,true)){d.style.height=a
}}};
Dwt.getHtmlExtent=function(a){var c=AjxStringUtil.calcDIV();
c.innerHTML=a;
return Dwt.getSize(c)
};
Dwt.toDocumentFragment=function(d,g){var f=AjxStringUtil.calcDIV();
f.innerHTML=d;
var c=document.createDocumentFragment();
var a=g&&document.getElementById(g);
if(a){c.appendChild(a)
}else{for(var e=f.firstChild;
e;
e=f.firstChild){c.appendChild(e)
}}return c
};
Dwt.getAttr=function(d,a,c){if(!c){return d&&d.tagName?(d.getAttribute(a)||d[a]):null
}else{while(d){if(Dwt.getAttr(d,a)!=null){return d
}d=d.parentNode
}return null
}};
Dwt.getVisible=function(c){if(!(c=Dwt.getElement(c))){return
}var a=DwtCssStyle.getProperty(c,"display");
return(a!=Dwt.DISPLAY_NONE)
};
Dwt.setVisible=function(c,d){if(!(c=Dwt.getElement(c))){return
}if(d){if(c.nodeName.match(/tr/i)){c.style.display=Dwt.DISPLAY_TABLE_ROW
}else{if(c.nodeName.match(/td|th/i)){c.style.display=Dwt.DISPLAY_TABLE_CELL
}else{c.style.display=c.getAttribute("x-display")||Dwt.DISPLAY_BLOCK
}}}else{var a=DwtCssStyle.getComputedStyleObject(c).display;
if(a!="none"){c.setAttribute("x-display",a)
}c.style.display=Dwt.DISPLAY_NONE
}};
Dwt.getVisibility=function(c){if(!(c=Dwt.getElement(c))){return
}var a=DwtCssStyle.getProperty(c,"visibility");
return(a=="visible")
};
Dwt.setVisibility=function(a,c){if(!(a=Dwt.getElement(a))){return
}a.style.visibility=c?"visible":"hidden"
};
Dwt.__MSIE_OPACITY_RE=/alpha\(opacity=(\d+)\)/;
Dwt.getOpacity=function(a){if(!(a=Dwt.getElement(a))){return
}return Number(a.style.opacity||1)*100
};
Dwt.setOpacity=function(c,a){if(!(c=Dwt.getElement(c))){return
}c.style.opacity=a/100
};
Dwt.getZIndex=function(c,a){if(!(c=Dwt.getElement(c))){return
}if(a){while(c.style.zIndex===""&&c.parentNode){c=c.parentNode
}return c.style.zIndex
}return DwtCssStyle.getProperty(c,"z-index")
};
Dwt.setZIndex=function(c,a){if(!(c=Dwt.getElement(c))){return
}c.style.zIndex=a;
if(a<Dwt.Z_VIEW){c.setAttribute("aria-hidden",true)
}else{c.removeAttribute("aria-hidden")
}};
Dwt.getDisplay=function(a){DwtCssStyle.getProperty(a,"display")
};
Dwt.setDisplay=function(c,a){if(!(c=Dwt.getElement(c))){return
}c.style.display=a
};
Dwt.getWindowSize=function(a){var c=(!a)?new DwtPoint(0,0):a;
if(window.innerWidth){c.x=window.innerWidth;
c.y=window.innerHeight
}else{if(document.body&&document.body.clientWidth){c.x=document.body.clientWidth;
c.y=document.body.clientHeight
}}return c
};
Dwt.toWindow=function(e,h,g,k,i,j){var c;
if(!j){c=new DwtPoint(h,g)
}else{c=j;
c.set(h,g)
}e=Dwt.getElement(e);
var a=e;
while(a&&a!=k){c.x+=a.offsetLeft-a.scrollLeft;
c.y+=a.offsetTop;
if(!i){var d=AjxEnv.isOpera?a.pageYOffset:a.scrollTop;
if(d){c.y-=d
}var f=a.parentNode;
while(f!=a.offsetParent&&f!=k){d=AjxEnv.isOpera?f.pageYOffset:f.scrollTop;
if(d){c.y-=d
}f=f.parentNode
}}a=a.offsetParent
}return c
};
Dwt.getInsets=function(e){if(!(e=Dwt.getElement(e))){return
}var c=DwtCssStyle.getComputedStyleObject(e);
var d=parseInt(c.borderLeftWidth)||0;
var i=parseInt(c.borderTopWidth)||0;
var j=parseInt(c.borderRightWidth)||0;
var g=parseInt(c.borderBottomWidth)||0;
var f=parseInt(c.paddingLeft)||0;
var k=parseInt(c.paddingTop)||0;
var a=parseInt(c.paddingRight)||0;
var h=parseInt(c.paddingBottom)||0;
return{left:d+f,top:i+k,right:j+a,bottom:g+h}
};
Dwt.insetBounds=function(c,a){if(!c){return null
}c.x+=a.left;
c.y+=a.top;
c.width-=a.left+a.right;
c.height-=a.top+a.bottom;
return c
};
Dwt.getInsetBounds=function(d){if(!(d=Dwt.getElement(d))){return
}var c=Dwt.getBounds(d);
var a=Dwt.getInsets(d);
return Dwt.insetBounds(c,a)
};
Dwt.getMargins=function(c){if(!(c=Dwt.getElement(c))){return
}var a=DwtCssStyle.getComputedStyleObject(c);
return{left:parseInt(a.marginLeft)||0,top:parseInt(a.marginTop)||0,right:parseInt(a.marginRight)||0,bottom:parseInt(a.marginBottom)||0}
};
Dwt.getAncestors=function(d,a,c){var e=[];
if(!a){a=document.documentElement
}if(c){e.push(d)
}while(d&&d!=a){e.push(d.parentNode);
d=d.parentNode
}if(e[e.length-1]!=a){return null
}return e
};
Dwt.setStatus=function(a){window.status=a
};
Dwt.getTitle=function(){return window.document.title
};
Dwt.setTitle=function(a){window.document.title=a
};
Dwt.getIframeDoc=function(a){if(a){return a.contentDocument
}return null
};
Dwt.getIframeWindow=function(a){return a.contentWindow
};
Dwt.parseHtmlFragment=function(e,d){if(!Dwt._div){Dwt._div=document.createElement("div")
}if(d){e="<table style='table-layout:fixed'>"+e+"</table>"
}Dwt._div.innerHTML=e;
if(d){var a=document.createDocumentFragment();
var f=Dwt._div.firstChild.rows;
for(var c=f.length-1;
c>=0;
c--){a.appendChild(f[0])
}return a.childNodes.length>1?a:a.firstChild
}return Dwt._div.firstChild
};
Dwt.contains=function(d,c){var e=false;
if(d.compareDocumentPosition){var a=d.compareDocumentPosition(c);
if((a==(document.DOCUMENT_POSITION_CONTAINED_BY|document.DOCUMENT_POSITION_FOLLOWING))){e=true
}}else{if(d.contains){e=d.contains(c)
}}return e
};
Dwt.removeChildren=function(a){while(a.hasChildNodes()){a.removeChild(a.firstChild)
}};
Dwt.getCellIndex=function(c){if(AjxEnv.isOpera){if(c.tagName&&c.tagName.toLowerCase()=="td"){var d=c.parentNode.cells;
var a=d.length;
for(var e=0;
e<a;
e++){if(d[e]==c){return e
}}}}else{return c.cellIndex
}return -1
};
Dwt.delClass=function(d,a,e){if(d==null){return
}if(!a&&!e){return
}if(typeof a=="string"&&a.length){a=Dwt._DELCLASS_CACHE[a]||(Dwt._DELCLASS_CACHE[a]=new RegExp("\\b"+a+"\\b","ig"))
}var c=d.className||"";
c=c.replace(a," ");
c=AjxStringUtil.trim(c);
d.className=e?c+" "+e:c
};
Dwt._DELCLASS_CACHE={};
Dwt.addClass=function(a,d){Dwt.delClass(a,d,d)
};
Dwt.condClass=function(e,f,d,c){if(!!f){if(c){Dwt.delClass(e,c)
}Dwt.addClass(e,d)
}else{Dwt.delClass(e,d);
if(c){Dwt.addClass(e,c)
}}};
Dwt.hasClass=function(c,a){if(!c||!a){return false
}return c.className.match(new RegExp("\\b"+a+"\\b"))
};
Dwt.setSelectionRange=function(d,e,a){if(d.setSelectionRange){d.focus();
d.setSelectionRange(e,a)
}else{if(d.createTextRange){var c=d.createTextRange();
c.collapse(true);
c.moveStart("character",e);
c.moveEnd("character",a-e);
c.select()
}else{if(d.select){d.select()
}}}};
Dwt.getSelectionStart=function(e){if(AjxUtil.isSpecified(e.selectionStart)){return e.selectionStart
}else{if(document.selection){var d=document.selection.createRange();
var c=d.compareEndPoints("StartToEnd",d)==0;
if(!c){d.collapse(true)
}var a=d.getBookmark();
var f=e.createTextRange().getBookmark().charCodeAt(2);
return Math.max(a.charCodeAt(2)-f,0)
}}return e.value.length
};
Dwt.getSelectionEnd=function(e){if(AjxUtil.isSpecified(e.selectionEnd)){return e.selectionEnd
}else{if(document.selection){var d=document.selection.createRange();
var c=d.compareEndPoints("StartToEnd",d)==0;
if(!c){d.collapse(false)
}var a=d.getBookmark();
var f=e.createTextRange().getBookmark().charCodeAt(2);
return Math.max(a.charCodeAt(2)-f,0)
}}return e.value.length
};
Dwt.setSelectionText=function(c,f){var g=Dwt.getSelectionStart(c);
var a=Dwt.getSelectionEnd(c);
var e=c.value;
var d=[e.substr(0,g),f,e.substr(a)].join("");
if(typeof c.setValue=="function"){c.setValue(d)
}else{c.value=d
}Dwt.setSelectionRange(c,g,g+f.length)
};
Dwt.moveCursorToEnd=function(a){Dwt.setSelectionRange(a,a.value.length,a.value.length)
};
Dwt.instanceOf=function(c,a){if(typeof c=="string"){return window[c]&&(c==a||window[c].prototype instanceof window[a])
}return(window[a]&&c instanceof window[a])
};
Dwt.getParams=function(a,e){if(!a||a.length===0||(a.length===1&&!a[0])){return{}
}if(a.length>1||!AjxUtil.isHash(a[0]._object_||a[0])){var d={};
for(var c=0;
c<a.length;
c++){d[e[c]]=a[c]
}return d
}if(a.length===1){return a[0]
}return{}
};
Dwt.__REM_RE=/^(-?[0-9]+(?:\.[0-9]*)?)rem$/;
Dwt.__checkPxVal=function(c,a){if(c==Dwt.DEFAULT){return false
}if(isNaN(parseInt(c))){return false
}if(a&&c<0&&c!=Dwt.LOC_NOWHERE){c=0
}if(typeof(c)=="number"){c=c+"px"
}if(!AjxEnv.supportsCSS3RemUnits&&Dwt.__REM_RE.test(c)){c=DwtCssStyle.asPixelCount(c)+"px"
}return c
};
Dwt.byId=function(e,c){if(!c){return(typeof e=="string"?document.getElementById(e):e)
}if(c==e||c.id==e){return c
}for(var a=0;
a<c.childNodes.length;
a++){if(c.childNodes[a].nodeType==1){var d=Dwt.byId(e,c.childNodes[a]);
if(d){return d
}}}return null
};
Dwt.byTag=function(c,a){if(!a){a=document
}return AjxUtil.toArray(a.getElementsByTagName(c))
};
Dwt.byClassName=function(d,c){if(!c){c=document
}var a;
if(c.getElementsByClassName){a=c.getElementsByClassName(d)
}else{a=c.querySelectorAll("."+d)
}return AjxUtil.toArray(a)
};
Dwt.show=function(c){var a=Dwt.byId(c);
if(a){Dwt.setVisible(a,true)
}};
Dwt.hide=function(c){var a=Dwt.byId(c);
if(a){Dwt.setVisible(a,false)
}};
Dwt.setText=function(a,c){a.appendChild(document.createTextNode(c))
};
Dwt.populateText=function(){if(arguments.length==0){return
}var d,a=0,c=arguments.length;
while(a<c){d=document.getElementById(arguments[a]);
if(d){Dwt.setText(d,arguments[a+1])
}a+=2
}};
Dwt.setInnerHtml=function(c,a){c.innerHTML=a
};
Dwt.setFavIcon=function(h){var a=null;
if(Dwt._favIconId){a=document.getElementById(Dwt._favIconId)
}else{var j=document.getElementsByTagName("head")[0];
var c=j.getElementsByTagName("link");
for(var e=0;
e<c.length;
e++){var g=c[e];
if(g.rel.toUpperCase()=="SHORTCUT ICON"){if(!g.id){g.id=Dwt._favIconId=Dwt.getNextId()
}a=g;
break
}}}if(a){a.href=h;
a.type="image/x-icon";
var f=a.parentNode;
f.removeChild(a);
f.appendChild(a)
}else{var d=document.createElement("link");
d.id=Dwt._favIconId=Dwt.getNextId();
d.rel="SHORTCUT ICON";
d.href=h;
d.type="image/x-icon";
j=j||document.getElementsByTagName("head")[0];
j.appendChild(d)
}};
Dwt.enableDesignMode=function(d,a){if(!AjxEnv.isIE){d.designMode=a?"on":"off"
}else{var c=d.body;
if(!c||c.contentEditable===undefined){d.designMode=a?"on":"off"
}else{c.contentEditable=a?true:false
}}};
Dwt.ffScrollbarCheck=function(c){if(AjxEnv.isFirefox3_6up||AjxEnv.isDesktop2up){var a=c.target;
if(a&&(a.clientHeight&&a.scrollHeight&&(a.clientHeight!=a.scrollHeight))||(a.clientWidth&&a.scrollWidth&&(a.clientWidth!=a.scrollWidth))){c._dontCallPreventDefault=true;
c._stopPropagation=false;
c._returnValue=true;
return true
}}return false
};
Dwt.selectText=function(c){if(!c){Dwt.deselectText();
return
}if(document.selection){var a=c.parentTextEdit.createTextRange();
a.moveToElementText(c);
a.select()
}else{if(window.getSelection){var a=document.createRange();
a.selectNode(c);
var d=window.getSelection();
d.addRange(a)
}}};
Dwt.deselectText=function(){if(document.selection){document.selection.empty()
}else{if(window.getSelection){window.getSelection().removeAllRanges()
}}};
Dwt.insertText=function(c,e){if(!c||!e){return
}if(document.selection){c.focus();
var d=document.selection.createRange();
d.text=e;
c.focus()
}else{if(AjxUtil.isSpecified(c.selectionStart)){var f=c.selectionStart,a=c.selectionEnd;
c.value=c.value.substring(0,f)+e+c.value.substring(a,c.value.length);
c.selectionStart=f+e.length;
c.selectionEnd=a+e.length
}else{c.value+=e
}}};
Dwt.doOverlap=function(g,f){if(!g||!f){return false
}var i=Dwt.getLocation(g),h=Dwt.getLocation(f);
var m=Dwt.getSize(g),l=Dwt.getSize(f);
var o=i.x,n=h.x,k=i.y,j=h.y;
var e=o+m.x,c=n+l.x;
var d=k+m.y,a=j+l.y;
return !(o>c||e<n||k>a||d<j)
};
Dwt.scrollIntoView=function(d,c){if(!d||!c){return
}var a=Dwt.toWindow(d,0,0,null,null,DwtPoint.tmp).y;
var h=Dwt.toWindow(c,0,0,null,null,DwtPoint.tmp).y+c.scrollTop;
var g=a-h;
if(g<0){c.scrollTop+=g
}else{var f=Dwt.getSize(c,DwtPoint.tmp).y;
var e=Dwt.getSize(d,DwtPoint.tmp).y;
g=(a+e)-(h+f);
if(g>0){c.scrollTop+=g
}}};
Dwt.setLoadingTime=function(d,a){if(!window.isPerfMetric){return
}a=a||new Date();
d+="_loading";
var c=document.getElementById(d);
if(!c){c=document.createElement("div");
c.id=d;
c.style.display="none";
document.body.appendChild(c)
}c.innerHTML=a.getTime();
if(window.appDevMode){console.profile(d)
}};
Dwt.setLoadedTime=function(d,a){if(!window.isPerfMetric){return
}a=a||new Date();
d+="_loaded";
var c=document.getElementById(d);
if(!c){c=document.createElement("div");
c.id=d;
c.style.display="none";
document.body.appendChild(c)
}c.innerHTML=a.getTime();
if(window.appDevMode){console.profileEnd()
}};
Dwt.printPerfMetric=function(){$.each($('div[id*="_loaded"]'),function(d,g){var a=$(g).attr("id");
var h=a.substring(0,a.indexOf("_"));
var c=$("#"+h+"_launched");
if(c&&c.length>0){var e=$("#"+h+"_launched").html()
}else{e=$("#"+h+"_loading").html()
}var f="Load time for "+h+" is "+($(g).html()-e);
if(console){console.log(f)
}})
};
Dwt.createLinearGradientCss=function(f,c,e){var a=null;
var d=this.createLinearGradientInfo(f,c,e);
if(d.field){a=d.field+":"+d.css+";"
}return a
};
Dwt.createLinearGradientInfo=function(g,d,i){var h;
var j={};
if(AjxEnv.isIE9){var e={x1:"0%",x2:i=="v"?"0%":"100%",y1:"0%",y2:i=="v"?"100%":"0%",startColor:g,endColor:d};
var a=AjxTemplate.expand("dwt.Widgets#SVGGradient",e);
j.field="background";
j.css=("url(data:image/svg+xml,"+escape(a.replace(/\s+/g," "))+")")
}else{if(AjxEnv.isFirefox3_6up){h=(i=="v")?"top":"left";
j.field="background";
j.css="-moz-linear-gradient("+h+","+g+", "+d+")"
}else{if((AjxEnv.isSafari&&AjxEnv.isSafari5_1up)||AjxEnv.isChrome10up){h=(i=="v")?"top":"left";
j.field="background";
j.css="-webkit-linear-gradient("+h+","+g+", "+d+")"
}else{if((AjxEnv.isSafari&&AjxEnv.isSafari4up)||AjxEnv.isChrome2up){var c="left top";
var f=(i=="v")?"left bottom":"right top";
j.field="background";
j.css="-webkit-gradient(linear, "+c+", "+f+", color-stop(0%, "+g+"), color-stop(100%, "+d+"))"
}else{h=(i=="v")?"to bottom":"to right";
j.field="background";
j.css="linear-gradient("+h+","+g+", "+d+")"
}}}}return j
};
Dwt.getDescendant=function(d,f){var c=null;
for(var a=0;
a<d.childNodes.length;
a++){var e=d.childNodes[a];
if(e.id==f){c=e
}else{c=Dwt.getDescendant(e,f)
}if(c!=null){break
}}return c
};
Dwt.getPreviousElementSibling=function(a){var c=a.previousElementSibling;
if(c!==undefined){return c
}for(c=a.previousSibling;
c&&c.nodeType!==1;
c=c.previousSibling){}return c
};
Dwt.getNextElementSibling=function(a){var c=a.nextElementSibling;
if(c!==undefined){return c
}for(c=a.nextSibling;
c&&c.nodeType!==1;
c=c.nextSibling){}return c
};
Dwt.getScrollbarSizes=function(e){var f=Dwt.getInsets(e);
var a=DwtCssStyle.getComputedStyleObject(e);
var d=parseInt(a.borderLeftWidth)||0;
var h=parseInt(a.borderTopWidth)||0;
var j=parseInt(a.borderRightWidth)||0;
var g=parseInt(a.borderBottomWidth)||0;
var c=e.offsetWidth-e.clientWidth-d-j;
var i=e.offsetHeight-e.clientHeight-h-g;
return new DwtPoint(c,i)
}
}if(AjxPackage.define("ajax.dwt.core.DwtException")){DwtException=function(d,c,e,a){if(arguments.length===0){return
}AjxException.call(this,d,c,e,a)
};
DwtException.prototype=new AjxException();
DwtException.prototype.constructor=DwtException;
DwtException.prototype.toString=function(){return"DwtException"
};
DwtException.INVALIDPARENT=-1;
DwtException.INVALID_OP=-2;
DwtException.INTERNAL_ERROR=-3;
DwtException.INVALID_PARAM=-4
}if(AjxPackage.define("ajax.dwt.core.DwtDraggable")){DwtDraggable=function(){};
DwtDraggable.dragEl=null;
DwtDraggable.init=function(e,n,g,c,f,a,i,l,m,j,h,k,d){e.onmousedown=DwtDraggable.__start;
e.__hMode=j?false:true;
e.__vMode=h?false:true;
e.__root=(n&&n!=null)?n:e;
if(e.__hMode&&isNaN(parseInt(e.__root.style.left))){e.__root.style.left="0px"
}if(e.__vMode&&isNaN(parseInt(e.__root.style.top))){e.__root.style.top="0px"
}if(!e.__hMode&&isNaN(parseInt(e.__root.style.right))){e.__root.style.right="0px"
}if(!e.__vMode&&isNaN(parseInt(e.__root.style.bottom))){e.__root.style.bottom="0px"
}e.__minX=(typeof g!="undefined")?g:null;
e.__minY=(typeof f!="undefined")?f:null;
e.__maxX=(typeof c!="undefined")?c:null;
e.__maxY=(typeof a!="undefined")?a:null;
e.__xMapper=k?k:null;
e.__yMapper=d?d:null;
e.__root.onDragStart=i;
e.__root.onDragEnd=m;
e.__root.onDrag=l
};
DwtDraggable.setDragBoundaries=function(c,a,e,f,d){if(c!=null){if(a!=null){c.__minX=a
}if(e!=null){c.__maxX=e
}if(f!=null){c.__minY=f
}if(d!=null){c.__maxY=d
}}};
DwtDraggable.__start=function(d){var c=DwtDraggable.dragEl=this;
d=DwtDraggable.__fixE(d);
var a=parseInt(c.__hMode?c.__root.style.left:c.__root.style.right);
var f=parseInt(c.__vMode?c.__root.style.top:c.__root.style.bottom);
if(c.__root.onDragStart){c.__root.onDragStart.run([a,f])
}c.__lastMouseX=d.clientX;
c.__lastMouseY=d.clientY;
if(c.__hMode){if(c.__minX!=null){c.__minMouseX=d.clientX-a+c.__minX
}if(c.__maxX!=null){c.__maxMouseX=c.__minMouseX+c.__maxX-c.__minX
}}else{if(c.__minX!=null){c.__maxMouseX=-c.__minX+d.clientX+a
}if(c.__maxX!=null){c.__minMouseX=-c.__maxX+d.clientX+a
}}if(c.__vMode){if(c.__minY!=null){c.__minMouseY=d.clientY-f+c.__minY
}if(c.__maxY!=null){c.__maxMouseY=c.__minMouseY+c.__maxY-c.__minY
}}else{if(c.__minY!=null){c.__maxMouseY=-c.__minY+d.clientY+f
}if(c.__maxY!=null){c.__minMouseY=-c.__maxY+d.clientY+f
}}document.onmousemove=DwtDraggable.__drag;
document.onmouseup=DwtDraggable.__end;
return false
};
DwtDraggable.__drag=function(h){h=DwtDraggable.__fixE(h);
var d=DwtDraggable.dragEl;
var f=h.clientY;
var g=h.clientX;
var c=parseInt(d.__hMode?d.__root.style.left:d.__root.style.right);
var j=parseInt(d.__vMode?d.__root.style.top:d.__root.style.bottom);
var a,i;
if(!d.__xMapper){if(d.__minX!=null){g=d.__hMode?Math.max(g,d.__minMouseX):Math.min(g,d.__maxMouseX)
}if(d.__maxX!=null){g=d.__hMode?Math.min(g,d.__maxMouseX):Math.max(g,d.__minMouseX)
}a=c+((g-d.__lastMouseX)*(d.__hMode?1:-1))
}else{a=d.__xMapper(c,g)
}if(!d.__yMapper){if(d.__minY!=null){f=d.__vMode?Math.max(f,d.__minMouseY):Math.min(f,d.__maxMouseY)
}if(d.__maxY!=null){f=d.__vMode?Math.min(f,d.__maxMouseY):Math.max(f,d.__minMouseY)
}i=j+((f-d.__lastMouseY)*(d.__vMode?1:-1))
}else{i=d.__yMapper(j,f)
}DwtDraggable.dragEl.__root.style[d.__hMode?"left":"right"]=a+"px";
DwtDraggable.dragEl.__root.style[d.__vMode?"top":"bottom"]=i+"px";
DwtDraggable.dragEl.__lastMouseX=g;
DwtDraggable.dragEl.__lastMouseY=f;
if(DwtDraggable.dragEl.__root.onDrag){DwtDraggable.dragEl.__root.onDrag.run([a,i])
}return false
};
DwtDraggable.__end=function(){document.onmousemove=null;
document.onmouseup=null;
if(DwtDraggable.dragEl.__root.onDragEnd){DwtDraggable.dragEl.__root.onDragEnd.run([parseInt(DwtDraggable.dragEl.__root.style[DwtDraggable.dragEl.__hMode?"left":"right"]),parseInt(DwtDraggable.dragEl.__root.style[DwtDraggable.dragEl.__vMode?"top":"bottom"])])
}DwtDraggable.dragEl=null
};
DwtDraggable.__fixE=function(a){if(typeof a=="undefined"){a=window.event
}if(!AjxEnv.isWebKitBased){if(typeof a.layerX=="undefined"){a.layerX=a.offsetX
}if(typeof a.layerY=="undefined"){a.layerY=a.offsetY
}}return a
}
}if(AjxPackage.define("ajax.dwt.graphics.DwtCssStyle")){DwtCssStyle=function(){};
DwtCssStyle.HOVER="hover";
DwtCssStyle.ACTIVE="active";
DwtCssStyle.SELECTED="selected";
DwtCssStyle.ALT_SELECTED="altSelected";
DwtCssStyle.DISABLED="disabled";
DwtCssStyle.FOCUSED="focused";
DwtCssStyle.ACTIONED="actioned";
DwtCssStyle.MATCHED="matched";
DwtCssStyle.DRAG_OVER="dragOver";
DwtCssStyle.DROPPABLE="droppable";
DwtCssStyle.NOT_DROPPABLE="notDroppable";
DwtCssStyle.DRAG_PROXY="dragProxy";
DwtCssStyle.LINUX="linux";
DwtCssStyle.getProperty=function(g,a){var f=g.ownerDocument;
if(f.defaultView&&f.defaultView.getComputedStyle){var e=f.defaultView.getComputedStyle(g,null);
if(e&&e.length>0){return e.getPropertyValue(a)
}}var d=a.split("-");
var c=d.shift()+AjxUtil.map(d,AjxStringUtil.capitalize).join("");
if(g.currentStyle){return g.currentStyle[c]
}else{if(g.style){return g.style[c]
}}};
DwtCssStyle.getComputedStyleObject=function(d){var c=d.ownerDocument;
if(c.defaultView&&c.defaultView.getComputedStyle){var a=c.defaultView.getComputedStyle(d,null);
if(!a&&d.style){d.style.display="";
a=c.defaultView.getComputedStyle(d,null)
}return a||{}
}else{if(d.currentStyle){return d.currentStyle
}else{if(d.style){return d.style
}}}};
DwtCssStyle.removeProperty=function(c,d){if(d instanceof Array){for(var a=d.length;
--a>=0;
){DwtCssStyle.removeProperty(c,d[a])
}}else{if(AjxEnv.isIE){c.style.removeAttribute(d,true)
}else{d=d.replace(/([A-Z])/g,"-$1");
c.style.removeProperty(d)
}}};
DwtCssStyle.addRule=function(d,a,e,c){if(d.addRule){c=c||(d.rules.length);
d.addRule(a,e,c)
}else{c=c||(d.cssRules.length);
d.insertRule(a+"{"+e+"}",c)
}return c
};
DwtCssStyle.removeRule=function(c,a){if(c.removeRule){c.removeRule(a)
}else{c.deleteRule(a)
}};
DwtCssStyle.__PIXEL_RE=/^(-?[0-9]+(?:\.[0-9]*)?)px$/;
DwtCssStyle.__DIMENSION_RE=/^(-?[0-9]+(?:\.[0-9]*)?)([a-z]*|%)$/;
DwtCssStyle.__NUMBER_RE=/^(-?[0-9]+(?:\.[0-9]*)?)+$/;
DwtCssStyle.__getRootFontSize=function(){var a=DwtCssStyle.getProperty(document.documentElement,"font-size");
if(!DwtCssStyle.__PIXEL_RE.test(a)){return -1
}return parseInt(a)
};
DwtCssStyle.asPixelCount=function(f){if(!f){return -1
}var e,d,c;
if(typeof f==="number"||DwtCssStyle.__NUMBER_RE.test(f)){e=Number(f);
d="px"
}else{if((c=DwtCssStyle.__DIMENSION_RE.exec(f))){e=Number(c[1]);
d=c[2]
}else{return -1
}}switch(d){case"rem":var a=DwtCssStyle.__getRootFontSize();
return a!==-1?e*a:-1;
case"mm":e/=10;
case"cm":e/=2.54;
case"in":e*=6;
case"pc":e*=12;
case"pt":e/=0.75;
case"px":return e;
case"ch":case"em":case"ex":return -1;
default:return -1
}}
}if(AjxPackage.define("ajax.dwt.graphics.DwtPoint")){DwtPoint=function(a,c){this.x=a||0;
this.y=c||0
};
DwtPoint.tmp=new DwtPoint(0,0);
DwtPoint.prototype.toString=function(){return"DwtPoint"
};
DwtPoint.prototype.set=function(a,c){this.x=a;
this.y=c
}
}if(AjxPackage.define("ajax.dwt.graphics.DwtRectangle")){DwtRectangle=function(c,e,d,a){this.x=c;
this.y=e;
this.width=d;
this.height=a
};
DwtRectangle.prototype.toString=function(){return"DwtRectangle"
};
DwtRectangle.prototype.set=function(c,e,d,a){this.x=c;
this.y=e
}
}if(AjxPackage.define("ajax.dwt.events.DwtEvent")){DwtEvent=function(a){if(arguments.length==0){return
}this.dwtObj=null
};
DwtEvent.prototype.toString=function(){return"DwtEvent"
};
DwtEvent.ONCHANGE="onchange";
DwtEvent.ONCLICK="onclick";
DwtEvent.ONCONTEXTMENU="oncontextmenu";
DwtEvent.ONDBLCLICK="ondblclick";
DwtEvent.ONFOCUS="onfocus";
DwtEvent.ONBLUR="onblur";
DwtEvent.ONKEYDOWN="onkeydown";
DwtEvent.ONKEYPRESS="onkeypress";
DwtEvent.ONKEYUP="onkeyup";
DwtEvent.ONMOUSEDOWN="onmousedown";
DwtEvent.ONMOUSEENTER="onmouseenter";
DwtEvent.ONMOUSELEAVE="onmouseleave";
DwtEvent.ONMOUSEMOVE="onmousemove";
DwtEvent.ONMOUSEOUT="onmouseout";
DwtEvent.ONMOUSEOVER="onmouseover";
DwtEvent.ONMOUSEUP="onmouseup";
DwtEvent.ONMOUSEWHEEL="onmousewheel";
DwtEvent.ONSELECTSTART="onselectstart";
DwtEvent.ONSCROLL="onscroll";
DwtEvent.ONPASTE="onpaste";
DwtEvent.ONCUT="oncut";
DwtEvent.ONINPUT="oninput";
DwtEvent.ACTION="ACTION";
DwtEvent.CONTROL="CONTROL";
DwtEvent.DATE_RANGE="DATE_RANGE";
DwtEvent.DISPOSE="DISPOSE";
DwtEvent.ENTER="ENTER";
DwtEvent.HOVEROVER="HOVEROVER";
DwtEvent.HOVEROUT="HOVEROUT";
DwtEvent.POPDOWN="POPDOWN";
DwtEvent.POPUP="POPUP";
DwtEvent.SELECTION="SELECTION";
DwtEvent.TREE="TREE";
DwtEvent.STATE_CHANGE="STATE_CHANGE";
DwtEvent.TAB="TAB";
DwtEvent.XFORMS_READY="xforms-ready";
DwtEvent.XFORMS_DISPLAY_UPDATED="xforms-display-updated";
DwtEvent.XFORMS_VALUE_CHANGED="xforms-value-changed";
DwtEvent.XFORMS_FORM_DIRTY_CHANGE="xforms-form-dirty-change";
DwtEvent.XFORMS_CHOICES_CHANGED="xforms-choices-changed";
DwtEvent.XFORMS_VALUE_ERROR="xforms-value-error";
DwtEvent.XFORMS_INSTANCE_CHANGED="xforms-instance-cahnged";
DwtEvent.KEY_EVENTS=[DwtEvent.ONKEYDOWN,DwtEvent.ONKEYPRESS,DwtEvent.ONKEYUP];
DwtEvent.MOUSE_EVENTS=[DwtEvent.ONCONTEXTMENU,DwtEvent.ONCLICK,DwtEvent.ONDBLCLICK,DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEMOVE,DwtEvent.ONMOUSEUP,DwtEvent.ONSELECTSTART,DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT]
}if(AjxPackage.define("ajax.dwt.events.DwtEventManager")){DwtEventManager=function(){};
DwtEventManager._instance=new AjxEventMgr();
DwtEventManager._domEventToDwtMap={ondblclick:DwtEvent.ONDBLCLICK,onmousedown:DwtEvent.ONMOUSEDOWN,onmouseup:DwtEvent.ONMOUSEUP,onmousemove:DwtEvent.ONMOUSEMOVE,onmouseout:DwtEvent.ONMOUSEOUT,onmouseover:DwtEvent.ONMOUSEOVER,onselectstart:DwtEvent.ONSELECTSTART,onchange:DwtEvent.ONCHANGE};
DwtEventManager.addListener=function(a,c){DwtEventManager._instance.addListener(a,c)
};
DwtEventManager.notifyListeners=function(a,c){DwtEventManager._instance.notifyListeners(a,c)
};
DwtEventManager.removeListener=function(a,c){DwtEventManager._instance.removeListener(a,c)
}
}if(AjxPackage.define("ajax.dwt.events.DwtUiEvent")){DwtUiEvent=function(a){if(arguments.length==0){return
}DwtEvent.call(this,true);
this.reset()
};
DwtUiEvent.prototype=new DwtEvent;
DwtUiEvent.prototype.constructor=DwtUiEvent;
DwtUiEvent.prototype.isDwtUiEvent=true;
DwtUiEvent.prototype.toString=function(){return"DwtUiEvent"
};
DwtUiEvent.prototype.reset=function(){this.dwtObj=null;
this.altKey=false;
this.ctrlKey=false;
this.metaKey=false;
this.shiftKey=false;
this.target=null;
this.type=null;
this.docX=-1;
this.docY=-1;
this.elementX=-1;
this.elementY=-1;
this.ersatz=false;
this._stopPropagation=false;
this._returnValue=true;
this._dontCallPreventDefault=false
};
DwtUiEvent.getEvent=function(c,d){c=c||window.event;
if(c){return c
}if(d){var a=(d.ownerDocument||d.document||d).parentWindow;
return a?a.event:null
}};
DwtUiEvent.getTarget=function(a,c){a=DwtUiEvent.getEvent(a);
if(!a){return null
}if(!c){if(a.target){return(a.target.nodeType==3)?a.target.parentNode:a.target
}else{if(a.srcElement){return a.srcElement
}}}else{if(a.relatedTarget){return a.relatedTarget
}else{if(a.toElement){return a.toElement
}else{if(a.fromElement){return a.fromElement
}}}}return null
};
DwtUiEvent.getTargetWithProp=function(c,g,f,e){var d=DwtUiEvent.getTarget(c,f);
while(d){var a=Dwt.getAttr(d,g);
if(a!=null&&a!==""&&(!e||(a==e))){return d
}d=d.parentNode
}return null
};
DwtUiEvent.getTargetWithClass=function(c,a,e){var d=DwtUiEvent.getTarget(c,e);
while(d&&d.nodeType===1){if(Dwt.hasClass(d,a)){return d
}d=d.parentNode
}return null
};
DwtUiEvent.getTargetWithProps=function(e,d){var f=DwtUiEvent.getTarget(e);
while(f){var c=true;
for(var a in d){var g=Dwt.getAttr(f,d[a]);
if(g==null||g===""){f=f.parentNode;
c=false;
break
}}if(c){return f
}}return null
};
DwtUiEvent.copy=function(a,c){a.altKey=c.altKey;
a.ctrlKey=c.ctrlKey;
a.metaKey=c.metaKey;
a.shiftKey=c.shiftKey;
a.target=c.target;
a.type=c.type;
a.dwtObj=c.dwtObj;
a.docX=c.docX;
a.docY=c.docY;
a.elementX=c.elementX;
a.elementY=c.elementY;
a.ersatz=c.ersatz;
a._stopPropagation=c._stopPropagation;
a._returnValue=c._returnValue
};
DwtUiEvent.prototype.setFromDhtmlEvent=function(c,d){c=DwtUiEvent.getEvent(c);
if(!c){return
}this.altKey=c.altKey;
this.ctrlKey=c.ctrlKey;
this.metaKey=c.metaKey;
this.shiftKey=c.shiftKey;
this.type=c.type;
this.target=DwtUiEvent.getTarget(c);
this.dwtObj=(d===true)?DwtControl.getTargetControl(c):d;
if(c.pageX!=null){this.docX=c.pageX;
this.docY=c.pageY
}else{if(c.clientX!=null){this.docX=c.clientX+document.body.scrollLeft-document.body.clientLeft;
this.docY=c.clientY+document.body.scrollTop-document.body.clientTop;
if(document.body.parentElement){var a=document.body.parentElement;
this.docX+=a.scrollLeft-a.clientLeft;
this.docY+=a.scrollTop-a.clientTop
}}}if(c.offsetX!=null){this.elementX=c.offsetX;
this.elementY=c.offsetY
}else{if(!AjxEnv.isWebKitBased&&c.layerX!=null){this.elementX=c.layerX;
this.elementY=c.layerY
}else{this.elementX=Dwt.DEFAULT;
this.elementY=Dwt.DEFAULT
}}this.ersatz=false;
return c
};
DwtUiEvent.prototype.setToDhtmlEvent=function(a){DwtUiEvent.setBehaviour(a,this._stopPropagation,this._returnValue,this._dontCallPreventDefault)
};
DwtUiEvent.setBehaviour=function(f,a,c,d){var e=DwtUiEvent.getEvent(f);
DwtUiEvent.setDhtmlBehaviour(e,a,c,d)
};
DwtUiEvent.setDhtmlBehaviour=function(e,a,c,d){e=DwtUiEvent.getEvent(e);
if(!e){return
}if(e.stopPropagation!=null){if(a){e.stopPropagation()
}if(!c&&!d){e.preventDefault()
}}else{e.returnValue=c;
e.cancelBubble=a
}};
DwtUiEvent.getDwtObjFromEvent=function(a,d){var c=DwtUiEvent.getTargetWithProp(a,"dwtObj",d);
return c?Dwt.getObjectFromElement(c):null
};
DwtUiEvent.getDwtObjWithProp=function(a,d){var c=DwtUiEvent.getTargetWithProps(a,["dwtObj",d]);
return c?Dwt.getObjectFromElement(c):null
}
}if(AjxPackage.define("ajax.dwt.events.DwtControlEvent")){DwtControlEvent=function(){this.reset()
};
DwtControlEvent.prototype=new DwtEvent;
DwtControlEvent.prototype.constructor=DwtControlEvent;
DwtControlEvent.RESIZE=1;
DwtControlEvent.MOVE=2;
DwtControlEvent.STATE=4;
DwtControlEvent.prototype.toString=function(){return"DwtControlEvent"
};
DwtControlEvent.prototype.reset=function(a){this.oldX=Dwt.DEFAULT;
this.oldY=Dwt.DEFAULT;
this.oldWidth=Dwt.DEFAULT;
this.oldHeight=Dwt.DEFAULT;
this.oldState=null;
this.newX=Dwt.DEFAULT;
this.newY=Dwt.DEFAULT;
this.newWidth=Dwt.DEFAULT;
this.newHeight=Dwt.DEFAULT;
this.newState=null;
this.type=a||null
}
}if(AjxPackage.define("ajax.dwt.events.DwtFocusEvent")){DwtFocusEvent=function(a){if(arguments.length==0){return
}DwtEvent.call(this,true);
this.reset()
};
DwtFocusEvent.prototype=new DwtEvent;
DwtFocusEvent.prototype.constructor=DwtFocusEvent;
DwtFocusEvent.FOCUS=1;
DwtFocusEvent.BLUR=2;
DwtFocusEvent.prototype.toString=function(){return"DwtFocusEvent"
};
DwtFocusEvent.prototype.reset=function(){this.dwtObj=null;
this.state=DwtFocusEvent.FOCUS
}
}if(AjxPackage.define("ajax.dwt.events.DwtKeyEvent")){DwtKeyEvent=function(){DwtUiEvent.call(this,true);
this.reset(true)
};
DwtKeyEvent.prototype.toString=function(){return"DwtKeyEvent"
};
DwtKeyEvent.prototype.isDwtKeyEvent=true;
DwtKeyEvent.KEY_END_OF_TEXT=3;
DwtKeyEvent.KEY_BACKSPACE=8;
DwtKeyEvent.KEY_TAB=9;
DwtKeyEvent.KEY_RETURN=13;
DwtKeyEvent.KEY_ENTER=DwtKeyEvent.KEY_RETURN;
DwtKeyEvent.KEY_ESCAPE=27;
DwtKeyEvent.KEY_SPACE=32;
DwtKeyEvent.KEY_ARROW_LEFT=37;
DwtKeyEvent.KEY_ARROW_UP=38;
DwtKeyEvent.KEY_ARROW_RIGHT=39;
DwtKeyEvent.KEY_ARROW_DOWN=40;
DwtKeyEvent.KEY_DELETE=46;
DwtKeyEvent.KEY_SEMICOLON=59;
DwtKeyEvent.KEY_SEMICOLON_1=186;
DwtKeyEvent.KEY_COMMA=188;
DwtKeyEvent.KEY_COMMAND=224;
DwtKeyEvent.IS_RETURN={};
DwtKeyEvent.IS_RETURN[DwtKeyEvent.KEY_END_OF_TEXT]=true;
DwtKeyEvent.IS_RETURN[DwtKeyEvent.KEY_RETURN]=true;
DwtKeyEvent.MAC_FF_CODE={};
DwtKeyEvent.MAC_FF_CODE["~"]=192;
DwtKeyEvent.MAC_FF_CODE["!"]=49;
DwtKeyEvent.MAC_FF_CODE["@"]=50;
DwtKeyEvent.MAC_FF_CODE["#"]=51;
DwtKeyEvent.MAC_FF_CODE["$"]=52;
DwtKeyEvent.MAC_FF_CODE["%"]=53;
DwtKeyEvent.MAC_FF_CODE["^"]=54;
DwtKeyEvent.MAC_FF_CODE["&"]=55;
DwtKeyEvent.MAC_FF_CODE["*"]=56;
DwtKeyEvent.MAC_FF_CODE["("]=57;
DwtKeyEvent.MAC_FF_CODE[")"]=48;
DwtKeyEvent.MAC_FF_CODE["-"]=189;
DwtKeyEvent.MAC_FF_CODE._=189;
DwtKeyEvent.MAC_FF_CODE["+"]=187;
DwtKeyEvent.MAC_FF_CODE["|"]=220;
DwtKeyEvent.MAC_FF_CODE[":"]=186;
DwtKeyEvent.MAC_FF_CODE["<"]=188;
DwtKeyEvent.MAC_FF_CODE[">"]=190;
DwtKeyEvent.MAC_FF_CODE["?"]=191;
DwtKeyEvent.prototype=new DwtUiEvent;
DwtKeyEvent.prototype.constructor=DwtKeyEvent;
DwtKeyEvent.isKeyEvent=function(a){return a.type&&a.type.search(/^key/i)!=-1
};
DwtKeyEvent.isKeyPressEvent=function(a){return(AjxEnv.isIE&&a.type=="keydown")||(a.type=="keypress")
};
DwtKeyEvent.prototype.reset=function(a){if(!a){DwtUiEvent.prototype.reset.call(this)
}this.keyCode=0;
this.charCode=0
};
DwtKeyEvent.prototype.isCommand=function(a){return AjxEnv.isMac&&this.metaKey||this.ctrlKey
};
DwtKeyEvent.prototype.setFromDhtmlEvent=function(a,c){a=DwtUiEvent.prototype.setFromDhtmlEvent.apply(this,arguments);
if(!a){return
}this.charCode=a.charCode||a.keyCode;
this.keyCode=a.keyCode
};
DwtKeyEvent.getCharCode=function(c){c=DwtUiEvent.getEvent(c);
var a=AjxEnv.isSafari?c.keyCode:(c.charCode||c.keyCode);
if(a==0&&AjxEnv.isMac&&AjxEnv.isGeckoBased&&c.type=="keyup"&&DwtKeyEvent._geckoCode){a=DwtKeyEvent._geckoCode;
DwtKeyEvent._geckoCode=null
}return a
};
DwtKeyEvent.copy=function(a,c){DwtUiEvent.copy(a,c);
a.charCode=c.charCode;
a.keyCode=c.keyCode
};
DwtKeyEvent.geckoCheck=function(c){c=DwtUiEvent.getEvent(c);
if(c.type=="keypress"){DwtKeyEvent._geckoCode=null;
if(AjxEnv.isMac&&AjxEnv.isGeckoBased){var a=String.fromCharCode(c.charCode);
DwtKeyEvent._geckoCode=DwtKeyEvent.MAC_FF_CODE[a]
}}}
}if(AjxPackage.define("ajax.dwt.events.DwtMouseEvent")){DwtMouseEvent=function(){DwtUiEvent.call(this,true);
this.reset(true)
};
DwtMouseEvent.prototype=new DwtUiEvent;
DwtMouseEvent.prototype.constructor=DwtMouseEvent;
DwtMouseEvent.prototype.toString=function(){return"DwtMouseEvent"
};
DwtMouseEvent.NONE=0;
DwtMouseEvent.LEFT=1;
DwtMouseEvent.MIDDLE=2;
DwtMouseEvent.RIGHT=3;
DwtMouseEvent.prototype.reset=function(a){if(!a){DwtUiEvent.prototype.reset.call(this)
}this.button=0
};
DwtMouseEvent.prototype.setFromDhtmlEvent=function(a,c){a=DwtUiEvent.prototype.setFromDhtmlEvent.apply(this,arguments);
if(!a){return
}if(a.which){switch(a.which){case 1:this.button=DwtMouseEvent.LEFT;
break;
case 2:this.button=DwtMouseEvent.MIDDLE;
break;
case 3:this.button=DwtMouseEvent.RIGHT;
break;
default:this.button=DwtMouseEvent.NONE
}}else{if(a.button){if((a.button&1)!=0){this.button=DwtMouseEvent.LEFT
}else{if((a.button&2)!=0){this.button=DwtMouseEvent.RIGHT
}else{if((a.button&4)!=0){this.button=DwtMouseEvent.MIDDLE
}else{this.button=DwtMouseEvent.NONE
}}}}}if(AjxEnv.isMac&&this.button){if(this.ctrlKey&&(this.button==DwtMouseEvent.LEFT||this.button==DwtMouseEvent.RIGHT)){this.button=DwtMouseEvent.RIGHT;
this.ctrlKey=false
}if(this.altKey){this.ctrlKey=true;
this.altKey=false
}}}
}if(AjxPackage.define("ajax.dwt.events.DwtMouseEventCapture")){DwtMouseEventCapture=function(a){a=Dwt.getParams(arguments,DwtMouseEventCapture.PARAMS);
this.targetObj=a.targetObj;
this._id=a.id;
this._mouseOverHdlr=a.mouseOverHdlr||DwtMouseEventCapture.emptyHdlr;
this._mouseDownHdlr=a.mouseDownHdlr||DwtMouseEventCapture.emptyHdlr;
this._mouseMoveHdlr=a.mouseMoveHdlr||DwtMouseEventCapture.emptyHdlr;
this._mouseUpHdlr=a.mouseUpHdlr||DwtMouseEventCapture.emptyHdlr;
this._mouseOutHdlr=a.mouseOutHdlr||DwtMouseEventCapture.emptyHdlr;
this._mouseWheelHdlr=a.mouseWheelHdlr||DwtMouseEventCapture.emptyHdlr;
this._hardCapture=(a.hardCapture!==false)
};
DwtMouseEventCapture.PARAMS=["targetObj","id","mouseOverHdlr","mouseDownHdlr","mouseMoveHdlr","mouseUpHdlr","mouseOutHdlr","mouseWheelHdlr","hardCapture"];
DwtMouseEventCapture._capturing=false;
DwtMouseEventCapture.getCaptureObj=function(){return window._mouseEventCaptureObj
};
DwtMouseEventCapture.getTargetObj=function(){return window._mouseEventCaptureObj?window._mouseEventCaptureObj.targetObj:null
};
DwtMouseEventCapture.getId=function(){return window._mouseEventCaptureObj?window._mouseEventCaptureObj._id:null
};
DwtMouseEventCapture.prototype.toString=function(){return"DwtMouseEventCapture"
};
DwtMouseEventCapture.prototype.capturing=function(){return DwtMouseEventCapture._capturing
};
DwtMouseEventCapture.prototype.capture=function(){if(window._mouseEventCaptureObj){window._mouseEventCaptureObj.release()
}if(document.body!=null&&document.body.addEventListener!=null){document.body.addEventListener("mouseover",this._mouseOverHdlr,true);
document.body.addEventListener("mousedown",this._mouseDownHdlr,true);
document.body.addEventListener("mousemove",this._mouseMoveHdlr,true);
document.body.addEventListener("mouseup",this._mouseUpHdlr,true);
document.body.addEventListener("mouseout",this._mouseOutHdlr,true);
document.body.addEventListener("DOMMouseScroll",this._mouseWheelHdlr,true)
}else{this._savedMouseOverHdlr=document.onmouseover;
this._savedMouseDownHdlr=document.onmousedown;
this._savedMouseMoveHdlr=document.onmousemove;
this._savedMouseUpHdlr=document.onmouseup;
this._savedMouseOutHdlr=document.onmouseout;
this._savedMouseWheelHdlr=document.onmousewheel;
document.onmouseover=this._mouseOverHdlr;
document.onmousedown=this._mouseDownHdlr;
document.onmousemove=this._mouseMoveHdlr;
document.onmouseup=this._mouseUpHdlr;
document.onmouseout=this._mouseOutHdlr;
document.onmousewheel=this._mouseWheelHdlr
}window._mouseEventCaptureObj=this;
DwtMouseEventCapture._capturing=true
};
DwtMouseEventCapture.prototype.release=function(){if(window._mouseEventCaptureObj==null){return
}var a=window._shellCaptureObj;
if(document.body&&document.body.addEventListener){document.body.removeEventListener("mouseover",this._mouseOverHdlr,true);
document.body.removeEventListener("mousedown",this._mouseDownHdlr,true);
document.body.removeEventListener("mousemove",this._mouseMoveHdlr,true);
document.body.removeEventListener("mouseup",this._mouseUpHdlr,true);
document.body.removeEventListener("mouseout",this._mouseOutHdlr,true);
document.body.removeEventListener("DOMMouseScroll",this._mouseWheelHdlr,true)
}else{document.onmouseover=this._savedMouseOverHdlr;
document.onmousedown=this._savedMouseDownHdlr;
document.onmousemove=this._savedMouseMoveHdlr;
document.onmouseup=this._savedMouseUpHdlr;
document.onmouseout=this._savedMouseOutHdlr;
document.onmousewheel=this._savedMouseWheelHdlr
}window._mouseEventCaptureObj=null;
DwtMouseEventCapture._capturing=false
};
DwtMouseEventCapture.emptyHdlr=function(c){var d=DwtMouseEventCapture.getCaptureObj();
var a=DwtShell.mouseEvent;
a.setFromDhtmlEvent(c);
if(d._hardCapture){a._stopPropagation=true;
a._returnValue=false;
a.setToDhtmlEvent(c);
return false
}else{a._stopPropagation=false;
a._returnValue=true;
a.setToDhtmlEvent(c);
return true
}}
}if(AjxPackage.define("ajax.dwt.events.DwtListViewActionEvent")){DwtListViewActionEvent=function(){DwtMouseEvent.call(this);
this.reset(true)
};
DwtListViewActionEvent.prototype=new DwtMouseEvent;
DwtListViewActionEvent.prototype.constructor=DwtListViewActionEvent;
DwtListViewActionEvent.prototype.toString=function(){return"DwtListViewActionEvent"
};
DwtListViewActionEvent.prototype.reset=function(a){if(!a){DwtMouseEvent.prototype.reset.call(this)
}this.field=null;
this.item=null;
this.detail=null
}
}if(AjxPackage.define("ajax.dwt.events.DwtSelectionEvent")){DwtSelectionEvent=function(a){if(arguments.length==0){return
}DwtUiEvent.call(this,true);
this.reset(true)
};
DwtSelectionEvent.prototype=new DwtUiEvent;
DwtSelectionEvent.prototype.constructor=DwtSelectionEvent;
DwtSelectionEvent.prototype.toString=function(){return"DwtSelectionEvent"
};
DwtSelectionEvent.prototype.reset=function(a){if(!a){DwtUiEvent.prototype.reset.call(this)
}this.button=0;
this.detail=null;
this.item=null
}
}if(AjxPackage.define("ajax.dwt.events.DwtTreeEvent")){DwtTreeEvent=function(){DwtSelectionEvent.call(this,true)
};
DwtTreeEvent.prototype=new DwtSelectionEvent;
DwtTreeEvent.prototype.constructor=DwtTreeEvent;
DwtTreeEvent.prototype.toString=function(){return"DwtTreeEvent"
};
DwtTreeEvent.prototype.setFromDhtmlEvent=function(a,c){a=DwtSelectionEvent.prototype.setFromDhtmlEvent.apply(this,arguments)
}
}if(AjxPackage.define("ajax.dwt.events.DwtHoverEvent")){DwtHoverEvent=function(e,d,c,a,f){if(arguments.length==0){return
}DwtEvent.call(this,true);
this.type=e;
this.delay=d;
this.object=c;
this.x=a||-1;
this.y=f||-1
};
DwtHoverEvent.prototype=new DwtEvent;
DwtHoverEvent.prototype.constructor=DwtHoverEvent;
DwtHoverEvent.prototype.toString=function(){return"DwtHoverEvent"
};
DwtHoverEvent.prototype.reset=function(){this.type=0;
this.delay=0;
this.object=null;
this.x=-1;
this.y=-1
}
}if(AjxPackage.define("ajax.dwt.events.DwtIdleTimer")){DwtIdleTimer=function(c,a){DwtIdleTimer._initEvents();
this.timeout=c;
this.handler=a;
this.idle=false;
this._onIdle=AjxCallback.simpleClosure(this.setIdle,this);
this._startTimer();
DwtIdleTimer.getHandlers().add(this)
};
DwtIdleTimer.idleHandlers=0;
DwtIdleTimer.prototype.toString=function(){return"DwtIdleTimer"
};
DwtIdleTimer.prototype.kill=function(){this._stopTimer();
this.idle=false;
DwtIdleTimer.getHandlers().remove(this)
};
DwtIdleTimer.prototype.resurrect=function(a){this.idle=false;
DwtIdleTimer.getHandlers().add(this,null,true);
if(a!=null){this.timeout=a
}this._startTimer()
};
DwtIdleTimer.prototype.setIdle=function(){if(!this.idle){DwtIdleTimer.idleHandlers++;
this.idle=true;
this.handler.run(true)
}};
DwtIdleTimer.prototype.resume=function(){if(this.idle){this.idle=false;
this.handler.run(false);
DwtIdleTimer.idleHandlers--
}};
DwtIdleTimer.prototype._startTimer=function(){this._stopTimer();
this._timer=setTimeout(this._onIdle,this.timeout)
};
DwtIdleTimer.prototype._stopTimer=function(){if(this._timer){clearTimeout(this._timer);
this._timer=null
}};
DwtIdleTimer._initEvents=function(){if(!DwtIdleTimer._initialized){if(window.addEventListener){window.addEventListener("keydown",DwtIdleTimer.resetIdle,true);
window.addEventListener("mousemove",DwtIdleTimer.resetIdle,true);
window.addEventListener("mousedown",DwtIdleTimer.resetIdle,true);
window.addEventListener("focus",DwtIdleTimer.resetIdle,true)
}else{if(window.attachEvent){document.body.attachEvent("onkeydown",DwtIdleTimer.resetIdle);
document.body.attachEvent("onkeyup",DwtIdleTimer.resetIdle);
document.body.attachEvent("onmousedown",DwtIdleTimer.resetIdle);
document.body.attachEvent("onmousemove",DwtIdleTimer.resetIdle);
document.body.attachEvent("onmouseover",DwtIdleTimer.resetIdle);
document.body.attachEvent("onmouseout",DwtIdleTimer.resetIdle);
window.attachEvent("onfocus",DwtIdleTimer.resetIdle)
}}DwtIdleTimer._initialized=true
}};
DwtIdleTimer.getHandlers=function(){var c=DwtIdleTimer.HANDLERS;
if(!c){c=DwtIdleTimer.HANDLERS=new AjxVector()
}return c
};
DwtIdleTimer.resetIdle=function(){var c=DwtIdleTimer.getHandlers();
c.foreach("_startTimer");
if(DwtIdleTimer.idleHandlers>0){c.foreach("resume")
}}
}if(AjxPackage.define("ajax.dwt.events.DwtOutsideMouseEventMgr")){DwtOutsideMouseEventMgr=function(){this._reset();
this._mouseEventListener=DwtOutsideMouseEventMgr._mouseEventHdlr.bind();
DwtOutsideMouseEventMgr.INSTANCE=this;
this.id="DwtOutsideMouseEventMgr"
};
DwtOutsideMouseEventMgr.prototype.isDwtOutsideMouseEventMgr=true;
DwtOutsideMouseEventMgr.prototype.toString=function(){return"DwtOutsideMouseEventMgr"
};
DwtOutsideMouseEventMgr.EVENTS=[DwtEvent.ONMOUSEDOWN];
DwtOutsideMouseEventMgr.EVENTS_HASH=AjxUtil.arrayAsHash(DwtOutsideMouseEventMgr.EVENTS);
DwtOutsideMouseEventMgr.prototype.startListening=function(e){if(!(e&&e.outsideListener)){return
}var a=e.id;
if(!this._menuCapObj){var d={id:this.id,hardCapture:false,mouseDownHdlr:DwtOutsideMouseEventMgr._mouseEventHdlr};
this._menuCapObj=new DwtMouseEventCapture(d)
}var g=e.elementId||(e.obj&&e.obj.getHTMLElId&&e.obj.getHTMLElId());
var c=this._byId[a];
if(c){if(g){c.elementIds.push(g)
}return
}else{c=this._byId[a]={id:a,obj:e.obj,elementIds:[g],outsideListener:e.outsideListener}
}if(this._numIds==0){if(AjxEnv.isIE){var h=DwtShell.getShell(window);
var k=DwtOutsideMouseEventMgr.EVENTS;
h._setEventHdlrs(k);
for(var f=0;
f<k.length;
f++){var j=k[f];
h.addListener(j,this._mouseEventListener);
DwtEventManager.addListener(j,this._mouseEventListener)
}}if(!AjxEnv.isIE&&!e.noWindowBlur){this._savedWindowBlurHandler=window.onblur;
window.onblur=DwtOutsideMouseEventMgr._mouseEventHdlr
}this._menuCapObj.capture();
this._capturing=true
}this._numIds++
};
DwtOutsideMouseEventMgr.prototype.stopListening=function(e){if(typeof e=="string"){e={id:e}
}var a=e.id;
var d=this._byId[a];
if(!d){return
}var c=d.elementIds;
var g=e.elementId||(e.obj&&e.obj.getHTMLElId());
if(g){AjxUtil.arrayRemove(c,g);
if(c.length>0){return
}}delete this._byId[a];
this._numIds--;
if(this._numIds==0){if(AjxEnv.isIE){var h=DwtShell.getShell(window);
var k=DwtOutsideMouseEventMgr.EVENTS;
h._setEventHdlrs(k,true);
for(var f=0;
f<k.length;
f++){var j=k[f];
h.removeListener(j,this._mouseEventListener);
DwtEventManager.removeListener(j,this._mouseEventListener)
}}if(!AjxEnv.isIE&&!e.noWindowBlur){window.onblur=this._savedWindowBlurHandler
}this._reset()
}};
DwtOutsideMouseEventMgr.prototype._reset=function(){if(this._capturing&&(DwtMouseEventCapture.getId()==this.id)){this._menuCapObj.release();
this._capturing=false
}this._byId={};
this._numIds=0
};
DwtOutsideMouseEventMgr.forwardEvent=function(d){if(!d){return
}var c=DwtOutsideMouseEventMgr.INSTANCE;
if(!c._numIds){return
}var a="on"+d.type;
if(DwtOutsideMouseEventMgr.EVENTS_HASH[a]){DwtOutsideMouseEventMgr._mouseEventHdlr(d)
}};
DwtOutsideMouseEventMgr._mouseEventHdlr=function(h){h=DwtUiEvent.getEvent(h);
if(!h){return
}var j=DwtOutsideMouseEventMgr.INSTANCE;
var k=DwtUiEvent.getTarget(h);
if(AjxEnv.isGeckoBased&&h&&(h.type=="blur")&&h.target&&h.explicitOriginalTarget&&(h.target!=h.explicitOriginalTarget)){DwtUiEvent.setBehaviour(h,false,true);
return true
}for(var a in j._byId){var g=true;
var c=j._byId[a];
var f=c.elementIds;
for(var e=0;
e<f.length;
e++){var d=document.getElementById(f[e]);
if(d&&k&&Dwt.isAncestor(d,k)){g=false;
break
}}if(g){c.outsideListener.run(h,c)
}}DwtUiEvent.setBehaviour(h,false,true);
return true
};
new DwtOutsideMouseEventMgr()
}if(AjxPackage.define("ajax.dwt.keyboard.DwtKeyMap")){DwtKeyMap=function(a){if(a){return
}this._map={};
this._args={};
this._checkedMap={};
this._load(this._map,AjxKeys);
DwtKeyMap.MOD_ORDER[DwtKeyMap.ALT]=1;
DwtKeyMap.MOD_ORDER[DwtKeyMap.CTRL]=2;
DwtKeyMap.MOD_ORDER[DwtKeyMap.META]=3;
DwtKeyMap.MOD_ORDER[DwtKeyMap.SHIFT]=4
};
DwtKeyMap.prototype.isDwtKeyMap=true;
DwtKeyMap.prototype.toString=function(){return"DwtKeyMap"
};
DwtKeyMap.ALT="Alt";
DwtKeyMap.CTRL="Ctrl";
DwtKeyMap.META="Meta";
DwtKeyMap.SHIFT="Shift";
DwtKeyMap.deserialize=function(a){alert("DwtKeyMap.deserialize: NOT IMPLEMENTED")
};
DwtKeyMap.serialize=function(a){alert("DwtKeyMap.serialize: NOT IMPLEMENTED")
};
DwtKeyMap.MAP_DIALOG="dialog";
DwtKeyMap.MAP_OPTION_DIALOG="optionDialog";
DwtKeyMap.MAP_BUTTON="button";
DwtKeyMap.MAP_LIST="list";
DwtKeyMap.MAP_MENU="menu";
DwtKeyMap.MAP_EDITOR="editor";
DwtKeyMap.MAP_TOOLBAR_HORIZ="toolbarHorizontal";
DwtKeyMap.MAP_TOOLBAR_VERT="toolbarVertical";
DwtKeyMap.MAP_TAB_VIEW="tabView";
DwtKeyMap.MAP_TREE="tree";
DwtKeyMap.IS_MODIFIER={};
DwtKeyMap.MOD_ORDER={};
DwtKeyMap.ARROW_DOWN="ArrowDown";
DwtKeyMap.ARROW_LEFT="ArrowLeft";
DwtKeyMap.ARROW_RIGHT="ArrowRight";
DwtKeyMap.ARROW_UP="ArrowUp";
DwtKeyMap.BACKSLASH="Backslash";
DwtKeyMap.BACKSPACE="Backspace";
DwtKeyMap.COMMA="Comma";
DwtKeyMap.DELETE="Del";
DwtKeyMap.END="End";
DwtKeyMap.ENTER="Enter";
DwtKeyMap.ESC="Esc";
DwtKeyMap.HOME="Home";
DwtKeyMap.PGDOWN="PgDown";
DwtKeyMap.PGUP="PgUp";
DwtKeyMap.SEMICOLON="Semicolon";
DwtKeyMap.SPACE="Space";
DwtKeyMap.TAB="Tab";
DwtKeyMap.ADD_SELECT_NEXT="AddNext";
DwtKeyMap.ADD_SELECT_PREV="AddPrevious";
DwtKeyMap.CANCEL="Cancel";
DwtKeyMap.COLLAPSE="Collapse";
DwtKeyMap.DBLCLICK="DoubleClick";
DwtKeyMap.DELETE="Delete";
DwtKeyMap.EXPAND="Expand";
DwtKeyMap.GOTO_TAB="GoToTab";
DwtKeyMap.HEADER1="Header1";
DwtKeyMap.HEADER2="Header2";
DwtKeyMap.HEADER3="Header3";
DwtKeyMap.HEADER4="Header4";
DwtKeyMap.HEADER5="Header5";
DwtKeyMap.HEADER6="Header6";
DwtKeyMap.INSERT_LINK="InsertLink";
DwtKeyMap.JUSTIFY_CENTER="CenterJustify";
DwtKeyMap.JUSTIFY_LEFT="LeftJustify";
DwtKeyMap.JUSTIFY_RIGHT="RightJustify";
DwtKeyMap.NEXT="Next";
DwtKeyMap.NEXT_TAB="NextTab";
DwtKeyMap.NO="No";
DwtKeyMap.PAGE_UP="PageUp";
DwtKeyMap.PAGE_DOWN="PageDown";
DwtKeyMap.PARENTMENU="ParentMenu";
DwtKeyMap.PREV="Previous";
DwtKeyMap.PREV_TAB="PreviousTab";
DwtKeyMap.SELECT_ALL="SelectAll";
DwtKeyMap.SELECT="Select";
DwtKeyMap.SELECT_CURRENT="SelectCurrent";
DwtKeyMap.SELECT_FIRST="SelectFirst";
DwtKeyMap.SELECT_LAST="SelectLast";
DwtKeyMap.SELECT_NEXT="SelectNext";
DwtKeyMap.SELECT_PREV="SelectPrevious";
DwtKeyMap.SUBMENU="SubMenu";
DwtKeyMap.SWITCH_MODE="SwitchMode";
DwtKeyMap.TEXT_BOLD="Bold";
DwtKeyMap.TEXT_ITALIC="Italic";
DwtKeyMap.TEXT_UNDERLINE="Underline";
DwtKeyMap.TEXT_STRIKETHRU="Strikethru";
DwtKeyMap.YES="Yes";
DwtKeyMap.GOTO_TAB_RE=new RegExp(DwtKeyMap.GOTO_TAB+"(\\d+)");
DwtKeyMap.JOIN="+";
DwtKeyMap.SEP=",";
DwtKeyMap.INHERIT="INHERIT";
DwtKeyMap.prototype.getMap=function(){return this._map
};
DwtKeyMap.prototype._load=function(t,j){var o=AjxEnv.platform.toLowerCase();
for(var h in j){var m=h.split(".");
var g=m[m.length-1];
if(g==="win"||g==="mac"||g==="linux"){if(g===o){var r=m.slice(0,m.length-1).join(".");
j[r]=j[h]
}j[h]=null
}var f=AjxStringUtil.trim(j[h]);
if(m[2]&&m[2]==="keycode"&&f&&f.indexOf("{")!==-1){j[h]=f.replace(/\{(\w)(\w+)\}/g,function(i,v,p){return v.toUpperCase()+p
})
}}for(var h in j){var f=AjxStringUtil.trim(j[h]);
if(!f||(typeof j[h]!="string")){continue
}var m=h.split(".");
var a=m[m.length-1];
var c=(m.length==2);
var n=c?null:m[1];
if(m[0]=="keys"){this._processKeyDef(n,a,f);
continue
}if(a!=DwtKeyMap.INHERIT&&a!="keycode"){continue
}var l=m[0];
if((this._checkedMap[l]===false)||(!this._checkedMap[l]&&!this._checkMap(l))){continue
}if(!t[l]){t[l]={}
}if(!this._checkAction(l,n)){continue
}var e=f.split(/\s*;\s*/);
for(var q=0;
q<e.length;
q++){var u=this._canonicalize(e[q]);
if(a==DwtKeyMap.INHERIT){var s=u.split(/\s*,\s*/);
var d=[];
for(var k=0;
k<s.length;
k++){d[k]=s[k]
}t[l][m[1]]=d.join(",")
}else{if(a=="keycode"){t[l][u]=n
}}}}};
DwtKeyMap.prototype._checkMap=function(c){var a=true;
this._checkedMap[c]=a;
return a
};
DwtKeyMap.prototype._checkAction=function(a,c){return true
};
DwtKeyMap.prototype._processKeyDef=function(a,d,c){if(!a||!d||!c){return
}if(d=="keycode"){DwtKeyMap.IS_MODIFIER[c]=true
}};
DwtKeyMap.prototype._canonicalize=function(h){var f=h.split(DwtKeyMap.SEP);
var a=[];
for(var d=0;
d<f.length;
d++){var c=f[d];
var g=c.split(DwtKeyMap.JOIN);
if(g.length>2){var e=g.slice(0,g.length-1);
e.sort(function(l,j){var k=DwtKeyMap.MOD_ORDER[l]||0;
var i=DwtKeyMap.MOD_ORDER[j]||0;
return Number(k-i)
});
e.push(g[g.length-1]);
a.push(e.join(DwtKeyMap.JOIN))
}else{a.push(c)
}}return a.join(",")
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtHoverMgr")){DwtHoverMgr=function(){this._hoverOverAction=new AjxTimedAction(this,this._notifyHoverOver);
this._hoverOutAction=new AjxTimedAction(this,this._notifyHoverOut);
this._ignoreHoverOverOnClickAction=new AjxTimedAction(this,this._resetIgnoreHoverOverOnClick)
};
DwtHoverMgr.prototype.isDwtHoverMgr=true;
DwtHoverMgr.prototype.toString=function(){return"DwtHoverMgr"
};
DwtHoverMgr.prototype._hoverOverDelay=750;
DwtHoverMgr.prototype._hoverOverActionId=-1;
DwtHoverMgr.prototype._hoverOutDelay=50;
DwtHoverMgr.prototype._ignoreHoverOverOnClickDelay=750;
DwtHoverMgr.prototype._hoverOutActionId=-1;
DwtHoverMgr.prototype._isHovering=false;
DwtHoverMgr.prototype.setHoverObject=function(a){this._hoverObject=a
};
DwtHoverMgr.prototype.getHoverObject=function(){return this._hoverObject
};
DwtHoverMgr.prototype.reset=function(){this._hoverObject=null;
this._hoverOverDelay=DwtHoverMgr.prototype._hoverOverDelay;
this._hoverOverData=null;
if(this._hoverOverActionId!=-1){AjxTimedAction.cancelAction(this._hoverOverActionId)
}this._hoverOverActionId=-1;
this._hoverOverListener=null;
this._hoverOutDelay=DwtHoverMgr.prototype._hoverOutDelay;
this._hoverOutData=null;
if(this._hoverOutActionId!=-1){AjxTimedAction.cancelAction(this._hoverOutActionId);
this._notifyHoverOut()
}this._hoverOutActionId=-1;
this._hoverOutListener=null
};
DwtHoverMgr.prototype.isHovering=function(){return this._isHovering
};
DwtHoverMgr.prototype.setHoverOverDelay=function(a){this._hoverOverDelay=a
};
DwtHoverMgr.prototype.setHoverOverData=function(a){this._hoverOverData=a
};
DwtHoverMgr.prototype.setHoverOverListener=function(a){this._hoverOverListener=a
};
DwtHoverMgr.prototype.setHoverOutDelay=function(a){this._hoverOutDelay=a
};
DwtHoverMgr.prototype.setHoverOutData=function(a){this._hoverOutData=a
};
DwtHoverMgr.prototype.setHoverOutListener=function(a){this._hoverOutListener=a
};
DwtHoverMgr.prototype.ignoreHoverOverOnClick=function(){this._ignoreHoverOverOnClick=true;
AjxTimedAction.scheduleAction(this._ignoreHoverOverOnClickAction,this._ignoreHoverOverOnClickDelay)
};
DwtHoverMgr.prototype._resetIgnoreHoverOverOnClick=function(){this._ignoreHoverOverOnClick=false
};
DwtHoverMgr.prototype.hoverOver=function(a,c){if(this._ignoreHoverOverOnClick){return
}this._isHovering=true;
if(this._hoverOverActionId!=-1){AjxTimedAction.cancelAction(this._hoverOverActionId)
}this._hoverOverAction.args=[a,c];
this._hoverOverActionId=AjxTimedAction.scheduleAction(this._hoverOverAction,this._hoverOverDelay)
};
DwtHoverMgr.prototype.hoverOut=function(){this._isHovering=false;
if(this._hoverOverActionId!=-1){AjxTimedAction.cancelAction(this._hoverOverActionId)
}if(this._hoverOutActionId==-1){if(this._hoverOutDelay>0){this._hoverOutActionId=AjxTimedAction.scheduleAction(this._hoverOutAction,this._hoverOutDelay)
}else{this._notifyHoverOut()
}}};
DwtHoverMgr.prototype._notifyHoverOver=function(){this._hoverOverActionId=-1;
if(this._hoverOverListener!=null){var a=this._hoverOverAction.args[0];
var d=this._hoverOverAction.args[1];
var c=new DwtHoverEvent(DwtEvent.HOVEROVER,this._hoverOverDelay,this._hoverOverData,a,d);
this._hoverOverListener.handleEvent(c)
}};
DwtHoverMgr.prototype._notifyHoverOut=function(){this._hoverOutActionId=-1;
if(this._hoverOutListener!=null){var a=new DwtHoverEvent(DwtEvent.HOVEROUT,this._hoverOutDelay,this._hoverOutData);
this._hoverOutListener.handleEvent(a)
}}
}if(AjxPackage.define("ajax.dwt.widgets.DwtControl")){DwtControl=function(c){if(arguments.length==0){return
}c=Dwt.getParams(arguments,DwtControl.PARAMS);
var a=this.parent=c.parent;
if(a&&!(a.isDwtComposite)){throw new DwtException("Parent must be a subclass of Composite",DwtException.INVALIDPARENT,"DwtControl")
}this.shell=null;
this._data={};
this._eventMgr=new AjxEventMgr();
this._disposed=false;
this._propagateEvent={};
this._propagateEvent[DwtEvent.ONMOUSEWHEEL]=true;
if(!a){return
}this._className=c.className||"DwtControl";
this.__posStyle=c.posStyle;
if(c.id){this._htmlElId=c.id
}this.isFocusable=(c.isFocusable!==false);
if(c.role!=null){this.role=c.role
}this.__index=c.index;
this.__parentElement=c.parentElement;
this._enabled=false;
this._dragging=null;
this._dndProxy=null;
this._hasFocus=false;
if(!c.deferred){this.__initCtrl()
}this._hoverOverListener=new AjxListener(this,this.__handleHoverOver);
this._hoverOutListener=new AjxListener(this,this.__handleHoverOut);
this._dblClickIsolation=false;
this._ignoreInternalOverOut=false;
this.TEMPLATE=c.template||this.TEMPLATE
};
DwtControl.prototype.isDwtControl=true;
DwtControl.prototype.toString=function(){return"DwtControl"
};
DwtControl.prototype.isFocusable=null;
DwtControl.PARAMS=["parent","className","posStyle","deferred","id","index","template"];
DwtControl.ALL_BY_ID={};
DwtControl.NORMAL="";
DwtControl.ACTIVE="ZActive";
DwtControl.FOCUSED="ZFocused";
DwtControl.DISABLED="ZDisabled";
DwtControl.HOVER="ZHover";
DwtControl.SELECTED="ZSelected";
DwtControl.DEFAULT="ZDefault";
DwtControl.ERROR="ZError";
DwtControl._STATES=[DwtControl.ACTIVE,DwtControl.FOCUSED,DwtControl.DISABLED,DwtControl.HOVER,DwtControl.SELECTED,DwtControl.DEFAULT,DwtControl.ERROR];
DwtControl._RE_STATES=new RegExp("\\b("+DwtControl._STATES.join("|")+")\\b","g");
DwtControl._RE_STATE=AjxUtil.arrayAsHash(DwtControl._STATES,function(a){return new RegExp("\\b"+a+"\\b","g")
});
DwtControl._ARIA_STATES={};
DwtControl._ARIA_STATES[DwtControl.DISABLED]="aria-disabled";
DwtControl._ARIA_STATES[DwtControl.SELECTED]="aria-selected";
DwtControl._ARIA_STATES[DwtControl.ERROR]="aria-invalid";
DwtControl.useBrowserTooltips=false;
DwtControl.STATIC_STYLE=Dwt.STATIC_STYLE;
DwtControl.ABSOLUTE_STYLE=Dwt.ABSOLUTE_STYLE;
DwtControl.RELATIVE_STYLE=Dwt.RELATIVE_STYLE;
DwtControl.FIXED_STYLE=Dwt.FIXED_STYLE;
DwtControl.CLIP=Dwt.CLIP;
DwtControl.VISIBLE=Dwt.VISIBLE;
DwtControl.SCROLL=Dwt.SCROLL;
DwtControl.FIXED_SCROLL=Dwt.FIXED_SCROLL;
DwtControl._NO_DRAG="NO_DRAG";
DwtControl._DRAGGING="DRAGGING";
DwtControl._DRAG_REJECTED="DRAG_REJECTED";
DwtControl.__DRAG_THRESHOLD=3;
DwtControl.__TOOLTIP_THRESHOLD=5;
DwtControl.__DND_HOVER_DELAY=750;
DwtControl.__controlEvent=new DwtControlEvent();
DwtControl.__DBL_CLICK_TIMEOUT=300;
DwtControl.prototype._displayState="";
DwtControl.prototype.addControlListener=function(a){this.addListener(DwtEvent.CONTROL,a)
};
DwtControl.prototype.removeControlListener=function(a){this.removeListener(DwtEvent.CONTROL,a)
};
DwtControl.prototype.addDisposeListener=function(a){this.addListener(DwtEvent.DISPOSE,a)
};
DwtControl.prototype.removeDisposeListener=function(a){this.removeListener(DwtEvent.DISPOSE,a)
};
DwtControl.prototype.addListener=function(c,d,a){return this._eventMgr.addListener(c,d,a)
};
DwtControl.prototype.removeListener=function(a,c){return this._eventMgr.removeListener(a,c)
};
DwtControl.prototype.removeAllListeners=function(a){return this._eventMgr.removeAll(a)
};
DwtControl.prototype.isListenerRegistered=function(a){return this._eventMgr.isListenerRegistered(a)
};
DwtControl.prototype.notifyListeners=function(a,c){return this._eventMgr.notifyListeners(a,c)
};
DwtControl.prototype.dispose=function(){if(this._disposed){return
}if(this.parent&&this.parent.isDwtComposite){this.parent.removeChild(this)
}this._elRef=null;
DwtControl.ALL_BY_ID[this._htmlElId]=null;
delete DwtControl.ALL_BY_ID[this._htmlElId];
this._disposed=true;
var a=new DwtDisposeEvent();
a.dwtObj=this;
this.notifyListeners(DwtEvent.DISPOSE,a);
this._eventMgr.clearAllEvents()
};
DwtControl.prototype.getDocument=function(){return document
};
DwtControl.prototype.getTabGroupMember=function(){return this.tabGroupMember||this
};
DwtControl.prototype.getData=function(a){return this._data[a]
};
DwtControl.prototype.setData=function(a,c){this._data[a]=c
};
DwtControl.prototype.isDisposed=function(){return this._disposed
};
DwtControl.prototype.isInitialized=function(){return this.__ctrlInited
};
DwtControl.prototype.focus=function(){if(!this._checkState()){return
}var c=this.getFocusElement();
if(c&&c.focus){AjxTimedAction.scheduleAction(this._focusAction);
var a=this.getScrollContainer(),d=a&&a.scrollTop;
c.focus();
if(d>0){a.scrollTop=d
}}return this
};
DwtControl.prototype.blur=function(){if(!this._checkState()){return
}var a=this.getFocusElement();
if(a&&a.blur){AjxTimedAction.scheduleAction(this._blurAction);
a.blur()
}return this
};
DwtControl.prototype.hasFocus=function(){return this._hasFocus
};
DwtControl.prototype.handleKeyAction=function(a,c){return false
};
DwtControl.prototype.reparent=function(c,a){if(!this._checkState()){return
}var d=this.getHtmlElement();
this.parent.removeChild(this,true);
DwtComposite._pendingElements[this._htmlElId]=d;
c.addChild(this,a);
this.parent=c
};
DwtControl.prototype.reparentHtmlElement=function(d,a){if(typeof d=="string"){d=document.getElementById(d)
}if(!d){return
}var c=this.getHtmlElement();
if(a==null){d.appendChild(c)
}else{if(typeof a=="object"){d.insertBefore(c,a)
}else{if(d.childNodes[a]){d.insertBefore(c,d.childNodes[a])
}else{d.appendChild(c)
}}}};
DwtControl.prototype.setHandler=function(c,a){if(!this._checkState()){return
}var d=this.getHtmlElement();
Dwt.setHandler(d,c,a)
};
DwtControl.prototype.clearHandler=function(a){if(!this._checkState()){return
}var c=this.getHtmlElement();
Dwt.clearHandler(c,a)
};
DwtControl.prototype.setEventPropagation=function(a,d){d=AjxUtil.toArray(d);
for(var c=0;
c<d.length;
c++){this._propagateEvent[d[c]]=a
}};
DwtControl.prototype.getBounds=function(){if(!this._checkState()){return
}return Dwt.getBounds(this.getHtmlElement())
};
DwtControl.prototype.getInsetBounds=function(){if(!this._checkState()){return
}return Dwt.getInsetBounds(this.getHtmlElement())
};
DwtControl.prototype.getInsets=function(){if(!this._checkState()){return
}return Dwt.getInsets(this.getHtmlElement())
};
DwtControl.prototype.getMargins=function(){if(!this._checkState()){return
}return Dwt.getMargins(this.getHtmlElement())
};
DwtControl.prototype.setBounds=function(d,g,e,c){if(!this._checkState()){return
}var f=this.getHtmlElement();
if(this.isListenerRegistered(DwtEvent.CONTROL)){this.__controlEvent.reset(DwtControlEvent.RESIZE|DwtControlEvent.MOVE);
var a=Dwt.getBounds(f);
this.__controlEvent.oldX=a.x;
this.__controlEvent.oldY=a.y;
this.__controlEvent.oldWidth=a.width;
this.__controlEvent.oldHeight=a.height;
this.setLocation(d,g);
this.setSize(e,c);
a=Dwt.getBounds(f);
this.__controlEvent.newX=a.x;
this.__controlEvent.newY=a.y;
this.__controlEvent.newWidth=(AjxUtil.isNumber(e))?e:a.width;
this.__controlEvent.newHeight=(AjxUtil.isNumber(c))?c:a.height;
this.__controlEvent.requestedWidth=e;
this.__controlEvent.requestedHeight=c;
this.notifyListeners(DwtEvent.CONTROL,this.__controlEvent)
}else{this.setLocation(d,g);
this.setSize(e,c)
}return this
};
DwtControl.prototype.getClassName=function(){return this._className
};
DwtControl.prototype.setClassName=function(c){if(!this._checkState()){return
}this._className=c;
var a=this.getHtmlElement();
a.className=c;
Dwt.addClass(a,this._displayState)
};
DwtControl.prototype.addClassName=function(a){Dwt.addClass(this.getHtmlElement(),a)
};
DwtControl.prototype.delClassName=function(a,c){Dwt.delClass(this.getHtmlElement(),a,c)
};
DwtControl.prototype.condClassName=function(d,a,c){Dwt.condClass(this.getHtmlElement(),d,a,c)
};
DwtControl.prototype.setDisplayState=function(f){if(!this._enabled){f=DwtControl.DISABLED
}if(arguments.length>1){var c=[];
for(var e=0;
e<arguments.length;
e++){c.push(arguments[e])
}f=c.join(" ")
}if(this._displayState==f){return
}var d=this._displayState;
this._displayState=f;
Dwt.delClass(this.getHtmlElement(),DwtControl._RE_STATES,f);
AjxUtil.foreach(DwtControl._ARIA_STATES,(function(a,g){if(DwtControl._RE_STATE[g].test(this._displayState)){this.setAttribute(a,true)
}else{this.removeAttribute(a)
}}).bind(this));
if(this.isListenerRegistered(DwtEvent.STATE_CHANGE)){this.__controlEvent.reset(DwtControlEvent.STATE);
this.__controlEvent.oldState=d;
this.__controlEvent.newState=f;
this.__controlEvent.dwtObj=this;
this.notifyListeners(DwtEvent.STATE_CHANGE,this.__controlEvent)
}};
DwtControl.prototype.showAlert=function(a){if(a&&!this._alert){this.delClassName(null,"ZAlert")
}else{if(!a&&this._alert){this.delClassName("ZAlert",null)
}}this._alert=a
};
DwtControl.prototype.isAlertShown=function(){return this._alert
};
DwtControl.prototype._createHtmlFromTemplate=function(a,d){this.getHtmlElement().innerHTML=AjxTemplate.expand(a,d);
var e=AjxTemplate.getParams(a);
var c=e&&e["class"];
if(c){c=[this._className,c].join(" ");
this.setClassName(c)
}};
DwtControl.prototype.getCursor=function(){if(!this._checkState()){return
}return Dwt.getCursor(this.getHtmlElement())
};
DwtControl.prototype.setCursor=function(a){if(!this._checkState()){return
}Dwt.setCursor(this.getHtmlElement(),a)
};
DwtControl.prototype.getDragSource=function(){return this._dragSource
};
DwtControl.prototype.setDragSource=function(a){this._dragSource=a;
if(a&&!this._ctrlCaptureObj){this.__initCapture();
this._dndHoverAction=new AjxTimedAction(null,this.__dndDoHover)
}};
DwtControl.prototype.getDropTarget=function(){return this._dropTarget
};
DwtControl.prototype.setDropTarget=function(a){this._dropTarget=a
};
DwtControl.prototype.getDragBox=function(){return this._dragBox
};
DwtControl.prototype.setDragBox=function(a){this._dragBox=a;
if(a&&!this._ctrlCaptureObj){this.__initCapture()
}};
DwtControl.prototype.__initCapture=function(a){this._ctrlCaptureObj=new DwtMouseEventCapture({targetObj:this,id:"DwtControl",mouseOverHdlr:DwtControl.__mouseOverHdlr,mouseDownHdlr:DwtControl.__mouseDownHdlr,mouseMoveHdlr:DwtControl.__mouseMoveHdlr,mouseUpHdlr:DwtControl.__mouseUpHdlr,mouseOutHdlr:DwtControl.__mouseOutHdlr})
};
DwtControl.prototype.getEnabled=function(){if(!this._checkState()){return
}return this._enabled
};
DwtControl.prototype.setEnabled=function(a,c){if(!this._checkState()){return
}if(a!=this._enabled){this._enabled=a;
this.setDisplayState(a?DwtControl.NORMAL:DwtControl.DISABLED);
if(c){this.getHtmlElement().disabled=!a
}}};
DwtControl.prototype.getHTMLElId=function(){return this._htmlElId
};
DwtControl.prototype.getHtmlElement=function(){if(!this._checkState()){return
}var a=this._elRef||document.getElementById(this._htmlElId);
if(a==null){a=DwtComposite._pendingElements[this._htmlElId]
}else{if(!a._rendered){delete DwtComposite._pendingElements[this._htmlElId];
a._rendered=true
}}return this._elRef=a
};
DwtControl.prototype.getFocusElement=function(){return this.isFocusable?this._focusElement:null
};
DwtControl.prototype.setFocusElement=function(d){if(!this.isFocusable){return
}var a=(document.activeElement===this._focusElement),c=d||(this.getInputElement&&this.getInputElement())||this.getHtmlElement();
if(this._focusElement&&this._focusElement!==c){this._makeFocusable(this._focusElement,false)
}this._focusElement=c;
if(c){this._makeFocusable(this._focusElement,true);
if(a){c.focus()
}}};
DwtControl.fromElement=function(a){return DwtControl.ALL_BY_ID[a.id]
};
DwtControl.fromElementId=function(a){return DwtControl.ALL_BY_ID[a]
};
DwtControl.findControl=function(c){if(AjxEnv.isFirefox3_5up&&!AjxEnv.isFirefox3_6up){var a=HTMLElement.prototype.toString.call(c);
if(a=="[xpconnect wrapped native prototype]"||a=="[object XULElement]"){return null
}}try{while(c){if(c.id&&DwtControl.ALL_BY_ID[c.id]){return DwtControl.ALL_BY_ID[c.id]
}c=c.parentNode
}}catch(d){}return null
};
DwtControl.getTargetControl=function(a,d){var c=DwtUiEvent.getTarget(a,d);
return c?DwtControl.findControl(c):null
};
DwtControl.prototype.setHtmlElementId=function(c){if(this._disposed){return
}if(this.__ctrlInited){var a=this.getHtmlElement();
if(!a._rendered){delete DwtComposite._pendingElements[this._htmlElId];
DwtComposite._pendingElements[c]=a
}else{delete DwtControl.ALL_BY_ID[this._htmlElId];
DwtControl.ALL_BY_ID[c]=this
}a.id=c
}this._htmlElId=c
};
DwtControl.prototype.getX=function(){if(!this._checkState()){return
}return Dwt.getLocation(this.getHtmlElement()).x
};
DwtControl.prototype.getXW=function(){if(!this._checkState()){return
}var a=this.getBounds();
return a.x+a.width
};
DwtControl.prototype.getY=function(){if(!this._checkState()){return
}return Dwt.getLocation(this.getHtmlElement()).y
};
DwtControl.prototype.getYH=function(){if(!this._checkState()){return
}var a=this.getBounds();
return a.y+a.height
};
DwtControl.prototype.getPosition=function(){if(!this._checkState()){return
}return Dwt.getPosition(this.getHtmlElement())
};
DwtControl.prototype.setPosition=function(a){if(!this._checkState()){return
}return Dwt.setPosition(this.getHtmlElement(),a)
};
DwtControl.prototype.getLocation=function(){if(!this._checkState()){return
}return Dwt.getLocation(this.getHtmlElement())
};
DwtControl.prototype.setLocation=function(a,e){if(!this._checkState()){return
}if(this.isListenerRegistered(DwtEvent.CONTROL)){var c=this.getHtmlElement();
this.__controlEvent.reset(DwtControlEvent.MOVE);
var d=Dwt.getLocation(c);
this.__controlEvent.oldX=d.x;
this.__controlEvent.oldY=d.y;
Dwt.setLocation(c,a,e);
d=Dwt.getLocation(c);
this.__controlEvent.newX=d.x;
this.__controlEvent.newY=d.y;
this.notifyListeners(DwtEvent.CONTROL,this.__controlEvent)
}else{Dwt.setLocation(this.getHtmlElement(),a,e)
}return this
};
DwtControl.prototype.getScrollStyle=function(){if(!this._checkState()){return
}return Dwt.getScrollStyle(this.getHtmlElement())
};
DwtControl.prototype.setScrollStyle=function(a){if(!this._checkState()){return
}Dwt.setScrollStyle(this.getHtmlElement(),a)
};
DwtControl.prototype.getScrollContainer=function(){return this.parent&&this.parent.getHtmlElement()
};
DwtControl.prototype.setPosition=function(a){if(!this._checkState()){return
}if(a==DwtControl.STATIC_STYLE||a==DwtControl.ABSOLUTE_STYLE||a==DwtControl.RELATIVE_STYLE){this.__posStyle=a;
Dwt.setPosition(this.getHtmlElement(),a)
}};
DwtControl.prototype.getW=function(){if(!this._checkState()){return
}return Dwt.getSize(this.getHtmlElement()).x
};
DwtControl.prototype.getH=function(){if(!this._checkState()){return
}return Dwt.getSize(this.getHtmlElement()).y
};
DwtControl.prototype.getSize=function(a){if(!this._checkState()){return
}return Dwt.getSize(this.getHtmlElement(),null,a)
};
DwtControl.prototype.getOuterSize=function(){if(!this._checkState()){return
}return Dwt.getOuterSize(this.getHtmlElement(),null)
};
DwtControl.prototype.setSize=function(c,a){if(!this._checkState()){return
}if(this.isListenerRegistered(DwtEvent.CONTROL)){var e=this.getHtmlElement();
this.__controlEvent.reset(DwtControlEvent.RESIZE);
var d=Dwt.getSize(e);
this.__controlEvent.oldWidth=d.x;
this.__controlEvent.oldHeight=d.y;
Dwt.setSize(e,c,a);
d=Dwt.getSize(e);
this.__controlEvent.newWidth=d.x;
this.__controlEvent.newHeight=d.y;
this.notifyListeners(DwtEvent.CONTROL,this.__controlEvent)
}else{Dwt.setSize(this.getHtmlElement(),c,a)
}return this
};
DwtControl.prototype.getToolTipContent=function(a){if(this._disposed){return null
}return this.__toolTipContent
};
DwtControl.prototype.setToolTipContent=function(c,a){if(this._disposed){return
}if(c&&(typeof(c)=="string")&&DwtControl.useBrowserTooltips){if(!c||(!c.match(/[\n\r\t]/)&&!c.match(/<[a-zA-Z]+/))){var d=this.getHtmlElement();
if(d){d.title=c;
this._browserToolTip=true;
return
}}}this._browserToolTip=false;
this.__toolTipContent=c
};
DwtControl.prototype.getVisible=function(){if(!this._checkState()){return
}return Dwt.getVisible(this.getHtmlElement())
};
DwtControl.prototype.setVisible=function(a){if(!this._checkState()){return
}Dwt.setVisible(this.getHtmlElement(),a)
};
DwtControl.prototype.setVisibility=function(a){if(!this._checkState()){return
}Dwt.setVisibility(this.getHtmlElement(),a)
};
DwtControl.prototype.getVisibility=function(){if(!this._checkState()){return
}return Dwt.getVisibility(this.getHtmlElement())
};
DwtControl.prototype.getZIndex=function(a){if(!this._checkState()){return
}return Dwt.getZIndex(this.getHtmlElement(),a)
};
DwtControl.prototype.setZIndex=function(a){if(!this._checkState()){return
}Dwt.setZIndex(this.getHtmlElement(),a)
};
DwtControl.prototype.zShow=function(a){this.setZIndex(a?Dwt.Z_VIEW:Dwt.Z_HIDDEN)
};
DwtControl.prototype.setDisplay=function(a){if(!this._checkState()){return
}Dwt.setDisplay(this.getHtmlElement(),a)
};
DwtControl.prototype.setOpacity=function(a){if(!this._checkState()){return
}Dwt.setOpacity(this.getHtmlElement(),a)
};
DwtControl.prototype.getOpacity=function(){if(!this._checkState()){return
}return Dwt.getOpacity(this.getHtmlElement())
};
DwtControl.prototype.preventSelection=function(a){return !this.__isInputEl(a)
};
DwtControl.prototype.preventContextMenu=function(a){return a?(!this.__isInputEl(a)):true
};
DwtControl.prototype.getContent=function(){return this.getHtmlElement().innerHTML
};
DwtControl.prototype.setContent=function(a){if(a){this.getHtmlElement().innerHTML=a
}};
DwtControl.prototype.clearContent=function(){this.getHtmlElement().innerHTML=""
};
DwtControl.prototype.appendElement=function(c){var a=AjxUtil.isString(c)?document.getElementById(c):c;
if(a){a.appendChild(this.getHtmlElement(),a)
}};
DwtControl.prototype.replaceElement=function(e,a,f){var c=AjxUtil.isString(e)?document.getElementById(e):e;
if(c){var d=this.getHtmlElement();
c.parentNode.replaceChild(d,c);
this._replaceElementHook(c,d,a,f)
}};
DwtControl.prototype._replaceElementHook=function(c,f,a,i){if((a==null||a)&&c.className){Dwt.addClass(f,c.className)
}if(i==null||i){var d=c.getAttribute("style")||c.style;
if(d){if(AjxUtil.isString(d)){f.setAttribute("style",[f.getAttribute("style"),d].join(";"))
}else{if(AjxUtil.isString(d.cssText)){if(d.cssText){f.setAttribute("style",[f.getAttribute("style"),d.cssText].join(";"))
}}else{for(var g in d){if(d[g]){try{f.style[g]=d[g]
}catch(h){}}}}}}}};
DwtControl.prototype._blur=function(){};
DwtControl.prototype._focus=function(){};
DwtControl.prototype._focusByMouseUpEvent=function(a){if(this.getEnabled()){this.shell.getKeyboardMgr().grabFocus(this)
}};
DwtControl.prototype._focusByMouseDownEvent=function(a){this._duringFocusByMouseDown=true;
this._focusByMouseUpEvent(a);
this._duringFocusByMouseDown=false
};
DwtControl.prototype._getDragOp=function(a){return a.ctrlKey?Dwt.DND_DROP_COPY:Dwt.DND_DROP_MOVE
};
DwtControl.prototype._getDragProxy=function(a){return null
};
DwtControl.prototype.getDragSelectionBox=function(a){if(!this._dragSelectionBox){var c=this._dragSelectionBox=document.createElement("div");
c.className="dndSelectionBox";
Dwt.setPosition(c,Dwt.ABSOLUTE_STYLE);
this.shell.getHtmlElement().appendChild(c);
Dwt.setZIndex(c,Dwt.Z_DND)
}return this._dragSelectionBox
};
DwtControl.prototype._setDragProxyState=function(a){if(this._dndProxy){Dwt.condClass(this._dndProxy,a,DwtCssStyle.DROPPABLE,DwtCssStyle.NOT_DROPPABLE)
}};
DwtControl.__junkIconId=0;
DwtControl.prototype._destroyDragProxy=function(a){if(a){if(a.parentNode){a.parentNode.removeChild(a)
}else{a.style.zIndex=-100;
a.id="DwtJunkIcon"+DwtControl.__junkIconId++;
a=null
}}};
DwtControl.prototype.destroyDragSelectionBox=function(){var a=this._dragSelectionBox;
if(a&&a.parentNode){a.parentNode.removeChild(a)
}this._dragSelectionBox=null
};
DwtControl.prototype._isValidDragObject=function(a){return true
};
DwtControl.prototype._dragEnter=function(a){};
DwtControl.prototype._dragOver=function(a){};
DwtControl.prototype._dragHover=function(a){};
DwtControl.prototype._dragLeave=function(a){};
DwtControl.prototype._drop=function(a){};
DwtControl.prototype._makeFocusable=function(a,c){c=(c!==false);
this._setEventHdlrs([DwtEvent.ONFOCUS,DwtEvent.ONBLUR],true,a);
if(c){this._setEventHdlrs([DwtEvent.ONFOCUS,DwtEvent.ONBLUR],false,a);
a.tabIndex=0
}else{a.removeAttribute("tabIndex")
}};
DwtControl.prototype._setKeyPressEventHdlr=function(a,c){this._setEventHdlrs([DwtEvent.ONKEYPRESS],a,c)
};
DwtControl.prototype._setMouseEventHdlrs=function(a,c){this._setEventHdlrs(DwtEvent.MOUSE_EVENTS,a,c)
};
DwtControl.prototype._setKeyEventHdlrs=function(a,c){this._setEventHdlrs(DwtEvent.KEY_EVENTS,a,c)
};
DwtControl.prototype._setEventHdlrs=function(e,a,d){if(!this._checkState()){return
}var f=d||this.getHtmlElement();
for(var c=0;
c<e.length;
c++){if(a!==true){Dwt.setHandler(f,e[c],DwtControl.__HANDLER[e[c]])
}else{Dwt.clearHandler(f,e[c])
}}};
DwtControl.prototype._setMouseEvents=function(){var a=[DwtEvent.ONCONTEXTMENU,DwtEvent.ONCLICK,DwtEvent.ONDBLCLICK,DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEMOVE,DwtEvent.ONMOUSEUP,DwtEvent.ONSELECTSTART];
if(AjxEnv.isIE){a.push(DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE)
}else{a.push(DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT)
}this._setEventHdlrs(a)
};
DwtControl.prototype._setMouseEvent=function(c,a){c.reset();
a.ersatz=true;
DwtUiEvent.copy(c,a);
c.button=a.button
};
DwtControl.prototype._getStopPropagationValForMouseEv=function(a){return true
};
DwtControl.prototype._getEventReturnValForMouseEv=function(a){return false
};
DwtControl.prototype._checkState=function(){if(this._disposed){return false
}if(!this.__ctrlInited){this.__initCtrl()
}return true
};
DwtControl.prototype._position=function(e){this._checkState();
var d=this.shell.getSize();
var c=this.getSize();
var a,f;
if(c){if(!e){a=Math.round((d.x-c.x)/2);
f=Math.round((d.y-c.y)/2)
}else{a=e.x;
f=e.y
}if((a+c.x)>d.x){a=d.x-c.x
}if((f+c.y)>d.y){f=d.y-c.y
}this.setLocation(a,f)
}};
DwtControl._dndScrollCallback=function(d,h){var c=d.container;
if(!c){return
}var l=h.dwtObj&&h.dwtObj._dndScrollId;
if(h.type=="mouseup"||!l||(d.id&&l!=d.id)){if(c._dndScrollActionId!=-1){AjxTimedAction.cancelAction(c._dndScrollActionId);
c._dndScrollActionId=-1
}return
}c._scrollAmt=0;
if(c.clientHeight<c.scrollHeight){var e=Dwt.toWindow(c,0,0,null,null,DwtPoint.tmp).y;
var m=e+c.scrollTop;
var i=c.scrollTop;
var j=h.docY-m;
var f=(c.clientWidth<c.scrollWidth)?d.threshold+Dwt.SCROLLBAR_WIDTH:d.threshold;
var g=(j<=f)?-1*d.amount:0;
if(g==0){var a=Dwt.getSize(c,DwtPoint.tmp).y;
var k=m+a;
j=k-h.docY;
g=(j<=f)?d.amount:0
}c._scrollAmt=g;
if(g){if(!c._dndScrollAction){c._dndScrollAction=new AjxTimedAction(null,DwtControl._dndScroll,[d]);
c._dndScrollActionId=-1
}if(c._dndScrollActionId==-1){c._dndScrollActionId=AjxTimedAction.scheduleAction(c._dndScrollAction,0)
}}else{if(c._dndScrollActionId!=-1){AjxTimedAction.cancelAction(c._dndScrollActionId);
c._dndScrollActionId=-1
}}}};
DwtControl._dndScroll=function(f){var c=f.container;
var e=Dwt.toWindow(c,0,0,null,null,DwtPoint.tmp).y;
var d=Dwt.getSize(c,DwtPoint.tmp).y;
var a=c.scrollTop;
if((c._scrollAmt<0&&a>0)||(c._scrollAmt>0&&(a+d<c.scrollHeight))){c.scrollTop+=c._scrollAmt;
c._dndScrollActionId=AjxTimedAction.scheduleAction(c._dndScrollAction,f.interval)
}};
DwtControl.__keyPressHdlr=function(d){var e=e?e:DwtControl.getTargetControl(d);
if(!e){return false
}if(e.__hasToolTipContent()){var c=DwtShell.getShell(window);
var a=c.getHoverMgr();
a.setHoverOutListener(e._hoverOutListener);
a.hoverOut();
e.__tooltipClosed=false
}};
DwtControl.__keyUpHdlr=function(a){return DwtKeyboardMgr.__keyUpHdlr.apply(this,arguments)
};
DwtControl.__keyDownHdlr=function(a){return DwtKeyboardMgr.__keyDownHdlr.apply(this,arguments)
};
DwtControl.__focusHdlr=function(c,a,d){d=d||DwtControl.getTargetControl(c);
if(!d){return false
}d._cancelFocusBlurActions();
return d.__doFocus(c)
};
DwtControl.__blurHdlr=function(c,a,d){d=d||DwtControl.getTargetControl(c);
if(!d){return false
}d._cancelFocusBlurActions();
return d.__doBlur(c)
};
DwtControl.prototype._cancelFocusBlurActions=function(){if(this._focusAction._id!==-1){AjxTimedAction.cancelAction(this._focusAction._id)
}if(this._blurAction._id!==-1){AjxTimedAction.cancelAction(this._blurAction._id)
}};
DwtControl.prototype.__hasToolTipContent=function(){if(this._disposed){return false
}return Boolean(!this._browserToolTip&&(this.__toolTipContent||(this.getToolTipContent!=DwtControl.prototype.getToolTipContent)))
};
DwtControl.prototype.__doFocus=function(a){if(!this._checkState()){return false
}this._hasFocus=true;
this.shell.getKeyboardMgr().updateFocus(this,a);
if(this.isListenerRegistered(DwtEvent.ONFOCUS)){a=a||DwtShell.focusEvent;
a.dwtObj=this;
a.state=DwtFocusEvent.FOCUS;
this.notifyListeners(DwtEvent.ONFOCUS,a)
}this._focus();
return true
};
DwtControl.prototype.__doBlur=function(a){if(!this._checkState()){return false
}this._hasFocus=false;
if(this.isListenerRegistered(DwtEvent.ONBLUR)){a=a||DwtShell.focusEvent;
a.dwtObj=this;
a.state=DwtFocusEvent.BLUR;
this.notifyListeners(DwtEvent.ONBLUR,a)
}this._blur();
return true
};
DwtControl.__clickHdlr=function(c){var d=DwtControl.getTargetControl(c);
if(d&&d._clickPending){return
}try{return DwtControl.__mouseEvent(c,DwtEvent.ONCLICK)
}catch(a){AjxException.reportScriptError(a)
}};
DwtControl.__dblClickHdlr=function(c){try{var d=DwtControl.getTargetControl(c);
if(d&&d._dblClickIsolation){d._clickPending=false;
AjxTimedAction.cancelAction(d._dblClickActionId)
}return DwtControl.__mouseEvent(c,DwtEvent.ONDBLCLICK)
}catch(a){AjxException.reportScriptError(a)
}};
DwtControl.__mouseOverHdlr=function(g,h){try{var d=(DwtMouseEventCapture.getId()=="DwtControl")?DwtMouseEventCapture.getCaptureObj():null;
if(d!=null){g=DwtUiEvent.getEvent(g);
g._stopPropagation=true;
return false
}var c=DwtControl.getTargetControl(g);
if(!c){return false
}h=h||DwtEvent.ONMOUSEOVER;
if((h==DwtEvent.ONMOUSEOVER)&&c._ignoreInternalOverOut){var j=DwtControl.getTargetControl(g,true);
if(c==j){return false
}}var i=DwtShell.mouseEvent;
if(c._dragging==DwtControl._NO_DRAG){i.setFromDhtmlEvent(g,c);
i.hoverStarted=false;
if(c.isListenerRegistered(h)){c.notifyListeners(h,i)
}if(c.__hasToolTipContent(i)&&!i.hoverStarted){var e=DwtShell.getShell(window);
var a=e.getHoverMgr();
if((!a.isHovering()||a.getHoverObject()!=c)&&!DwtMenu.menuShowing()){a.reset();
a.setHoverObject(c);
a.setHoverOverData(i);
a.setHoverOverDelay(DwtToolTip.TOOLTIP_DELAY);
a.setHoverOverListener(c._hoverOverListener);
a.hoverOver(i.docX,i.docY)
}}}i._stopPropagation=true;
i._returnValue=false;
i.setToDhtmlEvent(g);
return false
}catch(f){AjxException.reportScriptError(f)
}};
DwtControl.__mouseEnterHdlr=function(a){return DwtControl.__mouseOverHdlr(a,DwtEvent.ONMOUSEENTER)
};
DwtControl.__mouseDownHdlr=function(f){try{var g=DwtControl.getTargetControl(f);
if(!g){return false
}f=DwtUiEvent.getEvent(f);
var e=DwtShell.mouseEvent;
e.setFromDhtmlEvent(f,g);
if(e.button==DwtMouseEvent.LEFT){g._focusByMouseDownEvent(f);
e.setFromDhtmlEvent(f,g)
}if(g.__hasToolTipContent()){var d=DwtShell.getShell(window);
var c=d.getHoverMgr();
c.setHoverOutListener(g._hoverOutListener);
c.hoverOut()
}if(g._dragSource&&(e.button==DwtMouseEvent.LEFT)&&g._isValidDragObject(e)){try{g._ctrlCaptureObj.capture()
}catch(a){}g._dragOp=g._getDragOp(e);
g.__dragStartX=e.docX;
g.__dragStartY=e.docY
}else{if(g._dragBox){if(g._dragBox._setStart(e,g)){try{g._ctrlCaptureObj.capture()
}catch(a){}}}}return DwtControl.__mouseEvent(f,DwtEvent.ONMOUSEDOWN,g,e)
}catch(a){AjxException.reportScriptError(a)
}};
DwtControl.__mouseMoveHdlr=function(n){try{var h=(DwtMouseEventCapture.getId()=="DwtControl")?DwtMouseEventCapture.getCaptureObj():null;
var g=h?h.targetObj:DwtControl.getTargetControl(n);
if(!g){return false
}if(g.__dndHoverActionId!=-1){AjxTimedAction.cancelAction(g.__dndHoverActionId);
g.__dndHoverActionId=-1
}var o=DwtShell.mouseEvent;
o.setFromDhtmlEvent(n,h?true:g);
if(o.docX<0||o.docY<0){o._stopPropagation=true;
o._returnValue=false;
o.setToDhtmlEvent(n);
return false
}var l=(g._dragSource&&h&&(Math.abs(g.__dragStartX-o.docX)>=DwtControl.__DRAG_THRESHOLD||Math.abs(g.__dragStartY-o.docY)>=DwtControl.__DRAG_THRESHOLD));
var p=(h&&g._dragBox&&g._dragBox._dragObj==g);
if(!l&&!p){if(g.__hasToolTipContent()){var j=DwtShell.getShell(window);
var d=j.getHoverMgr();
if(!g.__tooltipClosed&&!DwtMenu.menuShowing()){d.hoverOver(o.docX,o.docY)
}else{var e=g.__lastTooltipX?Math.abs(o.docX-g.__lastTooltipX):null;
var c=g.__lastTooltipY?Math.abs(o.docY-g.__lastTooltipY):null;
if((e!=null&&e>DwtControl.__TOOLTIP_THRESHOLD)||(c!=null&&c>DwtControl.__TOOLTIP_THRESHOLD)){d.setHoverOutListener(g._hoverOutListener);
d.hoverOut();
g.__tooltipClosed=true
}}}return DwtControl.__mouseEvent(n,DwtEvent.ONMOUSEMOVE,g,o)
}else{if(g._dragging==DwtControl._NO_DRAG){if(g._dragSource){g._dragOp=g._dragSource._beginDrag(g._dragOp,g);
if(g._dragOp!=Dwt.DND_DROP_NONE){g._dragging=DwtControl._DRAGGING;
g._dndProxy=g._getDragProxy(g._dragOp);
Dwt.addClass(g._dndProxy,"DwtDragProxy");
if(!g._dndProxy){g._dragging=DwtControl._DRAG_REJECTED
}}else{g._dragging=DwtControl._DRAG_REJECTED
}}else{if(g._dragBox){g._dragging=DwtControl._DRAGGING;
g._dragBox._beginDrag(g)
}}}if(g._dragging!=DwtControl._DRAG_REJECTED){var k=o.dwtObj;
if(g._dragSource){var a=k&&k._dropTarget;
var q=g.__lastTargetObj;
if(k){g._dndHoverAction.args=[k];
g.__dndHoverActionId=AjxTimedAction.scheduleAction(g._dndHoverAction,DwtControl.__DND_HOVER_DELAY)
}if(k&&a&&((k!=g)||a.hasMultipleTargets())){if(k!=q||a.hasMultipleTargets()){var f=g._dragSource._getData();
if(a._dragEnter(g._dragOp,k,f,o,g._dndProxy)){g._setDragProxyState(true);
g.__dropAllowed=true;
k._dragEnter(o)
}else{g._setDragProxyState(false);
g.__dropAllowed=false
}}else{if(g.__dropAllowed){k._dragOver(o)
}}}else{g._setDragProxyState(false)
}if(q&&q!=k&&q._dropTarget&&q!=g){if(k&&!k._dndScrollCallback&&q._dndScrollCallback){q._dndScrollCallback.run(o)
}q._dragLeave(o);
q._dropTarget._dragLeave()
}g.__lastTargetObj=k;
if((k!=g)&&k&&k._dndScrollCallback){k._dndScrollCallback.run(o)
}Dwt.setLocation(g._dndProxy,o.docX+2,o.docY+2)
}else{if(g._dragBox){var i=DwtUiEvent.getTarget(n);
if(k&&(Dwt.isAncestor(g.getHtmlElement(),i)||i==g._dragSelectionBox)){g._dragBox._dragMove(o,g)
}}}}else{DwtControl.__mouseEvent(n,DwtEvent.ONMOUSEMOVE,g,o)
}o._stopPropagation=true;
o._returnValue=false;
o.setToDhtmlEvent(n);
return false
}}catch(m){AjxException.reportScriptError(m)
}};
DwtControl.__mouseUpHdlr=function(e){try{var g=(DwtMouseEventCapture.getId()=="DwtControl")?DwtMouseEventCapture.getCaptureObj():null;
var f=g?g.targetObj:DwtControl.getTargetControl(e);
if(!f){return false
}if(f.__dndHoverActionId!=-1){AjxTimedAction.cancelAction(f.__dndHoverActionId);
f.__dndHoverActionId=-1
}var d=DwtShell.mouseEvent;
d.setFromDhtmlEvent(e,g?true:f);
if(!(g&&(f._dragSource||f._dragBox))){return DwtControl.__processMouseUpEvent(e,f,d)
}else{g.release();
if(f._dragging!=DwtControl._DRAGGING){f._dragging=DwtControl._NO_DRAG;
return DwtControl.__processMouseUpEvent(e,f,d)
}if(f._dragSource){f.__lastTargetObj=null;
var c=d.dwtObj;
var h=c&&c._dropTarget;
if(c&&h&&f.__dropAllowed&&((c!=f)||h.hasMultipleTargets())){c._drop(d);
h._drop(f._dragSource._getData(),d);
f._dragSource._endDrag();
f._destroyDragProxy(f._dndProxy);
f._dragging=DwtControl._NO_DRAG
}else{DwtControl.__badDrop(f,d)
}if(c&&c._dndScrollCallback){c._dndScrollCallback.run(d)
}}else{if(f._dragBox){f._dragBox._endDrag(f)
}}d._stopPropagation=true;
d._returnValue=false;
d.setToDhtmlEvent(e);
return false
}}catch(a){AjxException.reportScriptError(a)
}};
DwtControl.__badDrop=function(e,d){if(e._dragSource){e._dragSource._cancelDrag()
}var c=d.dwtObj;
if(c){c._drop(d)
}e.__dragEndX=d.docX;
e.__dragEndY=d.docY;
if(e.__badDropAction==null){e.__badDropAction=new AjxTimedAction(e,e.__badDropEffect)
}var a=(e.__dragEndY-e.__dragStartY)/(e.__dragEndX-e.__dragStartX);
e.__badDropAction.args=[a,e.__dragStartY-(a*e.__dragStartX),(e.__dragStartX-e.__dragEndX<0)?-1:1];
AjxTimedAction.scheduleAction(e.__badDropAction,0)
};
DwtControl.__processMouseUpEvent=function(e,g,d){var c=DwtShell.getShell(window);
var f=c.getHoverMgr();
f.ignoreHoverOverOnClick();
if(g._dblClickIsolation&&d&&(d.button==DwtMouseEvent.LEFT)){if(g._clickPending){return false
}else{g._clickPending=true;
var a=new AjxTimedAction(null,DwtControl.__timedClick,[e,g,d]);
g._dblClickActionId=AjxTimedAction.scheduleAction(a,DwtControl.__DBL_CLICK_TIMEOUT);
DwtUiEvent.setBehaviour(e,true,false);
g._st=new Date();
return false
}}else{g._clickPending=false;
return DwtControl.__mouseEvent(e,DwtEvent.ONMOUSEUP,g,d)
}};
DwtControl.__timedClick=function(c,d,a){d._clickPending=false;
DwtControl.__mouseEvent(c,DwtEvent.ONMOUSEUP,d,a)
};
DwtControl.__mouseOutHdlr=function(g,f){try{var h=DwtControl.getTargetControl(g);
if(!h){return false
}f=f||DwtEvent.ONMOUSEOUT;
if((f==DwtEvent.ONMOUSEOUT)&&h._ignoreInternalOverOut){var a=DwtControl.getTargetControl(g,true);
if(h==a){return false
}}if(h.__hasToolTipContent()){var e=DwtShell.getShell(window);
var d=e.getHoverMgr();
d.setHoverOutListener(h._hoverOutListener);
d.hoverOut();
h.__tooltipClosed=false
}return DwtControl.__mouseEvent(g,f||DwtEvent.ONMOUSEOUT,h)
}catch(c){AjxException.reportScriptError(c)
}};
DwtControl.__mouseLeaveHdlr=function(a){return DwtControl.__mouseOutHdlr(a,DwtEvent.ONMOUSELEAVE)
};
DwtControl.__mouseWheelHdlr=function(c){try{return DwtControl.__mouseEvent(c,DwtEvent.ONMOUSEWHEEL)
}catch(a){AjxException.reportScriptError(a)
}};
DwtControl.__selectStartHdlr=function(c){try{return DwtControl.__mouseEvent(c,DwtEvent.ONSELECTSTART)
}catch(a){AjxException.reportScriptError(a)
}};
DwtControl.__contextMenuHdlr=function(d){try{if(AjxEnv.isSafari){var e=DwtControl.getTargetControl(d);
var a=e?e.preventContextMenu():true;
if(a){DwtControl.__mouseEvent(d,DwtEvent.ONMOUSEDOWN);
return DwtControl.__mouseEvent(d,DwtEvent.ONMOUSEUP)
}}return DwtControl.__mouseEvent(d,DwtEvent.ONCONTEXTMENU)
}catch(c){AjxException.reportScriptError(c)
}};
DwtControl.__mouseEvent=function(f,d,g,e){var g=g?g:DwtControl.getTargetControl(f);
if(!g){return false
}if(!e){e=DwtShell.mouseEvent;
e.setFromDhtmlEvent(f,g)
}var c=e.target.tagName&&e.target.tagName.toLowerCase();
var a=g._propagateEvent[d]||(c==="input"||c==="textarea"||c==="a"||c==="label"||c==="select");
e._stopPropagation=!a;
e._dontCallPreventDefault=a;
e._returnValue=a;
DwtEventManager.notifyListeners(d,e);
if(g.isListenerRegistered&&g.isListenerRegistered(d)){g.notifyListeners(d,e)
}e.setToDhtmlEvent(f);
if(d==DwtEvent.ONMOUSELEAVE||d==DwtEvent.ONMOUSEOUT){g.__ignoreNextClick=false
}else{if(d==DwtEvent.ONMOUSEUP){g.__ignoreNextClick=true
}else{if(d==DwtEvent.ONCLICK){if(g.__ignoreNextClick){DBG.println(AjxDebug.ACCESSIBILITY,"DwtControl: ignoring a click!");
g.__ignoreNextClick=false;
return true
}if(g.isListenerRegistered&&!g.isListenerRegistered(DwtEvent.ONCLICK)){DBG.println(AjxDebug.ACCESSIBILITY,"DwtControl: faking a click!");
d=DwtEvent.ONMOUSEDOWN;
if(f){f.type=d
}DwtControl.__mouseEvent(f,d,g,DwtShell.mouseEvent);
d=DwtEvent.ONMOUSEUP;
if(f){f.type=d
}DwtControl.__mouseEvent(f,d,g,DwtShell.mouseEvent);
return DwtShell.mouseEvent._returnValue
}else{DBG.println(AjxDebug.ACCESSIBILITY,"DwtControl: skipping a click!");
window.console&&console.warn("skipping a click!")
}}}}return e._returnValue
};
DwtControl.__HANDLER={};
DwtControl.__HANDLER[DwtEvent.ONCONTEXTMENU]=DwtControl.__contextMenuHdlr;
DwtControl.__HANDLER[DwtEvent.ONCLICK]=DwtControl.__clickHdlr;
DwtControl.__HANDLER[DwtEvent.ONDBLCLICK]=DwtControl.__dblClickHdlr;
DwtControl.__HANDLER[DwtEvent.ONMOUSEDOWN]=DwtControl.__mouseDownHdlr;
DwtControl.__HANDLER[DwtEvent.ONMOUSEENTER]=DwtControl.__mouseEnterHdlr;
DwtControl.__HANDLER[DwtEvent.ONMOUSELEAVE]=DwtControl.__mouseLeaveHdlr;
DwtControl.__HANDLER[DwtEvent.ONMOUSEMOVE]=DwtControl.__mouseMoveHdlr;
DwtControl.__HANDLER[DwtEvent.ONMOUSEOUT]=DwtControl.__mouseOutHdlr;
DwtControl.__HANDLER[DwtEvent.ONMOUSEOVER]=DwtControl.__mouseOverHdlr;
DwtControl.__HANDLER[DwtEvent.ONMOUSEUP]=DwtControl.__mouseUpHdlr;
DwtControl.__HANDLER[DwtEvent.ONMOUSEWHEEL]=DwtControl.__mouseWheelHdlr;
DwtControl.__HANDLER[DwtEvent.ONSELECTSTART]=DwtControl.__selectStartHdlr;
DwtControl.__HANDLER[DwtEvent.ONKEYPRESS]=DwtControl.__keyPressHdlr;
DwtControl.__HANDLER[DwtEvent.ONKEYUP]=DwtControl.__keyUpHdlr;
DwtControl.__HANDLER[DwtEvent.ONKEYDOWN]=DwtControl.__keyDownHdlr;
DwtControl.__HANDLER[DwtEvent.ONFOCUS]=DwtControl.__focusHdlr;
DwtControl.__HANDLER[DwtEvent.ONBLUR]=DwtControl.__blurHdlr;
DwtControl.prototype.__initCtrl=function(){this.shell=this.parent.shell||this.parent;
this._htmlElId=this.__internalId=this._htmlElId||Dwt.getNextId();
var a=this._elRef=this._createElement(this._htmlElId);
a.id=this._htmlElId;
if(DwtControl.ALL_BY_ID[this._htmlElId]){this._htmlElId=a.id=this.__internalId=DwtId.makeId(this._htmlElId,Dwt.getNextId())
}DwtControl.ALL_BY_ID[this._htmlElId]=this;
DwtComposite._pendingElements[this._htmlElId]=a;
a.style.position=this.__posStyle||DwtControl.STATIC_STYLE;
a.className=this._className;
a.style.overflow="visible";
if(this.role){a.setAttribute("role",this.role)
}this._enabled=true;
this.__controlEvent=DwtControl.__controlEvent;
this._dragging=DwtControl._NO_DRAG;
this.__ctrlInited=true;
this.setFocusElement();
this._focusAction=new AjxTimedAction(null,DwtControl.__focusHdlr,[DwtShell.focusEvent,DwtEvent.ONFOCUS,this]);
this._blurAction=new AjxTimedAction(null,DwtControl.__blurHdlr,[DwtShell.focusEvent,DwtEvent.ONBLUR,this]);
this.parent.addChild(this,this.__index)
};
DwtControl.prototype._createElement=function(a){return document.createElement("DIV")
};
DwtControl.prototype.__dndDoHover=function(a){a._dragHover()
};
DwtControl.prototype.__badDropEffect=function(a,h,f){var e=(Math.abs(a)<=1);
var g=e?this.__dragStartX-this.__dragEndX:this.__dragStartY-this.__dragEndY;
if(g*f>0&&!(this.__dragEndY==this.__dragStartY||this.__dragEndX==this.__dragStartX)){if(e){this.__dragEndX+=(30*f);
this._dndProxy.style.top=a*this.__dragEndX+h;
this._dndProxy.style.left=this.__dragEndX
}else{this.__dragEndY+=(30*f);
this._dndProxy.style.top=this.__dragEndY;
this._dndProxy.style.left=(this.__dragEndY-h)/a
}AjxTimedAction.scheduleAction(this.__badDropAction,0)
}else{this._destroyDragProxy(this._dndProxy);
this._dragging=DwtControl._NO_DRAG
}};
DwtControl.prototype.__handleHoverOver=function(e){if(this._eventMgr.isListenerRegistered(DwtEvent.HOVEROVER)){this._eventMgr.notifyListeners(DwtEvent.HOVEROVER,e)
}var d=e&&e.object;
var f=this.getToolTipContent(d);
var c,g;
if(!f){c=""
}else{if(typeof(f)=="string"){c=f
}else{if(f.isAjxCallback||AjxUtil.isFunction(f)){g=f
}else{if(typeof(f)=="object"){c=f.content;
g=f.callback
}}}}if(!c&&g&&f.loading){c=AjxMsg.loading
}if(c){this.__showToolTip(e,c)
}if(g){var a=new AjxCallback(this,this.__showToolTip,[e]);
AjxTimedAction.scheduleAction(new AjxTimedAction(null,function(){g.run(a)
}),0)
}};
DwtControl.prototype.__showToolTip=function(c,a){if(!a){return
}DwtControl.showToolTip(a,c.x,c.y,this,c);
this.__lastTooltipX=c.x;
this.__lastTooltipY=c.y;
this.__tooltipClosed=false
};
DwtControl.prototype.__handleHoverOut=function(a){if(this._eventMgr.isListenerRegistered(DwtEvent.HOVEROUT)){this._eventMgr.notifyListeners(DwtEvent.HOVEROUT,a)
}DwtControl.hideToolTip();
this.__lastTooltipX=null;
this.__lastTooltipY=null
};
DwtControl.prototype.__isInputEl=function(d){var e=false;
if(!d||!d.tagName){return e
}var a=d.tagName.toLowerCase();
var c=a=="input"?d.type.toLowerCase():null;
if(a=="textarea"||(c&&(c=="text"||c=="password"))){e=true
}return e
};
DwtControl.ON_UNLOAD=function(){var c=DwtControl.ALL_BY_ID,a;
for(a in c){c[a]._elRef=null
}DwtControl.ALL_BY_ID={}
};
if(window.attachEvent){window.attachEvent("onunload",DwtControl.ON_UNLOAD)
}else{if(window.addEventListener){window.addEventListener("unload",DwtControl.ON_UNLOAD,false)
}}DwtControl.showToolTip=function(c,a,g,e,f){if(!c){return
}var d=DwtShell.getShell(window).getToolTip();
d.setContent(c);
d.popup(a,g,false,false,e,f)
};
DwtControl.hideToolTip=function(){DwtShell.getShell(window).getToolTip().popdown()
};
DwtControl.prototype.getTooltipBase=function(a){return this.getHtmlElement()
};
DwtControl.prototype.boundsForChild=function(d){if(d&&d.getHtmlElement){d=d.getHtmlElement()
}var a=function(f,e){var g=Dwt.getMargins(e);
var f=Dwt.insetBounds(f,Dwt.getInsets(e));
f.width=Math.max(f.width-g.left-g.right,0);
f.height=Math.max(f.height-g.top-g.bottom,0);
return f
};
var c=new DwtRectangle(0,0,this.getHtmlElement().clientWidth,this.getHtmlElement().clientHeight);
return AjxUtil.reduce(Dwt.getAncestors(d,this.getHtmlElement(),true),a,c)
};
DwtControl.prototype.hasAttribute=function(a){return this.getHtmlElement().hasAttribute(a)
};
DwtControl.prototype.getAttribute=function(a){return this.getHtmlElement().getAttribute(a)
};
DwtControl.prototype.setAttribute=function(a,c){this.getHtmlElement().setAttribute(a,c)
};
DwtControl.prototype.removeAttribute=function(a){this.getHtmlElement().removeAttribute(a)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtComposite")){DwtComposite=function(c){if(arguments.length==0){return
}c=Dwt.getParams(arguments,DwtComposite.PARAMS);
c.className=c.className||"DwtComposite";
DwtControl.call(this,c);
var a=this.toString();
if(a=="DwtComposite"){a=this.getHTMLElId()
}this._compositeTabGroup=new DwtTabGroup(a+" (DwtComposite)");
this._children=new AjxVector()
};
DwtComposite.PARAMS=DwtControl.PARAMS.concat();
DwtComposite.prototype=new DwtControl;
DwtComposite.prototype.constructor=DwtComposite;
DwtComposite.prototype.isDwtComposite=true;
DwtComposite.prototype.toString=function(){return"DwtComposite"
};
DwtComposite._pendingElements=new Object();
DwtComposite.prototype.dispose=function(){if(this._disposed){return
}var a=this._children.getArray();
while(a.length>0){a.pop().dispose()
}if(this._compositeTabGroup){this._compositeTabGroup.removeAllMembers()
}this._compositeTabGroup=null;
DwtControl.prototype.dispose.call(this)
};
DwtComposite.prototype.getChildren=function(){return this._children.getArray().slice(0)
};
DwtComposite.prototype.getChild=function(a){return this._children.get(a)
};
DwtComposite.prototype.cleanupSeparators=function(){var c=this.getChildren();
var d=true;
var f;
for(var e=0;
e<c.length;
e++){var g=c[e];
var a=g.isStyle&&g.isStyle(DwtMenuItem.SEPARATOR_STYLE);
if(a){g.setVisible(!d);
if(!d||!f){d=true;
f=g
}continue
}if(g.getVisible()){d=false
}}if(d&&f){f.setVisible(false)
}};
DwtComposite.prototype.getNumChildren=function(){return this._children.size()
};
DwtComposite.prototype.removeChildren=function(){var c=this._children.getArray();
while(c.length>0){c[0].dispose()
}if(this._compositeTabGroup){this._compositeTabGroup.removeAllMembers()
}};
DwtComposite.prototype.clear=function(){this.removeChildren();
this.getHtmlElement().innerHTML=""
};
DwtComposite.prototype.addChild=function(d,a){this._children.add(d,a);
this._compositeTabGroup.addMember(d,a);
var c=d.getHtmlElement();
c.setAttribute("parentId",this._htmlElId);
if(this instanceof DwtShell&&this.isVirtual()){document.body.appendChild(c)
}else{d.reparentHtmlElement(d.__parentElement||this.getHtmlElement(),a);
d.__parentElement=null
}};
DwtComposite.prototype.removeChild=function(d){if(d.isInitialized()){this._children.remove(d);
this._compositeTabGroup.removeMember(d);
var c=d.getHtmlElement();
if(c){c.removeAttribute("parentId");
if(c.parentNode){var a=c.parentNode.removeChild(c)
}}}};
DwtComposite.prototype.getTabGroupMember=function(){return this.tabGroupMember||(this.getNumChildren()>0?this._compositeTabGroup:this)
};
DwtComposite.prototype._setAllowSelection=function(){if(!this._allowSelection){this._allowSelection=true;
this.addListener(DwtEvent.ONMOUSEDOWN,new AjxListener(this,this._mouseDownListener));
this.addListener(DwtEvent.ONCONTEXTMENU,new AjxListener(this,this._contextMenuListener))
}};
DwtComposite.prototype.preventSelection=function(a){return this._allowSelection?false:DwtControl.prototype.preventSelection.call(this,a)
};
DwtComposite.prototype.preventContextMenu=function(d){if(!this._allowSelection){return DwtControl.prototype.preventContextMenu.apply(this,arguments)
}var a=d?(d.id.indexOf("OBJ_")==0):false;
var c=false;
if(document.selection){c=document.selection.type=="Text"
}else{if(getSelection()){c=getSelection().toString().length>0
}}return(c&&!a)?false:true
};
DwtComposite.prototype._focusByMouseUpEvent=function(){if(!this._allowSelection){DwtControl.prototype._focusByMouseUpEvent.apply(this,arguments)
}};
DwtComposite.prototype._mouseDownListener=function(a){if(a.button==DwtMouseEvent.LEFT){a._stopPropagation=true;
a._returnValue=true
}};
DwtComposite.prototype._contextMenuListener=function(a){a._stopPropagation=false;
a._returnValue=true
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtShell")){DwtShell=function(f){if(window._dwtShellId){throw new DwtException("DwtShell already exists for window",DwtException.INVALID_OP,"DwtShell")
}var d=f.className||"DwtShell";
DwtComposite.call(this,{className:d});
this.__ctrlInited=true;
document.body.style.margin=0;
if(!f.docBodyScrollable){if(AjxEnv.isIE){document.body.onscroll=DwtShell.__onBodyScroll
}document.body.style.overflow="hidden"
}document.body.onselect=DwtShell._preventDefaultSelectPrt;
document.body.onselectstart=DwtShell._preventDefaultSelectPrt;
document.body.oncontextmenu=DwtShell._preventDefaultPrt;
window.onresize=DwtShell._resizeHdlr;
var e=document.createElement("div");
this._htmlElId=window._dwtShellId=e.id=f.id||Dwt.getNextId();
DwtControl.ALL_BY_ID[this._htmlElId]=this;
e.className=d;
e.style.width=e.style.height="100%";
Dwt.setPosition(e,DwtControl.ABSOLUTE_STYLE);
if(e.style.overflow){e.style.overflow=null
}try{if(f.userShell){document.body.removeChild(f.userShell)
}}catch(c){}document.body.appendChild(e);
if(f.userShell){var a=new DwtControl({parent:this,posStyle:Dwt.ABSOLUTE_STYLE});
a.getHtmlElement().appendChild(f.userShell);
a.setSize("100%","100%");
a.zShow(true);
this._userShell=f.userShell
}else{this._userShell=null
}this.shell=this;
this._createBusyOverlay(e);
this._veilOverlay=document.createElement("div");
this._veilOverlay.className=(!AjxEnv.isLinux)?"VeilOverlay":"VeilOverlay-linux";
this._veilOverlay.style.position="absolute";
this._veilOverlay.style.cursor="not-allowed";
this._veilOverlay.veilZ=new Array();
this._veilOverlay.veilZ.push(Dwt.Z_HIDDEN);
this._veilOverlay.dialogZ=new Array();
this._veilOverlay.activeDialogs=new Array();
this._veilOverlay.innerHTML="<table cellspacing=0 cellpadding=0 style='width:100%; height:100%'><tr><td>&nbsp;</td></tr></table>";
e.appendChild(this._veilOverlay);
Dwt.setBounds(this._veilOverlay,0,0,"100%","100%");
Dwt.setZIndex(this._veilOverlay,Dwt.Z_HIDDEN);
if(f.useCurtain){this._curtainOverlay=document.createElement("div");
this._curtainOverlay.className="CurtainOverlay";
this._curtainOverlay.style.position="absolute";
this._curtainOverlay.innerHTML="<table cellspacing=0 cellpadding=0 style='width:100%; height:100%'><tr><td>&nbsp;</td></tr></table>";
e.appendChild(this._curtainOverlay);
Dwt.setBounds(this._curtainOverlay,0,0,"100%","100%");
Dwt.setZIndex(this._curtainOverlay,Dwt.Z_CURTAIN)
}this._uiEvent=new DwtUiEvent(true);
this.relayout();
this._toolTip=new DwtToolTip(this);
this._hoverMgr=new DwtHoverMgr();
this._keyboardMgr=new DwtKeyboardMgr(this)
};
DwtShell.prototype=new DwtComposite;
DwtShell.prototype.constructor=DwtShell;
DwtShell.CANCEL_BUTTON=-1;
DwtShell.controlEvent=new DwtControlEvent();
DwtShell.focusEvent=new DwtFocusEvent();
DwtShell.keyEvent=new DwtKeyEvent();
DwtShell.mouseEvent=new DwtMouseEvent();
DwtShell.selectionEvent=new DwtSelectionEvent(true);
DwtShell.treeEvent=new DwtTreeEvent();
DwtShell._GLOBAL_SELECTION="GlobalSelection";
DwtShell.prototype.toString=function(){return"DwtShell"
};
DwtShell.getShell=function(a){a=a||window;
return DwtControl.fromElementId(a._dwtShellId)
};
DwtShell.prototype.getKeyboardMgr=function(){return this._keyboardMgr
};
DwtShell.prototype.setBusy=function(e,f,c,d,a){if(e){this._setBusyCount++
}else{if(this._setBusyCount>0){this._setBusyCount--
}}if(!this._setBusy&&(this._setBusyCount>0)){Dwt.setCursor(this._busyOverlay,"wait");
Dwt.setVisible(this._busyOverlay,true);
this._setBusy=this._blockInput=true
}else{if(this._setBusy&&(this._setBusyCount<=0)){Dwt.setCursor(this._busyOverlay,"default");
Dwt.setVisible(this._busyOverlay,false);
this._setBusy=this._blockInput=false
}}if(e&&c){if(d&&d>0){this._busyActionId[f]=AjxTimedAction.scheduleAction(this._busyTimedAction,d)
}else{this._showBusyDialogAction(f)
}this._cancelBusyCallback=a;
if(this._busyDialog){this._busyDialog.setButtonEnabled(DwtShell.CANCEL_BUTTON,(a!=null))
}}else{if(this._busyActionId[f]&&(this._busyActionId[f]!=-1)){AjxTimedAction.cancelAction(this._busyActionId[f]);
this._busyActionId[f]=-1
}if(this._busyDialog&&this._busyDialog.isPoppedUp){this._busyDialog.popdown()
}}};
DwtShell.prototype.getBusy=function(){return this._setBusy
};
DwtShell.prototype.setBusyDialogText=function(a){this._busyDialogText=a;
if(this._busyDialogTxt){this._busyDialogTxt.innerHTML=(a)?a:""
}};
DwtShell.prototype.setBusyDialogTitle=function(a){this._busyDialogTitle=a;
if(this._busyDialog){this._busyDialog.setTitle((a)?a:AjxMsg.workInProgress)
}};
DwtShell.prototype.getHoverMgr=function(){return this._hoverMgr
};
DwtShell.prototype.getToolTip=function(){return this._toolTip
};
DwtShell.prototype.getH=function(a){return(!this._virtual)?Dwt.getSize(this.getHtmlElement(),a).y:Dwt.getSize(document.body,a).y
};
DwtShell.prototype.getW=function(a){return(!this._virtual)?Dwt.getSize(this.getHtmlElement(),a).x:Dwt.getSize(document.body,a).x
};
DwtShell.prototype.getSize=function(a){return(!this._virtual)?Dwt.getSize(this.getHtmlElement(),a):Dwt.getSize(document.body,a)
};
DwtShell.prototype.getLocation=function(){return(!this._virtual)?Dwt.getLocation(this.getHtmlElement()):Dwt.getLocation(document.body)
};
DwtShell.prototype.getX=function(){return(!this._virtual)?Dwt.getLocation(this.getHtmlElement()).x:Dwt.getLocation(document.body).x
};
DwtShell.prototype.getY=function(){return(!this._virtual)?Dwt.getLocation(this.getHtmlElement()).y:Dwt.getLocation(document.body).y
};
DwtShell.prototype.getBounds=function(a){return(!this._virtual)?Dwt.getBounds(this.getHtmlElement(),a):Dwt.getBounds(document.body,a)
};
DwtShell.prototype.setVirtual=function(){this._virtual=true;
this.setVisible(false)
};
DwtShell.prototype.addFocusListener=function(a){if(!this._hasFocusHandler){var c=document;
if((typeof c.onfocusin!="undefined")&&c.attachEvent){c.attachEvent("onfocusin",DwtShell.__focusHdlr)
}else{if(window.addEventListener){window.addEventListener("focus",DwtShell.__focusHdlr,false)
}}this._hasFocusHandler=true
}this.addListener(DwtEvent.ONFOCUS,a)
};
DwtShell.prototype.addBlurListener=function(a){if(!this._hasBlurHandler){var c=document;
if((typeof c.onfocusin!="undefined")&&c.attachEvent){c.attachEvent("onfocusout",DwtShell.__blurHdlr)
}else{if(window.addEventListener){window.addEventListener("blur",DwtShell.__blurHdlr,false)
}}this._hasBlurHandler=true
}this.addListener(DwtEvent.ONBLUR,a)
};
DwtShell.prototype.addGlobalSelectionListener=function(a){this.addListener(DwtShell._GLOBAL_SELECTION,a)
};
DwtShell.prototype.removeGlobalSelectionListener=function(a){this.removeListener(DwtShell._GLOBAL_SELECTION,a)
};
DwtShell.prototype.notifyGlobalSelection=function(a){this.notifyListeners(DwtShell._GLOBAL_SELECTION,a)
};
DwtShell.prototype.isVirtual=function(){return this._virtual
};
DwtShell.prototype._showBusyDialogAction=function(c){var a=this._getBusyDialog();
a.popup();
this._busyActionId[c]=-1
};
DwtShell.prototype._createBusyOverlay=function(a){this._busyOverlay=document.createElement("div");
this._busyOverlay.className=(!AjxEnv.isLinux)?"BusyOverlay":"BusyOverlay-linux";
this._busyOverlay.style.position="absolute";
this._busyOverlay.innerHTML="<table cellspacing=0 cellpadding=0 style='width:100%; height:100%'><tr><td>&nbsp;</td></tr></table>";
a.appendChild(this._busyOverlay);
Dwt.setBounds(this._busyOverlay,0,0,"100%","100%");
Dwt.setZIndex(this._busyOverlay,Dwt.Z_VEIL);
Dwt.setVisible(this._busyOverlay,false);
this._busyTimedAction=new AjxTimedAction(this,this._showBusyDialogAction);
this._busyActionId={};
this._setBusyCount=0;
this._setBusy=false
};
DwtShell.prototype._getBusyDialog=function(d){if(!this._busyDialog){var e=new DwtDialog_ButtonDescriptor(DwtShell.CANCEL_BUTTON,AjxMsg.cancelRequest,DwtDialog.ALIGN_CENTER);
this._busyDialog=new DwtDialog({parent:this,className:"DwtShellBusyDialog",title:AjxMsg.workInProgress,standardButtons:DwtDialog.NO_BUTTONS,extraButtons:[e],zIndex:Dwt.BUSY+10});
this._busyDialog.registerCallback(DwtShell.CANCEL_BUTTON,this._busyCancelButtonListener,this);
var c=Dwt.getNextId();
var a=["<table class='DialogContent'><tr>","<td><div class='WaitIcon'></div></td><td class='MsgText' id='",c,"'>&nbsp;</td>","</tr></table>"].join("");
this._busyDialog.setContent(a);
this._busyDialogTxt=document.getElementById(c);
if(this._busyDialogText){this._busyDialogTxt.innerHTML=this._busyDialogText
}if(this._busyDialogTitle){this._busyDialog.setTitle(this._busyDialogTitle)
}this._busyDialog.setButtonEnabled(DwtShell.CANCEL_BUTTON,(this._cancelBusyCallback!=null))
}return this._busyDialog
};
DwtShell.prototype.relayout=function(){this._currWinSize=Dwt.getWindowSize();
if(this._userShell){var a=Dwt.byClassName("skin_layout_filler",this._userShell);
AjxUtil.foreach(a,function(d){if(Dwt.hasClass(d,"skin_layout_row")){var k=d;
var j=k.parentNode;
var i=Dwt.getSize(j).y;
var f=0;
var e=Dwt.getInsets(j);
i-=e.top+e.bottom;
var g=Dwt.getMargins(k);
i-=g.top+g.bottom;
AjxUtil.foreach(j.children,function(m){var n=Dwt.getMargins(m);
i-=n.top+n.bottom;
if(Dwt.hasClass(m,"skin_layout_filler")){f+=1
}else{var l=Dwt.getSize(m).y;
AjxUtil.foreach(m.children,function(p){var q=Dwt.getMargins(p);
var o=Dwt.getSize(p).y+q.top+q.bottom;
l=Math.max(l,o)
});
i-=l
}});
k.style.height=Math.max(i/f,0)+"px"
}else{if(Dwt.hasClass(d,"skin_layout_cell")){var h=d;
var k=h.parentNode;
var j=k.parentNode;
var c=Dwt.getSize(j).x;
var f=0;
var e=Dwt.getInsets(j);
c-=e.left+e.right;
var g=Dwt.getMargins(k);
c-=g.left+g.right;
AjxUtil.foreach(k.children,function(l){var m=Dwt.getMargins(l);
c-=m.left+m.right;
if(Dwt.hasClass(l,"skin_layout_filler")){f+=1
}else{if(h.id==="skin_td_main"&&l.id==="skin_td_tree_app_sash"&&AjxEnv.isChrome&&!AjxUtil.isInt(window.devicePixelRatio)){c-=3
}c-=Dwt.getSize(l).x
}});
h.style.width=Math.max(c/f,0)+"px"
}else{if(window.console){console.warn("not fixing sizes for element!",d)
}}}})
}};
DwtShell.prototype._busyCancelButtonListener=function(a){this._cancelBusyCallback.run();
if(this._busyDialog){this._busyDialog.popdown()
}};
DwtShell._preventDefaultSelectPrt=function(c){var a=DwtControl.fromElementId(window._dwtShellId)._uiEvent;
a.setFromDhtmlEvent(c,true);
if(a.dwtObj&&a.dwtObj instanceof DwtControl&&!a.dwtObj.preventSelection(a.target)){a._stopPropagation=false;
a._returnValue=true
}else{a._stopPropagation=true;
a._returnValue=false
}a.setToDhtmlEvent(c);
return !a._stopPropagation
};
DwtShell._preventDefaultPrt=function(c){c=DwtUiEvent.getEvent(c);
var d=c.target?c.target:c.srcElement;
var a=DwtControl.fromElementId(window._dwtShellId)._uiEvent;
a.setFromDhtmlEvent(c,true);
a._stopPropagation=true;
a._returnValue=false;
if(a.dwtObj&&a.dwtObj instanceof DwtControl&&!a.dwtObj.preventContextMenu(a.target)){a._stopPropagation=false;
a._returnValue=true
}else{if(d!=null&&typeof(d)=="object"){if((d.tagName=="A"||d.tagName=="a")&&d.href){a._stopPropagation=false;
a._returnValue=true
}}}a.setToDhtmlEvent(c);
return a._returnValue
};
DwtShell._resizeHdlr=function(d){var c=DwtControl.fromElementId(window._dwtShellId);
if(c.isListenerRegistered(DwtEvent.CONTROL)){var a=DwtShell.controlEvent;
a.reset();
a.oldWidth=c._currWinSize.x;
a.oldHeight=c._currWinSize.y;
c.relayout();
a.newWidth=c._currWinSize.x;
a.newHeight=c._currWinSize.y;
c.notifyListeners(DwtEvent.CONTROL,a)
}else{c.relayout()
}};
DwtShell.__onBodyScroll=function(){document.body.scrollTop=0;
document.body.scrollLeft=0
};
DwtShell.__focusHdlr=function(){var c=DwtShell.focusEvent;
var a=DwtShell.getShell(window);
c.dwtObj=a;
c.state=DwtFocusEvent.FOCUS;
a.notifyListeners(DwtEvent.ONFOCUS,c)
};
DwtShell.__blurHdlr=function(){var c=DwtShell.focusEvent;
var a=DwtShell.getShell(window);
c.dwtObj=a;
c.state=DwtFocusEvent.BLUR;
a.notifyListeners(DwtEvent.ONBLUR,c)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtLabel")){DwtLabel=function(a){if(arguments.length==0){return
}a=Dwt.getParams(arguments,DwtLabel.PARAMS);
a.className=a.className||"DwtLabel";
DwtComposite.call(this,a);
this._style=a.style||(DwtLabel.IMAGE_LEFT|DwtLabel.ALIGN_CENTER);
this._textBackground=null;
this._textForeground=null;
this._createHtml(a.template)
};
DwtLabel.PARAMS=["parent","style","className","posStyle","id","index"];
DwtLabel.prototype=new DwtComposite;
DwtLabel.prototype.constructor=DwtLabel;
DwtLabel.prototype.isFocusable=true;
DwtLabel.prototype.toString=function(){return"DwtLabel"
};
DwtLabel.IMAGE_LEFT=1;
DwtLabel.IMAGE_RIGHT=2;
DwtLabel.IMAGE_BOTH=4;
DwtLabel.ALIGN_LEFT=8;
DwtLabel.ALIGN_RIGHT=16;
DwtLabel.ALIGN_CENTER=32;
DwtLabel._LAST_STYLE=32;
DwtLabel.LEFT="left";
DwtLabel.RIGHT="right";
DwtLabel.prototype.TEMPLATE="dwt.Widgets#ZLabel";
DwtLabel.prototype.dispose=function(){delete this._dropDownEl;
delete this._iconEl;
delete this._textEl;
DwtControl.prototype.dispose.call(this)
};
DwtLabel.prototype.setEnabled=function(a){if(a!=this._enabled){DwtControl.prototype.setEnabled.call(this,a);
var c=this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT;
this.__imageInfo=this.__imageInfo||{};
this.__setImage(this.__imageInfo[c])
}};
DwtLabel.prototype.getImage=function(a){a=a||(this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT);
return this.__imageInfo[a]
};
DwtLabel.prototype.setImage=function(a,d,c){d=d||(this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT);
this.__imageInfo=this.__imageInfo||{};
this.__imageInfo[d]=a;
this.__setImage(a,d,c)
};
DwtLabel.prototype.setIconEl=function(a,c){this._iconEl=this._iconEl||{};
c=c||(this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT);
this._iconEl[c]=a
};
DwtLabel.prototype.setDisabledImage=function(a){};
DwtLabel.prototype.getText=function(){return(this.__text!=null)?this.__text:null
};
DwtLabel.prototype.setText=function(a){if(!this._textEl){return
}if(a==null||a==""){this.__text=null;
this._textEl.innerHTML=""
}else{this.__text=a;
this._textEl.innerHTML=a
}this._textSet(a)
};
DwtLabel.prototype.setTextBackground=function(a){this._textBackground=a;
if(this._textEl){this._textEl.style.backgroundColor=a
}};
DwtLabel.prototype.setTextForeground=function(a){this._textForeground=a;
if(this._textEl){this._textEl.style.color=a
}};
DwtLabel.prototype.setAlign=function(a){this._style=a;
var c=this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT;
this.__imageInfo=this.__imageInfo||{};
this.__setImage(this.__imageInfo[c])
};
DwtLabel.prototype.isStyle=function(a){return this._style&a
};
DwtLabel.prototype.getTabGroupMember=function(){return DwtControl.prototype.getTabGroupMember.apply(this,arguments)
};
DwtLabel.prototype._createHtml=function(a){var c={id:this._htmlElId};
this._createHtmlFromTemplate(a||this.TEMPLATE,c)
};
DwtLabel.prototype._createHtmlFromTemplate=function(a,c){DwtControl.prototype._createHtmlFromTemplate.call(this,a,c);
this._textEl=document.getElementById(c.id+"_title")
};
DwtLabel.prototype._getIconEl=function(c){var a=this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT;
c=typeof c==="boolean"?a:(c||a);
this._iconEl=this._iconEl||{};
return this._iconEl[c]||(this._iconEl[c]=document.getElementById(this._htmlElId+"_"+c+"_icon"))
};
DwtLabel.prototype.__setImage=function(c,e,d){this.__altText=d||this.__altText;
var a=this._getIconEl(e);
if(a){if(c){AjxImg.setImage(a,c,null,!this._enabled,null,this.__altText);
var f=(this._style&DwtLabel.IMAGE_RIGHT?"ZHasRightIcon":"ZHasLeftIcon");
Dwt.addClass(this.getHtmlElement(),f)
}else{a.innerHTML=""
}}};
DwtLabel.prototype._textSet=function(a){if(!this.hasAttribute("aria-labelledby")){if(a){this.setAttribute("aria-label",a)
}else{this.removeAttribute("aria-label")
}}}
}if(AjxPackage.define("ajax.dwt.widgets.DwtButton")){DwtButton=function(d){if(arguments.length==0){return
}d=Dwt.getParams(arguments,DwtButton.PARAMS);
d.className=d.className||"ZButton";
DwtLabel.call(this,d);
var c=d.parent;
if(!c._hasSetMouseEvents||AjxEnv.isIE){this._setMouseEvents()
}var a;
if(c._hasSetMouseEvents){a=AjxEnv.isIE?[DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE]:[]
}else{a=AjxEnv.isIE?[DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE]:[DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT];
a.push(DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP,DwtEvent.ONCLICK)
}if(a&&a.length){this._setEventHdlrs(a)
}this._listeners=d.listeners||DwtButton._listeners;
this._addMouseListeners();
this._ignoreInternalOverOut=true;
this._dropDownEvtMgr=new AjxEventMgr();
this._selected=false;
this._actionTiming=d.actionTiming||DwtButton.ACTION_MOUSEUP;
this.__preventMenuFocus=null;
this._menuPopupStyle=DwtButton.MENU_POPUP_STYLE_BELOW
};
DwtButton.prototype=new DwtLabel;
DwtButton.prototype.constructor=DwtButton;
DwtButton.prototype.isDwtButton=true;
DwtButton.prototype.toString=function(){return"DwtButton"
};
DwtButton.prototype.role="button";
DwtButton.PARAMS=["parent","style","className","posStyle","actionTiming","id","index","listeners"];
DwtButton.TOGGLE_STYLE=DwtLabel._LAST_STYLE*2;
DwtButton.ALWAYS_FLAT=DwtLabel._LAST_STYLE*4;
DwtButton._LAST_STYLE=DwtButton.ALWAYS_FLAT;
DwtButton.ACTION_MOUSEUP=1;
DwtButton.ACTION_MOUSEDOWN=2;
DwtButton.NOTIFY_WINDOW=500;
DwtButton.MENU_POPUP_STYLE_BELOW="BELOW";
DwtButton.MENU_POPUP_STYLE_ABOVE="ABOVE";
DwtButton.MENU_POPUP_STYLE_RIGHT="RIGHT";
DwtButton.MENU_POPUP_STYLE_CASCADE="CASCADE";
DwtButton.MOUSE_EVENTS=[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP];
if(AjxEnv.isIE){DwtButton.MOUSE_EVENTS.push(DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE)
}else{DwtButton.MOUSE_EVENTS.push(DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT)
}DwtButton.prototype.TEMPLATE="dwt.Widgets#ZButton";
DwtButton.prototype.dispose=function(){if(this._menu&&this._menu.isDwtMenu&&(this._menu.parent==this)){this._menu.dispose();
this._menu=null
}DwtLabel.prototype.dispose.call(this)
};
DwtButton.prototype.addSelectionListener=function(c,a){this.addListener(DwtEvent.SELECTION,c,a)
};
DwtButton.prototype.removeSelectionListener=function(a){this.removeListener(DwtEvent.SELECTION,a)
};
DwtButton.prototype.removeSelectionListeners=function(){this.removeAllListeners(DwtEvent.SELECTION)
};
DwtButton.prototype.addDropDownSelectionListener=function(a){return this._dropDownEvtMgr.addListener(DwtEvent.SELECTION,a)
};
DwtButton.prototype.removeDropDownSelectionListener=function(a){this._dropDownEvtMgr.removeListener(DwtEvent.SELECTION,a)
};
DwtButton.prototype._dropDownImg="SelectPullDownArrow";
DwtButton.prototype._dropDownDepImg="SelectPullDownArrow";
DwtButton.prototype._dropDownHovImg="SelectPullDownArrowHover";
DwtButton.prototype.setDropDownImages=function(c,d,e,a){this._dropDownImg=c;
this._dropDownHovImg=e;
this._dropDownDepImg=a
};
DwtButton.prototype.setDropDownHovImage=function(a){this._dropDownHovImg=a
};
DwtButton.prototype._addMouseListeners=function(){AjxUtil.foreach(DwtButton.MOUSE_EVENTS,(function(a){this.addListener(a,this._listeners[a])
}).bind(this))
};
DwtButton.prototype._removeMouseListeners=function(){AjxUtil.foreach(DwtButton.MOUSE_EVENTS,(function(a){this.removeListener(a,this._listeners[a])
}).bind(this))
};
DwtButton.prototype.setDisplayState=function(c,a){if(this._selected&&c!=DwtControl.SELECTED&&!a){c=[DwtControl.SELECTED,c].join(" ")
}DwtLabel.prototype.setDisplayState.call(this,c)
};
DwtButton.prototype.setEnabled=function(c){if(c!=this._enabled){DwtLabel.prototype.setEnabled.call(this,c);
if(c){var d=(AjxEnv.isIE)?this.getHtmlElement().firstChild:null;
if(d){var a=d.className;
d.className="";
d.className=a
}this._addMouseListeners();
if(this._menu){this._setDropDownCellMouseHandlers(true);
if(this._dropDownEl&&this._dropDownImg){AjxImg.setImage(this._dropDownEl,this._dropDownImg)
}}}else{this._removeMouseListeners();
if(this._menu){this._setDropDownCellMouseHandlers(false);
if(this._dropDownEl&&this._dropDownImg){AjxImg.setDisabledImage(this._dropDownEl,this._dropDownImg)
}}}}};
DwtButton.prototype.setImage=function(a,c){if(this.whatToShow&&!this.whatToShow.showImage){return
}DwtLabel.prototype.setImage.apply(this,arguments);
this._setMinWidth()
};
DwtButton.prototype.setText=function(a){if(this.whatToShow&&!this.whatToShow.showText){return
}DwtLabel.prototype.setText.call(this,a);
this._setMinWidth()
};
DwtButton.prototype._setMinWidth=function(){if(this.getText()!=null){Dwt.addClass(this.getHtmlElement(),"ZHasText")
}else{Dwt.delClass(this.getHtmlElement(),"ZHasText")
}};
DwtButton.prototype.setHoverImage=function(c,a){a=a||(this._style&DwtLabel.IMAGE_RIGHT?DwtLabel.RIGHT:DwtLabel.LEFT);
this._hoverImageInfo=this._hoverImageInfo||{};
this._hoverImageInfo[a]=c
};
DwtButton.prototype.setMenu=function(a){a=Dwt.getParams(arguments,DwtButton.setMenuParams,(arguments.length==1&&arguments[0]&&!arguments[0].menu));
if(a){this._menu=a.menu
}if(this._menu){if(this._menu.isDwtMenu){this._shouldToggleMenu=(a.shouldToggle===true);
if(a.popupAbove){this._menuPopupStyle=DwtButton.MENU_POPUP_STYLE_ABOVE
}else{if(a.popupRight){this._menuPopupStyle=DwtButton.MENU_POPUP_STYLE_RIGHT
}else{this._menuPopupStyle=a.menuPopupStyle||DwtButton.MENU_POPUP_STYLE_BELOW
}}this._menuAdded(this._menu)
}else{this._savedMenuParams=a
}if(this._dropDownEl){Dwt.addClass(this.getHtmlElement(),"ZHasDropDown");
if(this._dropDownImg){AjxImg.setImage(this._dropDownEl,this._dropDownImg)
}if(this._enabled){this._setDropDownCellMouseHandlers(true)
}if(this._menu.isDwtMenu){this._menu.setAssociatedElementId(this._dropDownEl.id)
}}if((this.__preventMenuFocus!=null)&&this._menu.isDwtMenu){this._menu.dontStealFocus(this.__preventMenuFocus)
}}else{if(this._dropDownEl){Dwt.delClass(this.getHtmlElement(),"ZHasDropDown");
this._dropDownEl.innerHTML=""
}}};
DwtButton.setMenuParams=["menu","shouldToggle","followIconStyle","popupAbove","popupRight"];
DwtButton.prototype._setDropDownCellMouseHandlers=function(a){this._dropDownEventsEnabled=a
};
DwtButton.prototype.getMenu=function(a){if(this._menu&&this._menu.isAjxCallback){if(a){return null
}var d=this._menu;
var c=this._savedMenuParams||{};
c.menu=d.run(this);
this.setMenu(c);
if((this.__preventMenuFocus!=null)&&(this._menu.isDwtMenu)){this._menu.dontStealFocus(this.__preventMenuFocus)
}}if(this._menu){this.setAttribute("menuId",this._menu._htmlElId)
}return this._menu
};
DwtButton.prototype.resetClassName=function(){this.setDisplayState(DwtControl.NORMAL)
};
DwtButton.prototype.setActionTiming=function(a){this._actionTiming=a
};
DwtButton.prototype.setHovered=function(a){this.setDisplayState(a?DwtControl.HOVER:DwtControl.NORMAL)
};
DwtButton.prototype.setEnabledImage=function(a){this._enabledImageInfo=a;
this.setImage(a)
};
DwtButton.prototype.setDepressedImage=function(a){this._depressedImageInfo=a
};
DwtButton.prototype.setSelected=function(a){if(this._selected!=a){this._selected=a;
this.setDisplayState(a?DwtControl.SELECTED:DwtControl.NORMAL)
}};
DwtButton.prototype.isToggled=function(){return this._selected
};
DwtButton.prototype.popup=function(f,c){f=f||this.getMenu();
if(!f){return
}var l=f.parent;
var h=l.getBounds();
var k=f.shell.getSize();
var d=f.getSize();
var m=l.getHtmlElement();
var e=Dwt.toWindow(m,0,0);
var a=(m.style.borderLeftWidth=="")?0:parseInt(m.style.borderLeftWidth);
var n=Boolean(c&&DwtKeyEvent.isKeyEvent(c));
var j;
if(this._menuPopupStyle==DwtButton.MENU_POPUP_STYLE_RIGHT){j=e.x+h.width-d.x
}else{if(this._menuPopupStyle==DwtButton.MENU_POPUP_STYLE_CASCADE){j=e.x+h.width
}else{j=e.x+a;
j=((j+d.x)>=k.x)?k.x-d.x:j
}}var i;
if(this._menuPopupStyle==DwtButton.MENU_POPUP_STYLE_ABOVE){i=e.y-d.y
}else{if(this._menuPopupStyle==DwtButton.MENU_POPUP_STYLE_CASCADE){i=e.y
}else{var g=(m.style.borderTopWidth=="")?0:parseInt(m.style.borderTopWidth);
g+=(m.style.borderBottomWidth=="")?0:parseInt(m.style.borderBottomWidth);
i=e.y+h.height+g
}}f.popup(0,j,i,n);
f.setSelectedItem(0)
};
DwtButton.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_BUTTON
};
DwtButton.prototype.handleKeyAction=function(a,c){switch(a){case DwtKeyMap.SELECT:this._emulateSingleClick();
break;
case DwtKeyMap.SUBMENU:var d=this.getMenu();
if(!d){return false
}this._emulateDropDownClick();
d.setSelectedItem(0);
break
}return true
};
DwtButton.prototype.removePullDownMenuOptions=function(){if(this._menu){this._setDropDownCellMouseHandlers(false);
if(this._dropDownEl&&this._dropDownImg){AjxImg.setImage(this._dropDownEl,"");
this.setDropDownImages("","","","")
}}};
DwtButton.prototype._emulateSingleClick=function(){this.trigger();
var a=this.getHtmlElement();
var c=Dwt.toWindow(a);
var d=new DwtMouseEvent();
this._setMouseEvent(d,{type:this._actionTiming==DwtButton.ACTION_MOUSEDOWN?DwtEvent.ONMOUSEDOWN:DwtEvent.ONMOUSEUP,dwtObj:this,target:a,button:DwtMouseEvent.LEFT,docX:c.x,docY:c.y,kbNavEvent:true});
this.notifyListeners(d.type,d)
};
DwtButton.prototype._emulateDropDownClick=function(){var a=this._dropDownEl;
if(!a){return
}var c=Dwt.toWindow(a);
var d=new DwtMouseEvent();
this._setMouseEvent(d,{dwtObj:this,target:a,button:DwtMouseEvent.LEFT,docX:c.x,docY:c.y,kbNavEvent:true});
DwtButton._dropDownCellMouseUpHdlr(d)
};
DwtButton.prototype._focusByMouseUpEvent=function(){};
DwtButton.prototype._focus=function(){this.setDisplayState(DwtControl.FOCUSED)
};
DwtButton.prototype._blur=function(){this.setDisplayState(DwtControl.NORMAL)
};
DwtButton.prototype._toggleMenu=function(a){if(this._shouldToggleMenu){var c=this.getMenu();
if(!c.isPoppedUp()){this.popup(null,a);
this._menuUp=true
}else{c.popdown(0,a);
this._menuUp=false;
this.deactivate()
}}else{this.popup(null,a)
}};
DwtButton.prototype._isDropDownEvent=function(c){if(this._dropDownEventsEnabled&&this._dropDownEl){var a=c.docX;
var d=Dwt.toWindow(this._dropDownEl,0,0,window).x;
if(a>=d){return true
}}return false
};
DwtButton.prototype.trigger=function(){if(this._depressedImageInfo){this.setImage(this._depressedImageInfo)
}this.setDisplayState(DwtControl.ACTIVE,true);
this.isActive=true
};
DwtButton.prototype.deactivate=function(){this._showHoverImage(true);
if(this._style&DwtButton.TOGGLE_STYLE){this._selected=!this._selected
}this.setDisplayState(DwtControl.HOVER)
};
DwtButton.prototype.dontStealFocus=function(a){if(a==null){a=true
}if(this._menu&&this._menu.isDwtMenu){this._menu.dontStealFocus(a)
}this.__preventMenuFocus=a
};
DwtButton.prototype._toggleHoverClass=function(c,e){var a=this._getIconEl(e);
if(a){var d=c?this._hoverImageInfo[e]:this.__imageInfo[e];
a.firstChild.className=AjxImg.getClassForImage(d)
}};
DwtButton.prototype._showHoverImage=function(a){if(!this._hoverImageInfo){return
}if(this._hoverImageInfo.left){this._toggleHoverClass(a,DwtLabel.LEFT)
}if(this._hoverImageInfo.right){this._toggleHoverClass(a,DwtLabel.RIGHT)
}};
DwtButton.prototype._handleClick=function(c){if(this.isListenerRegistered(DwtEvent.SELECTION)){var a=(new Date()).getTime();
if(!this._lastNotify||(a-this._lastNotify>DwtButton.NOTIFY_WINDOW)){var d=DwtShell.selectionEvent;
DwtUiEvent.copy(d,c);
d.item=this;
d.detail=(typeof this.__detail=="undefined")?0:this.__detail;
this.notifyListeners(DwtEvent.SELECTION,d);
this._lastNotify=a;
this.shell.notifyGlobalSelection(d)
}}else{if(this._menu){if(this._menu.isDwtMenu&&!this.isListenerRegistered(DwtEvent.SELECTION)){this._menu.setAssociatedObj(this)
}this._toggleMenu(c)
}}};
DwtButton.prototype._setMouseOutClassName=function(){this.setDisplayState(DwtControl.NORMAL)
};
DwtButton.prototype._createHtmlFromTemplate=function(a,c){DwtLabel.prototype._createHtmlFromTemplate.call(this,a,c);
this._dropDownEl=document.getElementById(c.id+"_dropdown")
};
DwtButton.prototype._menuAdded=function(a){this.setAttribute("aria-haspopup",true);
this.setAttribute("aria-controls",a._htmlElId)
};
DwtButton.prototype._menuItemSelected=function(a){};
DwtButton._dropDownCellMouseDownHdlr=function(c){var d=DwtControl.getTargetControl(c);
var a=DwtShell.mouseEvent;
a.setFromDhtmlEvent(c,d);
if(a.button==DwtMouseEvent.LEFT){if(this._depImg){AjxImg.setImage(this,this._depImg)
}}a._stopPropagation=true;
a._returnValue=false;
a.setToDhtmlEvent(c);
return false
};
DwtButton._dropDownCellMouseUpHdlr=function(c){var a=DwtShell.mouseEvent;
a.setFromDhtmlEvent(c);
if(a.button==DwtMouseEvent.LEFT){if(this._dropDownHovImg&&!this.noMenuBar){AjxImg.setImage(this,this._dropDownHovImg)
}DwtEventManager.notifyListeners(DwtEvent.ONMOUSEDOWN,a);
var e=DwtControl.getTargetControl(c);
if(e){if(e.getMenu()&&e.getMenu().isPoppedUp()){e.getMenu().popdown()
}else{if(e._menu&&e._menu.isAjxCallback){e.popup()
}if(e._dropDownEvtMgr.isListenerRegistered(DwtEvent.SELECTION)){var d=DwtShell.selectionEvent;
DwtUiEvent.copy(d,a);
d.item=e;
e._dropDownEvtMgr.notifyListeners(DwtEvent.SELECTION,d)
}else{e._toggleMenu(c)
}}}}a._stopPropagation=true;
a._returnValue=false;
a.setToDhtmlEvent(c);
return false
};
DwtButton._mouseOverListener=function(e){var c=e.dwtObj;
if(!c){return false
}c._showHoverImage(true);
c.setDisplayState(DwtControl.HOVER);
var f=c._dropDownEl;
if(c._menu&&f&&c._dropDownHovImg&&!c.noMenuBar&&c.isListenerRegistered(DwtEvent.SELECTION)){if(c._dropDownHovImg){AjxImg.setImage(f,c._dropDownHovImg)
}}if(AjxEnv.isIE){if(e&&e.target&&e.target.firstChild){var d=e.target.firstChild;
var a=d.className;
d.className="";
d.className=a
}}e._stopPropagation=true
};
DwtButton._mouseOutListener=function(c){var a=c.dwtObj;
if(!a){return false
}a._showHoverImage(false);
a._setMouseOutClassName();
a.isActive=false;
var d=a._dropDownEl;
if(a._menu&&d&&a._dropDownImg){AjxImg.setImage(d,a._dropDownImg)
}};
DwtButton._mouseDownListener=function(c){var a=c.dwtObj;
if(!a){return false
}if(a._isDropDownEvent(c)){return DwtButton._dropDownCellMouseDownHdlr(c)
}if(c.button!=DwtMouseEvent.LEFT){return
}var d=a._dropDownEl;
if(a._menu&&d&&a._dropDownDepImg){AjxImg.setImage(d,a._dropDownDepImg)
}switch(a._actionTiming){case DwtButton.ACTION_MOUSEDOWN:a.trigger();
a._handleClick(c);
break;
case DwtButton.ACTION_MOUSEUP:a.trigger();
break
}};
DwtButton._mouseUpListener=function(d){var a=d.dwtObj;
if(!a){return false
}if(a._isDropDownEvent(d)){return DwtButton._dropDownCellMouseUpHdlr(d)
}if(d.button!=DwtMouseEvent.LEFT){return
}var e=a._dropDownEl;
if(a._menu&&e&&a._dropDownHovImg&&!a.noMenuBar){AjxImg.setImage(e,a._dropDownHovImg)
}switch(a._actionTiming){case DwtButton.ACTION_MOUSEDOWN:a.deactivate();
break;
case DwtButton.ACTION_MOUSEUP:var c=a.getHtmlElement();
if(a.isActive){a.deactivate();
a._handleClick(d)
}break
}};
DwtButton._listeners={};
DwtButton._listeners[DwtEvent.ONMOUSEOVER]=new AjxListener(null,DwtButton._mouseOverListener);
DwtButton._listeners[DwtEvent.ONMOUSEOUT]=new AjxListener(null,DwtButton._mouseOutListener);
DwtButton._listeners[DwtEvent.ONMOUSEDOWN]=new AjxListener(null,DwtButton._mouseDownListener);
DwtButton._listeners[DwtEvent.ONMOUSEUP]=new AjxListener(null,DwtButton._mouseUpListener);
DwtButton._listeners[DwtEvent.ONMOUSEENTER]=new AjxListener(null,DwtButton._mouseOverListener);
DwtButton._listeners[DwtEvent.ONMOUSELEAVE]=new AjxListener(null,DwtButton._mouseOutListener)
}if(AjxPackage.define("ajax.dwt.widgets.DwtLinkButton")){DwtLinkButton=function(a){a.className=a.className||"ZButtonLink";
this._noDropDown=a.noDropDown;
this._elementTag=a.elementTag;
DwtButton.call(this,a)
};
DwtLinkButton.prototype=new DwtButton;
DwtLinkButton.prototype.constructor=DwtLinkButton;
DwtLinkButton.prototype.role="link";
DwtLinkButton.prototype.TEMPLATE="dwt.Widgets#ZLinkButton";
DwtLinkButton.prototype._dropDownImg=null;
DwtLinkButton.prototype._dropDownDepImg=null;
DwtLinkButton.prototype._dropDownHovImg=null;
DwtLinkButton.prototype.toString=function(){return"DwtLinkButton"
};
DwtLinkButton.prototype._createHtmlFromTemplate=function(a,c){c=c||{};
c.noDropDown=this._noDropDown;
DwtButton.prototype._createHtmlFromTemplate.call(this,a,c)
};
DwtLinkButton.prototype._createElement=function(){return document.createElement(this._elementTag||"SPAN")
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtMenuItem")){DwtMenuItem=function(e){if(arguments.length==0){return
}e=Dwt.getParams(arguments,DwtMenuItem.PARAMS);
var d=e.parent;
if(!(d&&d.isDwtMenu)){throw new DwtException("Parent must be a DwtMenu object",DwtException.INVALIDPARENT,"DwtMenuItem")
}var c=e.style=e.style||DwtMenuItem.NO_STYLE;
if(d._style==DwtMenu.BAR_STYLE&&c!=DwtMenuItem.PUSH_STYLE){throw new DwtException("DwtMenuItemInit: invalid style",DwtException.INVALID_PARAM,"DwtMenuItem")
}e.className=e.className||"ZMenuItem";
c&=~DwtLabel.IMAGE_RIGHT;
c|=DwtButton.ALWAYS_FLAT|DwtLabel.IMAGE_LEFT;
var a=(c&DwtMenuItem.SEPARATOR_STYLE);
if(a){e.className="ZMenuItemSeparator";
this.isFocusable=false;
this.noTab=true;
this.role=null
}e.listeners=DwtMenuItem._listeners;
DwtButton.call(this,e);
this.setDropDownImages("Cascade","Cascade","Cascade","Cascade");
this._radioGroupId=e.radioGroupId;
if(d._addItem){d._addItem(this,e.index)
}if(!a){this.addSelectionListener(this.__handleItemSelect.bind(this))
}};
DwtMenuItem.PARAMS=["parent","style","radioGroupId","index","className","posStyle","id"];
DwtMenuItem.prototype=new DwtButton;
DwtMenuItem.prototype.constructor=DwtMenuItem;
DwtMenuItem.prototype.isDwtMenuItem=true;
DwtMenuItem.prototype.toString=function(){return"DwtMenuItem"
};
DwtMenuItem.prototype.role="menuitem";
DwtMenuItem.CHECKED=1;
DwtMenuItem.UNCHECKED=2;
DwtMenuItem.NO_STYLE=0;
DwtMenuItem.CHECK_STYLE=DwtButton._LAST_STYLE*2;
DwtMenuItem.RADIO_STYLE=DwtButton._LAST_STYLE*4;
DwtMenuItem.SEPARATOR_STYLE=DwtButton._LAST_STYLE*8;
DwtMenuItem.CASCADE_STYLE=DwtButton._LAST_STYLE*16;
DwtMenuItem.PUSH_STYLE=DwtButton._LAST_STYLE*32;
DwtMenuItem.SELECT_STYLE=DwtButton._LAST_STYLE*64;
DwtMenuItem._LAST_STYLE=DwtMenuItem.SELECT_STYLE;
DwtMenuItem._MENU_POPUP_DELAY=250;
DwtMenuItem._MENU_POPDOWN_DELAY=250;
DwtMenuItem.prototype.TEMPLATE="dwt.Widgets#ZMenuItem";
DwtMenuItem.prototype.SEPARATOR_TEMPLATE="dwt.Widgets#ZMenuItemSeparator";
DwtMenuItem.prototype.BLANK_CHECK_TEMPLATE="dwt.Widgets#ZMenuItemBlankCheck";
DwtMenuItem.prototype.BLANK_ICON_TEMPLATE="dwt.Widgets#ZMenuItemBlankIcon";
DwtMenuItem.prototype.BLANK_CASCADE_TEMPLATE="dwt.Widgets#ZMenuItemBlankCascade";
DwtMenuItem.prototype.dispose=function(){delete this._checkEl;
DwtButton.prototype.dispose.call(this)
};
DwtMenuItem.create=function(c){var a=new DwtMenuItem(c);
if(c.imageInfo){a.setImage(c.imageInfo)
}if(c.text){a.setText(c.text)
}a.setEnabled(c.enabled!==false);
return a
};
DwtMenuItem.prototype.getChecked=function(){return this._itemChecked
};
DwtMenuItem.prototype.setChecked=function(c,a){this._setChecked(c,null,a);
this.parent._checkItemAdded(this)
};
DwtMenuItem.prototype.setImage=function(a){DwtButton.prototype.setImage.call(this,a);
this.parent._iconItemAdded(this)
};
DwtMenuItem.prototype.setText=function(a){DwtButton.prototype.setText.call(this,a);
if(this.parent.isPoppedUp()){this.parent.render()
}};
DwtMenuItem.prototype.setMenu=function(a){var a=Dwt.getParams(arguments,DwtButton.setMenuParams);
DwtButton.prototype.setMenu.call(this,a);
this.parent._submenuItemAdded(this)
};
DwtMenuItem.prototype.setHoverDelay=function(a){this._hoverDelay=a
};
DwtMenuItem.prototype.setShortcut=function(a){if(a&&this._dropDownEl){this._dropDownEl.innerHTML=a
}};
DwtMenuItem.prototype.setSelectableWithSubmenu=function(a){this._selectableWithSubmenu=a
};
DwtMenuItem.prototype.isSeparator=function(){return Boolean(this._style&DwtMenuItem.SEPARATOR_STYLE)
};
DwtMenuItem.prototype.handleKeyAction=function(a,c){if(this.parent){return this.parent.handleKeyAction(a,c)
}else{return DwtButton.prototype.handleKeyAction.call(this,a,c)
}};
DwtMenuItem.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_MENU
};
DwtMenuItem.prototype._createHtml=function(a){var c=this.isSeparator()?this.SEPARATOR_TEMPLATE:this.TEMPLATE;
DwtButton.prototype._createHtml.call(this,a||c)
};
DwtMenuItem.prototype._createHtmlFromTemplate=function(a,c){DwtButton.prototype._createHtmlFromTemplate.call(this,a,c);
this._checkEl=document.getElementById(c.id+"_check")
};
DwtMenuItem.prototype._setChecked=function(g,f,c){var a=this._style&DwtMenuItem.CHECK_STYLE;
var e=this._style&DwtMenuItem.RADIO_STYLE;
if((a||e)&&this._itemChecked!=g){this._itemChecked=g;
if(this._checkEl){this._checkEl.innerHTML="";
var d=g?(a?"MenuCheck":"MenuRadio"):"Blank_9";
AjxImg.setImage(this._checkEl,d);
if(g){if(e){this.parent._radioItemSelected(this,c)
}}}}};
DwtMenuItem.prototype._checkItemAdded=function(a){};
DwtMenuItem.prototype._checkedItemsRemoved=function(){};
DwtMenuItem.prototype._submenuItemAdded=function(){if(this.isSeparator()){return
}if(this._cascCell==null){this._cascCell=this._row.insertCell(-1);
this._cascCell.noWrap=true
}};
DwtMenuItem.prototype._submenuItemRemoved=function(){if(this._dropDownEl){this._dropDownEl.innerHTML=""
}};
DwtMenuItem.prototype._popupMenu=function(f,l){var a=this.getMenu();
var c=this.parent.parent;
var j=this.getBounds();
var g=a.shell.getSize();
var m=a.getSize();
var k;
var h;
var e;
var i;
var d=c.getHtmlElement();
if(c._style==DwtMenu.BAR_STYLE){e=(d.style.borderLeftWidth=="")?0:parseInt(d.style.borderLeftWidth);
k=j.x+e;
i=(d.style.borderTopWidth=="")?0:parseInt(d.style.borderTopWidth);
i+=(d.style.borderBottomWidth=="")?0:parseInt(d.style.borderBottonWidth);
h=j.y+j.height+i;
k=((k+m.x)>=g.x)?k-(k+m.x-g.x):k
}else{e=(d.style.borderLeftWidth=="")?0:parseInt(d.style.borderLeftWidth);
e+=(d.style.borderRightWidth=="")?0:parseInt(d.style.borderRightWidth);
k=j.x+j.width+e;
i=(d.style.borderTopWidth=="")?0:parseInt(d.style.borderTopWidth);
h=j.y+i;
if(a.centerOnParentVertically()){h+=j.height/2
}}a.popup(f,k,h,l)
};
DwtMenuItem.prototype._popdownMenu=function(){var a=this.getMenu();
if(a){a.popdown()
}};
DwtMenuItem.prototype._isMenuPoppedUp=function(){var a=this.getMenu();
return(a&&a.isPoppedUp())
};
DwtMenuItem.prototype._blur=function(){var a=this.parent;
var c=new DwtMouseEvent();
this._setMouseEvent(c,{dwtObj:this,ersatz:true,type:DwtEvent.ONMOUSEOUT});
this.notifyListeners(DwtEvent.ONMOUSEOUT,c);
a.__currentItem=null;
DwtButton.prototype._blur.call(this)
};
DwtMenuItem.prototype._focus=function(){var c=this.parent;
var a=c.__currentItem;
var d=new DwtMouseEvent();
this._setMouseEvent(d,{dwtObj:this,ersatz:true});
this.notifyListeners(AjxEnv.isIE?DwtEvent.ONMOUSEENTER:DwtEvent.ONMOUSEOVER,d);
c.__currentItem=this;
DwtButton.prototype._focus.call(this)
};
DwtMenuItem.prototype.__handleItemSelect=function(a){this.setDisplayState(DwtControl.NORMAL);
if(this.isStyle(DwtMenuItem.CHECK_STYLE)){this._setChecked(!this._itemChecked,null,true);
a.detail=this.getChecked()?DwtMenuItem.CHECKED:DwtMenuItem.UNCHECKED
}else{if(this.isStyle(DwtMenuItem.RADIO_STYLE)){this._setChecked(true,true);
this.parent._radioItemSelected(this,true);
a.detail=this.getChecked()?DwtMenuItem.CHECKED:DwtMenuItem.UNCHECKED
}else{if(this.isStyle(DwtMenuItem.PUSH_STYLE)){if(this._menu){if(this._isMenuPoppedUp()){DwtMenu.closeActiveMenu(a)
}else{this._popupMenu(DwtKeyEvent.isKeyEvent(ev))
}}return
}}}if(!this.isStyle(DwtMenuItem.CASCADE_STYLE)){if(this._selectableWithSubmenu||!this._menu||!this._menu.isPoppedUp||!this._menu.isPoppedUp()){DwtMenu.closeActiveMenu(a)
}}};
DwtMenuItem._mouseOverListener=function(c){var a=c.dwtObj;
if(!a){return false
}var d=a.parent;
if(a.isSeparator()){return false
}DwtButton._mouseOverListener(c,a);
if(!c.ersatz){d._popdownSubmenus()
}if(!a.hasFocus()&&a.getEnabled()){a.focus()
}if(a._menu&&!c.ersatz){a._popupMenu(a._hoverDelay)
}};
DwtMenuItem._mouseOutListener=function(d){var c=d.dwtObj;
var a=c&&c.getMenu();
if(a&&a.isPoppedUp()){return
}DwtButton._mouseOutListener(d)
};
DwtMenuItem.prototype.getRowElement=function(){var a=this._textEl||this._dropDownEl||(this._iconEl&&this._iconEl.left)||(this._iconEl&&this._iconEl.right);
if(a){return a.parentNode
}};
DwtMenuItem._listeners={};
DwtMenuItem._listeners[DwtEvent.ONMOUSEOVER]=DwtMenuItem._mouseOverListener.bind();
DwtMenuItem._listeners[DwtEvent.ONMOUSEOUT]=DwtMenuItem._mouseOutListener.bind();
DwtMenuItem._listeners[DwtEvent.ONMOUSEDOWN]=DwtButton._mouseDownListener.bind();
DwtMenuItem._listeners[DwtEvent.ONMOUSEUP]=DwtButton._mouseUpListener.bind();
DwtMenuItem._listeners[DwtEvent.ONMOUSEENTER]=DwtMenuItem._mouseOverListener.bind();
DwtMenuItem._listeners[DwtEvent.ONMOUSELEAVE]=DwtButton._mouseOutListener.bind()
}if(AjxPackage.define("ajax.dwt.widgets.DwtMenu")){DwtMenu=function(e){this._created=false;
if(arguments.length==0){return
}e=Dwt.getParams(arguments,DwtMenu.PARAMS);
this._origStyle=e.style;
var c=e.parent;
if(c){if(c instanceof DwtMenuItem||c instanceof DwtButton){if((e.style==DwtMenu.GENERIC_WIDGET_STYLE)||(e.style==DwtMenu.DROPDOWN_CENTERV_STYLE)){this._style=e.style
}else{this._style=DwtMenu.DROPDOWN_STYLE
}}else{this._style=e.style||DwtMenu.POPUP_STYLE
}if(!e.posStyle){e.posStyle=(this._style==DwtMenu.BAR_STYLE)?DwtControl.STATIC_STYLE:DwtControl.ABSOLUTE_STYLE
}}e.className=e.className||"DwtMenu";
this._layoutStyle=e.layout==null||e.layout;
if(this._layoutStyle===true){this._layoutStyle=DwtMenu.LAYOUT_CASCADE
}else{if(this._layoutStyle===false){this._layoutStyle=DwtMenu.LAYOUT_STACK
}}this._maxRows=this._layoutStyle&&e.maxRows||0;
this._congruent=e.congruent;
e.parent=(c instanceof DwtShell)?c:c.shell;
DwtComposite.call(this,e);
this.parent=c;
if(this._isPopupStyle()&&(this._layoutStyle==DwtMenu.LAYOUT_STACK)){this.setScrollStyle(DwtControl.SCROLL)
}if(!c){return
}var a=AjxEnv.isIE?[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP]:[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP,DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT];
this._setEventHdlrs(a);
this._hasSetMouseEvents=true;
var d=this.getHtmlElement();
if(e.posStyle!=DwtControl.STATIC_STYLE){Dwt.setLocation(d,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE)
}if(this._style!=DwtMenu.COLOR_PICKER_STYLE&&this._style!=DwtMenu.CALENDAR_PICKER_STYLE&&this._style!=DwtMenu.GENERIC_WIDGET_STYLE){this._table=document.createElement("table");
this._table.border=this._table.cellPadding=this._table.cellSpacing=0;
this._table.className="DwtMenuTable";
this._table.id=Dwt.getNextId();
if(this._layoutStyle==DwtMenu.LAYOUT_SCROLL){this._setupScroll()
}else{d.appendChild(this._table)
}this._table.backgroundColor=DwtCssStyle.getProperty(d,"background-color")
}if(e.style!=DwtMenu.BAR_STYLE){this.setVisible(false);
this._isPoppedUp=false
}else{DwtMenu._activeMenuIds.add(d.id,null,true);
this._isPoppedUp=true
}this._popdownAction=new AjxTimedAction(this,this._doPopdown);
this._popdownActionId=-1;
this._popupAction=new AjxTimedAction(this,this._doPopup);
this._popupActionId=-1;
this._outsideListener=new AjxListener(null,DwtMenu._outsideMouseDownListener);
this._menuItemsHaveChecks=false;
this._menuItemsHaveIcons=false;
this._menuItemsWithSubmenus=0;
this.__currentItem=null;
this.__preventMenuFocus=false;
this._created=true;
this._itemSelectionListener=new AjxListener(this,this._propagateItemSelection);
if(c._menuAdded){c._menuAdded(this)
}};
DwtMenu.PARAMS=["parent","style","className","posStyle","cascade","id"];
DwtMenu.prototype=new DwtComposite;
DwtMenu.prototype.constructor=DwtMenu;
DwtMenu.prototype.isDwtMenu=true;
DwtMenu.prototype.toString=function(){return"DwtMenu"
};
DwtMenu.prototype.role="menu";
DwtMenu.BAR_STYLE="BAR";
DwtMenu.POPUP_STYLE="POPUP";
DwtMenu.DROPDOWN_STYLE="DROPDOWN";
DwtMenu.DROPDOWN_CENTERV_STYLE="DROPDOWN_CENTERV";
DwtMenu.COLOR_PICKER_STYLE="COLOR";
DwtMenu.CALENDAR_PICKER_STYLE="CALENDAR";
DwtMenu.GENERIC_WIDGET_STYLE="GENERIC";
DwtMenu.HAS_ICON="ZHasIcon";
DwtMenu.HAS_CHECK="ZHasCheck";
DwtMenu.HAS_SUBMENU="ZHasSubMenu";
DwtMenu.LAYOUT_STACK=0;
DwtMenu.LAYOUT_CASCADE=1;
DwtMenu.LAYOUT_SCROLL=2;
DwtMenu._activeMenuUp=false;
DwtMenu._activeMenuIds=new AjxVector();
DwtMenu._activeMenus=new AjxVector();
DwtMenu.prototype.dispose=function(){this._table=null;
DwtComposite.prototype.dispose.call(this);
if(!(this.parent instanceof DwtShell)){this.shell.removeChild(this)
}};
DwtMenu.prototype.addSelectionListener=function(a){this.addListener(DwtEvent.SELECTION,a)
};
DwtMenu.prototype.removeSelectionListener=function(a){this.removeListener(DwtEvent.SELECTION,a)
};
DwtMenu.prototype.addPopupListener=function(a){this.addListener(DwtEvent.POPUP,a)
};
DwtMenu.prototype.removePopupListener=function(a){this.removeListener(DwtEvent.POPUP,a)
};
DwtMenu.prototype.addPopdownListener=function(a){this.addListener(DwtEvent.POPDOWN,a)
};
DwtMenu.prototype.removePopdownListener=function(a){this.removeListener(DwtEvent.POPDOWN,a)
};
DwtMenu.prototype.setWidth=function(a){this._width=a;
if(this._table){Dwt.setSize(this._table,a,Dwt.CLEAR)
}};
DwtMenu.prototype.centerOnParentVertically=function(){return(this._style===DwtMenu.DROPDOWN_CENTERV_STYLE)
};
DwtMenu.prototype._isPopupStyle=function(){return(this._style===DwtMenu.POPUP_STYLE||this._style===DwtMenu.DROPDOWN_STYLE||this._style===DwtMenu.DROPDOWN_CENTERV_STYLE)
};
DwtMenu.prototype.getItem=function(a){return this._children.get(a)
};
DwtMenu.prototype.getItemIndex=function(a){return this._children.indexOf(a)
};
DwtMenu.prototype.getItemById=function(d,f){var a=this.getItems();
for(var c=0;
c<a.length;
c++){var e=a[c].getData(d);
if(e==f){a[c].index=c;
return a[c]
}}return null
};
DwtMenu.prototype.getItemCount=function(){return this._children.size()
};
DwtMenu.prototype.getItems=function(){return this._children.getArray()
};
DwtMenu.prototype.getSelectedItem=function(f){var c=this._children.getArray();
for(var e=0;
e<c.length;
e++){var d=c[e];
if((f==null||(d._style&&f!=0))&&d.getChecked()){return d
}}return null
};
DwtMenu.prototype.isPoppedUp=function(){return this._isPoppedUp
};
DwtMenu.prototype.popup=function(d,a,e,c){if(this._style==DwtMenu.BAR_STYLE){return
}if(this._popdownActionId!=-1){AjxTimedAction.cancelAction(this._popdownActionId);
this._popdownActionId=-1
}else{if(this._isPoppedUp||(this._popupActionId!=-1&&d&&d>0)){return
}else{if(this._popupActionId!=-1){AjxTimedAction.cancelAction(this._popupActionId);
this._popupActionId=-1
}}if(!d){this._doPopup(a,e,c)
}else{this._popupAction.args=[a,e,c];
this._popupActionId=AjxTimedAction.scheduleAction(this._popupAction,d)
}}};
DwtMenu.prototype.popdown=function(c,a){if(this._style==DwtMenu.BAR_STYLE){return
}if(this._popupActionId!=-1){AjxTimedAction.cancelAction(this._popupActionId);
this._popupActionId=-1
}else{if(!this._isPoppedUp||this._popdownActionId!=-1){return
}if(c==null||c==0){this._doPopdown(a)
}else{this._popdownActionId=AjxTimedAction.scheduleAction(this._popdownAction,c)
}}};
DwtMenu.prototype._setupScroll=function(){var i=this.getHtmlElement();
this._table.style.position="relative";
this._topScroller=document.createElement("div");
this._topScroller.className="DwtMenuScrollTop";
this._topScroller.id=Dwt.getNextId();
this._imgDivTop=document.createElement("div");
this._imgDivTop.className="ImgUpArrowSmall";
this._topScroller.appendChild(this._imgDivTop);
Dwt.setHandler(this._imgDivTop,DwtEvent.ONMOUSEOUT,DwtMenu._stopEvent);
Dwt.setHandler(this._imgDivTop,DwtEvent.ONMOUSEOVER,DwtMenu._stopEvent);
i.appendChild(this._topScroller);
this._tableContainer=document.createElement("div");
this._tableContainer.appendChild(this._table);
i.appendChild(this._tableContainer);
this._bottomScroller=document.createElement("div");
this._bottomScroller.className="DwtMenuScrollBottom";
this._bottomScroller.id=Dwt.getNextId();
this._imgDivBottom=document.createElement("div");
this._imgDivBottom.className="ImgDownArrowSmall";
Dwt.setHandler(this._imgDivBottom,DwtEvent.ONMOUSEOUT,DwtMenu._stopEvent);
Dwt.setHandler(this._imgDivBottom,DwtEvent.ONMOUSEOVER,DwtMenu._stopEvent);
this._bottomScroller.appendChild(this._imgDivBottom);
i.appendChild(this._bottomScroller);
var d=AjxCallback.simpleClosure(this._scroll,this,this._table.id,true,false);
var a=AjxCallback.simpleClosure(this._scroll,this,this._table.id,false,false);
var c=AjxCallback.simpleClosure(this._handleMouseOut,this,this._topScroller.id,this._table.id);
var g=AjxCallback.simpleClosure(this._handleMouseOut,this,this._bottomScroller.id,this._table.id);
Dwt.setHandler(this._topScroller,DwtEvent.ONMOUSEDOWN,d);
Dwt.setHandler(this._topScroller,DwtEvent.ONMOUSEUP,a);
if(!AjxEnv.isIE){Dwt.setHandler(this._topScroller,DwtEvent.ONMOUSEOUT,c)
}else{Dwt.setHandler(this._topScroller,DwtEvent.ONMOUSELEAVE,a)
}var f=AjxCallback.simpleClosure(this._scroll,this,this._table.id,true,true);
var e=AjxCallback.simpleClosure(this._scroll,this,this._table.id,false,true);
Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSEDOWN,f);
Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSEUP,e);
Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSEUP,e);
if(!AjxEnv.isIE){Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSEOUT,g)
}else{Dwt.setHandler(this._bottomScroller,DwtEvent.ONMOUSELEAVE,e)
}var h=AjxCallback.simpleClosure(this._handleScroll,this,this._table.id);
Dwt.setHandler(i,DwtEvent.ONMOUSEWHEEL,h)
};
DwtMenu.prototype.render=function(v,t){var A=this.shell.getSize();
var H=this.getSize();
var w=this.getHtmlElement();
A.y-=10+(AjxEnv.isIE?20:0);
A.x-=28;
var z=this._layoutStyle==DwtMenu.LAYOUT_SCROLL;
var g=this._isPopupStyle();
var D=this._layoutStyle==DwtMenu.LAYOUT_CASCADE;
if(this._table){if(g&&D){var I=A.y;
var J=null;
var u=this._table.rows;
var h=u.length;
var c=this._maxRows;
var B=H.y;
var s=I-25;
for(var F=h-1;
F>=0;
F--){B-=Dwt.getSize(u[F]).y;
if(B<s){break
}}var r=c?Math.min(F+1,c):(F+1);
for(var E=r;
E<h;
E++){var q=u[(E-r)%r];
var e=q.insertCell(-1);
e.className="DwtMenuCascadeCell";
var p=u[E].cells[0].firstChild;
while(p!=null){e.appendChild(p);
p=p.nextSibling
}}for(E=u.length-1;
E>=r;
E--){this._table.deleteRow(r)
}var n=h%r;
if(n>0){for(var E=n;
E<r;
E++){var q=u[E];
var e=q.insertCell(-1);
e.className="DwtMenuCascadeCell";
e.empty=true;
e.innerHTML="&nbsp;"
}}H=this.getSize();
if(J){t=J-H.y
}}else{if(g&&z){var u=this._table.rows;
var h=u.length;
var c=this._maxRows;
var o=c?Math.min(c,h):h;
var m=A.y-25;
var B=20;
for(var F=0;
F<o;
F++){var a=Dwt.getSize(u[F]).y;
if(B+a<=m){B+=a
}else{break
}}H.y=B
}}}var L="auto";
var l="auto";
if(g&&z){l=H.y;
if(this._tableContainer){this._tableContainer.style.height=(l-20)+"px"
}}else{if((g&&D)||t+H.y<A.y-5){l="auto"
}else{l=A.y-t-5
}}if(z){if(this._table){this._table.style.width=H.x
}L=H.x
}this.setSize(L,l);
if((AjxEnv.isGeckoBased||AjxEnv.isSafari||(this._origStyle==DwtMenu.CALENDAR_PICKER_STYLE))&&this._table&&!z){w.style.width=(H.x+(g&&!D?10:0))+"px"
}var K=v+H.x>=A.x?A.x-H.x:v;
if(this.parent instanceof DwtMenuItem){Dwt.delClass(w,"DwtMenu-congruentLeft");
Dwt.delClass(w,"DwtMenu-congruentRight");
var G=this.parent.getBounds();
var M=DwtCssStyle.getComputedStyleObject(this.parent.parent.getHtmlElement());
var d=DwtCssStyle.getComputedStyleObject(w);
if(((K>G.x&&K<G.x+G.width)||(G.x>=K&&G.x<K+H.x))&&G.x>=H.x){var f=parseInt(d.width);
if(!AjxEnv.isIE){f+=parseInt(d.paddingLeft)+parseInt(d.paddingRight)+parseInt(d.borderLeftWidth)+parseInt(d.borderRightWidth)
}K=(parseInt(M.left)||G.x)-(f||H.x);
if(this._congruent){var n;
if(AjxEnv.isIE){n=parseInt(d.borderLeftWidth)
}else{n=parseInt(d.borderLeftWidth)+parseInt(d.borderRightWidth)
}if(!isNaN(n)){K+=n;
Dwt.addClass(w,"DwtMenu-congruentLeft")
}}}else{var k=parseInt(M.left)||(G.x-(parseInt(M.paddingLeft)||0));
var C=parseInt(M.width)||G.width;
K=k+C;
if(this._congruent){var n=parseInt(M.paddingRight)+parseInt(d.paddingLeft)+parseInt(d.borderLeftWidth);
if(!isNaN(n)){K+=n;
Dwt.addClass(w,"DwtMenu-congruentRight")
}}}}if(this._style===DwtMenu.DROPDOWN_CENTERV_STYLE){t-=H.y/2;
if(t<0){t=0
}}var J=g&&t+H.y>=A.y?A.y-H.y:t;
if(this.parent instanceof DwtMenuItem&&this._congruent){var n=(parseInt(d.paddingTop)||0)-(parseInt(d.borderTopWidth)||0);
if(n>0){J-=n
}}K=K<0&&K!==Dwt.DEFAULT?0:K;
J=J<0&&J!==Dwt.DEFAULT?0:J;
this.setLocation(K,J)
};
DwtMenu.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_MENU
};
DwtMenu.prototype._handleScroll=function(a,e){if(!e){e=window.event
}var g=Dwt.byId(a);
if(g&&e){e=e?e:window.event;
var c=e.detail?e.detail*-1:e.wheelDelta/40;
var f=g.rows;
var d=Dwt.getSize(f[0]).y||10;
this._popdownSubmenus();
if(c>0){this._doScroll(g,+d)
}else{if(c<0){this._doScroll(g,-d)
}}}};
DwtMenu.prototype._handleMouseOut=function(a,c,d){if(a&&d.type&&d.type=="mouseout"&&!AjxEnv.isIE){var e=a?Dwt.byId(a):null;
fromEl=d.target;
if(fromEl!=e){return
}toEl=d.relatedTarget;
while(toEl){toEl=toEl.parentNode;
if(toEl==e){return
}}this._scroll(c,false,false,null)
}};
DwtMenu.prototype._scroll=function(a,g,f,d){var h=a?document.getElementById(a):null;
if(h&&g){var e=h.rows;
var c=Dwt.getSize(e[0]).y||10;
if(this._direction!=f||!this._scrollTimer){this._popdownSubmenus();
this._direction=f;
if(this._scrollTimer){clearInterval(this._scrollTimer);
this._scrollTimer=null
}if(f){this._scrollTimer=setInterval(AjxCallback.simpleClosure(this._doScroll,this,h,-c),100);
this._doScroll(h,-c)
}else{this._scrollTimer=setInterval(AjxCallback.simpleClosure(this._doScroll,this,h,c),100);
this._doScroll(h,c)
}}}else{if(this._scrollTimer){clearInterval(this._scrollTimer);
this._scrollTimer=null
}}};
DwtMenu.prototype._doScroll=function(h,e){if(h&&e){var d=parseInt(h.style.top)||0;
var g;
if(e<0){var f=this._table.rows||null;
var c=f&&f.length&&Dwt.getSize(f[0]).y;
var a=h.scrollHeight-(parseInt(h.parentNode.style.height)||((this._maxRows||(f&&f.length))*c)||0);
if(Math.abs(d+e)<=a){g=d+e
}else{g=-a
}}else{if((d+e)<0){g=d+e
}else{g=0
}}Dwt.setLocation(h,Dwt.DEFAULT,g)
}};
DwtMenu.prototype.scrollToItem=function(d,a){var c=this.getItemIndex(d);
if(c!=-1){this.scrollToIndex(c,a)
}};
DwtMenu.prototype.scrollToIndex=function(j,e){if(this._created&&this._layoutStyle==DwtMenu.LAYOUT_SCROLL&&j!==null&&j>=0&&this._table){var p=this._table.rows;
if(p){var n=this._maxRows;
var a=0;
var l=[];
for(var d=0,g=p.length;
d<g;
d++){var f=Dwt.getSize(p[d]).y;
if(d<n){a+=f
}l.push(f)
}var c=l[j];
var k=parseInt(this._table.style.top)||0;
if(j>=p.length){j=p.length-1
}var m=0;
for(var d=0;
d<j&&d<l.length;
d++){m+=l[d]
}var o=0;
if(e){if(m<-k){o=-(m+k)
}else{if(m+c>a-k){o=-(m+k-a+c)
}}}else{o=-(m+k)
}if(o){this._popdownSubmenus();
this._doScroll(this._table,o)
}}}};
DwtMenu.prototype.handleKeyAction=function(c,e){switch(this._style){case DwtMenu.BAR_STYLE:case DwtMenu.POPUP_STYLE:case DwtMenu.DROPDOWN_STYLE:case DwtMenu.DROPDOWN_CENTERV_STYLE:break;
default:return false
}switch(c){case DwtKeyMap.PAGE_UP:case DwtKeyMap.PAGE_DOWN:var d=this.__currentItem||this._children.get(0);
var a=this.getItemIndex(d);
if(this._maxRows&&a!==-1){this.setSelectedItem(a+((c===DwtKeyMap.PAGE_UP)?-this._maxRows:this._maxRows))
}else{this.setSelectedItem(c===DwtKeyMap.PAGE_DOWN)
}break;
case DwtKeyMap.SELECT_PREV:case DwtKeyMap.SELECT_NEXT:this.setSelectedItem(c===DwtKeyMap.SELECT_NEXT);
break;
case DwtKeyMap.SELECT:if(this.__currentItem){this.__currentItem._emulateSingleClick()
}break;
case DwtKeyMap.SUBMENU:if(this.__currentItem&&this.__currentItem._menu){this.__currentItem._popupMenu(0,true)
}break;
case DwtKeyMap.PARENTMENU:if(this.parent.isDwtMenuItem){this.popdown();
this.parent.focus()
}break;
case DwtKeyMap.CANCEL:this.popdown();
break;
default:return false
}return true
};
DwtMenu.prototype.setAssociatedObj=function(a){this._associatedObj=a
};
DwtMenu.prototype.setAssociatedElementId=function(a){this._associatedElId=a
};
DwtMenu.prototype.checkItem=function(g,f,d){var a=this._children.getArray();
for(var c=0;
c<a.length;
c++){var e=a[c];
if(!(e.isStyle(DwtMenuItem.CHECK_STYLE)||e.isStyle(DwtMenuItem.RADIO_STYLE))){continue
}var h=e.getData(g);
if(h==f){e.setChecked(true,d)
}}};
DwtMenu.prototype.setSelectedItem=function(d,c){var a=this.__currentItem;
if(typeof(d)=="boolean"){a=!a?this._children.get(0):d?this._children.getNext(a):this._children.getPrev(a)
}else{if(d instanceof DwtMenuItem){if(this._children.contains(d)){a=d
}}else{d=Math.max(0,Math.min(this._children.size()-1,d));
a=this._children.get(d)
}}while(a){if(!a.isStyle){if(!c){a.focus()
}break
}else{if(!a.isStyle(DwtMenuItem.SEPARATOR_STYLE)&&a.getEnabled()&&a.getVisible()){break
}}a=(d===false)?this._children.getPrev(a):this._children.getNext(a)
}if(!a){return
}this.scrollToItem(a,true);
if(!c){a.focus()
}if(this.parent&&this.parent._menuItemSelected){this.parent._menuItemSelected(a)
}};
DwtMenu.prototype.clearExternallySelectedItems=function(){if(this._externallySelected!=null){this._externallySelected._deselect();
this._externallySelected=null
}};
DwtMenu.prototype.removeChild=function(d){if(this._table){if(this._style==DwtMenu.BAR_STYLE){var a=d.getHtmlElement().parentNode;
this._table.rows[0].deleteCell(Dwt.getCellIndex(a))
}else{var c=d.getHtmlElement();
if(c&&c.parentNode&&c.parentNode.parentNode.rowIndex>-1){this._table.deleteRow(c.parentNode.parentNode.rowIndex)
}}}this._children.remove(d);
if(d.removeSelectionListener){d.removeSelectionListener(this._itemSelectionListener)
}};
DwtMenu.prototype.addChild=function(a){DwtComposite.prototype.addChild.apply(this,arguments);
if(Dwt.instanceOf(a,"DwtColorPicker")||Dwt.instanceOf(a,"DwtCalendar")||(this._style==DwtMenu.GENERIC_WIDGET_STYLE)){this._addItem(a)
}if(a.addSelectionListener){a.addSelectionListener(this._itemSelectionListener)
}};
DwtMenu.prototype._addItem=function(e,c){if(this._style==DwtMenu.COLOR_PICKER_STYLE||this._style==DwtMenu.CALENDAR_PICKER_STYLE||this._style==DwtMenu.GENERIC_WIDGET_STYLE){return
}var g;
var a;
if(this._style==DwtMenu.BAR_STYLE){var f=this._table.rows;
g=(f.length!=0)?f[0]:this._table.insertRow(0);
if(c==null||c>g.cells.length){c=f.cells.length
}a=g.insertCell(c);
a.align="center";
a.vAlign="middle";
var d=g.insertCell(-1);
d.nowrap=true;
d.width="7px"
}else{if(e.isStyle&&(e.isStyle(DwtMenuItem.CHECK_STYLE)||e.isStyle(DwtMenuItem.RADIO_STYLE))){this._checkItemAdded()
}if(c==null||c>this._table.rows.length){c=-1
}g=this._table.insertRow(c);
a=g.insertCell(0)
}a.noWrap=true;
a.appendChild(e.getHtmlElement())
};
DwtMenu.prototype._radioItemSelected=function(h,f){var d=h._radioGroupId;
var g=this._children.size();
var c=this._children.getArray();
for(var e=0;
e<g;
e++){if(c[e]!=h&&c[e].isStyle(DwtMenuItem.RADIO_STYLE)&&c[e]._radioGroupId==d&&c[e]._itemChecked){c[e].setChecked(false,f);
break
}}};
DwtMenu.prototype._propagateItemSelection=function(a){if(this.isListenerRegistered(DwtEvent.SELECTION)){this.notifyListeners(DwtEvent.SELECTION,a)
}};
DwtMenu.prototype._menuHasCheckedItems=function(){return this._menuItemsHaveChecks
};
DwtMenu.prototype._menuHasItemsWithIcons=function(){return this._menuItemsHaveIcons
};
DwtMenu.prototype._menuHasSubmenus=function(){return(this._menuItemsWithSubmenus>0)
};
DwtMenu.prototype._iconItemAdded=function(a){if(!this._menuItemsHaveIcons){Dwt.addClass(this.getHtmlElement(),DwtMenu.HAS_ICON)
}this._menuItemsHaveIcons=true
};
DwtMenu.prototype._checkItemAdded=function(a){if(!this._menuItemsHaveChecks){Dwt.addClass(this.getHtmlElement(),DwtMenu.HAS_CHECK)
}this._menuItemsHaveChecks=true
};
DwtMenu.prototype._submenuItemAdded=function(){Dwt.addClass(this.getHtmlElement(),DwtMenu.HAS_SUBMENU);
this._menuItemsWithSubmenus++
};
DwtMenu.prototype._submenuItemRemoved=function(){if(this._menuItemsWithSubmenus==1){var e=this._children.size();
var c=this._children.getArray();
for(var d=0;
d<e;
d++){c[d]._submenuItemRemoved()
}}this._menuItemsWithSubmenus--;
if(this._menuItemsWithSubmenus==0){Dwt.delClass(this.getHtmlElement(),DwtMenu.HAS_SUBMENU)
}};
DwtMenu.prototype._popdownSubmenus=function(){var e=this._children.size();
var c=this._children.getArray();
for(var d=0;
d<e;
d++){if(c[d]._popdownMenu){c[d]._popdownMenu()
}}};
DwtMenu.prototype.dontStealFocus=function(a){if(a==null){a=true
}this.__preventMenuFocus=!!a
};
DwtMenu.prototype._doPopup=function(f,d,i){var e=DwtBaseDialog.getActiveDialog()?Dwt.Z_DIALOG_MENU:Dwt.Z_MENU;
this.setZIndex(e);
this.setVisible(true);
this.render(f,d);
var c=this._layoutStyle==DwtMenu.LAYOUT_SCROLL;
var g=this._layoutStyle==DwtMenu.LAYOUT_CASCADE;
if(!c){this.setScrollStyle(this._isPopupStyle()&&g?Dwt.CLIP:Dwt.SCROLL)
}else{if(this._tableContainer){Dwt.setScrollStyle(this._tableContainer,Dwt.CLIP)
}}this.notifyListeners(DwtEvent.POPUP,this);
var j=this.shell.getToolTip();
if(j){j.popdown()
}this._popupActionId=-1;
this._isPoppedUp=true;
var h=DwtOutsideMouseEventMgr.INSTANCE;
var a={id:"DwtMenu",obj:this,outsideListener:this._outsideListener};
h.startListening(a);
if(!DwtMenu._activeMenu){DwtMenu._activeMenu=this;
DwtMenu._activeMenuUp=true
}DwtMenu._activeMenuIds.add(this._htmlElId,null,true);
DwtMenu._activeMenuIds.sort();
DwtMenu._activeMenus.add(this,null,true);
DwtShell.getShell(window).getKeyboardMgr().pushTabGroup(this._compositeTabGroup,this.__preventMenuFocus);
if(i||!this.parent.isDwtMenu){this.setSelectedItem(0,this.__preventMenuFocus)
}};
DwtMenu.prototype.getSize=function(c){var a;
if(this._table){a=Dwt.getSize(this._table,c)
}else{a=DwtComposite.prototype.getSize.call(this,c)
}if(this._width&&this._width>a.x){a.x=this._width
}return a
};
DwtMenu.prototype._doPopdown=function(h){var k=this._children.getArray();
var o=this._children.size();
for(var f=0;
f<o;
f++){if((k[f] instanceof DwtMenuItem)&&!(k[f].isStyle(DwtMenuItem.SEPARATOR_STYLE))){k[f]._popdownMenu()
}}this.setVisible(false);
this._ev=h;
this.notifyListeners(DwtEvent.POPDOWN,this);
var m=DwtOutsideMouseEventMgr.INSTANCE;
m.stopListening({id:"DwtMenu",obj:this});
if(DwtMenu._activeMenu==this){DwtMenu._activeMenu=null;
DwtMenu._activeMenuUp=false
}DwtMenu._activeMenuIds.remove(this._htmlElId);
DwtMenu._activeMenus.remove(this);
this._popdownActionId=-1;
this._isPoppedUp=false;
if(this._isPopupStyle()&&this._table&&this._table.rows&&this._table.rows.length&&this._table.rows[0].cells.length){var d=this._table.rows[0].cells.length;
var g=this._table.rows.length;
for(var f=1;
f<d;
f++){for(var e=0;
e<g;
e++){var l=this._table.rows[e].cells[f];
if(!l.empty){var c=l.firstChild;
var n=this._table.insertRow(this._table.rows.length);
var l=n.insertCell(0);
while(c!=null){l.appendChild(c);
c=c.nextSibling
}}}}for(var e=0;
e<g;
e++){var n=this._table.rows[e];
for(var f=n.cells.length-1;
f>0;
f--){n.deleteCell(f)
}}}if(this.__currentItem){this.__currentItem.blur()
}DwtShell.getShell(window).getKeyboardMgr().popTabGroup(this._compositeTabGroup)
};
DwtMenu.prototype._getActiveItem=function(){var c=this._children.getArray();
var e=this._children.size();
for(var d=0;
d<e;
d++){if(c[d]._isMenuPoppedUp()){return c[d]
}}return null
};
DwtMenu._outsideMouseDownListener=function(c){if(DwtMenu._activeMenuUp){var e=DwtMenu._activeMenu;
var f=e._htmlElId;
var d=DwtUiEvent.getTarget(c);
while(d!=null){if(d.id&&d.id!=""&&(d.id==f||d.id==e._associatedElId||DwtMenu._activeMenuIds.binarySearch(d.id)!=-1)){return false
}d=d.parentNode
}e.popdown(0,c);
var a=null;
do{a=DwtMenu._activeMenus.getLast();
if(a!=null&&a instanceof DwtMenu){a.popdown()
}}while(a!=null)
}};
DwtMenu._stopEvent=function(a){if(!a){a=window.event
}a.cancelBubble=true;
if(a.stopPropagation){a.stopPropagation()
}};
DwtMenu.menuShowing=function(){return DwtMenu._activeMenuUp
};
DwtMenu.closeActiveMenu=function(a){if(DwtMenu._activeMenuUp){DwtMenu._activeMenu.popdown(0,a)
}}
}if(AjxPackage.define("ajax.dwt.widgets.DwtSelect")){DwtSelect=function(e){if(arguments.length==0){return
}e=Dwt.getParams(arguments,DwtSelect.PARAMS);
e.className=e.className||"ZSelect";
e.posStyle=e.posStyle||Dwt.STATIC_STYLE;
this._legendId=e.legendId;
DwtButton.call(this,e);
var d=AjxEnv.isIE?[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP]:[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP,DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT];
this._setEventHdlrs(d);
this._hasSetMouseEvents=true;
this._currentSelectedOption=null;
this._options=new AjxVector();
this._optionValuesToIndices={};
this._selectedValue=this._selectedOption=null;
this._maxRows=e.maxRows||0;
this._layout=e.layout;
this._congruent=e.congruent;
this._hrCount=0;
var a=e.options;
if(a){for(var c=0;
c<a.length;
++c){this.addOption(a[c])
}}this.setDropDownImages("SelectPullDownArrow","SelectPullDownArrowDis","SelectPullDownArrow","SelectPullDownArrow");
this._menuCallback=new AjxListener(this,this._createMenu);
this.setMenu(this._menuCallback,true)
};
DwtSelect.PARAMS=["parent","options","style","className","layout"];
DwtSelect.prototype=new DwtButton;
DwtSelect.prototype.constructor=DwtSelect;
DwtSelect.prototype.isDwtSelect=true;
DwtSelect.prototype.toString=function(){return"DwtSelect"
};
DwtSelect.prototype.role="combobox";
DwtSelect._CONTAINER_TEMPLATE="dwt.Widgets#ZSelectAutoSizingContainer";
DwtSelect._objectIds=[null];
DwtSelect.prototype.TEMPLATE="dwt.Widgets#ZSelect";
DwtSelect.getObjectFromElement=function(a){return a&&a.dwtObj?AjxCore.objectWithId(a.dwtObj):null
};
DwtSelect.prototype.addOption=function(g,f,h,e){if(!g){return -1
}e=e||null;
var c=null;
var d=null;
var a=null;
if(typeof(g)=="string"){d=h!=null?h:g;
c=new DwtSelectOption(d,f,g,this,null,e)
}else{if(g instanceof DwtSelectOption){c=g;
if(h){c.setValue(h)
}f=c.isSelected()
}else{if(g instanceof DwtSelectOptionData||g.value!=null){d=h!=null?h:g.value;
c=new DwtSelectOption(d,g.isSelected,g.displayValue,this,null,g.image,g.selectedValue,false,g.extraData,g.id);
f=Boolean(g.isSelected);
a=g.id
}else{return -1
}}}this._options.add(c);
if(this._options.size()==1||f){this._setSelectedOption(c)
}var j=this._pseudoItemsEl;
var k=j.insertRow(-1);
var i=k.insertCell(-1);
i.className="ZSelectPseudoItem";
i.innerHTML=["<div class='ZWidgetTitle'>",AjxStringUtil.htmlEncode(c.getDisplayValue()),"</div>"].join("");
this.fixedButtonWidth();
this.setMenu(this._menuCallback,true);
this._optionValuesToIndices[c.getValue()]=this._options.size()-1;
return(this._options.size()-1)
};
DwtSelect.prototype.addHR=function(){opt=new DwtSelectOption("hr"+this._hrCount.toString(),false,"",this,null,null,null,true);
this._hrCount++;
this._options.add(opt)
};
DwtSelect.prototype.removeOption=function(e){if(!e){return -1
}this.setMenu(this._menuCallback,true);
this._options.remove(e);
var d=this._options.size();
var f=e.getValue();
var a=this._optionValuesToIndices[f];
if(a!=null){this._pseudoItemsEl.deleteRow(a);
if(this._selectedOption==e){if(d>0){var g=(a>=d)?d-1:a;
this._setSelectedOption(this._options.get(g))
}this.removeAttribute("aria-activedescendant")
}this.fixedButtonWidth()
}delete this._optionValuesToIndices[f];
for(var c=a;
c<d;
c++){var e=this._options.get(c);
this._optionValuesToIndices[e.getValue()]=c
}return a
};
DwtSelect.prototype.removeOptionWithValue=function(c){var a=this.getOptionWithValue(c);
return a?this.removeOption(a):-1
};
DwtSelect.prototype.popup=function(){var g=this.getMenu();
if(!g){return
}var e=this._selectEl;
var c=Dwt.getBounds(e);
var f=(e.style.borderLeftWidth=="")?0:parseInt(e.style.borderLeftWidth);
var i=(e.style.borderTopWidth=="")?0:parseInt(e.style.borderTopWidth);
i+=(e.style.borderBottomWidth=="")?0:parseInt(e.style.borderBottomWidth);
var d=Dwt.toWindow(e,0,0);
var a=d.x+f;
var h=d.y+c.height+i;
g.popup(0,a,h);
if(this._currentSelectedOption){g.setSelectedItem(this._currentSelectedOption.getItem())
}};
DwtSelect.prototype.rename=function(c,d){var a=this.getOptionWithValue(c);
if(!a){return
}a._displayValue=d;
if(this._selectedOption&&(this._selectedOption._value==c)){this.setText(AjxStringUtil.htmlEncode(d))
}this.setMenu(this._menuCallback,true)
};
DwtSelect.prototype.enableOption=function(e,a){var c=this.getOptionWithValue(e);
if(!c){return
}if(c.enabled!=a){c.enabled=a;
var d=c.getItem();
if(d){d.setEnabled(a)
}}};
DwtSelect.prototype.clearOptions=function(){var c=this._options.getArray();
for(var a=0;
a<c.length;
++a){c[a]=null
}this._options.removeAll();
this._optionValuesToIndices=null;
this._optionValuesToIndices=[];
this._selectedValue=null;
this._selectedOption=null;
this._currentSelectedOption=null;
if(this._pseudoItemsEl){try{this._pseudoItemsEl.innerHTML=""
}catch(d){}}};
DwtSelect.prototype.setName=function(a){this._name=a
};
DwtSelect.prototype.getName=function(){return this._name
};
DwtSelect.prototype.setSelectedValue=function(c){var a=this._optionValuesToIndices[c];
if(a!=null){this.setSelected(a)
}};
DwtSelect.prototype.setSelected=function(a){var c=this.getOptionWithHandle(a);
this.setSelectedOption(c)
};
DwtSelect.prototype.getOptionCount=function(){return this._options.size()
};
DwtSelect.prototype.getOptions=function(){return this._options
};
DwtSelect.prototype.getOptionWithHandle=function(a){return this._options.get(a)
};
DwtSelect.prototype.getOptionAtIndex=DwtSelect.prototype.getOptionWithHandle;
DwtSelect.prototype.getIndexForValue=function(a){return this._optionValuesToIndices[a]
};
DwtSelect.prototype.getOptionWithValue=function(d){var a=this._optionValuesToIndices[d];
var c=null;
if(a!=null){c=this.getOptionWithHandle(a)
}return c
};
DwtSelect.prototype.setSelectedOption=function(a){if(a){this._setSelectedOption(a)
}};
DwtSelect.prototype.getValue=function(){return this._selectedValue
};
DwtSelect.prototype.getSelectedOption=function(){return this._selectedOption
};
DwtSelect.prototype.getSelectedIndex=function(){return this.getIndexForValue(this.getValue())
};
DwtSelect.prototype.addChangeListener=function(a){this.addListener(DwtEvent.ONCHANGE,a)
};
DwtSelect.prototype.size=function(){return this._options.size()
};
DwtSelect.prototype.disable=function(){this.setEnabled(false)
};
DwtSelect.prototype.enable=function(){this.setEnabled(true)
};
DwtSelect.prototype.setImage=function(a){DwtLabel.prototype.setImage.call(this,a)
};
DwtSelect.prototype.setText=function(a){DwtLabel.prototype.setText.call(this,a)
};
DwtSelect.prototype.dispose=function(){this._selectEl=null;
if(this._pseudoItemsEl){this._pseudoItemsEl.outerHTML="";
this._pseudoItemsEl=null
}this._containerEl=null;
DwtButton.prototype.dispose.call(this);
if(this._internalObjectId){DwtSelect._unassignId(this._internalObjectId)
}};
DwtSelect._assignId=function(a){var c=DwtSelect._objectIds.length;
DwtSelect._objectIds[c]=a;
return c
};
DwtSelect._getObjectWithId=function(a){return DwtSelect._objectIds[a]
};
DwtSelect._unassignId=function(a){DwtSelect._objectIds[a]=null
};
DwtSelect.prototype.dynamicButtonWidth=function(){this._isDynamicButtonWidth=true;
this._selectEl.style.width="auto";
this._pseudoItemsEl.style.display="none"
};
DwtSelect.prototype.fixedButtonWidth=function(){if(this._isDynamicButtonWidth){return
}this._pseudoItemsEl.style.display="block";
var c=this._selectEl;
var a=c.offsetWidth;
if(a){c.style.width=a+"px"
}this._pseudoItemsEl.style.display="none"
};
DwtSelect.prototype._createHtmlFromTemplate=function(d,f){var c=DwtSelect._CONTAINER_TEMPLATE;
var a={id:f.id,selectTemplateId:d||this.TEMPLATE,selectData:f};
DwtButton.prototype._createHtmlFromTemplate.call(this,c,a);
this._selectEl=document.getElementById(f.id+"_select_container");
this._pseudoItemsEl=document.getElementById(f.id+"_pseudoitems_container");
this._pseudoItemsEl.style.display="block";
var e=this._containerEl=this.getHtmlElement();
this._selectEl.className=e.className;
Dwt.addClass(e,"ZSelectAutoSizingContainer");
this.removeAttribute("style");
if(this._legendId){this.setAttribute("aria-labelledby",[this._legendId,this._textEl.id].join(" "))
}};
DwtSelect.prototype._createMenu=function(){var j=new DwtSelectMenu(this);
var d;
for(var e=0,c=this._options.size();
e<c;
++e){var f=this._options.get(e);
if(f._hr){d=new DwtMenuItem({parent:j,style:DwtMenuItem.SEPARATOR_STYLE});
d.setEnabled(false)
}else{var d=new DwtSelectMenuItem(j,f.id||Dwt.getNextId(j._htmlElId+"_option_"));
var g=f.getImage();
if(g){d.setImage(g)
}var h=f.getDisplayValue();
if(h){d.setText(AjxStringUtil.htmlEncode(h))
}d.setEnabled(f.enabled);
d.addSelectionListener(new AjxListener(this,this._handleOptionSelection));
d._optionIndex=e
}d._optionIndex=e;
f.setItem(d)
}var a=this;
j.addPopupListener(function(){a.setAttribute("aria-expanded",true)
});
j.addPopdownListener(function(){a.setAttribute("aria-expanded",false);
a.removeAttribute("aria-activedescendant")
});
return j
};
DwtSelect.prototype._handleOptionSelection=function(h){var e=h.item;
var g=e._optionIndex;
var d=this._options.get(g);
var c=this.getValue();
this._setSelectedOption(d);
var a=new Object();
a.selectObj=this;
a.newValue=d.getValue();
a.oldValue=c;
var f=DwtUiEvent.getEvent(h);
f._args=a;
this.notifyListeners(DwtEvent.ONCHANGE,f)
};
DwtSelect.prototype._setSelectedOption=function(c){var a=c.getSelectedValue()||c.getDisplayValue();
var d=c.getImage();
if(this._selectedOption!=c){if(a){this.setText(AjxStringUtil.htmlEncode(a))
}this.setImage(d);
this._selectedValue=c._value;
this._selectedOption=c
}this._updateSelection(c);
this.autoResize()
};
DwtSelect.prototype.autoResize=function(){var a=this.getHtmlElement();
AjxTimedAction.scheduleAction(new AjxTimedAction(this,function(){var c=document.getElementById(a.id);
if(c){c.style.width=c.childNodes[0].offsetWidth||"auto"
}},200))
};
DwtSelect.prototype._updateSelection=function(a){var d=this._currentSelectedOption;
if(d){d.deSelect()
}this._currentSelectedOption=a;
if(!a){return
}a.select();
var c=this.getMenu(true);
if(!c){return
}c.setSelectedItem(a.getItem())
};
DwtSelect.prototype.updateRendering=function(){var a=this.getScrollStyle();
this.setScrollStyle(a==Dwt.VISIBLE?Dwt.CLIP:Dwt.VISIBLE);
var c=function(){try{this.setScrollStyle(a)
}catch(f){}};
var d=new AjxTimedAction(this,c);
AjxTimedAction.scheduleAction(d,4)
};
DwtSelect.prototype._menuAdded=function(a){this.setAttribute("aria-owns",a._htmlElId)
};
DwtSelect.prototype._menuItemSelected=function(a){this.setAttribute("aria-activedescendant",a._htmlElId)
};
DwtSelectOptionData=function(f,d,a,c,g,h,e){if(f==null||d==null){return null
}this.value=f;
this.displayValue=d;
this.isSelected=a;
this.selectedValue=c;
this.image=g;
this.extraData=e;
this.id=h||Dwt.getNextId()
};
DwtSelectOption=function(j,f,i,c,h,e,g,k,d,a){this._value=j;
this._selected=f;
this._displayValue=i;
this._image=e;
this._selectedValue=g;
this._hr=k;
this._extraData=d;
this.id=a;
this._internalObjectId=DwtSelect._assignId(this);
this.enabled=true
};
DwtSelectOption.prototype.toString=function(){return"DwtSelectOption"
};
DwtSelectOption.prototype.setItem=function(a){this._menuItem=a
};
DwtSelectOption.prototype.getItem=function(a){return this._menuItem
};
DwtSelectOption.prototype.getDisplayValue=function(){return this._displayValue
};
DwtSelectOption.prototype.getImage=function(){return this._image
};
DwtSelectOption.prototype.getSelectedValue=function(){return this._selectedValue
};
DwtSelectOption.prototype.getValue=function(){return this._value
};
DwtSelectOption.prototype.setValue=function(a){this._value=a
};
DwtSelectOption.prototype.select=function(){this._selected=true
};
DwtSelectOption.prototype.deSelect=function(){this._selected=false
};
DwtSelectOption.prototype.isSelected=function(){return this._selected
};
DwtSelectOption.prototype.getIdentifier=function(){return this._internalObjectId
};
DwtSelectOption.prototype.getExtraData=function(a){return this._extraData&&this._extraData[a]
};
DwtSelectMenu=function(a){DwtMenu.call(this,{parent:a,style:DwtMenu.DROPDOWN_STYLE,className:"DwtMenu",layout:a._layout,maxRows:a._maxRows,congruent:a._congruent,id:Dwt.getNextId(a.getHTMLElId()+"_Menu_")})
};
DwtSelectMenu.prototype=new DwtMenu;
DwtSelectMenu.prototype.constructor=DwtSelectMenu;
DwtSelectMenu.prototype.TEMPLATE="dwt.Widgets#ZSelectMenu";
DwtSelectMenu.prototype.toString=function(){return"DwtSelectMenu"
};
DwtSelectMenuItem=function(a,c){DwtMenuItem.call(this,{parent:a,style:DwtMenuItem.SELECT_STYLE,className:"ZSelectMenuItem",id:c})
};
DwtSelectMenuItem.prototype=new DwtMenuItem;
DwtSelectMenuItem.prototype.constructor=DwtSelectMenuItem;
DwtSelectMenuItem.prototype.TEMPLATE="dwt.Widgets#ZSelectMenuItem";
DwtSelectMenuItem.prototype.isDwtSelectMenuItem=true;
DwtSelectMenuItem.prototype.toString=function(){return"DwtSelectMenuItem"
};
DwtSelectMenuItem.prototype.role="option";
DwtLabel.prototype._textSet=function(a){}
}if(AjxPackage.define("ajax.dwt.widgets.DwtListView")){DwtListView=function(e){if(arguments.length==0){return
}e=Dwt.getParams(arguments,DwtListView.PARAMS);
e.className=e.className||"DwtListView";
DwtComposite.call(this,e);
this._view=e.view||Dwt.getNextId();
if(e.headerList){var d=this.getHtmlElement();
var g=new Array(50);
var j=0;
var i=Dwt.getNextId();
var a=Dwt.getNextId();
g[j++]="<table width='100%'><tr><td ";
g[j++]="id="+i;
g[j++]="></td></tr><tr><td ";
g[j++]="id="+a;
g[j++]="></td></tr></table>";
d.innerHTML=g.join("");
var k=document.getElementById(i);
this._listColDiv=document.createElement("div");
this._listColDiv.id=DwtId.getListViewId(this._view,DwtId.LIST_VIEW_HEADERS);
k.appendChild(this._listColDiv);
var c=document.getElementById(a);
this._listDiv=this.useListElement()?document.createElement("ul"):document.createElement("div");
this._listDiv.id=DwtId.getListViewId(this._view,DwtId.LIST_VIEW_ROWS);
this._listDiv.className="DwtListView-Rows";
c.appendChild(this._listDiv);
this._bSortAsc=false;
this._currentColId=null;
this.sortingEnabled=true
}else{this._listDiv=document.getElementById(e.id);
this.setScrollStyle(DwtControl.SCROLL)
}this._setMouseEventHdlrs();
this._listenerMouseOver=this._mouseOverListener.bind(this);
this._listenerMouseOut=this._mouseOutListener.bind(this);
this._listenerMouseDown=this._mouseDownListener.bind(this);
this._listenerMouseUp=this._mouseUpListener.bind(this);
this._listenerMouseMove=this._mouseMoveListener.bind(this);
this._listenerDoubleClick=this._doubleClickListener.bind(this);
this.addListener(DwtEvent.ONMOUSEOVER,this._listenerMouseOver);
this.addListener(DwtEvent.ONMOUSEOUT,this._listenerMouseOut);
this.addListener(DwtEvent.ONMOUSEDOWN,this._listenerMouseDown);
this.addListener(DwtEvent.ONMOUSEUP,this._listenerMouseUp);
this.addListener(DwtEvent.ONMOUSEMOVE,this._listenerMouseMove);
this.addListener(DwtEvent.ONDBLCLICK,this._listenerDoubleClick);
this._evtMgr=new AjxEventMgr();
this._selectedItems=new AjxVector();
this._selAnchor=null;
this._kbAnchor=null;
this._selEv=new DwtSelectionEvent(true);
this._actionEv=new DwtListViewActionEvent(true);
this._stateChangeEv=new DwtEvent(true);
this._headerList=e.headerList;
this._noMaximize=e.noMaximize;
if(this._headerList){this._parentEl=this._listDiv
}else{this._parentEl=this.getHtmlElement();
if(this.useListElement()){var h=document.createElement("ul");
h.className="DwtListView-Rows";
this._parentEl.appendChild(h);
this._parentEl=h
}}this._parentEl.tabIndex=0;
this._list=null;
this.offset=0;
this.headerColCreated=false;
this.setMultiSelect(true);
this.firstSelIndex=-1;
this._data={};
this._rowClass=[this._className,DwtListView.ROW_CLASS].join("");
var f=this._normalClass=DwtListView.ROW_CLASS;
this._selectedClass=[f,DwtCssStyle.SELECTED].join("-");
this._viewedButUnselectedClass=[f,DwtCssStyle.ALT_SELECTED].join("-");
this._disabledSelectedClass=[this._selectedClass,DwtCssStyle.DISABLED].join("-");
this._kbFocusClass=[f,DwtCssStyle.FOCUSED].join("-");
this._dndClass=[f,DwtCssStyle.DRAG_PROXY].join("-");
this._rightClickClass=[this._selectedClass,DwtCssStyle.ACTIONED].join("-");
this._styleRe=this._getStyleRegex()
};
DwtListView.prototype=new DwtComposite;
DwtListView.prototype.constructor=DwtListView;
DwtListView.prototype.isDwtListView=true;
DwtListView.prototype.toString=function(){return"DwtListView"
};
DwtListView.prototype.role="list";
DwtListView.prototype.itemRole="listitem";
DwtListView.PARAMS=["parent","className","posStyle","headerList","noMaximize"];
DwtListView.ITEM_SELECTED=1;
DwtListView.ITEM_DESELECTED=2;
DwtListView.ITEM_DBL_CLICKED=3;
DwtListView._LAST_REASON=3;
DwtListView._TOOLTIP_DELAY=250;
DwtListView.HEADERITEM_HEIGHT=24;
DwtListView.TYPE_HEADER_ITEM="1";
DwtListView.TYPE_LIST_ITEM="2";
DwtListView.TYPE_HEADER_SASH="3";
DwtListView.DEFAULT_LIMIT=25;
DwtListView.MAX_REPLENISH_THRESHOLD=10;
DwtListView.MIN_COLUMN_WIDTH=20;
DwtListView.COL_MOVE_THRESHOLD=3;
DwtListView.ROW_CLASS="Row";
DwtListView.ROW_CLASS_ODD="RowEven";
DwtListView.ROW_CLASS_EVEN="RowOdd";
DwtListView._STYLE_CLASS="_sc";
DwtListView._SELECTED_STYLE_CLASS="_ssc";
DwtListView._SELECTED_DIS_STYLE_CLASS="_sdsc";
DwtListView._KBFOCUS_CLASS="_kfc";
DwtListView.prototype.dispose=function(){this._listColDiv=null;
this._listDiv=null;
this._parentEl=null;
this._clickDiv=null;
this._selectedItems=null;
DwtComposite.prototype.dispose.call(this)
};
DwtListView.prototype.setEnabled=function(a){DwtComposite.prototype.setEnabled.call(this,a);
this.removeListener(DwtEvent.ONMOUSEOVER,this._listenerMouseOver);
this.removeListener(DwtEvent.ONMOUSEOUT,this._listenerMouseOut);
this.removeListener(DwtEvent.ONMOUSEDOWN,this._listenerMouseDown);
this.removeListener(DwtEvent.ONMOUSEUP,this._listenerMouseUp);
this.removeListener(DwtEvent.ONMOUSEMOVE,this._listenerMouseMove);
this.removeListener(DwtEvent.ONDBLCLICK,this._listenerDoubleClick);
if(a){this.addListener(DwtEvent.ONMOUSEOVER,this._listenerMouseOver);
this.addListener(DwtEvent.ONMOUSEOUT,this._listenerMouseOut);
this.addListener(DwtEvent.ONMOUSEDOWN,this._listenerMouseDown);
this.addListener(DwtEvent.ONMOUSEUP,this._listenerMouseUp);
this.addListener(DwtEvent.ONMOUSEMOVE,this._listenerMouseMove);
this.addListener(DwtEvent.ONDBLCLICK,this._listenerDoubleClick)
}var d=this.getSelectedItems();
if(d){var e=d.getArray();
for(var c=0;
c<e.length;
c++){Dwt.delClass(e[c],this._styleRe,a?this._selectedClass:this._disabledSelectedClass)
}}};
DwtListView.prototype.createHeaderHtml=function(n,r){if(!this._headerList||this.headerColCreated){return
}this._headerHash={};
this._headerIdHash={};
var o=0;
var q=[];
q[o++]="<table id='";
q[o++]=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_TABLE,this._view);
q[o++]="' height=100%";
q[o++]=this._noMaximize?">":" width=100%>";
q[o++]="<tr>";
var e=this._headerList.length;
for(var g=0;
g<e;
g++){var l=this._headerList[g];
var m=l._field;
l._index=g;
var c=l._id=DwtId.getListViewHdrId(DwtId.WIDGET_HDR,this._view,m);
this._headerHash[m]=l;
this._headerIdHash[c]=l;
if(l._variable){this._variableHeaderCol=l
}if(l._visible){o=this._createHeader(q,o,l,g,e,c,n)
}}q[o++]="</tr></table>";
this._listColDiv.innerHTML=q.join("");
this._listColDiv.className="DwtListView-ColHeader"+(r?" FixedColumnHeaderTables":"");
setTimeout($.proxy(function(){for(var j=0;
j<e;
j++){var s=this._headerList[j];
if(s._cssClass&&s._resizeable&&s._width==="auto"){this._createHeaderCssStyle(s,this._calcRelativeWidth(j))
}}},this),0);
var a=0,k;
for(var f=0;
f<this._headerList.length;
f++){var l=this._headerList[f];
var p=document.getElementById(l._id);
if(!p){continue
}if(l._sortable&&l._field==n){p.className="DwtListView-Column DwtListView-ColumnActive"
}if(l._resizeable){var h=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_SASH,this._view,l._field);
var d=document.getElementById(h);
if(d){this.associateItemWithElement(l,d,DwtListView.TYPE_HEADER_SASH,h,{index:f})
}a++;
k=l
}this.associateItemWithElement(l,p,DwtListView.TYPE_HEADER_ITEM,l._id,{index:f})
}if(a==1){k._resizeable=false
}this.headerColCreated=true
};
DwtListView.prototype._createHeader=function(o,n,k,f,e,c,m){var l=k._field;
o[n++]="<td id='";
o[n++]=c;
o[n++]="' class='";
var h=(c==this._currentColId)?"DwtListView-Column DwtListView-ColumnActive":"DwtListView-Column";
h+=k._sortable?"":" DwtDefaultCursor";
o[n++]=h+"'";
if(k._width){o[n++]=" width=";
o[n++]=k._width;
if(k._cssClass&&k._resizeable&&k._width!=="auto"){this._createHeaderCssStyle(k,k._width)
}if(k._widthUnits){o[n++]=k._widthUnits
}}if(k._tooltip&&DwtControl.useBrowserTooltips){o[n++]=" title='"+k._tooltip+"'"
}o[n++]=">";
o[n++]="<div";
var g=null;
if(k._width&&k._width!="auto"){if(AjxEnv.isIE){g=k._width
}else{g=k._width+2
}if(k._widthUnits){g+=k._widthUnits
}}if(!!g){o[n++]=" style='overflow: hidden; width: ";
o[n++]=g;
o[n++]="'>"
}else{o[n++]=">"
}o[n++]="<table width=100%><tr>";
if(k._iconInfo){var j=["id='",DwtId.getListViewHdrId(DwtId.WIDGET_HDR_ICON,this._view,l),"'"].join("");
o[n++]="<td><center>";
o[n++]=AjxImg.getImageHtml(k._iconInfo,null,j);
o[n++]="</center></td>"
}if(k._label){o[n++]="<td id='";
o[n++]=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_LABEL,this._view,l);
o[n++]="' class='DwtListHeaderItem-label' style='padding-right:6px; padding-left:6px'>";
o[n++]=k._label;
o[n++]="</td>"
}if(k._sortable&&!k._noSortArrow){var a=this._bSortAsc?"ColumnUpArrow":"ColumnDownArrow";
o[n++]="<td align=right style='padding-right:2px' width='8px' id='";
o[n++]=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_ARROW,this._view,l);
o[n++]="'>";
var d=(l==m);
o[n++]=AjxImg.getImageHtml(a,d?null:"visibility:hidden");
o[n++]="</td>";
if(d){this._currentColId=c
}}if(f<(e-1)){o[n++]="<td width=6>";
o[n++]="<table align=right width=4 height=100% id='";
o[n++]=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_SASH,this._view,l);
o[n++]="'><tr>";
o[n++]="<td class='DwtListView-Sash'><div style='width: 1px; height: ";
o[n++]=(DwtListView.HEADERITEM_HEIGHT-2);
o[n++]="px; background-color: #8A8A8A;margin-left:2px'></div></td><td class='DwtListView-Sash'><div style='width: 1px; height: ";
o[n++]=(DwtListView.HEADERITEM_HEIGHT-2);
o[n++]="px;'></div></td></tr></table>";
o[n++]="</td>"
}o[n++]="</tr></table>";
o[n++]="</div></td>";
return n
};
DwtListView.prototype._createHeaderCssStyle=function(e,c){if(!e._cssClass||!e._resizeable){return
}if(e._cssRuleIndex){DwtCssStyle.removeRule(document.styleSheets[0],e._cssRuleIndex)
}var a="#"+this.parent._htmlElId;
a+=" ."+e._cssClass;
var d="width:"+c+($.isNumeric(c)?"px;":";");
e._cssRuleIndex=DwtCssStyle.addRule(document.styleSheets[0],a,d,e._cssRuleIndex)
};
DwtListView.prototype.getItemIndex=function(d){var e=this._list;
if(e){var a=e.size();
for(var c=0;
c<a;
++c){if(e.get(c).id==d.id){return c
}}}return null
};
DwtListView.prototype.setSize=function(c,a){DwtComposite.prototype.setSize.call(this,c,a);
this._sizeChildren(a)
};
DwtListView.prototype.size=function(){return this._list?this._list.size():0
};
DwtListView.prototype.set=function(d,c,a){if(this._selectedItems){this._selectedItems.removeAll()
}this._curViewedItem=null;
this._rightSelItem=null;
this.sortingEnabled=true;
this._resetList();
this._list=d;
this.setUI(c,a)
};
DwtListView.prototype.setUI=function(c,a){this.removeAll();
this.createHeaderHtml(c);
this._renderList(this._list,a)
};
DwtListView.prototype._renderList=function(h,g,d){if(h instanceof AjxVector&&h.size()){var c=new Date();
var m=h.size();
var k=[];
if(!d){this._parentEl.innerHTML=""
}Dwt.delClass(this._parentEl,"DwtListView-Rows-Empty");
for(var f=0;
f<m;
f++){var l=h.get(f);
var a=this._createItemHtml(l,{now:c},false,f);
if(a){if(a instanceof Array){for(var e=0;
e<a.length;
e++){this._addRow(a[e])
}}else{this._addRow(a)
}this._itemAdded(l)
}}}else{if(!g){this._setNoResultsHtml();
Dwt.addClass(this._parentEl,"DwtListView-Rows-Empty")
}}};
DwtListView.prototype.addItems=function(a){if(AjxUtil.isArray(a)){if(!this._list){this._list=new AjxVector()
}if(this._list.size()==0){this._resetList()
}this._renderList(AjxVector.fromArray(a),null,true);
this._list.addList(a)
}};
DwtListView.prototype.addItem=function(f,c,d,e){if(!this._list){this._list=new AjxVector()
}if(this._list.size()==0){this._resetList()
}this._list.add(f,(e!=null)?e:c);
var g=this._createItemHtml(f);
if(g){if(g instanceof Array){for(var a=0;
a<g.length;
a++){this._addRow(g[a])
}}else{this._addRow(g,c)
}}if(!d&&this._evtMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._evtMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv)
}};
DwtListView.prototype.removeItem=function(d,c,e){var a=this._getElFromItem(d);
if(!a){return
}var f=this._getRowIndex(d);
this._selectedItems.remove(a);
if(this._rightSelItem===a){this._rightSelItem=null
}if(this._kbAnchor===a){this._kbAnchor=null
}if(a.parentNode===this._parentEl){this._parentEl.removeChild(a)
}if(this._list){this._list.remove(d)
}var g=a.id;
if(this._data[g]){this._data[g]=null;
delete this._data[g]
}if(!e){this._fixAlternation(f)
}if(!c&&this._evtMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._evtMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv)
}};
DwtListView.prototype.redrawItem=function(c){var d=this._getElFromItem(c);
if(d){var a=d.className;
var e=this._createItemHtml(c);
e.className=a;
d.parentNode.replaceChild(e,d);
if(this._selectedItems.contains(d)){this._selectedItems.remove(d);
this.selectItem(c)
}if(this._kbAnchor===d){this._setKbFocusElement(e)
}}};
DwtListView.prototype.addSelectionListener=function(a){this._evtMgr.addListener(DwtEvent.SELECTION,a)
};
DwtListView.prototype.removeSelectionListener=function(a){this._evtMgr.removeListener(DwtEvent.SELECTION,a)
};
DwtListView.prototype.addActionListener=function(a){this._evtMgr.addListener(DwtEvent.ACTION,a)
};
DwtListView.prototype.removeActionListener=function(a){this._evtMgr.removeListener(DwtEvent.ACTION,a)
};
DwtListView.prototype.addStateChangeListener=function(a){this._evtMgr.addListener(DwtEvent.STATE_CHANGE,a)
};
DwtListView.prototype.removeStateChangeListener=function(a){this._evtMgr.removeListener(DwtEvent.STATE_CHANGE,a)
};
DwtListView.prototype.removeAll=function(a){if(this._parentEl){this._parentEl.innerHTML=""
}if(this._selectedItems){this._selectedItems.removeAll()
}this._rightSelItem=this._selAnchor=this._kbAnchor=null;
if(!a&&this._evtMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._evtMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv)
}};
DwtListView.prototype.selectAll=function(){if(this._list&&this._list.size()){this.setSelectedItems(this._list.getArray())
}};
DwtListView.prototype.deselectAll=function(){if(this._selectedItems){var c=this._selectedItems.getArray();
var e=this._selectedItems.size();
for(var d=0;
d<e;
d++){Dwt.delClass(c[d],this._styleRe);
c[d].removeAttribute("aria-selected")
}this._selectedItems.removeAll();
this._rightSelItem=this._selAnchor=null;
if(this._kbAnchor!=null&&this.hasFocus()){Dwt.addClass(this._kbAnchor,this._kbFocusClass)
}}};
DwtListView.prototype._markUnselectedViewedItem=function(a){var c=this._curViewedItem;
var d=c&&this._getElFromItem(c);
if(!d){return
}if(a){Dwt.delClass(d,this._styleRe,this._viewedButUnselectedClass)
}else{Dwt.delClass(d,this._viewedButUnselectedClass)
}};
DwtListView.prototype.getDnDSelection=function(){if(this._dndSelection instanceof AjxVector){return this.getSelection()
}else{return this.getItemFromElement(this._dndSelection)
}};
DwtListView.prototype.getSelection=function(){var d=[];
if(this._rightSelItem){d.push(this.getItemFromElement(this._rightSelItem))
}else{if(this._selectedItems){var c=this._selectedItems.getArray();
var f=this._selectedItems.size();
for(var e=0;
e<f;
e++){d[e]=this.getItemFromElement(c[e])
}}}return d
};
DwtListView.prototype.getSelectedItems=function(){return this._selectedItems
};
DwtListView.prototype.setSelection=function(e,c,a){if(!e){return
}var d=this._getElFromItem(e);
if(d){if(this._selectedItems.size()==1&&this._selectedItems.get(0)==d&&!a){return
}this.deselectAll();
this._unmarkKbAnchorElement(true);
this._setKbFocusElement(d);
this._selAnchor=d;
this.selectItem(e,this.getEnabled());
this.firstSelIndex=(this._list&&this._list.size()>0)?this._list.indexOf(e):-1;
this._scrollList(d);
if(!c&&this._evtMgr.isListenerRegistered(DwtEvent.SELECTION)){var f=new DwtSelectionEvent(true);
f.button=DwtMouseEvent.LEFT;
f.target=d;
f.item=this.getItemFromElement(d);
f.detail=DwtListView.ITEM_SELECTED;
f.ersatz=true;
this._evtMgr.notifyListeners(DwtEvent.SELECTION,f)
}}};
DwtListView.prototype.setMultiSelection=function(a,d,c){if(d){this._selectedItems.remove(a);
a.removeAttribute("aria-selected");
Dwt.delClass(a,this._styleRe);
this._selEv.detail=DwtListView.ITEM_DESELECTED
}else{this._selectedItems.add(a,null,true);
a.setAttribute("aria-selected",true);
Dwt.delClass(a,this._styleRe,this._selectedClass);
this._selEv.detail=DwtListView.ITEM_SELECTED
}if(this._kbAnchor&&this._kbAnchor!=a){Dwt.delClass(this._kbAnchor,this._kbFocusClass)
}this._setKbFocusElement(a);
this._selAnchor=a;
Dwt.addClass(this._kbAnchor,this._kbFocusClass)
};
DwtListView.prototype.setSelectedItems=function(d){this.deselectAll();
var e=d.length,a=this.getEnabled();
for(var c=0;
c<e;
++c){this.selectItem(d[c],a)
}};
DwtListView.prototype.selectItem=function(d,c){var a=this._getElFromItem(d);
if(a){Dwt.delClass(a,this._styleRe,c?this._selectedClass:this._disabledSelectedClass);
if(this._kbAnchor==a&&this.hasFocus()){Dwt.addClass(a,this._kbFocusClass);
a.focus()
}this._selectedItems.add(a);
a.setAttribute("aria-selected",true)
}};
DwtListView.prototype.getSelectionCount=function(){return this._rightSelItem?1:this._selectedItems.size()
};
DwtListView.prototype.handleActionPopdown=function(){this._clearRightSel()
};
DwtListView.prototype.associateItemWithElement=function(e,c,d,g,f){g=g||this._getItemId(e);
if(c){c.id=g
}d=d||DwtListView.TYPE_LIST_ITEM;
this._data[g]={item:e,id:g,type:d};
if(f){for(var a in f){this._data[g][a]=f[a]
}}return g
};
DwtListView.prototype.getItemFromElement=function(a){return this._getItemData(a,"item")
};
DwtListView.prototype.findItem=function(a){if(!a){return
}var c=this.findItemDiv(a);
return this._getItemData(c,"item")
};
DwtListView.prototype.findItemDiv=function(a){if(!a){return
}while(a&&(a.id!=this._htmlElId)){if(a.id&&this._data[a.id]){return a
}a=a.parentNode
}return null
};
DwtListView.prototype.getTargetItem=function(a){return this.findItem(DwtUiEvent.getTarget(a))
};
DwtListView.prototype.getTargetItemDiv=function(a){return this.findItemDiv(DwtUiEvent.getTarget(a))
};
DwtListView.prototype.dragSelect=function(c){if(this._dragHighlight){var a=document.getElementById(this._dragHighlight);
if(!c||(a&&(c.id!=a.id))){this._updateDragSelection(a,false)
}}if(!c){return
}if(this._getItemData(c,"type")!=DwtListView.TYPE_LIST_ITEM){return
}if(c.id!=this._dragHighlight){this._dragHighlight=c.id;
this._updateDragSelection(c,true)
}};
DwtListView.prototype.dragDeselect=function(c){if(this._dragHighlight){var a=document.getElementById(this._dragHighlight);
this._updateDragSelection(a,false);
this._dragHighlight=null
}};
DwtListView.prototype.getScrollContainer=function(){return this._parentEl
};
DwtListView.prototype.scrollToItem=function(c){var a=this._getElFromItem(c);
if(a){this._listDiv.scrollTop=a.offsetTop
}};
DwtListView.prototype.scrollToTop=function(){this._listDiv.scrollTop=0
};
DwtListView.prototype.scrollPage=function(a){var c=this._parentEl;
if(c.clientHeight>=c.scrollHeight){return
}c.scrollTop=a?Math.max(c.scrollTop-c.clientHeight,0):Math.min(c.scrollTop+c.clientHeight,c.scrollHeight-c.clientHeight)
};
DwtListView.prototype.setSortByAsc=function(d,c){if(!this._headerList){return
}this._bSortAsc=c;
var e=null;
for(var a=0;
a<this._headerList.length;
a++){if(this._headerList[a]._sortable&&this._headerList[a]._field==d){e=this._headerList[a]._id;
break
}}if(e){this._setSortedColStyle(e)
}};
DwtListView.prototype.getNewOffset=function(c){var a=this.getLimit();
var d=c?(this.offset+a):(this.offset-a);
return(d<0)?0:d
};
DwtListView.prototype.getLimit=function(){return DwtListView.DEFAULT_LIMIT
};
DwtListView.prototype.getReplenishThreshold=function(){return DwtListView.MAX_REPLENISH_THRESHOLD
};
DwtListView.prototype.getList=function(){return this._list
};
DwtListView.prototype.getFocusElement=function(){if(!this._kbAnchor){this._setKbFocusElement(null,true)
}return this._kbAnchor||this._parentEl
};
DwtListView.prototype.replenish=function(e){this._list.addList(e);
var c=e.size();
for(var a=0;
a<c;
a++){var d=e.get(a);
var f=this._createItemHtml(d);
if(f){this._addRow(f)
}}};
DwtListView.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_LIST
};
DwtListView.prototype.handleKeyAction=function(f,h){if(!this.size()){return false
}switch(f){case DwtKeyMap.SELECT:this._emulateSingleClick({target:this._kbAnchor,button:DwtMouseEvent.LEFT,kbNavEvent:true});
break;
case DwtKeyMap.SELECT_CURRENT:this._emulateSingleClick({target:this._kbAnchor,button:DwtMouseEvent.LEFT,ctrlKey:true,kbNavEvent:true});
break;
case DwtKeyMap.SELECT_NEXT:this._selectItem(true,false,true);
break;
case DwtKeyMap.SELECT_PREV:this._selectItem(false,false,true);
break;
case DwtKeyMap.ADD_SELECT_NEXT:this._selectItem(true,true,true);
break;
case DwtKeyMap.ADD_SELECT_PREV:this._selectItem(false,true,true);
break;
case DwtKeyMap.PREV:this._setKbFocusElement(false);
break;
case DwtKeyMap.NEXT:this._setKbFocusElement(true);
break;
case DwtKeyMap.DBLCLICK:if(!this._kbAnchor){break
}var d=false;
var k=this.getSelectedItems().getArray();
for(var e=0;
e<k.length;
e++){if(k[e]==this._kbAnchor){d=true;
break
}}if(d){this.emulateDblClick(this.getItemFromElement(this._kbAnchor),true)
}else{this._emulateSingleClick({target:this._kbAnchor,button:DwtMouseEvent.LEFT,kbNavEvent:true})
}break;
case DwtKeyMap.SELECT_ALL:this.selectAll();
break;
case DwtKeyMap.SELECT_FIRST:case DwtKeyMap.SELECT_LAST:var l=(f==DwtKeyMap.SELECT_FIRST)?this._getFirstItem():this._getLastItem();
if(l){this.setSelection(l);
this._scrollList(this._kbAnchor)
}break;
case DwtKeyMap.SUBMENU:if(this._evtMgr.isListenerRegistered(DwtEvent.ACTION)){var c=Dwt.toWindow(this._kbAnchor,0,0);
var m=Dwt.getSize(this._kbAnchor);
var j=c.x+m.x/4;
var g=c.y+m.y/2;
this._emulateSingleClick({target:this._kbAnchor,button:DwtMouseEvent.RIGHT,docX:j,docY:g,kbNavEvent:true})
}break;
case DwtKeyMap.PAGE_UP:case DwtKeyMap.PAGE_DOWN:this.scrollPage(f==DwtKeyMap.PAGE_UP);
break;
default:return false
}return true
};
DwtListView.prototype.setMultiSelect=function(a){this.setAttribute("aria-multiselectable",Boolean(a))
};
DwtListView.prototype.isMultiSelectEnabled=function(){return this.getAttribute("aria-multiselectable")==="true"
};
DwtListView.prototype.setListDivHeight=function(d){if(this._listDiv&&this._listColDiv){var c=Dwt.getSize(this._listColDiv).y;
var a=d-c-25;
Dwt.setSize(this._listDiv,Dwt.DEFAULT,a)
}};
DwtListView.prototype._getStyleRegex=function(){return new RegExp("\\bRow(-("+[DwtCssStyle.ALT_SELECTED,DwtCssStyle.SELECTED,DwtCssStyle.ACTIONED,DwtCssStyle.FOCUSED,DwtCssStyle.DISABLED,DwtCssStyle.DRAG_PROXY].join("|")+"))+\\b","g")
};
DwtListView.prototype._addRow=function(d,c){if(!d||!this._parentEl){return
}var a=this._parentEl.childNodes.length;
if(c!=null&&a>0&&c!=a){this._parentEl.insertBefore(d,this._parentEl.childNodes[c])
}else{this._parentEl.appendChild(d)
}this._fixAlternation((c!=null)?c:a);
d.setAttribute("role",this.itemRole)
};
DwtListView.prototype._itemAdded=function(a){};
DwtListView.prototype._fixAlternation=function(a){var f=this._parentEl.childNodes;
if(!(f&&f.length)){return
}if(!(this._list&&this._list.size())){return
}var e=f[a];
if(!e){return
}var d=Boolean(a%2);
this._setAlternatingRowClass(e,d);
var c=e.nextSibling;
while(c){d=!d;
this._setAlternatingRowClass(c,d);
c=c.nextSibling
}};
DwtListView.prototype._setAlternatingRowClass=function(e,a){var c=a?DwtListView.ROW_CLASS_ODD:DwtListView.ROW_CLASS_EVEN;
var d=a?DwtListView.ROW_CLASS_EVEN:DwtListView.ROW_CLASS_ODD;
Dwt.delClass(e,c,d)
};
DwtListView.prototype._createItemHtml=function(m,e,i,h){e=e||{};
this._addParams(m,e,l,k);
var a;
var l=[];
var k=0;
if(i){k=this._getDivHtml(m,e,l,k,h)
}else{if(e.div){var d=[this._getDivClass(e.divClass||this._normalClass,m,e),(h%2)?DwtListView.ROW_CLASS_EVEN:DwtListView.ROW_CLASS_ODD];
e.div.className=d.join(" ")
}a=e.div||this._getDiv(m,e)
}var f=this.useListElement();
if(!f){k=this._getTable(l,k,e)
}k=this._getRow(l,k,m,e);
var c=e.headerList||this._headerList;
if(c&&c.length){for(var g=0;
g<c.length;
g++){if(!c[g]._visible){continue
}var j=c[g]._field;
k=this._getCell(l,k,m,j,g,e)
}}else{k=this._getCell(l,k,m,null,null,e)
}l[k++]=f?"</div>":"</tr></table>";
if(i){l[k++]=f?"</li>":"</div>";
return l.join("")
}a.innerHTML=l.join("");
return a
};
DwtListView.prototype._addParams=function(a,c){};
DwtListView.prototype._getDiv=function(c,d){var e=document.createElement("div");
var a=[];
this._getDivHtml(c,d,a,0,0);
e.innerHTML=a.join("");
return e.firstChild
};
DwtListView.prototype._getExtraStyle=function(a){return null
};
DwtListView.prototype._getDivHtml=function(j,f,g,i,h,e){g[i++]=this.useListElement()?"<li ":"<div ";
e=e||[];
e.push(this._getDivClass(f.divClass||this._normalClass,j,f));
e.push((h%2)?DwtListView.ROW_CLASS_EVEN:DwtListView.ROW_CLASS_ODD);
g[i++]=AjxUtil.getClassAttr(e);
var c=[];
if(f.isDragProxy&&AjxEnv.isMozilla){c.push("overflow:visible")
}if(f.isDragProxy){c.push("position:absolute");
c.push("width:"+this.getSize().x+"px")
}var a=this._getExtraStyle(j);
if(a){c.push(a)
}if(c.length){g[i++]=" style='";
g[i++]=c.join(";");
g[i++]="'"
}var d=f.isDragProxy?this._getItemId(j)+"_dnd":null;
g[i++]=" id='";
g[i++]=this.associateItemWithElement(j,null,null,d);
g[i++]="'>";
return i
};
DwtListView.prototype._getDivClass=function(c,a,d){return d.isDragProxy?([c," ",c,"-",DwtCssStyle.DRAG_PROXY].join("")):c
};
DwtListView.prototype._getTable=function(c,a,d){c[a++]="<table width=";
c[a++]=!d.isDragProxy?"100%>":(this.getSize().x+">");
return a
};
DwtListView.prototype._getRow=function(c,a,f,h,d){var g=this._getRowId(f,h)||Dwt.getNextId();
var e=this._getRowClass(f,h);
if(this.useListElement()){c[a++]="<div ";
d=d||[];
if(e){d.push(e)
}if(g){c[a++]=["id='",g,"'"].join("")
}c[a++]=AjxUtil.getClassAttr(d)+">"
}else{c[a++]=g?["<tr id='",g,"'"].join(""):"<tr";
c[a++]=e?([" class='",e,"'>"].join("")):">"
}return a
};
DwtListView.prototype.useListElement=function(){return false
};
DwtListView.prototype._getRowClass=function(a,c){return null
};
DwtListView.prototype._getRowId=function(a,c){return null
};
DwtListView.prototype._getCell=function(p,o,r,n,g,f){if(this.useListElement()){var e=[];
var k=this._getCellClass(r,n,f);
if(k){e.push(k)
}o=this._getCellContents(p,o,r,n,g,f,[k||""])
}else{var d=this._getCellId(r,n,f);
var m=d?[" id=","'",d,"'"].join(""):"";
var c=this._getCellWidth(g,f);
var j=c?([" width=",c].join("")):(" width='100%'");
var k=this._getCellClass(r,n,f);
var h=k?[" class=",k].join(""):"";
var q=this._getCellAlign(g,f);
var l=q?[" align=",q].join(""):"";
var a=(this._getCellAttrText(r,n,f))||"";
var i=[m,j,h,l,a].join(" ");
p[o++]="<td";
p[o++]=i?(" "+i):"";
p[o++]=">";
o=this._getCellContents(p,o,r,n,g,f);
p[o++]="</td>"
}return o
};
DwtListView.prototype._getCellWidth=function(e,d){if(e==null){return null
}var a=d.headerList||this._headerList;
var c=a[e]._width;
if(c){if(c!="auto"&&c>0){if(AjxEnv.isIE){return(c+2)
}if(AjxEnv.isSafari&&!AjxEnv.isSafari6up&&!AjxEnv.isChrome19up){return(c+5)
}}return c
}return null
};
DwtListView.prototype._getCellAlign=function(d,c){if(d==null){return null
}var a=c.headerList||this._headerList;
return a[d]._align
};
DwtListView.prototype._getCellId=function(a,c,d){return null
};
DwtListView.prototype._getCellClass=function(a,c,d){return null
};
DwtListView.prototype._getCellAttrText=function(a,c,d){return null
};
DwtListView.prototype._getCellContents=function(c,a,d,e,g,f){c[a++]=d.toString?d.toString():d;
return a
};
DwtListView.prototype._getFieldId=function(a,c){return DwtId.getListViewItemId(DwtId.WIDGET_ITEM_FIELD,this._view,a.id,c)
};
DwtListView.prototype._getElement=function(a,c){return document.getElementById(this._getFieldId(a,c))
};
DwtListView.prototype._getDragProxy=function(e){var f=this.getDnDSelection();
if(!f){return null
}var h;
var a;
var c;
this._dndImg=null;
if(!(f instanceof Array)||f.length==1){var j=(f instanceof Array)?f[0]:f;
h=this._createItemHtml(j,{now:new Date(),isDragProxy:true});
this._setItemData(h,"origClassName",h.className);
Dwt.setPosition(h,Dwt.ABSOLUTE_STYLE);
c="position:absolute;top:18;left:-11;visibility:hidden"
}else{h=document.createElement("div");
h.className="DragProxy";
Dwt.setPosition(h,Dwt.ABSOLUTE_STYLE);
AjxImg.setImage(h,"DndMultiYes_48");
this._dndImg=h;
a=document.createElement("div");
Dwt.setPosition(a,Dwt.ABSOLUTE_STYLE);
var i=this.allSelected?ZmMsg.all:f.length;
a.innerHTML="<table><tr><td class='DragProxyTextLabel'>"+i+"</td></tr></table>";
h.appendChild(a);
c="position:absolute;top:30;left:0;visibility:hidden";
Dwt.setBounds(h,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE,43+32-16,36+32-20)
}var d=AjxImg.getImageHtml("RoundPlus",c,"id="+DwtId.DND_PLUS_ID);
if(!this._noDndPlusImage){h.appendChild(Dwt.parseHtmlFragment(d))
}this.shell.getHtmlElement().appendChild(h);
if(a){var g=Dwt.getSize(a);
Dwt.setLocation(a,16+(32-g.x)/2,19+(32-g.y)/2)
}Dwt.setZIndex(h,Dwt.Z_DND);
return h
};
DwtListView.prototype._setDragProxyState=function(c){if(this._dndImg){AjxImg.setImage(this._dndImg,c?"DndMultiYes_48":"DndMultiNo_48")
}else{if(this._dndProxy){var d=c?DwtCssStyle.DROPPABLE:DwtCssStyle.NOT_DROPPABLE;
var a=this._getItemData(this._dndProxy,"origClassName");
this._dndProxy.className=[a,d].join(" ")
}}};
DwtListView.prototype._setNoResultsHtml=function(){var c=document.createElement("div");
var a={message:this._getNoResultsMessage(),type:this.type};
c.innerHTML=AjxTemplate.expand("dwt.Widgets#DwtListView-NoResults",a);
this._addRow(c)
};
DwtListView.prototype._getNoResultsMessage=function(){return AjxMsg.noResults
};
DwtListView.prototype._clearRightSel=function(){if(!this._rightSelItem){return
}Dwt.delClass(this._rightSelItem,this._rightClickClass);
this._rightSelItem=null;
if(!this._curViewedItem){return
}this.deselectAll();
this.selectItem(this._curViewedItem,true)
};
DwtListView.prototype._getItemId=function(a){return DwtId.getListViewItemId(DwtId.WIDGET_ITEM,this._view,(a&&a.id)?a.id:Dwt.getNextId())
};
DwtListView.prototype._getElFromItem=function(a){return Dwt.byId(this._getItemId(a))
};
DwtListView.prototype._getRowIndex=function(c){var e=this._getItemId(c);
var d=this._parentEl.childNodes;
for(var a=0;
a<d.length;
a++){if(d[a].id==e){return a
}}return null
};
DwtListView.prototype._getItemData=function(a,d,e){e=e||(a?a.id:null);
var c=this._data[e];
return c?c[d]:null
};
DwtListView.prototype._setItemData=function(a,e,d,f){f=f||(a?a.id:null);
var c=this._data[f];
if(c){c[e]=d
}};
DwtListView.prototype._isValidDragObject=function(a){return(this.getTargetItemDiv(a)!=null)
};
DwtListView.prototype._updateDragSelection=function(c,a){if(!c){return
}if(!a){c.className=this._getItemData(c,"origClassName")
}else{this._setItemData(c,"origClassName",c.className);
Dwt.delClass(c,this._styleRe,this._dndClass)
}};
DwtListView.prototype._mouseOverAction=function(c,e){var a=this._getItemData(e,"type");
if(a==DwtListView.TYPE_HEADER_ITEM){var d=this.getItemFromElement(e);
if(d&&this.sortingEnabled&&d._sortable&&!this._headerClone){e.className+=" DwtListView-ColumnHover"
}}else{if(a==DwtListView.TYPE_HEADER_SASH){e.style.cursor=AjxEnv.isIE?"col-resize":"e-resize"
}}return true
};
DwtListView.prototype._mouseOutAction=function(c,e){var a=this._getItemData(e,"type");
if(a==DwtListView.TYPE_HEADER_ITEM&&!this._headerClone){e.className=(e.id!=this._currentColId)?"DwtListView-Column":"DwtListView-Column DwtListView-ColumnActive";
var d=this.getItemFromElement(e);
if(!d._sortable){e.className+=" DwtDefaultCursor"
}}else{if(a==DwtListView.TYPE_HEADER_SASH){e.style.cursor="auto"
}}return true
};
DwtListView.prototype._mouseOverListener=function(a){var c=this.getTargetItemDiv(a);
if(!c){return
}this._mouseOverAction(a,c)
};
DwtListView.prototype._mouseOutListener=function(a){var c=this.getTargetItemDiv(a);
if(!c){return
}this.setToolTipContent(null);
this._mouseOutAction(a,c)
};
DwtListView.prototype._mouseMoveListener=function(c){if(!this._clickDiv){return
}var a=this._getItemData(this._clickDiv,"type");
if(a==DwtListView.TYPE_HEADER_ITEM){this._handleColHeaderMove(c)
}else{if(a==DwtListView.TYPE_HEADER_SASH){this._handleColHeaderResize(c)
}}};
DwtListView.prototype._mouseDownListener=function(a){var c=this.getTargetItemDiv(a);
if(!c){this._dndSelection=null
}else{this._clickDiv=c;
if(this._getItemData(c,"type")!=DwtListView.TYPE_LIST_ITEM){this._dndSelection=null
}else{this._dndSelection=(this._selectedItems.contains(c))?this._selectedItems:c
}}this._mouseDownAction(a,c)
};
DwtListView.prototype._mouseUpListener=function(d){var g=this.getTargetItemDiv(d);
var f=this._handleColHeaderDrop(d);
var a=this._handleColSashDrop(d);
if(!g||g!=this._clickDiv||f||a){delete this._clickDiv;
this._mouseUpAction(d,g);
return
}delete this._clickDiv;
var c=this._getItemData(g,"type");
if(this._headerList&&c==DwtListView.TYPE_HEADER_ITEM){if(d.button==DwtMouseEvent.LEFT){this._columnClicked(g,d)
}else{if(d.button==DwtMouseEvent.RIGHT){var e=this._colHeaderActionMenu=this._getActionMenuForColHeader();
if(e&&e instanceof DwtMenu){e.popup(0,d.docX,d.docY)
}}}}else{if(c==DwtListView.TYPE_LIST_ITEM){if(d.button==DwtMouseEvent.LEFT||d.button==DwtMouseEvent.RIGHT){this._itemClicked(g,d)
}}}this._mouseUpAction(d,g)
};
DwtListView.prototype._mouseDownAction=function(a,c){};
DwtListView.prototype._mouseUpAction=function(a,c){};
DwtListView.prototype._doubleClickAction=function(a,c){return true
};
DwtListView.prototype._doubleClickListener=function(c){var d=this.getTargetItemDiv(c);
if(!d){return
}var a=this._getItemData(d,"type");
if(a==DwtListView.TYPE_LIST_ITEM){if(!this._doubleClickAction(c,d)){return
}if(this._evtMgr.isListenerRegistered(DwtEvent.SELECTION)){DwtUiEvent.copy(this._selEv,c);
this._selEv.item=this.getItemFromElement(d);
this._selEv.detail=DwtListView.ITEM_DBL_CLICKED;
this._evtMgr.notifyListeners(DwtEvent.SELECTION,this._selEv)
}}};
DwtListView.prototype.emulateDblClick=function(a,c){var e=document.getElementById(this._getItemId(a));
if(e){var d=new DwtMouseEvent();
this._setMouseEvent(d,{target:e,button:DwtMouseEvent.LEFT});
d.kbNavEvent=c;
this._itemClicked(e,d);
this._doubleClickListener(d)
}};
DwtListView.prototype._selectItem=function(d,a,e){if(!this.size()){return
}var c=(this._kbAnchor)?this._getSiblingElement(this._kbAnchor,d):this._parentEl.firstChild;
this._scrollList(c);
this._emulateSingleClick({target:c,button:DwtMouseEvent.LEFT,shiftKey:a,kbNavEvent:e})
};
DwtListView.prototype._getSiblingElement=function(a,d){if(!a){return null
}var c=d?a.nextSibling:a.previousSibling;
while(this._hasHiddenRows&&c&&!Dwt.getVisible(c)){c=d?c.nextSibling:c.previousSibling
}return(!c||(this._hasHiddenRows&&!Dwt.getVisible(c)))?a:c
};
DwtListView.prototype._scrollList=function(a){Dwt.scrollIntoView(a,a.parentNode)
};
DwtListView.prototype._setRowHeight=function(){if(!this._rowHeight){var a=this._parentEl.firstChild;
this._rowHeight=a&&Dwt.getSize(a).y
}};
DwtListView.prototype._emulateSingleClick=function(a){this._clickDiv=this.findItemDiv(a.target);
var c=new DwtMouseEvent();
this._setMouseEvent(c,a);
c.kbNavEvent=a.kbNavEvent;
this.notifyListeners(DwtEvent.ONMOUSEUP,c)
};
DwtListView.prototype._setKbFocusElement=function(a,c){if(!this._list||!this._list.size()){this._kbAnchor=null;
this.setFocusElement(this.getHtmlElement());
return
}if(this._kbAnchor){this._setEventHdlrs([DwtEvent.ONFOCUS,DwtEvent.ONBLUR],true,this._kbAnchor);
this._unmarkKbAnchorElement()
}if(a&&a!==true){this._kbAnchor=a
}else{if(this._kbAnchor){this._kbAnchor=this._getSiblingElement(this._kbAnchor,a)
}else{this._kbAnchor=this._parentEl.firstChild
}}this.setFocusElement(this._kbAnchor);
if(this._kbAnchor&&!c){Dwt.addClass(this._kbAnchor,this._kbFocusClass);
if(!this._duringFocusByMouseDown){this._scrollList(this._kbAnchor)
}var d=this.shell.getKeyboardMgr();
if(this.hasFocus()||d.getFocusObj()===this){d.grabFocus(this)
}}};
DwtListView.prototype._itemSelected=function(a,d){if(this._allowLeftSelection(a,d,d&&d.button)){this._unmarkKbAnchorElement(true);
this.deselectAll();
this._selectedItems.add(a);
a.setAttribute("aria-selected",true);
this._setKbFocusElement(a);
this._selAnchor=a;
Dwt.delClass(a,this._styleRe,this._selectedClass);
if(this.hasFocus()){Dwt.addClass(a,this._kbFocusClass)
}var c=this.getItemFromElement(a);
this._markUnselectedViewedItem(false);
this._curViewedItem=c;
this.firstSelIndex=(this._list&&c)?this._list.indexOf(c):-1
}};
DwtListView.prototype._itemClicked=function(h,n){if(this._rightSelItem){Dwt.delClass(this._rightSelItem,this._styleRe);
this._rightSelItem=null
}var g=this._selectedItems.size();
var e=this._selectedItems.contains(h);
if((!n.shiftKey&&!n.ctrlKey)||!this.isMultiSelectEnabled()){if(n.button==DwtMouseEvent.LEFT||n.button==DwtMouseEvent.RIGHT){this._selEv.detail=DwtListView.ITEM_SELECTED
}if(n.button==DwtMouseEvent.LEFT){this._itemSelected(h,n)
}else{if(n.button==DwtMouseEvent.RIGHT&&!e&&this._evtMgr.isListenerRegistered(DwtEvent.ACTION)){this.deselectAll();
this._markUnselectedViewedItem(true);
this._rightSelItem=h;
Dwt.delClass(h,this._styleRe,this._rightClickClass);
this._setKbFocusElement(h,true)
}}}else{if(n.button==DwtMouseEvent.LEFT){if(n.ctrlKey){this.setMultiSelection(h,e,n)
}else{if(!this._selAnchor){return
}var j=this._getChildren()||h.parentNode.childNodes;
var l=j.length;
var f;
var c=0;
this._rightSelItem=null;
this._selectedItems.removeAll();
for(var k=0;
k<l;
k++){f=j[k];
var o=this.getItemFromElement(f);
if(o===null){continue
}var d=this._selectedClass;
var a=(c===1);
if(f===h||f===this._selAnchor||f.id===h.id||f.id===this._selAnchor.id){c++;
a=true
}if(a){this._selectedItems.add(f);
f.setAttribute("aria-selected",true);
Dwt.delClass(f,this._styleRe,d)
}else{if(f.className.indexOf(d)!==-1){Dwt.delClass(f,this._styleRe);
f.removeAttribute("aria-selected")
}}}this._setKbFocusElement(h);
var m=this._selectedItems.size();
if(g<m){this._selEv.detail=DwtListView.ITEM_SELECTED
}else{if(g>m){this._selEv.detail=DwtListView.ITEM_DESELECTED
}else{return
}}}}}if(n.button==DwtMouseEvent.LEFT&&this._evtMgr.isListenerRegistered(DwtEvent.SELECTION)){if(this._setListEvent(n,this._selEv,h)){this._evtMgr.notifyListeners(DwtEvent.SELECTION,this._selEv)
}if(!this.hasFocus()){this.focus()
}}else{if(n.button==DwtMouseEvent.RIGHT&&!n.shiftKey&&!n.ctrlKey&&this._evtMgr.isListenerRegistered(DwtEvent.ACTION)){if(this._setListEvent(n,this._actionEv,h)){this._evtMgr.notifyListeners(DwtEvent.ACTION,this._actionEv)
}}}};
DwtListView.prototype._focusByMouseDownEvent=function(){};
DwtListView.prototype._setListEvent=function(c,d,a){DwtUiEvent.copy(d,c);
d.kbNavEvent=c.kbNavEvent;
d.item=this.findItem(a);
return true
};
DwtListView.prototype._columnClicked=function(f,d){var g=this.getItemFromElement(f);
if(!(g._sortable&&this.sortingEnabled)){return
}var e=this.getList();
var a=e?e.size():null;
var c=this._columnHasCustomQuery(g);
if(!a&&!c){return
}this._bSortAsc=(g._id===this._currentColId)?!this._bSortAsc:this._isDefaultSortAscending(g);
this._setSortedColStyle(g._id);
if(a>=1||c){this._sortColumn(g,this._bSortAsc)
}};
DwtListView.prototype._columnHasCustomQuery=function(a){return false
};
DwtListView.prototype._sortColumn=function(a,c){};
DwtListView.prototype._getActionMenuForColHeader=function(){return null
};
DwtListView.prototype._isDefaultSortAscending=function(a){return true
};
DwtListView.prototype._allowLeftSelection=function(c,d,a){return true
};
DwtListView.prototype._setSortedColStyle=function(a){if(this._currentColId&&(a!=this._currentColId)){var g=this._headerIdHash[this._currentColId];
if(g&&!g._noSortArrow){var h=g._field;
var i=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_ARROW,this._view,h);
var e=document.getElementById(i);
if(e&&e.firstChild){var c=(AjxImg._mode==AjxImg.SINGLE_IMG)?e.firstChild:e.firstChild.firstChild;
if(c){c.style.visibility="hidden"
}}}var k=document.getElementById(this._currentColId);
if(k){k.className="DwtListView-Column"
}}this._currentColId=a;
var g=this._headerIdHash[this._currentColId];
if(!g._noSortArrow){var h=g._field;
var j=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_ARROW,this._view,h);
var d=document.getElementById(j);
if(d){AjxImg.setImage(d,this._bSortAsc?"ColumnUpArrow":"ColumnDownArrow");
var c=(AjxImg._mode==AjxImg.SINGLE_IMG)?d.firstChild:d.firstChild.firstChild;
if(c){c.style.visibility="visible"
}}}var f=document.getElementById(a);
if(f){f.className="DwtListView-Column DwtListView-ColumnActive"
}};
DwtListView.prototype._resetList=function(){if(this._list&&this._list.size()){this._list.removeAll()
}this._resetListView()
};
DwtListView.prototype._resetListView=function(){var a;
while(this._parentEl&&this._parentEl.hasChildNodes()){var a=this._parentEl.removeChild(this._parentEl.firstChild);
this._data[a.id]=null
}if(this._selectedItems){this._selectedItems.removeAll()
}this._rightSelItem=null
};
DwtListView.prototype._destroyDragProxy=function(a){this._data[a.id]=null;
DwtControl.prototype._destroyDragProxy.call(this,a)
};
DwtListView.prototype._handleColHeaderMove=function(h){if(!this._headerClone){if(!this._headerColX){this._headerColX=h.docX;
return
}else{var f=Math.abs(this._headerColX-h.docX);
if(f<DwtListView.COL_MOVE_THRESHOLD){return
}}this._headerClone=document.createElement("div");
var l=Dwt.getSize(this._clickDiv);
var c=AjxEnv.isIE?l.x:l.x-3;
var k=AjxEnv.isIE?l.y:l.y-5;
Dwt.setSize(this._headerClone,c,k);
Dwt.setPosition(this._headerClone,Dwt.ABSOLUTE_STYLE);
Dwt.setZIndex(this._headerClone,Dwt.Z_DND);
Dwt.setLocation(this._headerClone,Dwt.DEFAULT,h.docY);
this._headerClone.className=this._clickDiv.className+" DragProxy";
this._headerClone.innerHTML=this._clickDiv.innerHTML;
this._clickDiv.className="DwtListView-Column DwtListView-ColumnEmpty";
this._headerClone.style.borderTop="1px solid #777777";
var i=this._headerIdHash[this._clickDiv.id];
var j=i._field;
var e=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_LABEL,this._view,j);
var d=document.getElementById(e);
if(d){d.style.color="#FFFFFF"
}this.shell.getHtmlElement().appendChild(this._headerClone)
}else{var a=this.getTargetItemDiv(h);
var g=this._getItemData(a,"type");
if(g==DwtListView.TYPE_HEADER_ITEM){if(this._headerCloneTarget&&(this._headerCloneTarget==this._clickDiv)){this._headerCloneTarget=null
}else{if(this._headerCloneTarget!=a){this._headerCloneTarget=a
}}}else{this._headerCloneTarget=null
}}if(this._headerClone){Dwt.setLocation(this._headerClone,h.docX+2)
}};
DwtListView.prototype._handleColHeaderResize=function(c){if(!this._headerSash){this._headerSash=document.createElement("div");
Dwt.setSize(this._headerSash,Dwt.DEFAULT,this.getSize().y);
Dwt.setPosition(this._headerSash,Dwt.ABSOLUTE_STYLE);
Dwt.setZIndex(this._headerSash,Dwt.Z_DND);
var d=this._getHeaderSashLocation();
this._headerSashFudgeX=d.x;
Dwt.setLocation(this._headerSash,Dwt.DEFAULT,d.y);
this._headerSash.className="DwtListView-ColumnSash";
this.getHtmlElement().appendChild(this._headerSash);
this._headerSashX=c.docX
}var a=this._getParentForColResize();
var e=Dwt.toWindow(a.getHtmlElement(),0,0);
Dwt.setLocation(this._headerSash,(c.docX-e.x)+this._headerSashFudgeX)
};
DwtListView.prototype._getHeaderSashLocation=function(){if(!this._tmpPoint){this._tmpPoint=new DwtPoint()
}this._tmpPoint.x=0;
this._tmpPoint.y=0;
return this._tmpPoint
};
DwtListView.prototype._handleColHeaderDrop=function(j){this._headerColX=null;
if(this._headerClone==null||j.button==DwtMouseEvent.RIGHT){return false
}if(this._headerCloneTarget){var a=this._getItemData(this._clickDiv,"index");
var d=this._getItemData(this._headerCloneTarget,"index");
this._reIndexColumn(a,d)
}this._clickDiv.className=(this._clickDiv.id!=this._currentColId)?"DwtListView-Column":"DwtListView-Column DwtListView-ColumnActive";
var l=this._headerClone.parentNode;
if(l){l.removeChild(this._headerClone)
}delete this._headerClone;
var g=this._data[this._clickDiv.id];
if(g.type!=DwtListView.TYPE_HEADER_ITEM){var k=this._headerIdHash[this._currentColId];
var h=k._sortable?k._field:null;
this.headerColCreated=false;
this.createHeaderHtml(h)
}else{var k=this._headerIdHash[this._clickDiv.id];
var e=DwtId.getListViewHdrId(DwtId.WIDGET_HDR_LABEL,this._view,k._field);
var c=document.getElementById(e);
if(c){c.style.color="#000000"
}}for(var f=0;
f<this._headerList.length;
f++){this._headerList[f]._width=this._calcRelativeWidth(f)
}this._resetColWidth();
return true
};
DwtListView.prototype._reIndexColumn=function(e,d){if(!this._headerList){return
}var a=this._headerList.length;
if(e<0||d<0||e>=a||d>=a||e==d){return
}var c=this._headerList.splice(e,1);
this._headerList.splice(d,0,c[0]);
this._relayout()
};
DwtListView.prototype._handleColSashDrop=function(l){if(this._headerSash==null||l.button==DwtMouseEvent.RIGHT){return false
}var m=this._headerSash.parentNode;
if(m){m.removeChild(this._headerSash)
}delete this._headerSash;
for(var e=0;
e<this._headerList.length;
e++){this._headerList[e]._width=this._calcRelativeWidth(e)
}var d=this._getItemData(this._clickDiv,"index");
if(d==null){return false
}var n=l.docX-this._headerSashX;
var k=this._headerList[d];
var j=k;
var h;
var f=[];
if(n<0){if((j==h)||!h){h=this._getNextResizeableColumnHeader(j)
}if(!h){return false
}n=Math.max(DwtListView.MIN_COLUMN_WIDTH-k._width,n);
k._width=Math.max(k._width+n,DwtListView.MIN_COLUMN_WIDTH);
h._width=Math.max(this._calcRelativeWidth(h._index)-n,DwtListView.MIN_COLUMN_WIDTH);
f.push(k._index,h._index)
}else{if(n>0){var g=n;
while(g>0){if((j==h)||!h){h=this._getNextResizeableColumnHeader(j,[],false)
}if(!h){n-=g;
break
}var o=this._calcRelativeWidth(h._index);
var a=o-DwtListView.MIN_COLUMN_WIDTH;
if(g>a){g-=a;
o=DwtListView.MIN_COLUMN_WIDTH
}else{o-=g;
g=0
}h._width=o;
f.push(h._index);
j=h
}k._width=Math.max(k._width+n,DwtListView.MIN_COLUMN_WIDTH);
f.push(k._index)
}}var c=this._getNextResizeableColumnHeader(k,f,true);
if(c){c._width="auto"
}this._relayout();
this._resetColWidth();
return true
};
DwtListView.prototype.recalculateCssStyle=function(){for(var a=0;
a<this._headerList.length;
a++){var c=this._headerList[a];
this._createHeaderCssStyle(c,this._calcRelativeWidth(a))
}};
DwtListView.prototype._calcRelativeWidth=function(d){var c=this._headerList[d];
if(!c._width||(c._width&&c._width=="auto")){var a=document.getElementById(c._id);
return(a)?(a.clientWidth-(AjxEnv.isIE?4:5)):null
}return c._width
};
DwtListView.prototype._resetColWidth=function(){if(!this.headerColCreated){return
}var g=this._getLastColumnIndex();
if(g){var d=this._headerList[g];
var c=document.getElementById(d._id);
if(c){var h=c.firstChild;
var a=16;
var f=this._listColDiv.clientWidth;
var e=this._listDiv.clientWidth;
if(f!=e){c.style.width=h.style.width=(d._width!=null&&d._width!="auto")?(d._width+a+"px"):(c.clientWidth+a+"px")
}else{Dwt.setSize(c,d._width,Dwt.DEFAULT);
Dwt.setSize(h,d._width,Dwt.DEFAULT)
}this.recalculateCssStyle()
}}};
DwtListView.prototype._getLastColumnIndex=function(){var c=null;
if(this._headerList){var a=this._headerList.length-1;
while(c==null&&a>=0){if(this._headerList[a]._visible){c=a
}a--
}}return c
};
DwtListView.prototype._getNextResizeableColumnIndex=function(f,a,e){a=a?AjxUtil.arrayAsHash(a):{};
a[f]=true;
if(this._headerList){for(var d=f+1;
d<this._headerList.length;
d++){var c=this._headerList[d];
if(a[d]){continue
}if(c._visible&&c._resizeable){return d
}}if(e){for(var d=0;
d<f;
d++){if(a[d]){continue
}var c=this._headerList[d];
if(c._visible&&c._resizeable){return d
}}}}return null
};
DwtListView.prototype._getNextResizeableColumnHeader=function(e,a,d){var c=this._getNextResizeableColumnIndex(e._index,a,d);
return(c!==null)?this._headerList[c]:false
};
DwtListView.prototype._relayout=function(){this.headerColCreated=false;
var d=this._headerIdHash[this._currentColId];
var a=(d&&d._sortable)?d._field:null;
var c=this.getSelection()[0];
this.setUI(a);
this.setSelection(c,true)
};
DwtListView.prototype._getParentForColResize=function(){return this
};
DwtListView.prototype._sizeChildren=function(a){if(this.headerColCreated&&this._listDiv&&(a!=Dwt.DEFAULT)){Dwt.setSize(this._listDiv,Dwt.DEFAULT,a-DwtListView.HEADERITEM_HEIGHT);
return true
}else{return false
}};
DwtListView.prototype._getChildren=function(){return null
};
DwtListView.prototype._focus=function(){if(this.size()==0){return
}if(this._kbAnchor){Dwt.addClass(this._kbAnchor,this._kbFocusClass)
}else{this._setKbFocusElement(null,true)
}};
DwtListView.prototype._blur=function(){this._unmarkKbAnchorElement()
};
DwtListView.prototype._unmarkKbAnchorElement=function(a){if(this._kbAnchor){Dwt.delClass(this._kbAnchor,this._kbFocusClass)
}if(a){this._kbAnchor=null
}};
DwtListView.prototype._getFirstItem=function(){var c=this._list.getArray();
if(c&&c.length>1){return c[0]
}return null
};
DwtListView.prototype._getLastItem=function(){var c=this._list.getArray();
if(c&&c.length>1){return c[c.length-1]
}return null
};
DwtListHeaderItem=function(c){if(arguments.length==0){return
}c=Dwt.getParams(arguments,DwtListView.PARAMS);
this._field=c.field;
this._label=c.text;
this._iconInfo=c.icon;
this._sortable=c.sortable;
this._noSortArrow=c.noSortArrow;
this._resizeable=c.resizeable;
this._visible=(c.visible!==false);
this._name=c.name||c.text;
this._align=c.align;
this._noRemove=c.noRemove;
this._tooltip=c.tooltip;
this._cssClass=c.cssClass;
var a=parseInt(c.width);
if(isNaN(a)||!a){this._width="auto";
this._variable=true;
this._resizeable=true
}else{if(String(a)==String(c.width)){this._width=a
}else{this._width=parseInt(String(c.width).substr(0,String(a).length));
this._widthUnits=AjxStringUtil.getUnitsFromSizeString(c.width)
}}};
DwtListHeaderItem.prototype.isDwtListHeaderItem=true;
DwtListHeaderItem.prototype.toString=function(){return"DwtListHeaderItem"
};
DwtListHeaderItem.PARAMS=["id","text","icon","width","sortable","resizeable","visible","name","align","noRemove","view"];
DwtListHeaderItem.sortCompare=function(d,c){return d._index<c._index?-1:(d._index>c._index?1:0)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtInputField")){DwtInputField=function(j){if(arguments.length==0){return
}j.className=j.className||"DwtInputField";
this._origClassName=j.className;
this._errorClassName=this._origClassName+"-error";
this._hintClassName=this._origClassName+"-hint";
this._disabledClassName=this._origClassName+"-disabled";
this._focusedClassName=this._origClassName+"-focused";
this._errorHintClassName=this._origClassName+"-errorhint";
this._requiredClassName=this._origClassName+"-required";
DwtComposite.call(this,j);
this._inputEventHandlers={};
this._type=j.type?j.type:DwtInputField.STRING;
this._rows=j.rows?j.rows:1;
this._size=j.size;
this._errorIconStyle=j.errorIconStyle?j.errorIconStyle:j.validator?DwtInputField.ERROR_ICON_RIGHT:DwtInputField.ERROR_ICON_NONE;
this._validationStyle=j.validationStyle?j.validationStyle:DwtInputField.ONEXIT_VALIDATION;
this._hasError=false;
this._hintIsVisible=false;
this._hint=j.hint;
this._label=j.label;
this.addListener(DwtEvent.ONFOCUS,this._focusHdlr.bind(this));
this.addListener(DwtEvent.ONBLUR,this._blurHdlr.bind(this));
this.addListener(DwtEvent.STATE_CHANGE,this._stateChanged.bind(this));
var h=j.inputId||Dwt.getNextId();
var g=Dwt.getNextId();
var f=this.getHtmlElement();
if(this._errorIconStyle==DwtInputField.ERROR_ICON_NONE){if(j.forceMultiRow||(j.rows&&j.rows>1)){var a=["<textarea id='",h,"' rows=",j.rows];
var e=a.length;
if(j.forceMultiRow||j.size){a[e++]=" cols=";
a[e++]=j.size||1
}if(j.wrap){a[e++]=" wrap=";
a[e++]=j.wrap
}a[e++]="></textarea>";
f.innerHTML=a.join("")
}else{f.innerHTML=["<input id='",h,"'>"].join("")
}}else{var a=["<table cellspacing='0' cellpadding='0'><tr>"];
var e=1;
if(this._errorIconStyle==DwtInputField.ERROR_ICON_LEFT){a[e++]=["<td style='padding-right:2px;'id='",g,"'></td>"].join("")
}a[e++]=["<td>","<input id='",h,"'>","</td>"].join("");
if(this._errorIconStyle==DwtInputField.ERROR_ICON_RIGHT){a[e++]=["<td style='padding-left:2px;' id='",g,"'></td>"].join("")
}a[e++]="</tr></table>";
f.innerHTML=a.join("");
if(this._errorIconStyle!=DwtInputField.ERROR_ICON_NONE){this._errorIconTd=document.getElementById(g);
this._errorIconTd.vAlign="middle";
this._errorIconTd.innerHTML=DwtInputField._NOERROR_ICON_HTML
}}if(j.forceMultiRow||this._rows>1){this._inputField=document.getElementById(h);
this._inputField.onkeyup=DwtInputField._keyUpHdlr;
this._inputField.onkeydown=DwtInputField._keyDownHdlr;
if(j.size){this._inputField.size=j.size
}if(j.maxLen){this._inputField.maxLength=this._maxLen=j.maxLen
}this._inputField.value=j.initialValue||""
}else{var c=document.getElementById(h);
var d=this.__createInputEl(j);
if(AjxEnv.isCamino){c.parentNode.style.overflow="hidden"
}c.parentNode.replaceChild(d,c)
}this.setFocusElement();
this.setValidatorFunction(j.validatorCtxtObj,j.validator);
this._setMouseEventHdlrs(false);
this._setKeyPressEventHdlr(false);
if(j.required!=null){this.setRequired(j.required)
}if(j.hint!=null){this.setHint(j.hint)
}};
DwtInputField.prototype=new DwtComposite;
DwtInputField.prototype.constructor=DwtInputField;
DwtInputField.prototype.isDwtInputField=true;
DwtInputField.prototype.isInputControl=true;
DwtInputField.prototype.toString=function(){return"DwtInputField"
};
DwtInputField.ERROR_ICON_LEFT=1;
DwtInputField.ERROR_ICON_RIGHT=2;
DwtInputField.ERROR_ICON_NONE=3;
DwtInputField.CONTINUAL_VALIDATION=1;
DwtInputField.ONEXIT_VALIDATION=2;
DwtInputField.MANUAL_VALIDATION=3;
DwtInputField.NUMBER=1;
DwtInputField.INTEGER=2;
DwtInputField.FLOAT=3;
DwtInputField.STRING=4;
DwtInputField.PASSWORD=5;
DwtInputField.DATE=6;
DwtInputField._ERROR_ICON_HTML=AjxImg.getImageHtml("Critical");
DwtInputField._NOERROR_ICON_HTML=AjxImg.getImageHtml("Blank_9");
DwtInputField.prototype.dispose=function(){this._errorIconTd=null;
this._inputField=null;
DwtComposite.prototype.dispose.call(this)
};
DwtInputField.prototype.setHandler=function(c,a){if(!this._checkState()){return
}this._inputEventHandlers[c]=a;
Dwt.setHandler(this.getInputElement(),c,a)
};
DwtInputField.prototype.setInputType=function(d){if(d!=this._type&&this._rows==1){this._type=d;
if(AjxEnv.isIE){var a=this._inputField;
var c=this.__createInputEl();
a.parentNode.replaceChild(c,a)
}else{this._inputField.type=this._type!=DwtInputField.PASSWORD?"text":"password"
}}};
DwtInputField.prototype.applySubstitution=function(d,c){var a;
while((a=d.exec(this.getValue()))){this._inputField.setRangeText(c,a.index,a.index+a[0].length);
if(!d.global){return
}}};
DwtInputField.prototype.setValidatorFunction=function(c,a){if(a){this._validator=a;
this._validatorObj=c
}else{switch(this._type){case DwtInputField.NUMBER:this._validator=DwtInputField.validateNumber;
break;
case DwtInputField.INTEGER:this._validator=DwtInputField.validateInteger;
break;
case DwtInputField.FLOAT:this._validator=DwtInputField.validateFloat;
break;
case DwtInputField.STRING:case DwtInputField.PASSWORD:this._validator=DwtInputField.validateString;
break;
case DwtInputField.DATE:this._validator=DwtInputField.validateDate;
break;
default:this._validator=DwtInputField.validateAny
}}};
DwtInputField.prototype.setValidatorRegExp=function(a,c){this._validator=a;
this._validatorObj=null;
this._errorString=c||""
};
DwtInputField.prototype.setValidationCallback=function(a){this._validationCallback=a
};
DwtInputField.prototype.getInputElement=function(){return this._inputField
};
DwtInputField.prototype.getValue=function(){return this._hintIsVisible?"":AjxStringUtil.trim(this._inputField.value)
};
DwtInputField.prototype.setValue=function(c,a){c=c||"";
this._inputField.value=c;
if(!a){c=this._validateInput(c);
if(c!=null){this._inputField.value=c
}}if(this._hintIsVisible&&c){this._hideHint(c)
}else{if(!c){this._showHint()
}}};
DwtInputField.prototype.clear=function(){this.setValue("")
};
DwtInputField.prototype.setHint=function(c){this._hint=c;
var a=this.getInputElement();
if(AjxEnv.supportsPlaceholder){a.placeholder=c||"";
return
}if(this._hintIsVisible){a.value=c;
if(!c){this._hintIsVisible=false;
this._updateClassName()
}}else{if(a.value===""){this._showHint()
}}};
DwtInputField.prototype.setLabel=function(a){this._label=a;
var c=this.getInputElement();
if(a){c.setAttribute("aria-label",a)
}else{c.removeAttribute("aria-label",a)
}};
DwtInputField.prototype.setValidNumberRange=function(c,a){this._minNumVal=c;
this._maxNumVal=a;
var d=this._validateInput(this.getValue());
if(d!=null){this.setValue(d)
}};
DwtInputField.prototype.setValidStringLengths=function(c,a){this._minLen=c||0;
if(a!=null){this._inputField.maxLength=a;
this._maxLen=a
}};
DwtInputField.prototype.setNumberPrecision=function(a){this._decimals=a
};
DwtInputField.prototype.setReadOnly=function(a){this._inputField.setAttribute("readonly",(a==null?true:a))
};
DwtInputField.prototype.getRequired=function(){var a=this.getInputElement().getAttribute("aria-required");
return a&&a.toLowerCase()==="true"
};
DwtInputField.prototype.setRequired=function(a){this.getInputElement().setAttribute("aria-required",a?"true":"false")
};
DwtInputField.prototype.setVisible=function(a){DwtComposite.prototype.setVisible.apply(this,arguments);
Dwt.setVisible(this.getInputElement(),a)
};
DwtInputField.prototype.isValid=function(){if(!this.getEnabled()){return this.getValue()
}try{if(typeof this._validator=="function"){return this._validatorObj?this._validator.call(this._validatorObj,this.getValue(),this):this._validator(this.getValue())
}else{return this._validator.test(this._inputField.value)
}}catch(a){if(typeof a=="string"){return null
}else{throw a
}}};
DwtInputField.prototype.getValidationError=function(){this.validate();
return this._validationError
};
DwtInputField.prototype.validate=function(){var a=this._validateInput(this.getValue());
if(a!=null){this.setValue(a);
return true
}else{return false
}};
DwtInputField.validateNumber=function(a){var c=new Number(a);
if(isNaN(c)||(Math.round(c)!=c)){throw AjxMsg.notAnInteger
}return DwtInputField.validateFloat.call(this,a)
};
DwtInputField.validateInteger=function(a){var c=new Number(a);
if(isNaN(c)||(Math.round(c)!=c)||(c.toString()!=a)){throw AjxMsg.notAnInteger
}if(this._minNumVal&&a<this._minNumVal){throw AjxMessageFormat.format(AjxMsg.numberLessThanMin,this._minNumVal)
}if(this._maxNumVal&&a>this._maxNumVal){throw AjxMessageFormat.format(AjxMsg.numberMoreThanMax,this._maxNumVal)
}return a
};
DwtInputField.validateFloat=function(a){var e=new Number(a);
if(isNaN(e)){throw AjxMsg.notANumber
}if(this._minNumVal&&a<this._minNumVal){throw AjxMessageFormat.format(AjxMsg.numberLessThanMin,this._minNumVal)
}if(this._maxNumVal&&a>this._maxNumVal){throw AjxMessageFormat.format(AjxMsg.numberMoreThanMax,this._maxNumVal)
}if(this._decimals!=null){var c=e.toString();
var d=c.indexOf(".");
if(d==-1){d=c.length
}a=e.toPrecision(d+this._decimals)
}else{a=e.toString()
}return a
};
DwtInputField.validateString=function(a){if(this._minLen!=null&&a.length<this._minLen){throw AjxMessageFormat.format(AjxMsg.stringTooShort,this._minLen)
}if(this._maxLen!=null&&a.length>this._maxLen){throw AjxMessageFormat.format(AjxMsg.stringTooLong,this._maxLen)
}return a
};
DwtInputField.validateDate=function(a){if(AjxDateUtil.simpleParseDateStr(a)==null){throw AjxMsg.invalidDatetimeString
}return a
};
DwtInputField.validateEmail=function(a){if(!AjxEmailAddress.isValid(a)){throw AjxMsg.invalidEmailAddr
}return a
};
DwtInputField.validateAny=function(a){return a
};
DwtInputField.prototype._validateRegExp=function(a){if(this._regExp&&!this._regExp.test(a)){throw this._errorString
}return a
};
DwtInputField._keyUpHdlr=function(c){var a=DwtShell.keyEvent;
a.setFromDhtmlEvent(c,true);
var e=a.dwtObj;
var d=a.keyCode;
if(e.notifyListeners(DwtEvent.ONKEYUP,a)){return true
}var f=null;
if((d==13||d==9)&&e._validationStyle==DwtInputField.ONEXIT_VALIDATION){f=e._validateInput(e.getValue())
}else{if(e._validationStyle==DwtInputField.CONTINUAL_VALIDATION){f=e._validateInput(e.getValue())
}}if(f!=null&&f!=e.getValue()){e.setValue(f)
}return true
};
DwtInputField.prototype._blurHdlr=function(a){if(this.isDisposed()){return
}this._updateClassName();
if(this._validationStyle==DwtInputField.ONEXIT_VALIDATION){var c=this._validateInput(this.getValue());
if(c!=null){this.setValue(c)
}}if(!this._hintIsVisible&&this._hint){this._showHint()
}};
DwtInputField.prototype._focusHdlr=function(a){appCtxt.getKeyboardMgr().updateFocus(this);
this._updateClassName();
if(this._hintIsVisible){this._hideHint("")
}};
DwtInputField._keyDownHdlr=function(a){var c=DwtControl.getTargetControl(a);
if(c){if(c._hintIsVisible){c._hideHint("")
}}};
DwtInputField.prototype._hideHint=function(c){if(!AjxEnv.supportsPlaceholder){var a=this.getInputElement();
a.value=c;
a.title=this._hint||"";
this._hintIsVisible=false;
this._updateClassName()
}};
DwtInputField.prototype._showHint=function(){if(!AjxEnv.supportsPlaceholder&&this._hint){var a=this.getInputElement();
if(!a.value){this._hintIsVisible=true;
this._updateClassName();
a.title="";
a.value=this._hint
}}};
DwtInputField.prototype._updateClassName=function(){var a=[];
if(this._hasFocus){a.push(this._focusedClassName)
}if(!this.getEnabled()){a.push(this._disabledClassName)
}else{if(this._hasError){if(this._validationError===AjxMsg.valueIsRequired){a.push(this._requiredClassName)
}else{if(this._hintIsVisible&&!this._hasFocus){a.push(this._errorHintClassName)
}else{a.push(this._errorClassName)
}}}else{if(this._hintIsVisible&&!this._hasFocus){a.push(this._hintClassName)
}}}a.push(this._origClassName);
this.getHtmlElement().className=a.join(" ")
};
DwtInputField.prototype._validateInput=function(c){var e=true;
var d;
this._validationError=null;
if(!this.getEnabled()){d=this.getValue()
}else{if(this.getRequired()&&c==""){this._validationError=AjxMsg.valueIsRequired
}else{try{if(typeof this._validator=="function"){d=c=this._validatorObj?this._validator.call(this._validatorObj,c,this):this._validator(c)
}else{if(!this._validator.test(c)){this._validationError=this._errorString
}}}catch(a){if(typeof a=="string"){this._validationError=a
}else{throw a
}}}}if(this._validationError){this._hasError=true;
if(this._errorIconTd){this._errorIconTd.innerHTML=DwtInputField._ERROR_ICON_HTML
}this.setToolTipContent(this._validationError);
e=false;
d=null
}else{this._hasError=false;
if(this._errorIconTd){this._errorIconTd.innerHTML=DwtInputField._NOERROR_ICON_HTML
}this.setToolTipContent(null);
e=true
}this._updateClassName();
if(this._validationCallback){this._validationCallback.run(this,e,c)
}return d
};
DwtInputField.prototype._focusByMouseUpEvent=function(){if(this.getEnabled()){this._hasFocus=true
}};
DwtInputField.prototype._replaceElementHook=function(c,d,a,e){d=this.getInputElement();
DwtControl.prototype._replaceElementHook.call(this,c,d,a,e);
if(c.id){d.id=c.id
}if(c.size){d.size=c.size
}if(c.title){this.setHint(c.title)
}};
DwtInputField.prototype.__createInputEl=function(h){var c=this._inputField;
if(c){for(var f in this._inputEventHandlers){c.removeAttribute(f)
}}var e;
var g=this._type!=DwtInputField.PASSWORD?"text":"password";
e=document.createElement("INPUT");
e.type=g;
this._inputField=e;
var d=h?h.size:c.size;
var a=h?h.maxLen:c.maxLength;
e.autocomplete="off";
if(d){e.size=d
}if(a){e.maxLength=a
}e.value=(h?h.initialValue:c.value)||"";
e.readonly=c?c.readonly:false;
if(h&&h.inputId){e.id=h.inputId
}if(AjxEnv.supportsPlaceholder&&this._hint){e.placeholder=this._hint
}if(this._label){e.setAttribute("aria-label",this._label)
}e.onkeyup=DwtInputField._keyUpHdlr;
e.onkeydown=DwtInputField._keyDownHdlr;
this._makeFocusable(e);
for(var f in this._inputEventHandlers){e[f]=this._inputEventHandlers[f]
}return e
};
DwtInputField.prototype._stateChanged=function(a){this.getInputElement().disabled=!this.getEnabled();
this._validateInput(this.getValue())
};
DwtInputField.prototype.disableFocusHdlr=function(){this._inputField.onfocus=null
};
DwtInputField.prototype.enableFocusHdlr=function(){this._inputField.onfocus=DwtInputField._focusHdlr
};
DwtInputField.prototype.enableKeyDownHdlr=function(){this._inputField.onkeydown=DwtInputField._keyDownHdlr
};
DwtInputField.prototype.moveCursorToEnd=function(){Dwt.moveCursorToEnd(this._inputField)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtBaseDialog")){DwtBaseDialog=function(c){if(arguments.length==0){return
}c=Dwt.getParams(arguments,DwtBaseDialog.PARAMS);
var a=c.parent;
if(!(a instanceof DwtShell)){throw new DwtException("DwtBaseDialog parent must be a DwtShell",DwtException.INVALIDPARENT,"DwtDialog")
}c.className=c.className||"DwtBaseDialog";
c.posStyle=DwtControl.ABSOLUTE_STYLE;
c.isFocusable=false;
this._title=c.title||"";
DwtComposite.call(this,c);
this._disposeOnPopDown=c.disposeOnPopDown||false;
this._shell=a;
this._zIndex=c.zIndex||Dwt.Z_DIALOG;
this._mode=c.mode||DwtBaseDialog.MODAL;
this._loc=new DwtPoint();
if(c.loc){this._loc.x=c.loc.x;
this._loc.y=c.loc.y
}else{this._loc.x=this._loc.y=Dwt.LOC_NOWHERE
}this._tabGroup=new DwtTabGroup(this.toString());
this._dragHandleId=c.dragHandleId||this._htmlElId+"_handle";
this._createHtml();
this._initializeDragging(this._dragHandleId);
if(c.view){this.setView(c.view)
}this.setZIndex(Dwt.Z_HIDDEN);
this.setVisible(true);
this._position(DwtBaseDialog.__nowhereLoc);
this._propagateEvent[DwtEvent.ONMOUSEUP]=true;
this.shellResizeHandler=this._resizeHdlr.bind(this)
};
DwtBaseDialog.PARAMS=["parent","className","title","zIndex","mode","loc","view","dragHandleId","id"];
DwtBaseDialog.prototype=new DwtComposite;
DwtBaseDialog.prototype.constructor=DwtBaseDialog;
DwtBaseDialog.prototype.toString=function(){return"DwtBaseDialog"
};
DwtBaseDialog.prototype.isDwtBaseDialog=true;
DwtBaseDialog.prototype.role="dialog";
DwtBaseDialog.prototype.isFocusable=true;
DwtBaseDialog.MODELESS=1;
DwtBaseDialog.MODAL=2;
DwtBaseDialog.__nowhereLoc=new DwtPoint(Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE);
DwtBaseDialog.prototype.TEMPLATE="dwt.Widgets#DwtBaseDialog";
DwtBaseDialog.prototype.CONTROLS_TEMPLATE=null;
DwtBaseDialog.prototype.addPopupListener=function(a){this.addListener(DwtEvent.POPUP,a)
};
DwtBaseDialog.prototype.removePopupListener=function(a){this.removeListener(DwtEvent.POPUP,a)
};
DwtBaseDialog.prototype.addPopdownListener=function(a){this.addListener(DwtEvent.POPDOWN,a)
};
DwtBaseDialog.prototype.removePopdownListener=function(a){this.removeListener(DwtEvent.POPDOWN,a)
};
DwtBaseDialog.prototype.popup=function(c){if(this._poppedUp){return
}this.cleanup(true);
var a=this._zIndex;
if(this._mode==DwtBaseDialog.MODAL){a=this._setModalEffect(a)
}this._shell._veilOverlay.activeDialogs.push(this);
this.setVisible(true);
if(c){this._loc.x=c.x;
this._loc.y=c.y
}this._position(c);
this._resetTabFocus();
this.setZIndex(a);
this._poppedUp=true;
var d=this._shell.getKeyboardMgr();
d.pushTabGroup(this._tabGroup);
d.pushDefaultHandler(this);
DwtShell.getShell().addListener(DwtEvent.CONTROL,this.shellResizeHandler);
this.notifyListeners(DwtEvent.POPUP,this)
};
DwtBaseDialog.prototype._resetTabFocus=function(){this._tabGroup.resetFocusMember(true)
};
DwtBaseDialog.prototype.focus=function(){if(this.isListenerRegistered(DwtEvent.ONFOCUS)){this.notifyListeners(DwtEvent.ONFOCUS)
}else{if(this._focusElementId){var a=document.getElementById(this._focusElementId);
if(a){a.focus();
return a
}}}};
DwtBaseDialog.prototype.isPoppedUp=function(){return this._poppedUp
};
DwtBaseDialog.prototype.popdown=function(){if(this._poppedUp){this._poppedUp=false;
this.cleanup(false);
var a=this._zIndex;
this.setZIndex(Dwt.Z_HIDDEN);
this.setVisible(false);
this._position(DwtBaseDialog.__nowhereLoc);
if(this._mode==DwtBaseDialog.MODAL){this._undoModality(a)
}else{this._shell._veilOverlay.activeDialogs.pop()
}if(this._disposeOnPopDown===true){this.dispose()
}var c=this._shell.getKeyboardMgr();
c.popTabGroup(this._tabGroup);
c.popDefaultHandler();
DwtShell.getShell().removeListener(DwtEvent.CONTROL,this.shellResizeHandler);
this.notifyListeners(DwtEvent.POPDOWN,this)
}};
DwtBaseDialog.prototype.setView=function(a){this.reset();
if(a){this._getContentDiv().appendChild(a.getHtmlElement())
}};
DwtBaseDialog.prototype.reset=function(){this._loc.x=this._loc.y=Dwt.LOC_NOWHERE
};
DwtBaseDialog.prototype.cleanup=function(c){var e=this._getInputFields();
if(e){var a=e.length;
for(var d=0;
d<a;
d++){e[d].disabled=!c;
if(c){e[d].value=""
}}}};
DwtBaseDialog.prototype.setTitle=function(a){if(this._titleEl){this._titleEl.innerHTML=a||""
}this._title=a
};
DwtBaseDialog.prototype.setContent=function(c){var a=this._getContentDiv();
if(a){a.innerHTML=c||""
}};
DwtBaseDialog.prototype._getContentDiv=function(){return this._contentEl
};
DwtBaseDialog.prototype.addEnterListener=function(a){this.addListener(DwtEvent.ENTER,a)
};
DwtBaseDialog.getActiveDialog=function(){var c=null;
var d=DwtShell.getShell(window);
if(d){var a=d._veilOverlay.activeDialogs.length;
if(a>0){c=d._veilOverlay.activeDialogs[a-1]
}}return c
};
DwtBaseDialog.prototype.getTabGroupMember=function(){return this._tabGroup
};
DwtBaseDialog.prototype._initializeDragging=function(i){var h=document.getElementById(i);
if(h){var g=DwtControl.fromElementId(window._dwtShellId);
if(g){var a=Dwt.getSize(g.getHtmlElement());
var d=document.getElementById(this._htmlElId);
var j=this.getSize();
var f=new AjxCallback(this,this._dragEnd);
var e=new AjxCallback(this,this._duringDrag);
var c=new AjxCallback(this,this._dragStart);
DwtDraggable.init(h,d,0,document.body.offsetWidth-10,0,document.body.offsetHeight-10,c,e,f)
}}};
DwtBaseDialog.prototype._getContentHtml=function(){return""
};
DwtBaseDialog.prototype._createHtml=function(a){var c={id:this._htmlElId};
this._createHtmlFromTemplate(a||this.TEMPLATE,c)
};
DwtBaseDialog.prototype._createHtmlFromTemplate=function(a,c){c.dragId=this._dragHandleId;
c.title=this._title;
c.icon="";
c.closeIcon1="";
c.closeIcon2="";
c.controlsTemplateId=this.CONTROLS_TEMPLATE;
DwtComposite.prototype._createHtmlFromTemplate.call(this,a,c);
this._titleBarEl=document.getElementById(c.id+"_titlebar");
this._titleEl=document.getElementById(c.id+"_title");
this._contentEl=document.getElementById(c.id+"_content");
if(this._titleEl){this.setAttribute("aria-labelledby",this._titleEl.id);
this._titleEl.setAttribute("role","heading");
this._titleEl.setAttribute("aria-level","2")
}this.setContent(this._getContentHtml())
};
DwtBaseDialog.prototype._setModalEffect=function(){var d=this._shell._veilOverlay.dialogZ;
var e=null;
var c,a;
if(d.length){e=d[d.length-1]
}if(e){c=e+2;
a=e+1
}else{c=this._zIndex;
a=Dwt.Z_VEIL
}this._shell._veilOverlay.veilZ.push(a);
this._shell._veilOverlay.dialogZ.push(c);
Dwt.setZIndex(this._shell._veilOverlay,a);
return c
};
DwtBaseDialog.prototype._undoModality=function(d){var a=this._shell._veilOverlay.veilZ;
a.pop();
var c=a[a.length-1];
Dwt.setZIndex(this._shell._veilOverlay,c);
this._shell._veilOverlay.dialogZ.pop();
this._shell._veilOverlay.activeDialogs.pop();
if(this._shell._veilOverlay.activeDialogs.length>0){this._shell._veilOverlay.activeDialogs[0].focus()
}};
DwtBaseDialog.prototype._getInputFields=function(){};
DwtBaseDialog.prototype._resizeHdlr=function(a){if(this._loc.x===Dwt.LOC_NOWHERE&&this._loc.y===Dwt.LOC_NOWHERE){this._position()
}};
DwtBaseDialog.prototype._dragStart=function(a,e){if(AjxEnv.isNav&&!this._ignoreSetDragBoundries){this._currSize=this.getSize();
var d=DwtControl.fromElementId(window._dwtShellId);
if(d){var c=Dwt.getSize(d.getHtmlElement());
DwtDraggable.setDragBoundaries(DwtDraggable.dragEl,0,c.x-this._currSize.x,0,c.y-this._currSize.y)
}}};
DwtBaseDialog.prototype._dragEnd=function(a,c){this._loc.x=a;
this._loc.y=c
};
DwtBaseDialog.prototype._duringDrag=function(a,c){};
DwtBaseDialog.prototype._doesContainElement=function(a){return Dwt.contains(this.getHtmlElement(),a)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtDialog")){DwtDialog=function(c){if(arguments.length==0){return
}c=Dwt.getParams(arguments,DwtDialog.PARAMS);
c.className=c.className||"DwtDialog";
this._title=c.title=c.title||"";
var d=c.standardButtons;
var k=c.extraButtons;
if(!d){d=[DwtDialog.OK_BUTTON,DwtDialog.CANCEL_BUTTON]
}else{if(d==DwtDialog.NO_BUTTONS){d=null
}else{if(d&&!d.length){d=[d]
}}}this._buttonList=[];
var m={};
m[DwtDialog.ALIGN_LEFT]=[];
m[DwtDialog.ALIGN_CENTER]=[];
m[DwtDialog.ALIGN_RIGHT]=[];
if(d||k){this._buttonDesc={};
if(d&&d.length){this._initialEnterButtonId=this._enterButtonId=d[0];
for(var e=0;
e<d.length;
e++){var j=d[e];
this._buttonList.push(j);
var h=DwtDialog.ALIGN[j];
if(h){m[h].push(j)
}this._buttonDesc[j]=new DwtDialog_ButtonDescriptor(j,AjxMsg[DwtDialog.MSG_KEY[j]],h)
}this._resetCallbacks()
}if(k&&k.length){if(!this._enterButtonId){this._initialEnterButtonId=this._enterButtonId=k[0]
}for(var e=0;
e<k.length;
e++){var j=k[e].id;
this._buttonList.push(j);
var h=k[e].align;
if(h){m[h].push(j)
}this._buttonDesc[j]=k[e]
}}}this._buttonElementId={};
for(var e=0;
e<this._buttonList.length;
e++){var j=this._buttonList[e];
this._buttonElementId[j]=this._buttonDesc[j].label?this._buttonDesc[j].label+"_"+Dwt.getNextId():Dwt.getNextId()
}DwtBaseDialog.call(this,c);
this._button={};
for(var e=0;
e<this._buttonList.length;
e++){var j=this._buttonList[e];
var l=this._button[j]=new DwtButton({parent:this,id:this._htmlElId+"_button"+j});
l.setText(this._buttonDesc[j].label);
l.buttonId=j;
l.addSelectionListener(new AjxListener(this,this._buttonListener));
var a=document.getElementById(this._buttonElementId[j]);
if(a){a.appendChild(l.getHtmlElement())
}}var g=m[DwtDialog.ALIGN_LEFT].concat(m[DwtDialog.ALIGN_CENTER],m[DwtDialog.ALIGN_RIGHT]);
for(var e=0;
e<g.length;
e++){var f=this._button[g[e]];
this._tabGroup.addMember(f)
}};
DwtDialog.PARAMS=["parent","className","title","standardButtons","extraButtons","zIndex","mode","loc","id"];
DwtDialog.prototype=new DwtBaseDialog;
DwtDialog.prototype.constructor=DwtDialog;
DwtDialog.prototype.isDwtDialog=true;
DwtDialog.prototype.toString=function(){return"DwtDialog"
};
DwtDialog.ALIGN_LEFT=1;
DwtDialog.ALIGN_RIGHT=2;
DwtDialog.ALIGN_CENTER=3;
DwtDialog.CANCEL_BUTTON=1;
DwtDialog.OK_BUTTON=2;
DwtDialog.DISMISS_BUTTON=3;
DwtDialog.NO_BUTTON=4;
DwtDialog.YES_BUTTON=5;
DwtDialog.LAST_BUTTON=5;
DwtDialog.NO_BUTTONS=256;
DwtDialog.ALL_BUTTONS=[DwtDialog.CANCEL_BUTTON,DwtDialog.OK_BUTTON,DwtDialog.DISMISS_BUTTON,DwtDialog.NO_BUTTON,DwtDialog.YES_BUTTON];
DwtDialog.MSG_KEY={};
DwtDialog.MSG_KEY[DwtDialog.CANCEL_BUTTON]="cancel";
DwtDialog.MSG_KEY[DwtDialog.OK_BUTTON]="ok";
DwtDialog.MSG_KEY[DwtDialog.DISMISS_BUTTON]="close";
DwtDialog.MSG_KEY[DwtDialog.NO_BUTTON]="no";
DwtDialog.MSG_KEY[DwtDialog.YES_BUTTON]="yes";
DwtDialog.ALIGN={};
DwtDialog.ALIGN[DwtDialog.CANCEL_BUTTON]=DwtDialog.ALIGN_RIGHT;
DwtDialog.ALIGN[DwtDialog.OK_BUTTON]=DwtDialog.ALIGN_RIGHT;
DwtDialog.ALIGN[DwtDialog.DISMISS_BUTTON]=DwtDialog.ALIGN_RIGHT;
DwtDialog.ALIGN[DwtDialog.NO_BUTTON]=DwtDialog.ALIGN_RIGHT;
DwtDialog.ALIGN[DwtDialog.YES_BUTTON]=DwtDialog.ALIGN_RIGHT;
DwtDialog.MODELESS=DwtBaseDialog.MODELESS;
DwtDialog.MODAL=DwtBaseDialog.MODAL;
DwtDialog.prototype.CONTROLS_TEMPLATE="dwt.Widgets#DwtDialogControls";
DwtDialog.prototype.popdown=function(){DwtBaseDialog.prototype.popdown.call(this);
if(!this._disposeOnPopDown){this.resetButtonStates()
}};
DwtDialog.prototype.popup=function(a,c){this._focusButtonId=c;
DwtBaseDialog.prototype.popup.call(this,a)
};
DwtDialog.prototype._resetTabFocus=function(){if(this._focusButtonId){var a=this.getButton(this._focusButtonId);
this._tabGroup.setFocusMember(a,true)
}else{DwtBaseDialog.prototype._resetTabFocus.call(this)
}};
DwtDialog.prototype.reset=function(){this._resetCallbacks();
this.resetButtonStates();
DwtBaseDialog.prototype.reset.call(this)
};
DwtDialog.prototype.resetButtonStates=function(){for(b in this._button){this._button[b].setEnabled(true);
this._button[b].setHovered(false)
}this.associateEnterWithButton(this._initialEnterButtonId)
};
DwtDialog.prototype.getButton=function(a){return this._button[a]
};
DwtDialog.prototype.setButtonEnabled=function(c,a){if(!this._button[c]){return
}this._button[c].setEnabled(a)
};
DwtDialog.prototype.setButtonVisible=function(a,c){if(!this._button[a]){return
}this._button[a].setVisible(c)
};
DwtDialog.prototype.getButtonEnabled=function(a){return this._button[a].getEnabled()
};
DwtDialog.prototype.registerCallback=function(c,d,e,a){this._buttonDesc[c].callback=(d&&(d.isAjxCallback||(!e&&!a)))?d:(new AjxCallback(e,d,a))
};
DwtDialog.prototype.unregisterCallback=function(a){this._buttonDesc[a].callback=null
};
DwtDialog.prototype.setButtonListener=function(a,c){this._button[a].removeSelectionListeners();
this._button[a].addSelectionListener(c)
};
DwtDialog.prototype.setEnterListener=function(a){this.removeAllListeners(DwtEvent.ENTER);
this.addEnterListener(a)
};
DwtDialog.prototype.associateEnterWithButton=function(a){this._enterButtonId=a
};
DwtDialog.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_DIALOG
};
DwtDialog.prototype.handleKeyAction=function(a,c){switch(a){case DwtKeyMap.ENTER:this.notifyListeners(DwtEvent.ENTER,c);
break;
case DwtKeyMap.CANCEL:var d=false;
d=d||this._runCallbackForButtonId(DwtDialog.CANCEL_BUTTON);
d=d||this._runCallbackForButtonId(DwtDialog.NO_BUTTON);
d=d||this._runCallbackForButtonId(DwtDialog.DISMISS_BUTTON);
if(!d&&this._buttonDesc[DwtDialog.OK_BUTTON]&&this._buttonList.length==1){d=d||this._runCallbackForButtonId(DwtDialog.OK_BUTTON)
}this.popdown();
return true;
case DwtKeyMap.YES:if(this._buttonDesc[DwtDialog.YES_BUTTON]){this._runCallbackForButtonId(DwtDialog.YES_BUTTON)
}break;
case DwtKeyMap.NO:if(this._buttonDesc[DwtDialog.NO_BUTTON]){this._runCallbackForButtonId(DwtDialog.NO_BUTTON)
}break;
default:return false
}return true
};
DwtDialog.prototype._createHtmlFromTemplate=function(d,f){DwtBaseDialog.prototype._createHtmlFromTemplate.call(this,d,f);
var e=f.id+"_focus";
if(document.getElementById(e)){this._focusElementId=e
}this._buttonsEl=document.getElementById(f.id+"_buttons");
if(this._buttonsEl){var c=[];
var a=0;
this._addButtonsHtml(c,a);
this._buttonsEl.innerHTML=c.join("")
}};
DwtDialog.prototype._getButtonsContainerStartTemplate=function(){return"<table role='presentation' width='100%'><tr>"
};
DwtDialog.prototype._getButtonsAlignStartTemplate=function(){return"<td align=\"{0}\"><table role='presentation'><tr>"
};
DwtDialog.prototype._getButtonsAlignEndTemplate=function(){return"</tr></table></td>"
};
DwtDialog.prototype._getButtonsCellTemplate=function(){return'<td id="{0}"></td>'
};
DwtDialog.prototype._getButtonsContainerEndTemplate=function(){return"</tr></table>"
};
DwtDialog.prototype._addButtonsHtml=function(g,c){if(this._buttonList&&this._buttonList.length){var d=new Array();
var a=new Array();
var f=new Array();
for(var e=0;
e<this._buttonList.length;
e++){var h=this._buttonList[e];
switch(this._buttonDesc[h].align){case DwtDialog.ALIGN_RIGHT:a.push(h);
break;
case DwtDialog.ALIGN_LEFT:d.push(h);
break;
case DwtDialog.ALIGN_CENTER:f.push(h);
break
}}g[c++]=this._getButtonsContainerStartTemplate();
if(d.length){g[c++]=AjxMessageFormat.format(this._getButtonsAlignStartTemplate(),["left"]);
for(var e=0;
e<d.length;
e++){var h=d[e];
var j=this._buttonDesc[h].cellTemplate?this._buttonDesc[h].cellTemplate:this._getButtonsCellTemplate();
g[c++]=AjxMessageFormat.format(j,[this._buttonElementId[h]])
}g[c++]=this._getButtonsAlignEndTemplate()
}if(f.length){g[c++]=AjxMessageFormat.format(this._getButtonsAlignStartTemplate(),["center"]);
for(var e=0;
e<f.length;
e++){var h=f[e];
var j=this._buttonDesc[h].cellTemplate?this._buttonDesc[h].cellTemplate:this._getButtonsCellTemplate();
g[c++]=AjxMessageFormat.format(j,[this._buttonElementId[h]])
}g[c++]=this._getButtonsAlignEndTemplate()
}if(a.length){g[c++]=AjxMessageFormat.format(this._getButtonsAlignStartTemplate(),["right"]);
for(var e=0;
e<a.length;
e++){var h=a[e];
var j=this._buttonDesc[h].cellTemplate?this._buttonDesc[h].cellTemplate:this._getButtonsCellTemplate();
g[c++]=AjxMessageFormat.format(j,[this._buttonElementId[h]])
}g[c++]=this._getButtonsAlignEndTemplate()
}g[c++]=this._getButtonsContainerEndTemplate()
}return c
};
DwtDialog.prototype._buttonListener=function(d,a){var e=DwtControl.getTargetControl(d);
var c=(e&&e.buttonId)||this._enterButtonId;
if(c){this._runCallbackForButtonId(c,a)
}};
DwtDialog.prototype._runCallbackForButtonId=function(e,a){var c=this._buttonDesc[e];
var d=c&&c.callback;
if(!d){return false
}a=(a instanceof Array)?a:[a];
d.run.apply(d,a);
return true
};
DwtDialog.prototype._runEnterCallback=function(a){if(this._enterButtonId&&this.getButtonEnabled(this._enterButtonId)){this._runCallbackForButtonId(this._enterButtonId,a)
}};
DwtDialog.prototype._resetCallbacks=function(){if(this._buttonDesc){for(var a=0;
a<DwtDialog.ALL_BUTTONS.length;
a++){var c=DwtDialog.ALL_BUTTONS[a];
if(this._buttonDesc[c]){this._buttonDesc[c].callback=new AjxCallback(this,this.popdown)
}}}};
DwtDialog_ButtonDescriptor=function(f,a,e,d,c){this.id=f;
this.label=a;
this.align=e;
this.callback=d;
this.cellTemplate=c
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtMessageDialog")){DwtMessageDialog=function(c){if(arguments.length==0){return
}c=Dwt.getParams(arguments,DwtMessageDialog.PARAMS);
this._msgCellId=Dwt.getNextId("MessageDialog_");
c.standardButtons=c.buttons||[DwtDialog.OK_BUTTON];
if(c.helpText){var a=new DwtDialog_ButtonDescriptor(DwtMessageDialog.HELP_BUTTON,c.helpText,DwtDialog.ALIGN_LEFT);
c.extraButtons=c.extraButtons||[];
c.extraButtons.push(a);
DwtDialog.call(this,c);
this.registerCallback(DwtMessageDialog.HELP_BUTTON,function(){ZmZimbraMail.helpLinkCallback(this._helpURL)
},this)
}else{DwtDialog.call(this,c)
}this.setContent(this._contentHtml());
this._msgCell=document.getElementById(this._msgCellId);
this.addEnterListener(new AjxListener(this,this._enterListener));
this._setAllowSelection();
if(AjxEnv.isSafari){this.setAttribute("aria-labelledby",this._titleEl.id+" "+this._msgCellId)
}else{this.setAttribute("aria-describedby",this._msgCellId)
}};
DwtMessageDialog.PARAMS=["parent","className","buttons","extraButtons","id"];
DwtMessageDialog.prototype=new DwtDialog;
DwtMessageDialog.prototype.constructor=DwtMessageDialog;
DwtMessageDialog.prototype.isDwtMessageDialog=true;
DwtMessageDialog.prototype.role="alertdialog";
DwtMessageDialog.prototype.toString=function(){return"DwtMessageDialog"
};
DwtMessageDialog.CRITICAL_STYLE=1;
DwtMessageDialog.INFO_STYLE=2;
DwtMessageDialog.WARNING_STYLE=3;
DwtMessageDialog.PLAIN_STYLE=4;
DwtMessageDialog.TITLE={};
DwtMessageDialog.TITLE[DwtMessageDialog.CRITICAL_STYLE]=AjxMsg.criticalMsg;
DwtMessageDialog.TITLE[DwtMessageDialog.INFO_STYLE]=AjxMsg.infoMsg;
DwtMessageDialog.TITLE[DwtMessageDialog.WARNING_STYLE]=AjxMsg.warningMsg;
DwtMessageDialog.TITLE[DwtMessageDialog.PLAIN_STYLE]=AjxMsg.infoMsg;
DwtMessageDialog.ICON={};
DwtMessageDialog.ICON[DwtMessageDialog.CRITICAL_STYLE]="Critical_32";
DwtMessageDialog.ICON[DwtMessageDialog.INFO_STYLE]="Information_32";
DwtMessageDialog.ICON[DwtMessageDialog.WARNING_STYLE]="Warning_32";
DwtMessageDialog.HELP_BUTTON="Help";
DwtMessageDialog.prototype.toString=function(){return"DwtMessageDialog"
};
DwtMessageDialog.prototype.setMessage=function(d,e,f){this._message=d||"";
this._style=e||this._getDefaultStyle();
this.setTitle(f||DwtMessageDialog.TITLE[this._style]);
if(d){var c=[];
var a=0;
c[a++]="<table role='presentation' cellspacing=0 cellpadding=0 border=0 width=100% height=100%><tr>";
if(DwtMessageDialog.ICON[this._style]){c[a++]="<td valign='top'>";
c[a++]=AjxImg.getImageHtml({imageName:DwtMessageDialog.ICON[this._style],attrStr:"id='"+this._msgCellId+"_Image''",altText:DwtMessageDialog.TITLE[this._style]});
c[a++]="</td>"
}c[a++]="<td class='DwtMsgArea' id='"+this._msgCellId+"_Msg'>";
c[a++]=d;
c[a++]="</td></tr></table>";
this._msgCell.innerHTML=c.join("")
}else{this._msgCell.innerHTML=""
}};
DwtMessageDialog.prototype.setHelpURL=function(a){this._helpURL=a
};
DwtMessageDialog.prototype.setSize=function(c,a){var d=document.getElementById(this._msgCellId);
if(d&&(c||a)){Dwt.setSize(d,c,a)
}};
DwtMessageDialog.prototype._getDefaultStyle=function(){return DwtMessageDialog.INFO_STYLE
};
DwtMessageDialog.prototype.reset=function(){this._msgCell.innerHTML="";
this._helpURL="";
DwtDialog.prototype.reset.call(this)
};
DwtMessageDialog.prototype.handleKeyAction=function(a,c){return DwtDialog.prototype.handleKeyAction.call(this,a,c)
};
DwtMessageDialog.prototype._contentHtml=function(){return"<div id='"+this._msgCellId+"' class='DwtMsgDialog'></div>"
};
DwtMessageDialog.prototype._enterListener=function(a){this._runEnterCallback()
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtOptionDialog")){DwtOptionDialog=function(g){if(arguments.length==0){return
}g.buttons=g.buttons||[DwtDialog.OK_BUTTON,DwtDialog.CANCEL_BUTTON];
DwtMessageDialog.call(this,g);
var a=g.options||[];
this._options=[];
this._selectedIdx=0;
this._buttonContainer=document.createElement("FIELDSET");
this._buttonContainer.setAttribute("role","radiogroup");
this._getContentDiv().appendChild(this._buttonContainer);
for(var d=0;
d<a.length;
d++){var e=AjxUtil.hashCopy(a[d]);
e.index=d;
var f=(d===0);
var c=e.button=new DwtRadioButton({parent:this,parentElement:this._buttonContainer,id:[this.getHTMLElId(),name,"button"].join("_"),name:e.name,value:e.value||e.name,checked:f});
if(e.text){c.setText(e.text)
}c.getInputElement().setAttribute("aria-setsize",a.length);
c.getInputElement().setAttribute("aria-posinset",d+1);
c.addSelectionListener(this._selectionListener.bind(this,d));
this._options.push(e)
}if(g.message){this.setMessage(g.message,null,g.title)
}else{if(g.title){this.setTitle(g.title)
}}};
DwtOptionDialog.prototype=new DwtMessageDialog;
DwtOptionDialog.prototype.constructor=DwtOptionDialog;
DwtOptionDialog.prototype.isDwtOptionDialog=true;
DwtOptionDialog.prototype.toString=function(){return"DwtOptionDialog"
};
DwtOptionDialog.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_OPTION_DIALOG
};
DwtOptionDialog.prototype._getDefaultStyle=function(){return DwtMessageDialog.PLAIN_STYLE
};
DwtOptionDialog.prototype._updateSelection=function(a,c){if(!AjxUtil.isNumber(a)||a<0||a>=this._options.length){return false
}this._selectedIdx=a;
for(var d=0;
d<this._options.length;
d++){this._options[d].button.setSelected(d===a)
}if(c){this._options[a].button.focus()
}return true
};
DwtOptionDialog.prototype._getOptionByName=function(a){for(var c=0;
c<this._options.length;
c++){if(this._options[c].name===a){return this._options[c]
}}return null
};
DwtOptionDialog.prototype._selectionListener=function(a,c){if(!c.detail){return
}this._updateSelection(a)
};
DwtOptionDialog.prototype.getSelection=function(){var a=this._options[this._selectedIdx];
return a.button?a.button.getValue():null
};
DwtOptionDialog.prototype.setSelection=function(a){var c=this._getOptionByName(a);
this._updateSelection(c&&c.index)
};
DwtOptionDialog.prototype.getButton=function(a){var c=this._getOptionByName(a);
return c&&c.button
};
DwtOptionDialog.prototype.handleKeyAction=function(a,c){switch(a){case DwtKeyMap.NEXT:return this._updateSelection(this._selectedIdx+1,true);
case DwtKeyMap.PREV:return this._updateSelection(this._selectedIdx-1,true);
default:return DwtMessageDialog.prototype.handleKeyAction.apply(this,arguments)
}};
DwtOptionDialog.prototype.popup=function(a){DwtMessageDialog.prototype.popup.call(this,a);
this._updateSelection(0,true)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtToolBar")){DwtToolBar=function(c){if(arguments.length==0){return
}c=Dwt.getParams(arguments,DwtToolBar.PARAMS);
c.className=c.className||"ZToolbar";
DwtComposite.call(this,c);
if(c.parent instanceof DwtToolBar){this._hasSetMouseEvents=c.parent._hasSetMouseEvents
}if(c.handleMouse!==false&&!this._hasSetMouseEvents){var a=[DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEUP,DwtEvent.ONCLICK];
if(!AjxEnv.isIE){a.push(DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEOUT)
}this._setEventHdlrs(a);
this._hasSetMouseEvents=true
}this._style=c.style||DwtToolBar.HORIZ_STYLE;
this._createHtml();
this._numFillers=0;
this._curFocusIndex=0;
this.tabGroupMember=this;
this._keyMapName=(this._style==DwtToolBar.HORIZ_STYLE)?DwtKeyMap.MAP_TOOLBAR_HORIZ:DwtKeyMap.MAP_TOOLBAR_VERT
};
DwtToolBar.PARAMS=["parent","className","posStyle","style","index","id"];
DwtToolBar.prototype=new DwtComposite;
DwtToolBar.prototype.constructor=DwtToolBar;
DwtToolBar.prototype.role="toolbar";
DwtToolBar.prototype.isDwtToolBar=true;
DwtToolBar.prototype.toString=function(){return"DwtToolBar"
};
DwtToolBar.HORIZ_STYLE=1;
DwtToolBar.VERT_STYLE=2;
DwtToolBar.FIRST_ITEM="ZFirstItem";
DwtToolBar.LAST_ITEM="ZLastItem";
DwtToolBar.SELECTED_NEXT=DwtControl.SELECTED+"Next";
DwtToolBar.SELECTED_PREV=DwtControl.SELECTED+"Prev";
DwtToolBar._NEXT_PREV_RE=new RegExp("\\b"+[DwtToolBar.SELECTED_NEXT,DwtToolBar.SELECTED_PREV].join("|")+"\\b","g");
DwtToolBar.prototype.TEMPLATE="dwt.Widgets#ZToolbar";
DwtToolBar.prototype.ITEM_TEMPLATE="dwt.Widgets#ZToolbarItem";
DwtToolBar.prototype.SEPARATOR_TEMPLATE="dwt.Widgets#ZToolbarSeparator";
DwtToolBar.prototype.SPACER_TEMPLATE="dwt.Widgets#ZToolbarSpacer";
DwtToolBar.prototype.FILLER_TEMPLATE="dwt.Widgets#ZToolbarFiller";
DwtToolBar.__itemCount=0;
DwtToolBar.prototype.dispose=function(){DwtComposite.prototype.dispose.call(this);
this._itemsEl=null;
this._prefixEl=null;
this._suffixEl=null
};
DwtToolBar.prototype.getItem=function(a){return this._children.get(a)
};
DwtToolBar.prototype.getItemCount=function(){return this._children.size()
};
DwtToolBar.prototype.getItems=function(){return this._children.getArray()
};
DwtToolBar.prototype.addSpacer=function(d,c){var a=new DwtToolBarSpacer({parent:this,index:c,className:d,toolbarItemTemplate:this.SPACER_TEMPLATE,id:this._htmlElId+"_spacer"+DwtToolBar.__itemCount});
return a
};
DwtToolBar.prototype.addSeparator=function(d,c){var a=new DwtToolBarSpacer({parent:this,index:c,className:d,toolbarItemTemplate:this.SEPARATOR_TEMPLATE,id:this._htmlElId+"_separator"+DwtToolBar.__itemCount});
return a
};
DwtToolBar.prototype.addFiller=function(d,a){var c=new DwtToolBarSpacer({parent:this,index:a,className:d,toolbarItemTemplate:this.FILLER_TEMPLATE,id:this._htmlElId+"_filler"+DwtToolBar.__itemCount});
return c
};
DwtToolBar.prototype.addChild=function(f,a){var d=this.getChild(a);
var e=d?d.getHtmlElement().parentNode:this._suffixEl;
DwtComposite.prototype.addChild.apply(this,arguments);
if(this._itemsEl){var c=this._createItemElement(f.toolbarItemTemplate);
this._itemsEl.insertBefore(c,e)
}f.reparentHtmlElement(c)
};
DwtToolBar.prototype.removeChild=function(c){var a=c.getHtmlElement().parentNode;
DwtComposite.prototype.removeChild.apply(this,arguments);
if(a&&a.parentNode){a.parentNode.removeChild(a)
}};
DwtToolBar.prototype.getKeyMapName=function(){return this._keyMapName
};
DwtToolBar.prototype.handleKeyAction=function(f,h){var e=this._curFocusIndex,d=this.getItemCount(),c=h&&h.target&&h.target.nodeName.toLowerCase()==="input"?h.target:null,i=c&&c.selectionStart,a=c&&c.value&&c.value.length;
if(d<2){return false
}switch(f){case DwtKeyMap.PREV:if(c&&i>0){h.forcePropagate=true;
return false
}else{if(e>0){this._moveFocus(true,h);
return true
}}break;
case DwtKeyMap.NEXT:if(c&&i<a){h.forcePropagate=true;
return false
}else{if(e<d-1){this._moveFocus(false);
return true
}}break;
default:var g=this._getCurrentFocusItem();
if(g){return g.handleKeyAction(f,h)
}}return true
};
DwtToolBar.prototype._createItemId=function(c){c=c||this._htmlElId;
var a=[c,"item",++DwtToolBar.__itemCount].join("_");
return a
};
DwtToolBar.prototype._createHtml=function(){var a={id:this._htmlElId};
this._createHtmlFromTemplate(this.TEMPLATE,a);
this._itemsEl=document.getElementById(a.id+"_items");
this._prefixEl=document.getElementById(a.id+"_prefix");
this._suffixEl=document.getElementById(a.id+"_suffix")
};
DwtToolBar.prototype._createItemElement=function(d){d=d||this.ITEM_TEMPLATE;
var e={id:this._htmlElId,itemId:this._createItemId()};
var c=AjxTemplate.expand(d,e);
var a=AjxStringUtil.calcDIV();
a.innerHTML=c;
return a.firstChild.rows[0].cells[0]
};
DwtToolBar.prototype.focus=function(a){this._setMenuKey();
a=a||this._getCurrentFocusItem();
if(a&&this._canFocusItem(a)){this._curFocusIndex=this.__getButtonIndex(a);
return a.focus()
}else{return this._moveFocus(false)
}};
DwtToolBar.prototype.blur=function(a){a=a||this._getCurrentFocusItem();
if(a&&a.blur){a.blur()
}};
DwtToolBar.prototype._canFocusItem=function(a){if(!a){return false
}if(!a.focus){return false
}if(a.isDwtToolBarSpacer){return false
}if(a.getEnabled&&!a.getEnabled()){return false
}if(a.getVisible&&!a.getVisible()){return false
}if(a.isDwtText&&!a.getText()){return false
}return true
};
DwtToolBar.prototype._getCurrentFocusItem=function(){return this.getItem(this._curFocusIndex)
};
DwtToolBar.prototype.getEnabled=function(){return this._children.some(function(a){return this._canFocusItem(a)
},this)
};
DwtToolBar.prototype._moveFocus=function(a){var c=this._curFocusIndex,d=this.getItemCount()-1,e=null,f=false;
c=a?c-1:c+1;
while(!f&&c>=0&&c<=d){e=this.getItem(c);
if(this._canFocusItem(e)){f=true
}c=a?c-1:c+1
}if(e&&f){this.blur();
this.focus(e)
}return e
};
DwtToolBar.prototype._setMenuKey=function(){if(!this._submenuKeySet){var c=this.shell.getKeyboardMgr();
if(c.isEnabled()){var a=c.__keyMapMgr;
if(a){if(this._style==DwtToolBar.HORIZ_STYLE){a.removeMapping(DwtKeyMap.MAP_BUTTON,"ArrowRight");
a.setMapping(DwtKeyMap.MAP_BUTTON,"ArrowDown",DwtKeyMap.SUBMENU)
}else{a.removeMapping(DwtKeyMap.MAP_BUTTON,"ArrowDown");
a.setMapping(DwtKeyMap.MAP_BUTTON,"ArrowRight",DwtKeyMap.SUBMENU)
}a.reloadMap(DwtKeyMap.MAP_BUTTON)
}}this._submenuKeySet=true
}};
DwtToolBar.prototype._childFocusListener=function(a){this._curFocusIndex=this.__getButtonIndex(a.dwtObj)
};
DwtToolBar.prototype.__markPrevNext=function(h,g){var a=this.__getButtonIndex(h);
var e=this.getChild(a-1);
var c=this.getChild(a+1);
if(g){if(e){Dwt.delClass(e.getHtmlElement(),DwtToolBar._NEXT_PREV_RE,DwtToolBar.SELECTED_PREV)
}if(c){Dwt.delClass(c.getHtmlElement(),DwtToolBar._NEXT_PREV_RE,DwtToolBar.SELECTED_NEXT)
}}else{if(e){Dwt.delClass(e.getHtmlElement(),DwtToolBar._NEXT_PREV_RE)
}if(c){Dwt.delClass(c.getHtmlElement(),DwtToolBar._NEXT_PREV_RE)
}}var f=this.getChild(0);
if(f){Dwt.addClass(f.getHtmlElement(),DwtToolBar.FIRST_ITEM)
}var d=this.getChild(this.getItemCount()-1);
if(d){Dwt.addClass(d.getHtmlElement(),DwtToolBar.LAST_ITEM)
}};
DwtToolBar.prototype.__getButtonIndex=function(d){var c=AjxUtil.isString(d)?DwtControl.fromElementId(d):d;
for(var a=0;
a<=this.getItemCount()-1;
a++){if(c===this.getItem(a)){return a
}}return -1
};
DwtToolBarButton=function(a){if(arguments.length==0){return
}var a=Dwt.getParams(arguments,DwtToolBarButton.PARAMS);
a.className=a.className||"ZToolbarButton";
DwtButton.call(this,a)
};
DwtToolBarButton.PARAMS=["parent","style","className","posStyle","actionTiming","id","index"];
DwtToolBarButton.prototype=new DwtButton;
DwtToolBarButton.prototype.constructor=DwtToolBarButton;
DwtToolBarButton.prototype.isDwtToolBarButton=true;
DwtToolBarButton.prototype.toString=function(){return"DwtToolBarButton"
};
DwtToolBarButton.prototype.TEMPLATE="dwt.Widgets#ZToolbarButton";
DwtToolBarSpacer=function(a){if(arguments.length==0){return
}this._noFocus=this.noTab=true;
this.toolbarItemTemplate=a.toolbarItemTemplate;
DwtControl.call(this,a)
};
DwtToolBarSpacer.prototype=new DwtControl;
DwtToolBarSpacer.prototype.constructor=DwtToolBarSpacer;
DwtToolBarSpacer.prototype.isDwtToolBarSpacer=true;
DwtToolBarSpacer.prototype.toString=function(){return"DwtToolBarSpacer"
};
DwtToolBarSpacer.prototype.role="separator"
}if(AjxPackage.define("ajax.dwt.widgets.DwtToolTip")){DwtToolTip=function(f,g,e){if(arguments.length==0){return
}this.shell=f;
this._dialog=e;
this._poppedUp=false;
this._div=document.createElement("div");
this._div.className=g||"DwtToolTip";
this._div.style.position=DwtControl.ABSOLUTE_STYLE;
this.shell.getHtmlElement().appendChild(this._div);
Dwt.setZIndex(this._div,Dwt.Z_HIDDEN);
Dwt.setLocation(this._div,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE);
this._eventMgr=new AjxEventMgr();
var d="dwt.Widgets#DwtToolTip";
this._div.innerHTML=AjxTemplate.expand(d);
var j=AjxTemplate.getParams(d);
this._offsetX=(j.width!=null)?Number(j.width):DwtToolTip.POPUP_OFFSET_X;
this._offsetY=(j.height!=null)?Number(j.height):DwtToolTip.POPUP_OFFSET_Y;
this._contentDiv=document.getElementById("tooltipContents");
Dwt.setHandler(this._div,DwtEvent.ONMOUSEOVER,AjxCallback.simpleClosure(this._mouseOverListener,this));
Dwt.setHandler(this._div,DwtEvent.ONMOUSEOUT,AjxCallback.simpleClosure(this._mouseOutListener,this));
var c=[DwtEvent.ONCLICK,DwtEvent.ONDBLCLICK,DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE,DwtEvent.ONMOUSEMOVE,DwtEvent.ONMOUSEUP,DwtEvent.ONMOUSEWHEEL,DwtEvent.ONSCROLL];
for(var a=0;
a<c.length;
a++){var h=c[a];
Dwt.setHandler(this._div,h,AjxCallback.simpleClosure(this.notifyListeners,this,[h]))
}};
DwtToolTip.prototype.isDwtToolTip=true;
DwtToolTip.prototype.toString=function(){return"DwtToolTip"
};
DwtToolTip.TOOLTIP_DELAY=750;
DwtToolTip.WINDOW_GUTTER=5;
DwtToolTip.POPUP_OFFSET_X=5;
DwtToolTip.POPUP_OFFSET_Y=5;
DwtToolTip.prototype.getContent=function(){return this._div.innerHTML
};
DwtToolTip.prototype.setContent=function(c,a){this._content=c;
if(a){this._contentDiv.innerHTML=this._content
}};
DwtToolTip.prototype.popup=function(a,h,c,d,e,g,f){this._hovered=false;
if(this._popupAction){AjxTimedAction.cancelAction(this._popupAction);
this._popupAction=null
}this._popdownOnMouseOver=d;
this._popdownListener=f;
if(this._content!=null){if(!c){this._contentDiv.innerHTML=this._content
}this._popupAction=new AjxTimedAction(this,this._positionElement,[a,h,e,g]);
AjxTimedAction.scheduleAction(this._popupAction,5)
}};
DwtToolTip.prototype.setSticky=function(a){this._poppedUp=!a
};
DwtToolTip.prototype.popdown=function(){this._popdownOnMouseOver=false;
this._hovered=false;
if(this._popupAction){AjxTimedAction.cancelAction(this._popupAction);
this._popupAction=null
}if(this._content!=null&&this._poppedUp){Dwt.setLocation(this._div,Dwt.LOC_NOWHERE,Dwt.LOC_NOWHERE);
this._poppedUp=false;
if(this._popdownListener instanceof AjxCallback){this._popdownListener.run()
}this._popdownListener=null
}};
DwtToolTip.prototype._positionElement=function(h,g,f,i){this._popupAction=null;
var d=DwtShell.getShell(window).getSize();
var c=d.x,o=d.y;
var p,n,a;
var q=f&&f.getTooltipBase(i);
if(q){a=Dwt.toWindow(q);
var e=Dwt.getSize(q);
p=a.x+this._offsetX;
n=a.y+e.y+this._offsetY
}else{p=h+this._offsetX;
n=g+this._offsetY
}var l=Dwt.getSize(this._div);
var m=l.x,j=l.y;
if(p+m>c-DwtToolTip.WINDOW_GUTTER){p=c-DwtToolTip.WINDOW_GUTTER-m
}if(n+j>o-DwtToolTip.WINDOW_GUTTER){n=(a?a.y:n)-this._offsetY-j
}Dwt.setLocation(this._div,p,n);
var k=this._dialog?this._dialog.getZIndex()+Dwt._Z_INC:Dwt.Z_TOOLTIP;
Dwt.setZIndex(this._div,k);
this._poppedUp=true
};
DwtToolTip.prototype._mouseOverListener=function(a){this._hovered=true;
if(this._popdownOnMouseOver&&this._poppedUp){var c=(this._popdownOnMouseOver.isAjxCallback||AjxUtil.isFunction(this._popdownOnMouseOver))?this._popdownOnMouseOver:null;
this.popdown();
if(c){c.run()
}}this.notifyListeners(DwtEvent.ONMOUSEOVER)
};
DwtToolTip.prototype._mouseOutListener=function(d){d=DwtUiEvent.getEvent(d,this._div);
var a=Dwt.toWindow(this._div);
var c=Dwt.getSize(this._div);
if(d.clientX<=a.x||d.clientX>=(a.x+c.x)||d.clientY<=a.y||d.clientY>=(a.y+c.y)){this.popdown();
this.notifyListeners(DwtEvent.ONMOUSEOUT)
}};
DwtToolTip.prototype.getHovered=function(){return this._hovered
};
DwtToolTip.prototype.addListener=function(c,d,a){return this._eventMgr.addListener(c,d,a)
};
DwtToolTip.prototype.setListener=function(c,d,a){this.removeAllListeners(c);
return this._eventMgr.addListener(c,d,a)
};
DwtToolTip.prototype.removeListener=function(a,c){return this._eventMgr.removeListener(a,c)
};
DwtToolTip.prototype.removeAllListeners=function(a){return this._eventMgr.removeAll(a)
};
DwtToolTip.prototype.isListenerRegistered=function(a){return this._eventMgr.isListenerRegistered(a)
};
DwtToolTip.prototype.notifyListeners=function(a,c){return this._eventMgr.notifyListeners(a,c)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtText")){DwtText=function(a){if(arguments.length==0){return
}a=Dwt.getParams(arguments,DwtText.PARAMS);
a.className=a.className||"DwtText";
if(Dwt.hasClass(a,"FakeAnchor")){this.role="link"
}DwtControl.call(this,a);
this.noTab=true
};
DwtText.PARAMS=["parent","className","posStyle"];
DwtText.prototype=new DwtControl;
DwtText.prototype.constructor=DwtText;
DwtText.prototype.isDwtText=true;
DwtText.prototype.toString=function(){return"DwtText"
};
DwtText.prototype.setText=function(c){this.noTab=!c;
if(!this._textNode){this._textNode=document.createTextNode(c);
this.getHtmlElement().appendChild(this._textNode)
}else{try{this._textNode.data=c
}catch(a){}}this.setAttribute("aria-label",c)
};
DwtText.prototype.getText=function(){return this._textNode?this._textNode.data:""
};
DwtText.prototype.getTextNode=function(){return this._textNode
};
DwtText.prototype._focus=function(){this.setDisplayState(DwtControl.FOCUSED)
};
DwtText.prototype._blur=function(){this.setDisplayState(DwtControl.NORMAL)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtIframe")){DwtIframe=function(e){e.posStyle=e.posStyle||DwtControl.STATIC_STYLE;
e.className=e.className||"DwtIframe";
DwtControl.call(this,e);
this._styles=e.styles;
this._noscroll=e.noscroll;
this._iframeID=e.id?DwtId.getIframeId(e.id):Dwt.getNextId();
this._onLoadHandler=e.onload;
this._processHtmlCallback=e.processHtmlCallback;
this._hidden=e.hidden;
this._title=e.title;
if(!this._createFrame(e.html)){this.initFailed=true;
return
}if(e.useKbMgmt){var c=this.getIframe();
var a=Dwt.getIframeDoc(c);
var d=AjxEnv.isIE?a:c.contentWindow;
Dwt.setHandler(d,DwtEvent.ONKEYDOWN,DwtKeyboardMgr.__keyDownHdlr);
Dwt.setHandler(d,DwtEvent.ONKEYUP,DwtKeyboardMgr.__keyUpHdlr);
Dwt.setHandler(d,DwtEvent.ONKEYPRESS,DwtKeyboardMgr.__keyPressHdlr)
}};
DwtIframe.prototype=new DwtControl;
DwtIframe.prototype.constructor=DwtIframe;
DwtIframe.prototype.isDwtIframe=true;
DwtIframe.prototype.toString=function(){return"DwtIframe"
};
DwtIframe.prototype.getIframe=function(){return document.getElementById(this._iframeID)
};
DwtIframe.prototype.getInputElement=function(){return this.getIframe()
};
DwtIframe.prototype.getDocument=function(){return this.getIframe().contentWindow.document
};
DwtIframe.prototype._rawEventHandler=function(h){var d=this.getIframe();
var e=d.contentWindow;
if(AjxEnv.isIE){h=e.event
}var a;
if(/mouse|context|click|select/i.test(h.type)){a=new DwtMouseEvent(true)
}else{a=new DwtUiEvent(true)
}a.setFromDhtmlEvent(h);
if(h.type=="mousedown"||h.type=="mousewheel"){DwtOutsideMouseEventMgr.forwardEvent(h)
}var f=a.type.toLowerCase();
if(!/^on/.test(f)){f="on"+f
}var g=this.getLocation();
if(!AjxEnv.isIE){var i=e.document;
var c=i.documentElement.scrollLeft||(i.body?i.body.scrollLeft:0);
var l=i.documentElement.scrollTop||(i.body?i.body.scrollTop:0);
g.x-=c;
g.y-=l
}a.docX+=g.x;
a.docY+=g.y;
a.elementX+=g.x;
a.elementY+=g.y;
var k=DwtMouseEventCapture.getCaptureObj();
k=k&&a.button!=DwtMouseEvent.RIGHT;
if(AjxEnv.isIE||!k){if(f===DwtEvent.ONFOCUS||f===DwtEvent.ONBLUR){DwtControl.__HANDLER[f].call(null,a,f,this.parent)
}else{DwtEventManager.notifyListeners(f,a);
this.parent.notifyListeners(f,a)
}}else{var j=document.createEvent("MouseEvents");
j.initMouseEvent(h.type,true,true,document.defaultView,0,h.screenX,h.screenY,a.docX,a.docY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget);
document.body.dispatchEvent(j)
}a.setToDhtmlEvent(h);
return a._returnValue
};
DwtIframe._forwardEvents=[DwtEvent.ONCHANGE,DwtEvent.ONCLICK,DwtEvent.ONCONTEXTMENU,DwtEvent.ONDBLCLICK,DwtEvent.ONFOCUS,DwtEvent.ONKEYDOWN,DwtEvent.ONKEYPRESS,DwtEvent.ONKEYUP,DwtEvent.ONMOUSEDOWN,DwtEvent.ONMOUSEENTER,DwtEvent.ONMOUSELEAVE,DwtEvent.ONMOUSEMOVE,DwtEvent.ONMOUSEOUT,DwtEvent.ONMOUSEOVER,DwtEvent.ONMOUSEUP,DwtEvent.ONSELECTSTART];
DwtIframe.prototype._createFrame=function(c){var a=this.getHTMLElId();
function d(g){var f=document.getElementById(a);
var e=DwtControl.findControl(f);
return e._rawEventHandler(g)
}return(function(){var l,k=[],j=0,e;
var g=document.getElementById(a);
var f=DwtControl.findControl(g);
if(!f){return false
}k[j++]="<iframe";
if(f._noscroll){k[j++]=" scrolling='no'"
}if(f._hidden){k[j++]=" style='visibility:hidden'"
}if(f._title){k[j++]=" title='"+AjxStringUtil.encodeQuotes(AjxStringUtil.htmlEncode(f._title))+"'"
}k[j++]=" frameborder='0' width='100%' id='";
k[j++]=f._iframeID;
k[j++]="' name='"+f._iframeID+"'";
if(f._onLoadHandler){k[j++]=" onload='"+f._onLoadHandler+"'"
}k[j++]=" src='about:blank' ></iframe>";
f.setContent(k.join(""));
c=c.replace(/(<style[^>]*>)[\s\t\u00A0]*((.|\n)*?)[\s\t\u00A0]*<\x2fstyle>/mgi,function(i,o,n){return o+n.replace(/@import.*?(;|[\s\t\u00A0]*$)/gi,"")+"</style>"
});
c=AjxStringUtil.checkForCleanHtml(c,ZmMailMsgView.TRUSTED_TAGS,ZmMailMsgView.UNTRUSTED_ATTRS).html;
l=f.getIframe();
e=Dwt.getIframeDoc(l);
e.open();
if(f._styles){e.write(["<style type='text/css'>",f._styles,"</style>"].join(""))
}e.write(c);
e.close();
if(f._processHtmlCallback){f._processHtmlCallback.run(e)
}k=e.documentElement.style;
k.margin=k.padding="0";
if(e.body){e.body.style.margin="0"
}var m=e.firstChild&&e.firstChild.tagName&&e.firstChild.tagName.toLowerCase()==="html"?e.firstChild:null,h=m&&m.getAttribute("lang");
if(m&&!h){m.setAttribute("lang",window.appLang)
}k=DwtIframe._forwardEvents;
if(!AjxEnv.isIE){e=l.contentWindow
}for(j=k.length;
--j>=0;
){e[k[j]]=d
}return true
})()
};
DwtIframe.prototype._resetEventHandlers=function(){var a=this;
function c(d){return a._rawEventHandler(d)
}(function(){var g,f=[],e=0,d;
g=a.getIframe();
d=Dwt.getIframeDoc(g);
f=DwtIframe._forwardEvents;
if(!AjxEnv.isIE){d=g.contentWindow
}for(e=f.length;
--e>=0;
){d[f[e]]=c
}})()
};
DwtIframe.prototype.setSrc=function(c){c=c||'javascript:"";';
var a=this.getIframe();
a.src=c
};
DwtIframe.prototype.setIframeContent=function(a){var c=this.getDocument();
if(c.body){c.body.innerHTML=a
}}
}if(AjxPackage.define("ajax.dwt.widgets.DwtSpinner")){DwtSpinner=function(a){if(arguments.length==0){return
}DwtControl.call(this,{parent:a.parent,className:a.className,posStyle:a.posStyle,parentElement:a.parentElement});
this._maxValue=a.max!=null?a.max:null;
this._minValue=a.min!=null?a.min:null;
this._fieldSize=a.size!=null?a.size:3;
this._origValue=a.value||0;
this._maxLen=a.maxLen||null;
this._step=a.step||1;
this._decimals="decimals" in a?a.decimals:0;
this._align=a.align||null;
this._timerFunc=AjxCallback.simpleClosure(this._timerFunc,this);
this._btnPressCapture=new DwtMouseEventCapture({targetObj:this,id:"DwtSpinner",mouseUpHdlr:AjxCallback.simpleClosure(this._stopCapture,this)});
this._createElements()
};
DwtSpinner.prototype=new DwtControl;
DwtSpinner.prototype.constructor=DwtSpinner;
DwtSpinner.INIT_TIMER=250;
DwtSpinner.SLOW_TIMER=125;
DwtSpinner.FAST_TIMER=33;
DwtSpinner.prototype._createElements=function(){var g=this.getHtmlElement();
var f=Dwt.getNextId();
this._idField=f;
this._idUpButton=f+"-up";
this._idDownButton=f+"-down";
var e=["<table class='DwtSpinner' cellspacing='0' cellpadding='0'>","<tr><td rowspan='2' class='DwtSpinner-inputCell'>","<input id='",f,"' autocomplete='off' />","</td>","<td unselectable id='",this._idUpButton,"' class='DwtSpinner-upBtn'><div class='ImgUpArrowSmall'>&nbsp;</div></td>","</tr><tr>","<td unselectable id='",this._idDownButton,"' class='DwtSpinner-downBtn'><div class='ImgDownArrowSmall'>&nbsp;</div></td>","</tr></table>"];
g.innerHTML=e.join("");
var d=this._getUpButton();
d.onmousedown=AjxCallback.simpleClosure(this._btnPressed,this,"Up");
var c=this._getDownButton();
c.onmousedown=AjxCallback.simpleClosure(this._btnPressed,this,"Down");
var a=this.getInputElement();
if(this._maxLen){a.maxLength=this._maxLen
}if(this._fieldSize){a.size=this._fieldSize
}if(this._align){a.style.textAlign=this._align
}if(this._origValue!=null){this.setValue(this._origValue)
}a.onblur=AjxCallback.simpleClosure(this.setValue,this,null);
a[(AjxEnv.isIE||AjxEnv.isOpera)?"onkeydown":"onkeypress"]=AjxCallback.simpleClosure(this.__onKeyPress,this)
};
DwtSpinner.prototype._getValidValue=function(a){var c=parseFloat(a);
if(isNaN(c)||c==null){c=this._lastValidValue
}if(c==null){c=this._minValue||0
}if(this._minValue!=null&&c<this._minValue){c=this._minValue
}if(this._maxValue!=null&&c>this._maxValue){c=this._maxValue
}c=parseFloat(c);
if(this._decimals!=null){c=c.toFixed(this._decimals)
}this._lastValidValue=c;
return c
};
DwtSpinner.prototype.getInputElement=function(){return document.getElementById(this._idField)
};
DwtSpinner.prototype._getUpButton=function(){return document.getElementById(this._idUpButton)
};
DwtSpinner.prototype._getDownButton=function(){return document.getElementById(this._idDownButton)
};
DwtSpinner.prototype._getButton=function(a){switch(a){case"Up":return this._getUpButton();
case"Down":return this._getDownButton()
}};
DwtSpinner.prototype._setBtnState=function(a,d){var c=this._getButton(a);
if(d){Dwt.addClass(c,"DwtSpinner-"+a+"-disabled");
c.firstChild.className="Img"+a+"ArrowSmallDis"
}else{Dwt.delClass(c,"DwtSpinner-"+a+"-disabled");
c.firstChild.className="Img"+a+"ArrowSmall"
}};
DwtSpinner.prototype.getValue=function(){return parseFloat(this._getValidValue(this.getInputElement().value))
};
DwtSpinner.prototype.setValue=function(a){if(a==null){a=this.getInputElement().value
}a=this._getValidValue(a);
this.getInputElement().value=a;
a=parseFloat(a);
this._setBtnState("Down",this._minValue!=null&&this._minValue==a);
this._setBtnState("Up",this._maxValue!=null&&this._maxValue==a)
};
DwtSpinner.prototype.setEnabled=function(a){DwtControl.prototype.setEnabled.call(this,a);
this.getInputElement().disabled=!a;
var c=this.getHtmlElement().firstChild;
if(!a){Dwt.addClass(c,"DwtSpinner-disabled")
}else{Dwt.delClass(c,"DwtSpinner-disabled")
}};
DwtSpinner.prototype._rotateVal=function(a){var c=this.getValue();
switch(a){case"Up":c+=this._step;
break;
case"Down":c-=this._step;
break
}this.setValue(c)
};
DwtSpinner.prototype._btnPressed=function(a){if(!this.getEnabled()){return
}Dwt.addClass(this._getButton(a),"DwtSpinner-"+a+"-pressed");
this._direction=a;
this._rotateVal(a);
this._btnPressCapture.capture();
this._timerSteps=0;
this._timer=setTimeout(this._timerFunc,DwtSpinner.INIT_TIMER)
};
DwtSpinner.prototype._timerFunc=function(){var d=this.getValue();
this._rotateVal(this._direction);
var c=this.getValue();
this._timerSteps++;
var a=this._timerSteps>4?DwtSpinner.FAST_TIMER:DwtSpinner.SLOW_TIMER;
if(d!=c){this._timer=setTimeout(this._timerFunc,a)
}else{this._stopCapture()
}};
DwtSpinner.prototype._stopCapture=function(){if(this._timer){clearTimeout(this._timer)
}this._timer=null;
this._timerSteps=null;
var c=this._direction;
Dwt.delClass(this._getButton(c),"DwtSpinner-"+c+"-pressed");
this._direction=null;
this._btnPressCapture.release();
var a=this.getInputElement();
a.focus();
Dwt.setSelectionRange(a,0,a.value.length)
};
DwtSpinner.prototype.__onKeyPress=function(d){if(AjxEnv.isIE){d=window.event
}var c=null;
switch(d.keyCode){case 38:c="Up";
break;
case 40:c="Down";
break
}if(c){this._rotateVal(c);
var a=this.getInputElement();
Dwt.setSelectionRange(a,0,a.value.length)
}};
DwtSpinner.prototype.focus=function(){this.getInputElement().focus()
};
DwtSpinner.prototype.select=function(){var a=this.getInputElement();
a.focus();
Dwt.setSelectionRange(a,0,a.value.length)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtColorPicker")){DwtColorPicker=function(a){if(arguments.length==0){return
}a=Dwt.getParams(arguments,DwtColorPicker.PARAMS);
a.className=a.className||"DwtColorPicker";
DwtComposite.call(this,a);
this._hideNoFill=a.hideNoFill;
this._noFillLabel=a.noFillLabel;
this._allowColorInput=a.allowColorInput;
this._defaultColor=a.defaultColor||"#000000";
this._createHtml()
};
DwtColorPicker.prototype=new DwtComposite;
DwtColorPicker.prototype.constructor=DwtColorPicker;
DwtColorPicker.prototype.toString=function(){return"DwtColorPicker"
};
DwtColorPicker.PARAMS=["parent","className","posStyle","noFillLabel","allowColorInput","defaultColor"];
DwtColorPicker._RGB_RE=/^rgb\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)$/;
DwtColorPicker._HEX_RE=/^\#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i;
DwtColorPicker.prototype.TEMPLATE="dwt.Widgets#DwtColorPicker";
DwtColorPicker.prototype.addSelectionListener=function(a){this.addListener(DwtEvent.SELECTION,a)
};
DwtColorPicker.prototype.removeSelectionListener=function(a){this.removeListener(DwtEvent.SELECTION,a)
};
DwtColorPicker.prototype.dispose=function(){if(this._disposed){return
}DwtControl.prototype.dispose.call(this)
};
DwtColorPicker.prototype._createHtml=function(a){this._createHtmlFromTemplate(a||this.TEMPLATE,{id:this.getHtmlElement().id})
};
DwtColorPicker.prototype._createHtmlFromTemplate=function(c,g){g.allowColorInput=this._allowColorInput;
g.hideNoFill=this._hideNoFill;
g.noFillLabel=this._noFillLabel;
DwtComposite.prototype._createHtmlFromTemplate.apply(this,arguments);
if(g.allowColorInput){var n=document.getElementById(g.id+"_input");
var j={parent:this,validationStyle:DwtInputField.CONTINUAL_VALIDATION,errorIconStyle:DwtInputField.ERROR_ICON_RIGHT,validator:DwtColorPicker.__isValidInputValue};
var m=this._colorInput=new DwtInputField(j);
m.replaceElement(n);
var e=new AjxCallback(this,this._updatePreview);
m.setValidationCallback(e);
var l=this._error=new DwtLabel({parent:this});
var a=document.getElementById(g.id+"_error");
l.replaceElement(a);
l.setVisible(false);
this._preview=document.getElementById(g.id+"_preview");
var k=document.getElementById(g.id+"_button");
var h=new DwtButton({parent:this});
h.setText(AjxMsg.setColor);
h.replaceElement(k);
h.addSelectionListener(new AjxListener(this,this._handleSetColor))
}var k=document.getElementById(g.id+"_default");
if(k){if(!DwtColorPicker.Button){DwtColorPicker.__defineClasses()
}var h=this._defaultColorButton=new DwtColorPicker.Button({parent:this});
h.setText(g.noFillLabel||AjxMsg.colorsUseDefault);
h.replaceElement(k);
h.addSelectionListener(new AjxListener(this,this._handleColorSelect,[0]))
}var f=document.getElementById(g.id+"_colors");
var d=AjxEnv.isIE?DwtEvent.ONMOUSEENTER:DwtEvent.ONMOUSEOVER;
var i=AjxEnv.isIE?DwtEvent.ONMOUSELEAVE:DwtEvent.ONMOUSEOUT;
Dwt.setHandler(f,DwtEvent.ONMOUSEDOWN,AjxCallback.simpleClosure(this._handleMouseDown,this));
Dwt.setHandler(f,DwtEvent.ONMOUSEUP,AjxCallback.simpleClosure(this._handleMouseUp,this));
Dwt.setHandler(f,d,AjxCallback.simpleClosure(this._handleMouseOver,this));
Dwt.setHandler(f,i,AjxCallback.simpleClosure(this._handleMouseOut,this))
};
DwtColorPicker.prototype._handleMouseOver=function(a){var c=DwtUiEvent.getEvent(a);
var d=DwtUiEvent.getTarget(c);
if(!Dwt.hasClass(d,"Color")){return
}this._handleMouseOut(a);
Dwt.addClass(d,DwtControl.HOVER);
this._mouseOverEl=d
};
DwtColorPicker.prototype._handleMouseOut=function(a){if(this._mouseOverEl){Dwt.delClass(this._mouseOverEl,DwtControl.HOVER)
}this._mouseOverEl=null
};
DwtColorPicker.prototype._handleMouseDown=function(a){var c=DwtUiEvent.getEvent(a);
var d=DwtUiEvent.getTarget(c);
this._mouseDownEl=Dwt.hasClass(d,"Color")?d:null
};
DwtColorPicker.prototype._handleMouseUp=function(a){var c=DwtUiEvent.getEvent(a);
var e=DwtUiEvent.getTarget(c);
if(this._mouseDownEl!=e){return
}var d=DwtCssStyle.getProperty(e,"background-color");
this._handleColorSelect(DwtColorPicker.__color2hex(d))
};
DwtColorPicker.prototype._handleSetColor=function(a){var c=this._colorInput.getValue();
if(c){c=DwtColorPicker.__color2hex(c);
if(!c){return
}this._handleColorSelect(c)
}};
DwtColorPicker.prototype._handleColorSelect=function(a){this._inputColor=a;
if(this.parent instanceof DwtMenu){DwtMenu.closeActiveMenu()
}if(this.isListenerRegistered(DwtEvent.SELECTION)){var c=DwtShell.selectionEvent;
c.item=this;
c.detail=this._inputColor;
this.notifyListeners(DwtEvent.SELECTION,c)
}};
DwtColorPicker.prototype.getInputColor=function(){return this._inputColor
};
DwtColorPicker.prototype.setDefaultColor=function(a){if(this._defaultColorButton){this._defaultColorButton.setDefaultColor(a)
}};
DwtColorPicker.__color2hex=function(d){if(d=="white"){return"#FFFFFF"
}if(d=="black"){return"#000000"
}var a=d&&d.match(DwtColorPicker._RGB_RE);
if(a){for(var c=1;
c<=3;
c++){if(parseInt(a[c])>255){return""
}}return AjxColor.color(a[1],a[2],a[3])
}a=d&&d.match(DwtColorPicker._HEX_RE);
if(a){return d
}return""
};
DwtColorPicker.__isValidInputValue=function(a){if(!a){return a
}var c=DwtColorPicker.__color2hex(a);
if(!c){throw AjxMsg.colorFormatError
}return a
};
DwtColorPicker.prototype._updatePreview=function(d,c,a){if(c){a=DwtColorPicker.__color2hex(a);
Dwt.setVisible(this._preview,true);
this._preview.style.backgroundColor=a;
this._error.setVisible(false)
}else{Dwt.setVisible(this._preview,false);
this._error.setVisible(true);
this._error.setText(AjxMsg.colorFormatError)
}};
DwtColorPicker.__defineClasses=function(){DwtColorPicker.Button=function(a){a.className=a.className||"DwtColorPickerButton";
DwtButton.call(this,a);
this._colorDiv=document.getElementById(this.getHtmlElement().id+"_color")
};
DwtColorPicker.Button.prototype=new DwtButton;
DwtColorPicker.Button.prototype.constructor=DwtColorPicker.Button;
DwtColorPicker.Button.prototype.setDefaultColor=function(a){this._colorDiv.style.backgroundColor=(a===null)?"":a
};
DwtColorPicker.Button.prototype.toString=function(){return"DwtColorPickerButton"
};
DwtColorPicker.Button.prototype.TEMPLATE="dwt.Widgets#DwtColorPickerButton"
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtButtonColorPicker")){DwtButtonColorPicker=function(d){if(arguments.length==0){return
}d=Dwt.getParams(arguments,DwtButtonColorPicker.PARAMS);
d.actionTiming=DwtButton.ACTION_MOUSEUP;
DwtButton.call(this,d);
var a=new DwtMenu({parent:this,style:DwtMenu.COLOR_PICKER_STYLE});
this.setMenu(a);
var c=new DwtColorPicker(a,null,null,d.noFillLabel,d.allowColorInput);
c.addSelectionListener(new AjxListener(this,this._colorPicked));
this.__colorPicker=c;
this.__color=""
};
DwtButtonColorPicker.PARAMS=["parent","style","className","posStyle","id","index","noFillLabel","allowColorInput"];
DwtButtonColorPicker.prototype=new DwtButton;
DwtButtonColorPicker.prototype.constructor=DwtButtonColorPicker;
DwtButtonColorPicker._RGB_RE=/rgb\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)/;
DwtButtonColorPicker._hexdigits=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];
DwtButtonColorPicker.toHex=function(f,c){var a=[];
while(f){var e=DwtButtonColorPicker._hexdigits[f&15];
a.push(e);
f=f>>4
}if(c!=null){c-=a.length;
while(c-->0){a.push("0")
}}a.reverse();
return a.join("")
};
DwtButtonColorPicker.prototype.showColorDisplay=function(a){if(!this._colorEl){return
}if(!a){this._colorEl.onmouseover=DwtButtonColorPicker.__colorDisplay_onMouseOver;
this._colorEl.onmouseout=DwtButtonColorPicker.__colorDisplay_onMouseOut;
this._colorEl.onmousedown=DwtButtonColorPicker.__colorDisplay_onMouseDown
}};
DwtButtonColorPicker.prototype.getColor=function(){return this.__color
};
DwtButtonColorPicker.prototype.setColor=function(a){var c=a.match(DwtButtonColorPicker._RGB_RE);
if(c){a="#"+DwtButtonColorPicker.toHex(parseInt(c[1]),2)+DwtButtonColorPicker.toHex(parseInt(c[2]),2)+DwtButtonColorPicker.toHex(parseInt(c[3]),2)
}this.__color=a;
var d=this._colorEl;
if(d){d.style.backgroundColor=a
}};
DwtButtonColorPicker.prototype._createHtmlFromTemplate=function(c,d){DwtButton.prototype._createHtmlFromTemplate.call(this,c,d);
var a=AjxTemplate.expand("dwt.Widgets#ZButtonColorDisplay",d);
this.setText(a);
this._colorEl=document.getElementById(d.id+"_color")
};
DwtButtonColorPicker.prototype._setMinWidth=function(){};
DwtButtonColorPicker.prototype._colorPicked=function(d){var a=d.detail||"#000000";
this.__color=this.__detail=a;
var c=this._colorEl;
if(c){c.style.backgroundColor=a
}if(this.isListenerRegistered(DwtEvent.SELECTION)){var e=DwtShell.selectionEvent;
e.item=this;
e.detail=a;
this.notifyListeners(DwtEvent.SELECTION,e)
}};
DwtButtonColorPicker.prototype.__colorDisplay_onMouseOver=function(a,c){if(!this.getEnabled()){return
}Dwt.addClass(c,"ImgDisable")
};
DwtButtonColorPicker.prototype.__colorDisplay_onMouseOut=function(a,c){if(!this.getEnabled()){return
}Dwt.delClass(c,"ImgDisable")
};
DwtButtonColorPicker.prototype.__colorDisplay_onMouseDown=function(c,e){if(!this.getEnabled()){return
}var a=DwtShell.mouseEvent;
a.setFromDhtmlEvent(c);
this.__color=this.__detail=e.style.backgroundColor="";
if(this.isListenerRegistered(DwtEvent.SELECTION)){var d=DwtShell.selectionEvent;
d.item=this;
d.detail="";
this.notifyListeners(DwtEvent.SELECTION,d)
}a._stopPropagation=true;
a._returnValue=false;
a.setToDhtmlEvent(c);
return false
};
DwtButtonColorPicker.__colorDisplay_onMouseOver=function(a){var c=DwtControl.getTargetControl(a);
c.__colorDisplay_onMouseOver(a,this)
};
DwtButtonColorPicker.__colorDisplay_onMouseOut=function(a){var c=DwtControl.getTargetControl(a);
c.__colorDisplay_onMouseOut(a,this)
};
DwtButtonColorPicker.__colorDisplay_onMouseDown=function(a){var c=DwtControl.getTargetControl(a);
c.__colorDisplay_onMouseDown(a,this)
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtChooser")){DwtChooser=function(d){if(arguments.length==0){return
}DwtComposite.call(this,d.parent,d.className);
this._slvClassName=d.slvClassName;
this._tlvClassName=d.tlvClassName;
this._layoutStyle=d.layoutStyle?d.layoutStyle:DwtChooser.HORIZ_STYLE;
this._selectStyle=d.selectStyle?d.selectStyle:DwtChooser.MULTI_SELECT;
this._mode=d.listStyle?d.listStyle:DwtChooser.MODE_MOVE;
this._noDuplicates=(d.noDuplicates!==false);
this._singleHeight=d.singleHeight?d.singleHeight:45;
this._listSize=d.listSize;
this._sourceEmptyOk=d.sourceEmptyOk;
this._allButtons=d.allButtons;
this._hasTextField=d.hasTextField;
this._handleButtonInfo(d.buttonInfo);
this._mode=d.mode?d.mode:this._hasMultiButtons?DwtChooser.MODE_COPY:DwtChooser.MODE_MOVE;
this._createHtml();
this._initialize();
var c=d.parent.getSize();
var e=d.listWidth||c.x;
var a=d.listHeight||c.y;
if(e&&a){this.resize(e,a)
}};
DwtChooser.prototype=new DwtComposite;
DwtChooser.prototype.constructor=DwtChooser;
DwtChooser.prototype.isFocusable=true;
DwtChooser.prototype.role="listbox";
DwtChooser.HORIZ_STYLE=1;
DwtChooser.VERT_STYLE=2;
DwtChooser.SINGLE_SELECT=1;
DwtChooser.MULTI_SELECT=2;
DwtChooser.MODE_COPY=1;
DwtChooser.MODE_MOVE=2;
DwtChooser.REMOVE_BTN_ID="__remove__";
DwtChooser.ADD_ALL_BTN_ID="__addAll__";
DwtChooser.REMOVE_ALL_BTN_ID="__removeAll__";
DwtChooser.prototype.toString=function(){return"DwtChooser"
};
DwtChooser.prototype.setItems=function(c,a,d){a=a?a:DwtChooserListView.SOURCE;
this._reset(a);
this.addItems(c,a,true);
this._selectFirst(a);
if(d){this._reset((a==DwtChooserListView.SOURCE)?DwtChooserListView.TARGET:DwtChooserListView.SOURCE)
}};
DwtChooser.prototype.getItems=function(a){a=a?a:DwtChooserListView.TARGET;
if(a==DwtChooserListView.SOURCE){return this.sourceListView.getList().clone()
}else{if(this._hasMultiButtons){var d={};
for(var c in this._data){d[c]=this._data[c].clone()
}return d
}else{return this._data[this._buttonInfo[0].id].clone()
}}};
DwtChooser.prototype.addItems=function(c,a,e,h){a=a?a:DwtChooserListView.SOURCE;
var g=(c instanceof AjxVector)?c.getArray():(c instanceof Array)?c:[c];
if(a==DwtChooserListView.SOURCE){for(var d=0;
d<g.length;
d++){this._addToSource(g[d],null,e)
}}else{var f;
if(this._selectStyle==DwtChooser.SINGLE_SELECT){this.targetListView._resetList();
g=(g.length>0)?[g[0]]:g
}for(var d=0;
d<g.length;
d++){this._addToTarget(g[d],h,e)
}}if(a==DwtChooserListView.SOURCE){var g=this.sourceListView.getList();
this._sourceSize=g?g.size():0
}};
DwtChooser.prototype.removeItems=function(e,a,d){e=(e instanceof AjxVector)?e.getArray():(e instanceof Array)?e:[e];
for(var c=0;
c<e.length;
c++){(a==DwtChooserListView.SOURCE)?this._removeFromSource(e[c],d):this._removeFromTarget(e[c],d)
}};
DwtChooser.prototype.transfer=function(c,e,a){e=e?e:this._activeButtonId;
this._setActiveButton(e);
if(this._mode==DwtChooser.MODE_MOVE){if(this._selectStyle==DwtChooser.SINGLE_SELECT){var d=this.targetListView.getList();
if(d&&d.size()){this.remove(d,true)
}}this.removeItems(c,DwtChooserListView.SOURCE,true)
}this.addItems(c,DwtChooserListView.TARGET,a);
this.sourceListView.deselectAll()
};
DwtChooser.prototype.remove=function(e,d){e=(e instanceof AjxVector)?e.getArray():(e instanceof Array)?e:[e];
if(this._mode==DwtChooser.MODE_MOVE){for(var c=0;
c<e.length;
c++){var a=this._getInsertionIndex(this.sourceListView,e[c]);
this.sourceListView.addItem(e[c],a,true)
}this._sourceSize=e?e.length:0
}this.removeItems(e,DwtChooserListView.TARGET)
};
DwtChooser.prototype.setSelectStyle=function(e,h){if(e==this._selectStyle){return
}this._selectStyle=e;
if(this._defLabel){var d=this._button[this._buttonInfo[0].id];
d.setText((e==DwtChooser.SINGLE_SELECT)?AjxMsg.select:AjxMsg.add)
}if(!h){var f=this.getSize();
this.resize(f.x,f.y)
}if(this._allButtons){this._addAllButton.setVisible(e==DwtChooser.MULTI_SELECT);
this._removeAllButton.setVisible(e==DwtChooser.MULTI_SELECT);
this._enableButtons()
}if(e==DwtChooser.SINGLE_SELECT){var g=this.targetListView.getList();
var c=g?g.clone().getArray():null;
if(c&&c.length){this._reset(DwtChooserListView.TARGET);
this.addItems(c[0],DwtChooserListView.TARGET,true);
this.targetListView.deselectAll();
if(c.length>1&&this._mode==DwtChooser.MODE_MOVE){this.addItems(c.slice(1),DwtChooserListView.SOURCE,true)
}this._enableButtons()
}}this.sourceListView.setMultiSelect(e==DwtChooser.MULTI_SELECT);
this.targetListView.setMultiSelect(e==DwtChooser.MULTI_SELECT)
};
DwtChooser.prototype.reset=function(a){this._reset(a);
this._setActiveButton(this._buttonInfo[0].id);
this._enableButtons();
if(this._hasTextField){this._textField.setValue("")
}};
DwtChooser.prototype._reset=function(a){if(!a||a==DwtChooserListView.SOURCE){this.sourceListView._resetList()
}if(!a||a==DwtChooserListView.TARGET){this.targetListView._resetList();
for(var c in this._data){this._data[c].removeAll()
}}};
DwtChooser.prototype.addStateChangeListener=function(a){this.targetListView.addStateChangeListener(a)
};
DwtChooser.prototype.removeStateChangeListener=function(a){this.targetListView.removeStateChangeListener(a)
};
DwtChooser.prototype.getSourceListView=function(){return document.getElementById(this._sourceListViewDivId)
};
DwtChooser.prototype.getButtons=function(){return document.getElementById(this._buttonsDivId)
};
DwtChooser.prototype.getTargetListView=function(){return document.getElementById(this._targetListViewDivId)
};
DwtChooser.prototype.getTextField=function(){return this._textField
};
DwtChooser.prototype._createHtml=function(){this._sourceListViewDivId=Dwt.getNextId();
this._targetListViewDivId=Dwt.getNextId();
this._buttonsDivId=Dwt.getNextId();
this._removeButtonDivId=Dwt.getNextId();
if(this._allButtons){this._addAllButtonDivId=Dwt.getNextId();
this._removeAllButtonDivId=Dwt.getNextId()
}if(this._hasTextField){this._textFieldTdId=Dwt.getNextId()
}var d=[];
var a=0;
if(this._layoutStyle==DwtChooser.HORIZ_STYLE){d[a++]="<table>";
d[a++]="<tr>";
d[a++]="<td id='";
d[a++]=this._sourceListViewDivId;
d[a++]="'></td>";
d[a++]="<td valign='middle' id='";
d[a++]=this._buttonsDivId;
d[a++]="'>";
if(this._allButtons){d[a++]="<div id='";
d[a++]=this._addAllButtonDivId;
d[a++]="'></div><br>"
}for(var c=0;
c<this._buttonInfo.length;
c++){var e=this._buttonInfo[c].id;
d[a++]="<div id='";
d[a++]=this._buttonDivId[e];
d[a++]="'></div><br>"
}d[a++]="<br><div id='";
d[a++]=this._removeButtonDivId;
d[a++]="'></div>";
if(this._allButtons){d[a++]="<br><div id='";
d[a++]=this._removeAllButtonDivId;
d[a++]="'></div><br>"
}d[a++]="</td>";
d[a++]="<td id='";
d[a++]=this._targetListViewDivId;
d[a++]="'></td>";
d[a++]="</tr>";
if(this._hasTextField){d[a++]="<tr><td>";
d[a++]="<table width=100%><tr><td style='white-space:nowrap; width:1%'>";
d[a++]=AjxMsg.add;
d[a++]=":</td><td id='";
d[a++]=this._textFieldTdId;
d[a++]="'></td></tr></table>";
d[a++]="</td><td>&nbsp;</td><td>&nbsp;</td></tr>"
}d[a++]="</table>"
}else{d[a++]="<div id='";
d[a++]=this._sourceListViewDivId;
d[a++]="'></div>";
d[a++]="<div align='center' id='";
d[a++]=this._buttonsDivId;
d[a++]="'>";
d[a++]="<table class='ZPropertySheet' cellspacing='6'><tr>";
if(this._allButtons){d[a++]="<td id='";
d[a++]=this._addAllButtonDivId;
d[a++]="'></td>"
}for(var c=0;
c<this._buttonInfo.length;
c++){var e=this._buttonInfo[c].id;
d[a++]="<td id='";
d[a++]=this._buttonDivId[e];
d[a++]="'></td>"
}d[a++]="<td id='";
d[a++]=this._removeButtonDivId;
d[a++]="'></td>";
if(this._allButtons){d[a++]="<td id='";
d[a++]=this._removeAllButtonDivId;
d[a++]="'></td>"
}d[a++]="</tr></table></div>";
d[a++]="<div id='";
d[a++]=this._targetListViewDivId;
d[a++]="'></div>"
}this.getHtmlElement().innerHTML=d.join("")
};
DwtChooser.prototype._handleButtonInfo=function(c){if(!c){this._defLabel=(this._selectStyle==DwtChooser.SINGLE_SELECT)?AjxMsg.select:AjxMsg.add;
c=[{label:this._defLabel}]
}this._buttonInfo=c;
this._buttonDivId={};
this._buttonId={};
if(this._buttonInfo.length==1){if(!this._buttonInfo[0].id){this._buttonInfo[0].id=Dwt.getNextId("DwtChooserButtonInfo_")
}this._activeButtonId=this._buttonInfo[0].id
}for(var a=0;
a<this._buttonInfo.length;
a++){var d=this._buttonInfo[a].id;
this._buttonDivId[d]=Dwt.getNextId("DwtChooserButtonDiv_");
this._buttonId[d]=Dwt.getNextId("DwtChooserButton_")
}this._hasMultiButtons=(this._buttonInfo.length>1)
};
DwtChooser.prototype._initialize=function(){var a=new AjxListener(this,this._transferButtonListener);
this._button={};
this._buttonIndex={};
this._data={};
for(var c=0;
c<this._buttonInfo.length;
c++){var e=this._buttonInfo[c].id;
this._button[e]=this._setupButton(e,this._buttonId[e],this._buttonDivId[e],this._buttonInfo[c].label);
this._button[e].addSelectionListener(a);
this._buttonIndex[e]=c;
this._data[e]=new AjxVector()
}this.sourceListView=this._createSourceListView();
this._addListView(this.sourceListView,this._sourceListViewDivId);
this.sourceListView.addSelectionListener(new AjxListener(this,this._sourceListener));
this.targetListView=this._createTargetListView();
this._addListView(this.targetListView,this._targetListViewDivId);
this.targetListView.addSelectionListener(new AjxListener(this,this._targetListener));
this._removeButtonId=Dwt.getNextId("DwtChooserRemoveButton_");
this._removeButton=this._setupButton(DwtChooser.REMOVE_BTN_ID,this._removeButtonId,this._removeButtonDivId,AjxMsg.remove);
this._removeButton.addSelectionListener(new AjxListener(this,this._removeButtonListener));
if(this._allButtons){this._addAllButtonId=Dwt.getNextId();
this._addAllButton=this._setupButton(DwtChooser.ADD_ALL_BTN_ID,this._addAllButtonId,this._addAllButtonDivId,AjxMsg.addAll);
this._addAllButton.addSelectionListener(new AjxListener(this,this._addAllButtonListener));
this._removeAllButtonId=Dwt.getNextId();
this._removeAllButton=this._setupButton(DwtChooser.REMOVE_ALL_BTN_ID,this._removeAllButtonId,this._removeAllButtonDivId,AjxMsg.removeAll);
this._removeAllButton.addSelectionListener(new AjxListener(this,this._removeAllButtonListener));
if(this._selectStyle==DwtChooser.SINGLE_SELECT){this._addAllButton.setVisible(false);
this._removeAllButton.setVisible(false)
}}if(this._hasTextField){var d={parent:this,type:DwtInputField.STRING};
this._textField=new DwtInputField(d);
this._textField.reparentHtmlElement(this._textFieldTdId);
this._textField._chooser=this;
this._textField.setHandler(DwtEvent.ONKEYUP,DwtChooser._onKeyUp);
Dwt.setSize(this._textField.getInputElement(),"100%",Dwt.DEFAULT)
}if(this._selectStyle==DwtChooser.SINGLE_SELECT){this.sourceListView.setMultiSelect(false);
this.targetListView.setMultiSelect(false)
}};
DwtChooser.prototype.getTabGroupMember=function(){var c=new DwtTabGroup(this.toString());
c.addMember(this.sourceListView);
for(var a=0;
a<this._buttonInfo.length;
a++){c.addMember(this._button[this._buttonInfo[a].id])
}c.addMember(this._removeButton);
if(this._addAllButton){c.addMember(this._addAllButton);
c.addMember(this._removeAllButton)
}if(this._hasTextField){c.addMember(this._textField)
}c.addMember(this.targetListView);
return c
};
DwtChooser.prototype._createSourceListView=function(){return new DwtChooserListView(this,DwtChooserListView.SOURCE,this._slvClassName)
};
DwtChooser.prototype._createTargetListView=function(){return new DwtChooserListView(this,DwtChooserListView.TARGET,this._tlvClassName)
};
DwtChooser.prototype._addListView=function(c,d){var a=document.getElementById(d);
a.appendChild(c.getHtmlElement());
c.setUI(null,true);
c._initialized=true
};
DwtChooser.prototype.resize=function(f,a){if(!f||!a){return
}if(f==Dwt.DEFAULT&&a==Dwt.DEFAULT){return
}var d=document.getElementById(this._buttonsDivId);
var h=Dwt.getSize(d);
var c,e,g;
if(this._layoutStyle==DwtChooser.HORIZ_STYLE){c=this._listSize?this._listSize:(f==Dwt.DEFAULT)?f:Math.floor(((f-h.x)/2)-12);
e=g=a
}else{c=f;
if(this._selectStyle==DwtChooser.SINGLE_SELECT){e=this._listSize?this._listSize:(a==Dwt.DEFAULT)?a:a-h.y-this._singleHeight-30;
g=(a==Dwt.DEFAULT)?a:a-h.y-e-30
}else{e=g=this._listSize?this._listSize:(a==Dwt.DEFAULT)?a:Math.floor(((a-h.y)/2)-12)
}}this.sourceListView.setSize((c==Dwt.DEFAULT)?c:c+2,e);
this.targetListView.setSize((c==Dwt.DEFAULT)?c:c+2,g)
};
DwtChooser.prototype._setupButton=function(g,d,f,a){var c=new DwtButton({parent:this,id:d});
c.setText(a);
c.id=d;
c._buttonId=g;
var e=document.getElementById(f);
e.appendChild(c.getHtmlElement());
return c
};
DwtChooser.prototype._sourceListener=function(a){if(a.detail==DwtListView.ITEM_DBL_CLICKED){this.transfer(this.sourceListView.getSelection(),this._activeButtonId);
this.sourceListView.deselectAll()
}else{if(this._activeButtonId==DwtChooser.REMOVE_BTN_ID){var c=this._lastActiveTransferButtonId?this._lastActiveTransferButtonId:this._buttonInfo[0].id;
this._setActiveButton(c)
}}this.targetListView.deselectAll();
this._enableButtons()
};
DwtChooser.prototype._targetListener=function(a){if(a.detail==DwtListView.ITEM_DBL_CLICKED){this.remove(this.targetListView.getSelection())
}else{this._setActiveButton(DwtChooser.REMOVE_BTN_ID);
this.sourceListView.deselectAll();
this._enableButtons()
}};
DwtChooser.prototype._transferButtonListener=function(d){var c=DwtControl.getTargetControl(d);
var f=c._buttonId;
var e=this.sourceListView.getSelection();
if(e&&e.length){this.transfer(e,f);
this._enableButtons()
}else{var a=this._getEmailFromText();
if(a){this.transfer([a],f)
}else{this._setActiveButton(f)
}}};
DwtChooser.prototype._removeButtonListener=function(a){this.remove(this.targetListView.getSelection());
var c=this.targetListView.getList();
if(c&&c.size()){this._selectFirst(DwtChooserListView.TARGET)
}else{this._enableButtons()
}};
DwtChooser.prototype._addAllButtonListener=function(a){this.transfer(this.sourceListView.getList().clone());
this._selectFirst(DwtChooserListView.TARGET)
};
DwtChooser.prototype._removeAllButtonListener=function(a){this.remove(this.targetListView.getList().clone());
this._selectFirst(DwtChooserListView.SOURCE)
};
DwtChooser.prototype._enableButtons=function(d,h){var j=this.sourceListView.getList();
var l=this.targetListView.getList();
var e=(d||(this.sourceListView.getSelectionCount()>0));
for(var g=0;
g<this._buttonInfo.length;
g++){var c=this._buttonInfo[g].id;
this._button[c].setEnabled(e)
}var k=(h||(this.targetListView.getSelectionCount()>0));
this._removeButton.setEnabled(k);
if(this._allButtons&&(this._selectStyle==DwtChooser.MULTI_SELECT)){var a=j?j.size():0;
var f=l?l.size():0;
this._addAllButton.setEnabled(a>0);
this._removeAllButton.setEnabled(f>0)
}};
DwtChooser.prototype._selectFirst=function(c,d){var a=(c==DwtChooserListView.SOURCE)?this.sourceListView:this.targetListView;
var e=a.getList();
if(e&&e.size()>0){a.setSelection(e.get(0))
}};
DwtChooser.prototype._setActiveButton=function(e){if(!this._hasMultiButtons){return
}if(e!=this._activeButtonId){var d=(this._activeButtonId==DwtChooser.REMOVE_BTN_ID)?this._removeButtonId:this._buttonId[this._activeButtonId];
if(d){var a=DwtControl.findControl(document.getElementById(d));
if(a){a.setDisplayState(DwtControl.NORMAL)
}}d=(e==DwtChooser.REMOVE_BTN_ID)?this._removeButtonId:this._buttonId[e];
var c=DwtControl.findControl(document.getElementById(d));
if(c){c.setDisplayState(DwtControl.DEFAULT)
}this._activeButtonId=e;
if(e!=DwtChooser.REMOVE_BTN_ID){this._lastActiveTransferButtonId=e
}}};
DwtChooser.prototype._isDuplicate=function(a,c){return c.contains(a)
};
DwtChooser.prototype._addToSource=function(d,a,c){if(!d){return
}if(!d._chooserIndex){var e=this.sourceListView.getList();
d._chooserIndex=e?e.size()+1:1
}this.sourceListView.addItem(d,a,c)
};
DwtChooser.prototype._addToTarget=function(k,a,g){if(!k){return
}a=a?a:this._activeButtonId;
if(this._noDuplicates&&this._data[a]&&this._isDuplicate(k,this._data[a])){return
}var f=this.targetListView.getList();
if(f&&f.contains(k)&&k.clone){var d=k.clone();
d.id=Dwt.getNextId();
k=d
}var h=null;
if(this._hasMultiButtons){f=[];
for(var c=0;
c<this._buttonInfo.length;
c++){f=f.concat(this._data[this._buttonInfo[c].id].getArray())
}var e=this._buttonIndex[a];
for(h=0;
h<f.length;
h++){var j=this._buttonIndex[f[h]._buttonId];
if(j>e){break
}}}k._buttonId=a;
k.id=k.id||Dwt.getNextId();
this._data[a].add(k);
this.targetListView.addItem(k,h,g)
};
DwtChooser.prototype._removeFromSource=function(c,a){if(!c){return
}var d=this.sourceListView.getList();
if(!d){return
}if(!d.contains(c)){return
}this.sourceListView.removeItem(c,a)
};
DwtChooser.prototype._removeFromTarget=function(c,a){if(!c){return
}var d=this.targetListView.getList();
if(!d){return
}if(!d.contains(c)){return
}this._data[c._buttonId].remove(c);
this.targetListView.removeItem(c,a)
};
DwtChooser.prototype._getInsertionIndex=function(d,f){var g=d.getList();
if(!g){return null
}var c=g.getArray();
for(var e=0;
e<c.length;
e++){if(f._chooserIndex&&c[e]._chooserIndex&&(c[e]._chooserIndex>=f._chooserIndex)){return e
}}return null
};
DwtChooser.prototype._getEmailFromText=function(){if(this._hasTextField){var c=this._textField.getValue();
var a=AjxEmailAddress.parse(c);
if(a){a.id=Dwt.getNextId();
return a
}}};
DwtChooser._onKeyUp=function(f){var d=DwtUiEvent.getTarget(f);
var g=DwtControl.findControl(d);
var e=g._chooser;
var c=DwtKeyEvent.getCharCode(f);
if(DwtKeyEvent.IS_RETURN[c]){var a=e._getEmailFromText();
if(a){e.transfer([a],e._activeButtonId);
d.value=""
}}e._enableButtons(d.value.length)
};
DwtChooserListView=function(a){if(arguments.length==0){return
}a=Dwt.getParams(arguments,DwtChooserListView.PARAMS);
a.className=a.className||"DwtChooserListView";
a.headerList=this._getHeaderList(parent);
DwtListView.call(this,a);
this.type=a.type;
this._chooserParent=a.parent.parent;
this._dragSrc=new DwtDragSource(Dwt.DND_DROP_MOVE);
this.setDragSource(this._dragSrc)
};
DwtChooserListView.PARAMS=["parent","type","className","view"];
DwtChooserListView.SOURCE=1;
DwtChooserListView.TARGET=2;
DwtChooserListView.prototype=new DwtListView;
DwtChooserListView.prototype.constructor=DwtChooserListView;
DwtChooserListView.prototype._getHeaderList=function(){};
DwtChooserListView.prototype.toString=function(){return"DwtChooserListView"
};
DwtChooserListView.prototype.setUI=function(c,a){a=a?a:((this.type==DwtChooserListView.TARGET)||this.parent._sourceEmptyOk);
DwtListView.prototype.setUI.call(this,c,a)
};
DwtChooserListView.prototype._itemClicked=function(a,c){if(!c.shiftKey&&!c.ctrlKey&&c.button==DwtMouseEvent.RIGHT){return
}else{DwtListView.prototype._itemClicked.call(this,a,c)
}};
DwtChooserListView.prototype._sortColumn=function(c,a){this._chooserParent.search(c,a)
};
DwtChooserListView.prototype._getHeaderSashLocation=function(){var c=this.getHtmlElement();
if(Dwt.getPosition(c)==Dwt.ABSOLUTE_STYLE){return DwtListView.prototype._getHeaderSashLocation.call(this)
}var d=Dwt.toWindow(c,0,0);
var a=Dwt.toWindow(this._chooserParent.getHtmlElement(),0,0);
if(!this._tmpPoint){this._tmpPoint=new DwtPoint()
}this._tmpPoint.x=d.x-a.x;
this._tmpPoint.y=d.y-a.y;
return this._tmpPoint
}
}if(AjxPackage.define("ajax.dwt.widgets.DwtPropertySheet")){DwtPropertySheet=function(f,e,d,a){if(arguments.length==0){return
}e=e||"DwtPropertySheet";
DwtComposite.call(this,{parent:f,className:e,posStyle:d});
this._labelSide=a||DwtPropertySheet.DEFAULT;
this._propertyIdCount=0;
this._propertyList=[];
this._propertyMap={};
this._tabGroup=new DwtTabGroup(this.toString());
this._tableEl=document.createElement("TABLE");
this._tableEl.cellSpacing=6;
var c=this.getHtmlElement();
c.appendChild(this._tableEl);
this._setAllowSelection()
};
DwtPropertySheet.prototype=new DwtComposite;
DwtPropertySheet.prototype.constructor=DwtPropertySheet;
DwtPropertySheet.prototype.toString=function(){return"DwtPropertySheet"
};
DwtPropertySheet.RIGHT="right";
DwtPropertySheet.LEFT="left";
DwtPropertySheet.DEFAULT=DwtPropertySheet.LEFT;
DwtPropertySheet.prototype._labelCssClass="Label";
DwtPropertySheet.prototype._valueCssClass="Field";
DwtPropertySheet.prototype.addProperty=function(h,i,g){var f=this._tableEl.rows.length;
var k=this._tableEl.insertRow(-1);
k.vAlign=this._vAlign?this._vAlign:"top";
var a=Dwt.getNextId(),d=Dwt.getNextId(),e;
if(this._labelSide==DwtPropertySheet.LEFT){this._insertLabel(k,h,g,a,d);
e=this._insertValue(k,i,g,a,d)
}else{this._insertValue(k,i,g,a,d);
e=this._insertLabel(k,h,g,a,d)
}var c=this._propertyIdCount++;
var j={id:c,index:f,row:k,visible:true,labelId:a,valueId:d,tabValue:e};
this._propertyList.push(j);
this._propertyMap[c]=j;
return c
};
DwtPropertySheet.prototype._insertLabel=function(h,c,g,f,a){var e=h.insertCell(-1);
e.className=this._labelCssClass;
e.id=f;
e.setAttribute("for",a);
if(this._labelSide!=DwtPropertySheet.LEFT){e.width="100%";
e.style.textAlign="left"
}e.innerHTML=c;
if(g){var d=this._tableEl.ownerDocument.createElement("SUP");
d.innerHTML="*";
e.insertBefore(d,e.firstChild)
}};
DwtPropertySheet.prototype._insertValue=function(h,e,g,f,a){var d=h.insertCell(-1);
d.className=this._valueCssClass;
d.id=a;
if(!e){d.innerHTML="&nbsp;"
}else{if(e.isDwtControl){d.appendChild(e.getHtmlElement());
this._tabGroup.addMember(e);
var c=e.getInputElement&&e.getInputElement();
if(c){c.setAttribute("aria-labelledby",f)
}}else{if(e.nodeType==AjxUtil.ELEMENT_NODE){d.appendChild(e);
this._addTabGroupMemberEl(d);
e.setAttribute("aria-labelledby",f)
}else{d.innerHTML=String(e);
this._addTabGroupMemberEl(d);
d.setAttribute("aria-labelledby",f);
e=d
}}}return e
};
DwtPropertySheet.prototype._addTabGroupMemberEl=function(d,c){var e=this;
function a(f){if(f.children.length>0){AjxUtil.foreach(f.children,function(g){a(g)
})
}else{if(AjxUtil.isBoolean(c)){e.noTab=!c
}else{e._makeFocusable(f);
e._tabGroup.addMember(f)
}}}a(d,c)
};
DwtPropertySheet.prototype.getTabGroupMember=function(){return this._tabGroup
};
DwtPropertySheet.prototype.getProperty=function(a){return this._propertyMap[a]
};
DwtPropertySheet.prototype.removeProperty=function(g){var f=this._propertyMap[g];
if(f){var c=f.index;
if(f.visible){var e=this.__getTableIndex(c);
var d=this._tableEl.rows[e];
d.parentNode.removeChild(d)
}f.row=null;
for(var a=c+1;
a<this._propertyList.length;
a++){this._propertyList[a].index--
}this._propertyList.splice(c,1);
delete this._propertyMap[g]
}};
DwtPropertySheet.prototype.setPropertyVisible=function(e,c){var d=this._propertyMap[e];
if(d&&d.visible!==c){d.visible=c;
Dwt.setVisible(this._tableEl.rows[d.index],c);
var a=d.tabValue;
if(a.isDwtControl){a.noTab=!c
}else{this._addTabGroupMemberEl(a,!c)
}}}
}if(AjxPackage.define("ajax.dwt.widgets.DwtPropertyPage")){DwtPropertyPage=function(a){if(arguments.length==0){return
}a=Dwt.getParams(arguments,DwtPropertyPage.PARAMS);
a.className=a.className||"DwtPropertyPage";
DwtComposite.call(this,a);
this._fieldIds=new Object();
this._fildDivIds=new Object();
this._isDirty=false;
this._tabGroup=new DwtTabGroup(this.toString())
};
DwtPropertyPage.prototype=new DwtComposite;
DwtPropertyPage.prototype.constructor=DwtPropertyPage;
DwtPropertyPage.prototype.toString=function(){return"DwtPropertyPage"
};
DwtPropertyPage.PARAMS=DwtComposite.PARAMS;
DwtPropertyPage.prototype.setDirty=function(a){this._isDirty=a
};
DwtPropertyPage.prototype.isDirty=function(){return this._isDirty
};
DwtPropertyPage.prototype.getTabGroupMember=function(){return this._tabGroup
};
DwtPropertyPage.prototype._installOnKeyUpHandler=function(d,a){if(!d){return
}var c=null;
c=document.getElementById(this._fieldIds[d]);
if(c){Dwt.setHandler(c,DwtEvent.ONKEYUP,a?a:this._onKeyUp);
c._view=this;
c._field=d
}};
DwtPropertyPage.prototype._installOnClickHandler=function(d,a){if(!d){return
}var c=document.getElementById(this._fieldIds[d]);
if(c){Dwt.setHandler(c,DwtEvent.ONCLICK,a?a:this._onClick);
c._view=this;
c._field=d
}};
DwtPropertyPage.prototype._onClick=function(a){this._view.setDirty(true);
return true
};
DwtPropertyPage.prototype._onKeyUp=function(a){this._view.setDirty(true);
return true
};
DwtPropertyPage.prototype._installOnChangeHandler=function(d,a){if(!d){return
}var c=null;
c=document.getElementById(this._fieldIds[d]);
if(c){Dwt.setHandler(c,DwtEvent.ONCHANGE,a?a:this._onChange);
c._view=this;
c._field=d
}};
DwtPropertyPage._onChange=function(a){this._view.setDirty(true);
return true
};
DwtPropertyPage.prototype._onChange2=function(a){this.setDirty(true);
return true
};
DwtPropertyPage.prototype._addDwtSelectEntryRow=function(f,g,d,a,e){var c="30ex";
if(e){c=e
}d[a++]="<tr valign='center'>";
a=this._addDwtSelectEntryCell(f,g,d,a,c);
d[a++]="</tr>";
return a
};
DwtPropertyPage.prototype._addDwtSelectEntryCell=function(d,e,c,a,g){var f=Dwt.getNextId();
this._fieldIds[d]=f;
if(e){c[a++]="<td align='left' style='width:"+g+"'>";
c[a++]=AjxStringUtil.htmlEncode(e)+":";
c[a++]="</td>"
}c[a++]="<td align='left'>";
c[a++]="<div id='"+f+"'></div></td>";
return a
};
DwtPropertyPage.prototype._addBoolEntryRow=function(d,e,c,a,f){c[a++]="<tr valign='center'>";
a=this._addBoolEntryCell(d,e,c,a,f);
c[a++]="</tr>";
return a
};
DwtPropertyPage.prototype._addBoolEntryCell=function(e,f,c,a,h){var g=Dwt.getNextId();
this._fieldIds[e]=g;
var d="20ex";
if(h){d=h
}if(f){c[a++]="<td style='width:"+d+";' align='left'>";
c[a++]=AjxStringUtil.htmlEncode(f)+":";
c[a++]="</td>"
}c[a++]="<td align='left'>";
c[a++]="<input type='checkbox' id='"+g+"'>";
c[a++]="</td>";
return a
};
DwtPropertyPage.prototype._addTextAreaEntryRow=function(e,f,c,a,h){var d="on";
if(h){d="off"
}var g=Dwt.getNextId();
this._fieldIds[e]=g;
c[a++]="<tr valign='center'>";
c[a++]="<td align='left' style='width:60ex;'>";
c[a++]=AjxStringUtil.htmlEncode(f)+":";
c[a++]="</td></tr>";
c[a++]="<tr valign='center'><td align='left' style='width:60ex;'><textarea wrap='"+d+"' rows='8' cols ='60' id='";
c[a++]=g;
c[a++]="'/></textarea></td></tr>";
return a
};
DwtPropertyPage.prototype._addEntryRow=function(h,g,c,j,e,f,a,i,d){c[j++]="<tr valign='center'>";
j=this._addEntryCell(h,g,c,j,e,f,a,i,d);
c[j++]="</tr>";
return j
};
DwtPropertyPage.prototype._addEntryCell=function(j,i,e,l,g,h,c,k,f){if(g==null){g="text"
}if(h==null){h=35
}var d="20ex";
if(k){d=k
}var a=Dwt.getNextId();
this._fieldIds[j]=a;
if(i){e[l++]="<td align='left' style='width:"+d+";'>";
e[l++]=AjxStringUtil.htmlEncode(i)+":";
e[l++]="</td>"
}e[l++]="<td ";
if(f){e[l++]="class='redAsteric' "
}e[l++]=" align='left'><input autocomplete='off' size='"+h+"' type='"+g+"' id='";
e[l++]=a;
e[l++]="'";
if(f){e[l++]="/>*"
}else{e[l++]="/>&nbsp;"
}if(c!=null){e[l++]=c
}e[l++]="</td>";
return l
};
DwtPropertyPage.prototype._createHTML=function(){}
}if(AjxPackage.define("ajax.dwt.widgets.DwtTabView")){DwtTabView=function(c){if(arguments.length==0){return
}c=Dwt.getParams(arguments,DwtListView.PARAMS);
c.className=c.className||"ZTabView";
c.posStyle=c.posStyle||DwtControl.ABSOLUTE_STYLE;
DwtComposite.call(this,c);
this._stateChangeEv=new DwtEvent(true);
this._stateChangeEv.item=this;
this._tabs=[];
this._tabIx=1;
this._createHtml();
var a=[this.toString(),this._htmlElId].join(" ");
this._tabGroup=new DwtTabGroup(a);
this._tabGroup.addMember(this._tabBar)
};
DwtTabView.PARAMS=["parent","className","posStyle"];
DwtTabView.prototype=new DwtComposite;
DwtTabView.prototype.constructor=DwtTabView;
DwtTabView.prototype.isDwtTabView=true;
DwtTabView.prototype.toString=function(){return"DwtTabView"
};
DwtTabView.prototype.role="tablist";
DwtTabView.Z_ACTIVE_TAB=Dwt.Z_VIEW+10;
DwtTabView.Z_HIDDEN_TAB=Dwt.Z_HIDDEN;
DwtTabView.Z_TAB_PANEL=Dwt.Z_VIEW+20;
DwtTabView.Z_CURTAIN=Dwt.Z_CURTAIN;
DwtTabView.prototype.TEMPLATE="dwt.Widgets#ZTabView";
DwtTabView.prototype.addStateChangeListener=function(a){this._eventMgr.addListener(DwtEvent.STATE_CHANGE,a)
};
DwtTabView.prototype.removeStateChangeListener=function(a){this._eventMgr.removeListener(DwtEvent.STATE_CHANGE,a)
};
DwtTabView.prototype.getTabGroupMember=function(){return this._tabGroup
};
DwtTabView.prototype.addTab=function(g,f,d,a){var e=this._tabIx++;
this._tabs[e]={title:g,button:this._tabBar.addButton(e,g,d,a)};
this.setTabView(e,f);
if(e==1){var c=this.getTabView(e);
if(c){f.showMe()
}this._currentTabKey=e;
this.switchToTab(e)
}else{if(f&&!(f instanceof AjxCallback)){f.hideMe();
Dwt.setVisible(f.getHtmlElement(),false)
}}this._tabBar.addSelectionListener(e,new AjxListener(this,DwtTabView.prototype._tabButtonListener));
return e
};
DwtTabView.prototype.enable=function(a){for(var d in this._tabs){var c=this._tabs[d].button;
if(c){c.setEnabled(a)
}}};
DwtTabView.prototype.getCurrentTab=function(){return this._currentTabKey
};
DwtTabView.prototype.getNumTabs=function(){return(this._tabs.length-1)
};
DwtTabView.prototype.getTab=function(a){return(this._tabs&&this._tabs[a])?this._tabs[a]:null
};
DwtTabView.prototype.getTabBar=function(){return this._tabBar
};
DwtTabView.prototype.getTabTitle=function(a){return(this._tabs&&this._tabs[a])?this._tabs[a]["title"]:null
};
DwtTabView.prototype.getTabButton=function(a){return(this._tabs&&this._tabs[a])?this._tabs[a]["button"]:null
};
DwtTabView.prototype.setTabView=function(e,d){var c=this.getTab(e);
c.view=d;
if(d&&!(d instanceof AjxCallback)){this._pageEl.appendChild(d.getHtmlElement());
d._tabKey=e;
if(e==this._currentTabKey){var a=d.getTabGroupMember();
this._tabGroup.replaceMember(c.tabGroup,a);
c.tabGroup=a
}}};
DwtTabView.prototype.getTabView=function(e){var d=this.getTab(e);
var c=d&&d.view;
if(c instanceof AjxCallback){var f=c;
c=f.run(e);
this.setTabView(e,c);
var a=this._getTabSize();
c.setSize(a.x,a.y);
c.setAttribute("aria-labelledby",d.button.getHTMLElId())
}return c
};
DwtTabView.prototype.switchToTab=function(d){var c=this.getTab(d);
if(c){var a=this.getTab(this._currentTabKey);
if(a){this._tabGroup.removeMember(a.tabGroup)
}this._showTab(d);
this._tabBar.openTab(d);
if(!c.tabGroup&&c.view){c.tabGroup=c.view.getTabGroupMember()
}this._tabGroup.addMember(c.tabGroup);
if(this._eventMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._eventMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv)
}}};
DwtTabView.prototype.setBounds=function(c,e,d,a){DwtComposite.prototype.setBounds.call(this,c,e,d,a);
this._resetTabSizes(d,a)
};
DwtTabView.prototype.getActiveView=function(){return this._tabs[this._currentTabKey].view
};
DwtTabView.prototype.getKeyMapName=function(){return DwtKeyMap.MAP_TAB_VIEW
};
DwtTabView.prototype.resetKeyBindings=function(){var c=this.shell.getKeyboardMgr();
if(c.isEnabled()){var f=c.__keyMapMgr;
if(!f){return
}var e=this.getNumTabs();
var h=f.getKeySequences(DwtKeyMap.MAP_TAB_VIEW,"GoToTab");
for(var a=0;
a<h.length;
a++){var j=h[a];
for(var d=1;
d<=e;
d++){var g=48+d;
var l=j.replace(/NNN/,g);
f.setMapping(DwtKeyMap.MAP_TAB_VIEW,l,"GoToTab"+d)
}}f.reloadMap(DwtKeyMap.MAP_TAB_VIEW)
}};
DwtTabView.prototype.handleKeyAction=function(e){switch(e){case DwtKeyMap.NEXT_TAB:var d=this.getCurrentTab();
if(d<this.getNumTabs()){this.switchToTab(d+1)
}break;
case DwtKeyMap.PREV_TAB:var d=this.getCurrentTab();
if(d>1){this.switchToTab(d-1)
}break;
default:var c=e.match(DwtKeyMap.GOTO_TAB_RE);
if(c&&c.length){var a=c[1];
if((a<=this.getNumTabs())&&(a!=this.getCurrentTab())){this.switchToTab(a)
}}else{return false
}}return true
};
DwtTabView.prototype._resetTabSizes=function(d,a){if(this._tabs&&this._tabs.length){for(var f in this._tabs){var c=this._tabs[f].view;
if(c&&!(c instanceof AjxCallback)){var e;
e=e||a-Dwt.getSize(this._tabBarEl).y;
c.resetSize(d,e)
}}}};
DwtTabView.prototype._getTabSize=function(){var c=this.getSize();
var d=c.x||this.getHtmlElement().clientWidth;
var a=c.y||this.getHtmlElement().clientHeight;
var e=this._tabBar.getSize();
var f=e.y||this._tabBar.getHtmlElement().clientHeight;
return new DwtPoint(d,(a-f))
};
DwtTabView.prototype._createHtml=function(a){this._createHtmlFromTemplate(a||this.TEMPLATE,{id:this._htmlElId})
};
DwtTabView.prototype._createHtmlFromTemplate=function(a,c){DwtComposite.prototype._createHtmlFromTemplate.call(this,a,c);
this._tabBarEl=document.getElementById(c.id+"_tabbar");
this._tabBar=new DwtTabBar(this);
this._tabBar.reparentHtmlElement(this._tabBarEl);
this._pageEl=document.getElementById(c.id+"_page")
};
DwtTabView.prototype._showTab=function(c){if(this._tabs&&this._tabs[c]){this._currentTabKey=c;
this._hideAllTabs();
var a=this.getTabView(c);
if(a){a.setVisible(true);
a.showMe()
}}};
DwtTabView.prototype._hideAllTabs=function(){if(this._tabs&&this._tabs.length){for(var c in this._tabs){var a=this._tabs[c].view;
if(a&&!(a instanceof AjxCallback)){a.hideMe();
Dwt.setVisible(a.getHtmlElement(),false)
}}}};
DwtTabView.prototype._tabButtonListener=function(a){this.switchToTab(a.item.getData("tabKey"))
};
DwtTabViewPage=function(d,c,a,f){if(arguments.length==0){return
}var e=Dwt.getParams(arguments,DwtTabViewPage.PARAMS);
e.className=e.className||"ZTabPage";
e.posStyle=e.posStyle||DwtControl.ABSOLUTE_STYLE;
e.id=f||null;
this._rendered=true;
DwtPropertyPage.call(this,e);
this._createHtml();
this.getHtmlElement().style.overflowY="auto";
this.getHtmlElement().style.overflowX="visible";
if(e.contentTemplate){this.getContentHtmlElement().innerHTML=AjxTemplate.expand(e.contentTemplate,this._htmlElId)
}};
DwtTabViewPage.prototype=new DwtPropertyPage;
DwtTabViewPage.prototype.constructor=DwtTabViewPage;
DwtTabViewPage.prototype.isDwtTabViewPage=true;
DwtTabViewPage.prototype.toString=function(){return"DwtTabViewPage"
};
DwtTabViewPage.prototype.role="tabpanel";
DwtTabViewPage.prototype.TEMPLATE="dwt.Widgets#ZTabPage";
DwtTabViewPage.PARAMS=DwtPropertyPage.PARAMS.concat("contentTemplate");
DwtTabViewPage.prototype.getContentHtmlElement=function(){return this._contentEl||this.getHtmlElement()
};
DwtTabViewPage.prototype.showMe=function(){this.setZIndex(DwtTabView.Z_ACTIVE_TAB);
this.setAttribute("aria-selected",true);
if(this.parent.getHtmlElement().offsetHeight>80){this._contentEl.style.height=this.parent.getHtmlElement().offsetHeight-80
}else{var c=parseInt(this.parent.getHtmlElement().style.height);
var a=AjxStringUtil.getUnitsFromSizeString(this.parent.getHtmlElement().style.height);
if(c>80){this._contentEl.style.height=(Number(c-80).toString()+a)
}}this._contentEl.style.width=this.parent.getHtmlElement().style.width
};
DwtTabViewPage.prototype.hideMe=function(){this.setZIndex(DwtTabView.Z_HIDDEN_TAB);
this.setAttribute("aria-selected",false)
};
DwtTabViewPage.prototype.resetSize=function(c,a){this.setSize(c,a)
};
DwtTabViewPage.prototype._createHtml=function(a){this._createHtmlFromTemplate(a||this.TEMPLATE,{id:this._htmlElId})
};
DwtTabViewPage.prototype._createHtmlFromTemplate=function(a,c){DwtPropertyPage.prototype._createHtmlFromTemplate.call(this,a,c);
this._contentEl=document.getElementById(c.id+"_content")||this.getHtmlElement()
};
DwtTabBar=function(d,c,e){if(arguments.length==0){return
}this._buttons=[];
this._btnStyle=e||"ZTab";
this._btnImage=null;
this._currentTabKey=1;
var a=c||"ZTabBar";
DwtToolBar.call(this,{parent:d,className:a,posStyle:DwtControl.STATIC_STYLE});
if(AjxEnv.isFirefox){if(this._prefixEl&&this.constructor==DwtTabBar){this._prefixEl.style.cssFloat="none"
}}};
DwtTabBar.prototype=new DwtToolBar;
DwtTabBar.prototype.constructor=DwtTabBar;
DwtTabBar.prototype.TEMPLATE="dwt.Widgets#ZTabBar";
DwtTabBar.prototype.toString=function(){return"DwtTabBar"
};
DwtTabBar.prototype.getCurrentTab=function(){return this._currentTabKey
};
DwtTabBar.prototype.addStateChangeListener=function(a){this._eventMgr.addListener(DwtEvent.STATE_CHANGE,a)
};
DwtTabBar.prototype.removeStateChangeListener=function(a){this._eventMgr.removeListener(DwtEvent.STATE_CHANGE,a)
};
DwtTabBar.prototype.addSelectionListener=function(c,a){this._buttons[c].addSelectionListener(a)
};
DwtTabBar.prototype.removeSelectionListener=function(c,a){this._buttons[c].removeSelectionListener(a)
};
DwtTabBar.prototype.addButton=function(g,f,h,d){var c=this._buttons[g]=new DwtTabButton(this,h,d);
this._buttons[g].addSelectionListener(new AjxListener(this,DwtTabBar._setActiveTab));
if(this._btnImage!=null){c.setImage(this._btnImage)
}if(f!=null){c.setText(f)
}c.setEnabled(true);
c.setData("tabKey",g);
if(parseInt(g)==1){this.openTab(g,true)
}var a=this.__getButtonIndex(this._currentTabKey);
if(a!=-1){var e=this.__getButtonIndex(g);
if(e==a+1){Dwt.addClass(c.getHtmlElement(),DwtTabBar.SELECTED_NEXT)
}}return c
};
DwtTabBar.prototype.getButton=function(a){return(this._buttons[a])?this._buttons[a]:null
};
DwtTabBar.prototype.openTab=function(a,f){this._currentTabKey=a;
var e=this._buttons.length;
for(var c=0;
c<e;
c++){if(c==a){continue
}var d=this._buttons[c];
if(d){this.__markPrevNext(c,false);
d.setClosed()
}}var d=this._buttons[a];
if(d){d.setOpen();
this.__markPrevNext(a,true)
}if(!f&&this._eventMgr.isListenerRegistered(DwtEvent.STATE_CHANGE)){this._eventMgr.notifyListeners(DwtEvent.STATE_CHANGE,this._stateChangeEv)
}};
DwtTabBar._setActiveTab=function(d){var a;
if(d&&d.item){a=d.item.getData("tabKey")
}else{if(d&&d.target){var c=d.target;
while(c.tagName!="TABLE"&&c.offsetParent){c=c.offsetParent
}a=c.getAttribute("tabKey");
if(a==null){return false
}}else{return false
}}this.openTab(a)
};
DwtTabButton=function(e,f,c,d){if(arguments.length==0){return
}var a=d||"ZTab";
DwtButton.call(this,{parent:e,className:a,id:f,index:c})
};
DwtTabButton.prototype=new DwtButton;
DwtTabButton.prototype.constructor=DwtTabButton;
DwtTabButton.prototype.TEMPLATE="dwt.Widgets#ZTab";
DwtTabButton.prototype.isDwtTabButton=true;
DwtTabButton.prototype.toString=function(){return"DwtTabButton"
};
DwtTabButton.prototype.role="tab";
DwtTabButton.prototype.setOpen=function(){this._isSelected=true;
this.setDisplayState(DwtControl.SELECTED)
};
DwtTabButton.prototype.setClosed=function(){this._isSelected=false;
this.setDisplayState(DwtControl.NORMAL)
};
DwtTabButton.prototype.setDisplayState=function(a){if(this._isSelected&&a!=DwtControl.SELECTED){a=[DwtControl.SELECTED,a].join(" ")
}DwtButton.prototype.setDisplayState.call(this,a)
};
DwtTabBarFloat=function(c,a,d){if(arguments.length==0){return
}DwtTabBar.call(this,c,a,d)
};
DwtTabBarFloat.prototype=new DwtTabBar;
DwtTabBarFloat.prototype.constructor=DwtTabBarFloat;
DwtTabBarFloat.prototype.TEMPLATE="dwt.Widgets#ZTabBarFloat";
DwtTabBarFloat.prototype.addButton=function(f,e,g){var c=this._buttons[f]=new DwtTabButtonFloat(this,g);
this._buttons[f].addSelectionListener(new AjxListener(this,DwtTabBar._setActiveTab));
if(this._btnImage!=null){c.setImage(this._btnImage)
}if(e!=null){c.setText(e)
}c.setEnabled(true);
c.setData("tabKey",f);
if(parseInt(f)==1){this.openTab(f,true)
}var a=this.__getButtonIndex(this._currentTabKey);
if(a!=-1){var d=this.__getButtonIndex(f);
if(d==a+1){Dwt.addClass(c.getHtmlElement(),DwtTabBar.SELECTED_NEXT)
}}return c
};
DwtTabButtonFloat=function(a,c){DwtTabButton.call(this,a,c,undefined,"ZTab")
};
DwtTabButtonFloat.prototype=new DwtTabButton;
DwtTabButtonFloat.prototype.constructor=DwtTabButtonFloat;
DwtTabButtonFloat.prototype.TEMPLATE="dwt.Widgets#ZTabFloat"
}if(AjxPackage.define("ajax.dwt.widgets.DwtTimeSelect")){DwtTimeSelect=function(a,c){DwtComposite.call(this,{parent:a,className:"DwtTimeSelect"});
this.id=c;
this._isLocale24Hour=true;
this._createSelects()
};
DwtTimeSelect.START=1;
DwtTimeSelect.END=2;
DwtTimeSelect.HOUR=1;
DwtTimeSelect.MINUTE=2;
DwtTimeSelect.AMPM=3;
DwtTimeSelect.getDateFromFields=function(a,e,d,c){a=Number(a);
if(d){if(d=="AM"||d===0){a=(a==12)?0:a
}else{if(d=="PM"||d==1){a=(a<12)?a+12:a
}}}c=c?c:new Date();
c.setHours(a,Number(e),0,0);
return c
};
DwtTimeSelect.parse=function(d){var c;
var e=d.toLowerCase();
if(e===AjxMsg.midnight.toLowerCase()||e===AjxMsg.noon.toLowerCase()){c=new Date();
c.setMinutes(0);
c.setSeconds(0);
c.setHours(e===AjxMsg.noon.toLowerCase()?12:0)
}else{var a=AjxDateFormat.getTimeInstance(AjxDateFormat.SHORT);
c=a.parse(d)||AjxDateFormat.parseTime(d)
}return c
};
DwtTimeSelect.format=function(a){if(a.getHours()==0&&a.getMinutes()==0){return AjxMsg.midnight
}else{if(a.getHours()==12&&a.getMinutes()==0){return AjxMsg.noon
}else{return AjxDateFormat.getTimeInstance(AjxDateFormat.SHORT).format(a)
}}};
DwtTimeSelect.adjustStartEnd=function(s,a,j,k,n){var h=s._args.selectObj;
var c=AjxDateUtil.simpleParseDateStr(k.value);
var q=AjxDateUtil.simpleParseDateStr(n.value);
var g=k.value;
var d=n.value;
if(h.id==DwtTimeSelect.START){var o=(h.compId==DwtTimeSelect.HOUR)?s._args.oldValue:a.getHours();
var l=(h.compId==DwtTimeSelect.MINUTE)?s._args.oldValue:a.getMinutes();
var e=(h.compId==DwtTimeSelect.AMPM)?s._args.oldValue:a.getAmPm();
var m=DwtTimeSelect.getDateFromFields(o,l,e,c).getTime();
var i=DwtTimeSelect.getDateFromFields(a.getHours(),a.getMinutes(),a.getAmPm(),c).getTime();
var p=DwtTimeSelect.getDateFromFields(j.getHours(),j.getMinutes(),j.getAmPm(),q).getTime();
var t=p-m;
if(!t){return null
}var f=i+t;
var r=new Date(f);
j.set(r);
n.value=AjxDateUtil.simpleComputeDateStr(r);
if(n.value!=d){return n
}}else{return null
}};
DwtTimeSelect.validStartEnd=function(i,c,e,h){var a=AjxDateUtil.simpleParseDateStr(i.value);
var g=AjxDateUtil.simpleParseDateStr(c.value);
if(a&&g){if((a.valueOf()>g.valueOf())){return false
}if(a.getFullYear()>9999||g.getFullYear()>9999){return false
}if(e&&h){var d=DwtTimeSelect.getDateFromFields(e.getHours(),e.getMinutes(),e.getAmPm(),a).getTime();
var f=DwtTimeSelect.getDateFromFields(h.getHours(),h.getMinutes(),h.getAmPm(),g).getTime();
if(d>f){return false
}}}else{return false
}return true
};
DwtTimeSelect.prototype=new DwtComposite;
DwtTimeSelect.prototype.constructor=DwtTimeSelect;
DwtTimeSelect.prototype.isDwtTimeSelect=true;
DwtTimeSelect.prototype.toString=function(){return"DwtTimeSelect"
};
DwtTimeSelect.prototype.set=function(e){var d=0,g=0,f=0;
var c=this.isLocale24Hour();
var a=e.getHours();
if(!c&&a>12){d=a-13
}else{if(!c&&a==0){d=this.getHourSelectSize()-1
}else{d=c?a:a-1
}}g=Math.floor(e.getMinutes()/5);
if(!c){f=(e.getHours()>=12)?1:0
}this.setSelected(d,g,f)
};
DwtTimeSelect.prototype.getValue=function(a){return(DwtTimeSelect.getDateFromFields(this.getHours(),this.getMinutes(),this.getAmPm(),a))
};
DwtTimeSelect.prototype.getHours=function(){return this._hourSelect.getValue()
};
DwtTimeSelect.prototype.getMinutes=function(){return this._minuteSelect.getValue()
};
DwtTimeSelect.prototype.getAmPm=function(){return this._amPmSelect?this._amPmSelect.getValue():null
};
DwtTimeSelect.prototype.setSelected=function(a,d,c){this._hourSelect.setSelected(a);
this._minuteSelect.setSelected(d);
if(!this._isLocale24Hour){this._amPmSelect.setSelected(c)
}};
DwtTimeSelect.prototype.addChangeListener=function(a){this._hourSelect.addChangeListener(a);
this._minuteSelect.addChangeListener(a);
if(this._amPmSelect){this._amPmSelect.addChangeListener(a)
}};
DwtTimeSelect.prototype.isLocale24Hour=function(){return this._isLocale24Hour
};
DwtTimeSelect.prototype.getHourSelectSize=function(){return this._hourSelect.size()
};
DwtTimeSelect.prototype.getMinuteSelectSize=function(){return this._minuteSelect.size()
};
DwtTimeSelect.prototype.getSelectedHourIdx=function(){return this._hourSelect.getSelectedIndex()
};
DwtTimeSelect.prototype.getSelectedMinuteIdx=function(){return this._minuteSelect.getSelectedIndex()
};
DwtTimeSelect.prototype.getSelectedAmPmIdx=function(){return this._amPmSelect?this._amPmSelect.getSelectedIndex():0
};
DwtTimeSelect.prototype.setEnabled=function(a){DwtComposite.prototype.setEnabled.call(this,a);
this._hourSelect.setEnabled(a);
this._minuteSelect.setEnabled(a);
if(this._amPmSelect){this._amPmSelect.setEnabled(a)
}};
DwtTimeSelect.prototype._createSelects=function(){this._hourSelectId=Dwt.getNextId();
this._minuteSelectId=Dwt.getNextId();
this._amPmSelectId=Dwt.getNextId();
var e=AjxDateFormat.getTimeInstance(AjxDateFormat.SHORT);
var g=0;
var n=0;
var m=[];
var k=0;
m[k++]="<table border=0 cellpadding=0 cellspacing=0><tr>";
for(var h=0;
h<e._segments.length;
h++){var l=e._segments[h]._s;
if(e._segments[h] instanceof AjxFormat.TextSegment){var a=AjxStringUtil.trim(l);
if(a.length){m[k++]="<td class='TextPadding ZmFieldLabel'>";
m[k++]=l;
m[k++]="</td>"
}}else{if(l.charAt(0)=="h"||l.charAt(0)=="H"){g=h;
m[k++]="<td width=42 id='";
m[k++]=this._hourSelectId;
m[k++]="'></td>"
}else{if(l.charAt(0)=="m"){n=h;
m[k++]="<td width=42 id='";
m[k++]=this._minuteSelectId;
m[k++]="'></td>"
}else{if(l=="a"){this._isLocale24Hour=false;
m[k++]="<td width=42 id='";
m[k++]=this._amPmSelectId;
m[k++]="'></td>"
}}}}}m[k++]="</tr></table>";
this.getHtmlElement().innerHTML=m.join("");
var d=new Date();
var c=this._isLocale24Hour?0:1;
var f=this._isLocale24Hour?24:13;
this._hourSelect=new DwtSelect({parent:this});
this._hourSelect.id=this.id;
this._hourSelect.compId=DwtTimeSelect.HOUR;
for(var k=c;
k<f;
k++){d.setHours(k);
var o=e._segments[g].format(d);
this._hourSelect.addOption(o,false,k)
}this._hourSelect.reparentHtmlElement(this._hourSelectId);
delete this._hourSelectId;
this._minuteSelect=new DwtSelect({parent:this});
this._minuteSelect.id=this.id;
this._minuteSelect.compId=DwtTimeSelect.MINUTE;
for(var k=0;
k<60;
k=k+5){d.setMinutes(k);
var o=e._segments[n].format(d);
this._minuteSelect.addOption(o,false,k)
}this._minuteSelect.reparentHtmlElement(this._minuteSelectId);
delete this._minuteSelectId;
if(!this._isLocale24Hour){this._amPmSelect=new DwtSelect({parent:this});
this._amPmSelect.id=this.id;
this._amPmSelect.compId=DwtTimeSelect.AMPM;
this._amPmSelect.addOption(I18nMsg.periodAm,false,"AM");
this._amPmSelect.addOption(I18nMsg.periodPm,false,"PM");
this._amPmSelect.reparentHtmlElement(this._amPmSelectId);
delete this._amPmSelectId
}};
DwtTimeInput=function(d,f,a,c){var e={parent:d,id:"DwtTimeInput",className:"DwtTimeInput"};
if(a){e.parentElement=a
}DwtComposite.call(this,e);
this._interval=c||DwtTimeInput.FIFTEEN_MIN_INTERVAL;
this.id=f;
this._isLocale24Hour=true;
this._createSelects();
this._useTextInput=true
};
DwtTimeInput.THIRTY_MIN_INTERVAL=30;
DwtTimeInput.FIFTEEN_MIN_INTERVAL=15;
DwtTimeInput.START=1;
DwtTimeInput.END=2;
DwtTimeInput.HOUR=1;
DwtTimeInput.MINUTE=2;
DwtTimeInput.AMPM=3;
DwtTimeInput.ROWS=8;
DwtTimeInput.DEFAULT_TOP_ROW=8;
DwtTimeInput.getDateFromFields=function(c,a){var d=DwtTimeSelect.parse(c);
a=a||new Date();
a.setHours(d.getHours(),d.getMinutes(),0,0);
return a
};
DwtTimeInput.adjustStartEnd=function(s,a,i,k,m,q,g){var c=AjxDateUtil.simpleParseDateStr(k.value);
var p=AjxDateUtil.simpleParseDateStr(m.value);
var e=k.value;
var d=m.value;
if(g==DwtTimeInput.START){var j=q?q.startTimeStr:a.getTimeString();
var l=DwtTimeInput.getDateFromFields(j,c).getTime();
var h=DwtTimeInput.getDateFromFields(a.getTimeString(),c).getTime();
var o=DwtTimeInput.getDateFromFields(i.getTimeString(),p).getTime();
var t=o-l;
if(!t){return null
}var f=h+t;
var r=new Date(f);
a.set(new Date(h));
i.set(r);
m.value=AjxDateUtil.simpleComputeDateStr(r);
if(m.value!=d){return m
}}else{if(g==DwtTimeInput.END){var j=q?q.endTimeStr:i.getTimeString();
var o=DwtTimeInput.getDateFromFields(j,p).getTime();
var f=DwtTimeInput.getDateFromFields(i.getTimeString(),p).getTime();
var l=DwtTimeInput.getDateFromFields(a.getTimeString(),c).getTime();
var t=o-l;
if(!t){return null
}if(f<l){var h=f-t;
var n=new Date(h);
a.set(n);
i.set(new Date(f));
k.value=AjxDateUtil.simpleComputeDateStr(n);
m.value=AjxDateUtil.simpleComputeDateStr(new Date(f))
}if(k.value!=e){return k
}}else{return null
}}};
DwtTimeInput.validStartEnd=function(f,a,k,j){var e=AjxDateUtil.simpleParseDateStr(f.value);
var h=AjxDateUtil.simpleParseDateStr(a.value);
if(e&&h){if((e.valueOf()>h.valueOf())){return false
}if(e.getFullYear()>9999||h.getFullYear()>9999){return false
}if(k&&j){var d=k.getTimeString();
var i=j.getTimeString();
if(d&&i){var c=DwtTimeInput.getDateFromFields(d,e).getTime();
var g=DwtTimeInput.getDateFromFields(i,h).getTime();
if(c>g){return false
}}}}else{return false
}return true
};
DwtTimeInput.prototype=new DwtComposite;
DwtTimeInput.prototype.constructor=DwtTimeInput;
DwtTimeInput.prototype.isDwtTimeInput=true;
DwtTimeInput.prototype.toString=function(){return"DwtTimeInput"
};
DwtTimeInput.prototype.set=function(a){var c=DwtTimeSelect.format(a);
this._originalTimeStr=c;
this._timeSelectInput.setValue(c);
this._scrollToValue(c)
};
DwtTimeInput.prototype.setValue=function(c){var a=DwtTimeSelect.parse(c);
if(!a){c=""
}this._originalTimeStr=c;
this._timeSelectInput.setValue(c);
this._scrollToValue(c)
};
DwtTimeInput.prototype._scrollToValue=function(c){var a=this.getTimeIndex(c);
if(a!==null){this._hoursSelectMenu.setSelectedItem(a)
}};
DwtTimeInput.prototype.getValue=function(a){var c=DwtTimeSelect.parse(this._timeSelectInput.getValue());
if(!c){c=new Date()
}a=a||new Date();
if(AjxDateUtil.isDayShifted(a)){AjxDateUtil.rollToNextDay(a)
}a.setHours(c.getHours(),c.getMinutes(),0,0);
return a
};
DwtTimeInput.prototype.getHours=function(){var a=this.getValue();
return a?a.getHours():null
};
DwtTimeInput.prototype.getMinutes=function(){var a=this.getValue();
return a?a.getMinutes():null
};
DwtTimeInput.prototype.addChangeListener=function(a){this._changeListener=a;
var c=AjxCallback.simpleClosure(this.handleTimeChange,this,a);
this._timeSelectInput.setHandler(DwtEvent.ONBLUR,c)
};
DwtTimeInput.prototype.handleTimeChange=function(c,a){var f=this._timeSelectInput.getValue();
var e=DwtTimeSelect.parse(f);
if(!e){this.setValue(this._originalTimeStr)
}else{this._scrollToValue(f)
}c.run(a,this.id)
};
DwtTimeInput.prototype.correctTimeString=function(f,c){var a=f.split(":");
if(!a){return c
}var d=(a.length&&a[0]!=null)?parseInt(a[0].replace(/\D/g,"")):null;
var e=(a.length>1&&a[1]!=null)?parseInt(a[1].replace(/\D/g,"")):0;
if(!d){d=(d==0)?0:c.getHours()
}if(!e){e=0
}c.setHours(d,e,0,0);
return c
};
DwtTimeInput.prototype.isLocale24Hour=function(){return this._isLocale24Hour
};
DwtTimeInput.prototype.setEnabled=function(a){DwtComposite.prototype.setEnabled.call(this,a);
this._timeSelectInput.setEnabled(a);
this._timeSelectBtn.setEnabled(a)
};
DwtTimeInput.prototype._timeButtonListener=function(o){var c=AjxDateFormat.getTimeInstance(AjxDateFormat.SHORT);
var f;
if(!this._menuItemsAdded){var e,d,i,h,p,g,n,a=new Date(),m=this._timeSelectBtn,l=new AjxListener(this,this._timeSelectionListener);
for(e=0;
e<24;
e++){a.setHours(e);
a.setMinutes(0);
i=new DwtMenuItem({parent:this._hoursSelectMenu,style:DwtMenuItem.NO_STYLE});
p=c.format(a);
this.putTimeIndex(p,e);
if(e==0||e==12){p=DwtTimeSelect.format(a);
this.putTimeIndex(p,e)
}i.setText(p);
i.setData("value",e*60);
if(l){i.addSelectionListener(l)
}if(e==DwtTimeInput.DEFAULT_TOP_ROW){f=i
}g=60/this._interval;
n=new DwtMenu({parent:i,style:DwtMenu.DROPDOWN_CENTERV_STYLE,layout:DwtMenu.LAYOUT_CASCADE,maxRows:g,congruent:true});
i.setMenu(n,true);
i.setSelectableWithSubmenu(true);
n.dontStealFocus(true);
for(d=1;
d<g;
d++){a.setMinutes(d*this._interval);
h=new DwtMenuItem({parent:n,style:DwtMenuItem.NO_STYLE});
h.setText(c.format(a));
h.setData("value",e*60+d*this._interval);
if(l){h.addSelectionListener(l)
}}}this._hoursSelectMenu.setWidth(m.getW()+this._timeSelectInput.getW());
this._menuItemsAdded=true
}o.item.popup();
if(f){this._hoursSelectMenu.scrollToItem(f)
}this._scrollToValue(c.format(this.getValue()))
};
DwtTimeInput.prototype._timeSelectionListener=function(a){if(a.item&&a.item instanceof DwtMenuItem){this._timeSelectInput.setValue(a.item.getText());
this._timeSelectValue=a.item.getData("value");
if(this._changeListener){this._changeListener.run(a,this.id)
}return
}};
DwtTimeInput.prototype.getTimeString=function(){var a=DwtTimeSelect.parse(this._timeSelectInput.getValue());
return a?this._timeSelectInput.getValue():""
};
DwtTimeInput.prototype.getInputField=function(){return this._timeSelectInput
};
DwtTimeInput.prototype.getTabGroupMember=function(){return this._tabGroup
};
DwtTimeInput.prototype.putTimeIndex=function(c,a){this._timeIndex[c.replace(/\:\d\d/,":00").replace(/\s/,"").toLowerCase()]=a
};
DwtTimeInput.prototype.getTimeIndex=function(c){if(!c){return null
}var a=this._timeIndex[c.replace(/\:\d\d/,":00").replace(/\s/,"").toLowerCase()];
return(a||a===0)?a:null
};
DwtTimeInput.prototype._createSelects=function(){var f=(this.id===DwtTimeSelect.START?ZmMsg.startTime:this.id===DwtTimeSelect.END?ZmMsg.endTime:ZmMsg.time);
this.getHtmlElement().innerHTML=AjxTemplate.expand("calendar.Appointment#ApptTimeInput",{id:this._htmlElId});
var d=Dwt.getNextId("DwtTimeInputSelect_");
if(this.id&&this.id==DwtTimeSelect.START){d+="_startTimeInput"
}else{if(this.id&&this.id==DwtTimeSelect.END){d+="_endTimeInput"
}}var h={parent:this,parentElement:(this._htmlElId+"_timeSelectInput"),type:DwtInputField.STRING,label:f,errorIconStyle:DwtInputField.ERROR_ICON_NONE,validationStyle:DwtInputField.CONTINUAL_VALIDATION,inputId:d,id:Dwt.getNextId("DwtTimeInputField_")};
this._timeSelectInput=new DwtInputField(h);
var e=this._timeSelectInput.getInputElement();
Dwt.setSize(e,"80px","2rem");
e.typeId=this.id;
var a=new AjxListener(this,this._timeButtonListener);
var g=this._htmlElId+"_timeSelectBtn";
var c=this._timeSelectBtn=new DwtButton({parent:this});
c.addDropDownSelectionListener(a);
c.setData(Dwt.KEY_ID,g);
c.setSize("20");
c.setAttribute("aria-label",f);
this._timeIndex={};
this._hoursSelectMenu=new DwtMenu({parent:c,style:DwtMenu.DROPDOWN_STYLE,layout:DwtMenu.LAYOUT_SCROLL,maxRows:DwtTimeInput.ROWS});
c.setMenu(this._hoursSelectMenu,true,false,false,true);
this._menuItemsAdded=false;
c.reparentHtmlElement(g);
this._tabGroup=new DwtTabGroup(this.getHTMLElId());
this._tabGroup.addMember(this._timeSelectInput);
this._tabGroup.addMember(c)
}
}if(AjxPackage.define("zimbraMail.share.view.ZmTagsHelper")){ZmTagsHelper={};
ZmTagsHelper.setupListeners=function(a){if(appCtxt.isChildWindow){return
}a._tagList=appCtxt.getTagTree();
if(!a._tagList){return
}a._tagChangeHandler=ZmTagsHelper._tagChangeListener.bind(a);
a._tagList.addChangeListener(a._tagChangeHandler)
};
ZmTagsHelper.disposeListeners=function(a){a._tagList&&a._tagList.removeChangeListener(a._tagChangeHandler)
};
ZmTagsHelper.getTagsHtml=function(k,c){if(!appCtxt.get(ZmSetting.TAGGING_ENABLED)){return""
}var e=k&&k.getSortedTags();
if(!(e&&e.length)){return""
}var g=[],f=0;
for(var d=0;
d<e.length;
d++){var a=e[d];
if(!a){continue
}var h={tag:a,html:g,i:f,view:c,readOnly:k.isReadOnly()};
f=ZmTagsHelper._getTagHtml(h)
}return g.join("")
};
ZmTagsHelper._getTagHtml=function(h){h=h||{};
var a=h.tag;
var e=h.html;
var d=h.i;
var c=h.view;
var j=h.readOnly;
var g=['ZmTagsHelper._tagClick("',c._htmlElId,'","',AjxStringUtil.encodeQuotes(a.name),'");'].join("");
var f=['ZmTagsHelper._removeTagClick("',c._htmlElId,'","',AjxStringUtil.encodeQuotes(a.name),'");'].join("");
e[d++]="<span class='addrBubble TagBubble' notoggle=1 >";
e[d++]="<span class='TagImage' onclick='";
e[d++]=g;
e[d++]="'>";
e[d++]=AjxImg.getImageHtml({imageName:a.getIconWithColor(),altText:ZmMsg.tag});
e[d++]="</span>";
e[d++]="<span class='TagName' onclick='";
e[d++]=g;
e[d++]="'>";
e[d++]=AjxStringUtil.htmlEncodeSpace(a.name);
e[d++]="&nbsp;</span>";
if(!j){e[d++]="<span class='ImgBubbleDelete' onclick='";
e[d++]=f;
e[d++]="'>";
e[d++]="</span>"
}e[d++]="</span>";
return d
};
ZmTagsHelper._tagClick=function(e,d){if(appCtxt.isChildWindow){return
}var a=ZmTagsHelper._getTagClicked(d);
var c=DwtControl.fromElementId(e);
appCtxt.getSearchController().search({query:a.createQuery(),inclSharedItems:true})
};
ZmTagsHelper._removeTagClick=function(e,d){var a=ZmTagsHelper._getTagClicked(d);
var c=DwtControl.fromElementId(e);
ZmListController.prototype._doTag.call(c._controller,c._item,a,false)
};
ZmTagsHelper._getTagClicked=function(a){var c=appCtxt.getAccountTagList();
return c.getByNameOrRemote(a)
};
ZmTagsHelper._tagChangeListener=function(a){if(a.type!=ZmEvent.S_TAG){return
}if(this._disposed){return
}if(a.event==ZmEvent.E_DELETE||a.event==ZmEvent.E_MODIFY||a.event==ZmEvent.E_CREATE){this._setTags()
}}
}};
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.DOMPurify = factory());
}(this, (function () { 'use strict';
var freeze$1 = Object.freeze || function (x) {
return x;
};
var html = freeze$1(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);
// SVG
var svg = freeze$1(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'audio', 'canvas', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'video', 'view', 'vkern']);
var svgFilters = freeze$1(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);
var mathMl = freeze$1(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']);
var text = freeze$1(['#text']);
var freeze$2 = Object.freeze || function (x) {
return x;
};
var html$1 = freeze$2(['accept', 'action', 'align', 'alt', 'autocomplete', 'background', 'bgcolor', 'border', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'coords', 'crossorigin', 'datetime', 'default', 'dir', 'disabled', 'download', 'enctype', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'integrity', 'ismap', 'label', 'lang', 'list', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns']);
var svg$1 = freeze$2(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);
var mathMl$1 = freeze$2(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);
var xml = freeze$2(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);
var hasOwnProperty = Object.hasOwnProperty;
var setPrototypeOf = Object.setPrototypeOf;
var _ref$1 = typeof Reflect !== 'undefined' && Reflect;
var apply$1 = _ref$1.apply;
if (!apply$1) {
apply$1 = function apply(fun, thisValue, args) {
return fun.apply(thisValue, args);
};
}
/* Add properties to a lookup table */
function addToSet(set, array) {
if (setPrototypeOf) {
// Make 'in' and truthy checks like Boolean(set.constructor)
// independent of any properties defined on Object.prototype.
// Prevent prototype setters from intercepting set as a this value.
setPrototypeOf(set, null);
}
var l = array.length;
while (l--) {
var element = array[l];
if (typeof element === 'string') {
var lcElement = element.toLowerCase();
if (lcElement !== element) {
// Config presets (e.g. tags.js, attrs.js) are immutable.
if (!Object.isFrozen(array)) {
array[l] = lcElement;
}
element = lcElement;
}
}
set[element] = true;
}
return set;
}
/* Shallow clone an object */
function clone(object) {
var newObject = {};
var property = void 0;
for (property in object) {
if (apply$1(hasOwnProperty, object, [property])) {
newObject[property] = object[property];
}
}
return newObject;
}
var seal = Object.seal || function (x) {
return x;
};
var MUSTACHE_EXPR = seal(/\{\{[\s\S]*|[\s\S]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode
var ERB_EXPR = seal(/<%[\s\S]*|[\s\S]*%>/gm);
var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape
var ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape
var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape
);
var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g // eslint-disable-line no-control-regex
);
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var _ref = typeof Reflect !== 'undefined' && Reflect;
var apply = _ref.apply;
var arraySlice = Array.prototype.slice;
var freeze = Object.freeze;
var getGlobal = function getGlobal() {
return typeof window === 'undefined' ? null : window;
};
if (!apply) {
apply = function apply(fun, thisValue, args) {
return fun.apply(thisValue, args);
};
}
/**
* Creates a no-op policy for internal use only.
* Don't export this function outside this module!
* @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.
* @param {Document} document The document object (to determine policy name suffix)
* @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types
* are not supported).
*/
var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {
if ((typeof trustedTypes === 'undefined' ? 'undefined' : _typeof(trustedTypes)) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {
return null;
}
// Allow the callers to control the unique policy name
// by adding a data-tt-policy-suffix to the script element with the DOMPurify.
// Policy creation with duplicate names throws in Trusted Types.
var suffix = null;
var ATTR_NAME = 'data-tt-policy-suffix';
if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {
suffix = document.currentScript.getAttribute(ATTR_NAME);
}
var policyName = 'dompurify' + (suffix ? '#' + suffix : '');
try {
return trustedTypes.createPolicy(policyName, {
createHTML: function createHTML(html$$1) {
return html$$1;
}
});
} catch (error) {
// Policy creation failed (most likely another DOMPurify script has
// already run). Skip creating the policy, as this will only cause errors
// if TT are enforced.
console.warn('TrustedTypes policy ' + policyName + ' could not be created.');
return null;
}
};
function createDOMPurify() {
var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
var DOMPurify = function DOMPurify(root) {
return createDOMPurify(root);
};
/**
* Version label, exposed for easier checks
* if DOMPurify is up to date or not
*/
DOMPurify.version = '2.0.7';
/**
* Array of elements that DOMPurify removed during sanitation.
* Empty if nothing was removed.
*/
DOMPurify.removed = [];
if (!window || !window.document || window.document.nodeType !== 9) {
// Not running in a browser, provide a factory function
// so that you can pass your own Window
DOMPurify.isSupported = false;
return DOMPurify;
}
var originalDocument = window.document;
var useDOMParser = false;
var removeTitle = false;
var document = window.document;
var DocumentFragment = window.DocumentFragment,
HTMLTemplateElement = window.HTMLTemplateElement,
Node = window.Node,
NodeFilter = window.NodeFilter,
_window$NamedNodeMap = window.NamedNodeMap,
NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,
Text = window.Text,
Comment = window.Comment,
DOMParser = window.DOMParser,
TrustedTypes = window.TrustedTypes;
// As per issue #47, the web-components registry is inherited by a
// new document created via createHTMLDocument. As per the spec
// (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)
// a new empty registry is used when creating a template contents owner
// document, so we use that as our parent document to ensure nothing
// is inherited.
if (typeof HTMLTemplateElement === 'function') {
var template = document.createElement('template');
if (template.content && template.content.ownerDocument) {
document = template.content.ownerDocument;
}
}
var trustedTypesPolicy = _createTrustedTypesPolicy(TrustedTypes, originalDocument);
var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';
var _document = document,
implementation = _document.implementation,
createNodeIterator = _document.createNodeIterator,
getElementsByTagName = _document.getElementsByTagName,
createDocumentFragment = _document.createDocumentFragment;
var importNode = originalDocument.importNode;
var hooks = {};
/**
* Expose whether this browser supports running the full DOMPurify.
*/
DOMPurify.isSupported = implementation && typeof implementation.createHTMLDocument !== 'undefined' && document.documentMode !== 9;
var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR,
ERB_EXPR$$1 = ERB_EXPR,
DATA_ATTR$$1 = DATA_ATTR,
ARIA_ATTR$$1 = ARIA_ATTR,
IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA,
ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;
var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;
/**
* We consider the elements and attributes below to be safe. Ideally
* don't add any new ones but feel free to remove unwanted ones.
*/
/* allowed element names */
var ALLOWED_TAGS = null;
var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(svgFilters), _toConsumableArray(mathMl), _toConsumableArray(text)));
/* Allowed attribute names */
var ALLOWED_ATTR = null;
var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(mathMl$1), _toConsumableArray(xml)));
/* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */
var FORBID_TAGS = null;
/* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */
var FORBID_ATTR = null;
/* Decide if ARIA attributes are okay */
var ALLOW_ARIA_ATTR = true;
/* Decide if custom data attributes are okay */
var ALLOW_DATA_ATTR = true;
/* Decide if unknown protocols are okay */
var ALLOW_UNKNOWN_PROTOCOLS = false;
/* Output should be safe for jQuery's $() factory? */
var SAFE_FOR_JQUERY = false;
/* Output should be safe for common template engines.
* This means, DOMPurify removes data attributes, mustaches and ERB
*/
var SAFE_FOR_TEMPLATES = false;
/* Decide if document with <html>... should be returned */
var WHOLE_DOCUMENT = false;
/* Track whether config is already set on this instance of DOMPurify. */
var SET_CONFIG = false;
/* Decide if all elements (e.g. style, script) must be children of
* document.body. By default, browsers might move them to document.head */
var FORCE_BODY = false;
/* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html
* string (or a TrustedHTML object if Trusted Types are supported).
* If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead
*/
var RETURN_DOM = false;
/* Decide if a DOM `DocumentFragment` should be returned, instead of a html
* string (or a TrustedHTML object if Trusted Types are supported) */
var RETURN_DOM_FRAGMENT = false;
/* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM
* `Node` is imported into the current `Document`. If this flag is not enabled the
* `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by
* DOMPurify. */
var RETURN_DOM_IMPORT = false;
/* Try to return a Trusted Type object instead of a string, retrun a string in
* case Trusted Types are not supported */
var RETURN_TRUSTED_TYPE = false;
/* Output should be free from DOM clobbering attacks? */
var SANITIZE_DOM = true;
/* Keep element content when removing element? */
var KEEP_CONTENT = true;
/* If a `Node` is passed to sanitize(), then performs sanitization in-place instead
* of importing it into a new Document and returning a sanitized copy */
var IN_PLACE = false;
/* Allow usage of profiles like html, svg and mathMl */
var USE_PROFILES = {};
/* Tags to ignore content of when KEEP_CONTENT is true */
var FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);
/* Tags that are safe for data: URIs */
var DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image']);
/* Attributes safe for values like "javascript:" */
var URI_SAFE_ATTRIBUTES = null;
var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'summary', 'title', 'value', 'style', 'xmlns']);
/* Keep a reference to config to pass to hooks */
var CONFIG = null;
/* Ideally, do not touch anything below this line */
/* ______________________________________________ */
var formElement = document.createElement('form');
/**
* _parseConfig
*
* @param {Object} cfg optional config literal
*/
// eslint-disable-next-line complexity
var _parseConfig = function _parseConfig(cfg) {
if (CONFIG && CONFIG === cfg) {
return;
}
/* Shield configuration object from tampering */
if (!cfg || (typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') {
cfg = {};
}
/* Set configuration parameters */
ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;
ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;
URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;
FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};
FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};
USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;
ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true
ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true
ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false
SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false
SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false
WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false
RETURN_DOM = cfg.RETURN_DOM || false; // Default false
RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false
RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false
RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false
FORCE_BODY = cfg.FORCE_BODY || false; // Default false
SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true
KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true
IN_PLACE = cfg.IN_PLACE || false; // Default false
IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;
if (SAFE_FOR_TEMPLATES) {
ALLOW_DATA_ATTR = false;
}
if (RETURN_DOM_FRAGMENT) {
RETURN_DOM = true;
}
/* Parse profile info */
if (USE_PROFILES) {
ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(text)));
ALLOWED_ATTR = [];
if (USE_PROFILES.html === true) {
addToSet(ALLOWED_TAGS, html);
addToSet(ALLOWED_ATTR, html$1);
}
if (USE_PROFILES.svg === true) {
addToSet(ALLOWED_TAGS, svg);
addToSet(ALLOWED_ATTR, svg$1);
addToSet(ALLOWED_ATTR, xml);
}
if (USE_PROFILES.svgFilters === true) {
addToSet(ALLOWED_TAGS, svgFilters);
addToSet(ALLOWED_ATTR, svg$1);
addToSet(ALLOWED_ATTR, xml);
}
if (USE_PROFILES.mathMl === true) {
addToSet(ALLOWED_TAGS, mathMl);
addToSet(ALLOWED_ATTR, mathMl$1);
addToSet(ALLOWED_ATTR, xml);
}
}
/* Merge configuration parameters */
if (cfg.ADD_TAGS) {
if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
ALLOWED_TAGS = clone(ALLOWED_TAGS);
}
addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);
}
if (cfg.ADD_ATTR) {
if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
ALLOWED_ATTR = clone(ALLOWED_ATTR);
}
addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);
}
if (cfg.ADD_URI_SAFE_ATTR) {
addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);
}
/* Add #text in case KEEP_CONTENT is set to true */
if (KEEP_CONTENT) {
ALLOWED_TAGS['#text'] = true;
}
/* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */
if (WHOLE_DOCUMENT) {
addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);
}
/* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */
if (ALLOWED_TAGS.table) {
addToSet(ALLOWED_TAGS, ['tbody']);
delete FORBID_TAGS.tbody;
}
// Prevent further manipulation of configuration.
// Not available in IE8, Safari 5, etc.
if (freeze) {
freeze(cfg);
}
CONFIG = cfg;
};
/**
* _forceRemove
*
* @param {Node} node a DOM node
*/
var _forceRemove = function _forceRemove(node) {
DOMPurify.removed.push({ element: node });
try {
node.parentNode.removeChild(node);
} catch (error) {
node.outerHTML = emptyHTML;
}
};
/**
* _removeAttribute
*
* @param {String} name an Attribute name
* @param {Node} node a DOM node
*/
var _removeAttribute = function _removeAttribute(name, node) {
try {
DOMPurify.removed.push({
attribute: node.getAttributeNode(name),
from: node
});
} catch (error) {
DOMPurify.removed.push({
attribute: null,
from: node
});
}
node.removeAttribute(name);
};
/**
* _initDocument
*
* @param {String} dirty a string of dirty markup
* @return {Document} a DOM, filled with the dirty markup
*/
var _initDocument = function _initDocument(dirty) {
/* Create a HTML document */
var doc = void 0;
var leadingWhitespace = void 0;
if (FORCE_BODY) {
dirty = '<remove></remove>' + dirty;
} else {
/* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */
var matches = dirty.match(/^[\s]+/);
leadingWhitespace = matches && matches[0];
if (leadingWhitespace) {
dirty = dirty.slice(leadingWhitespace.length);
}
}
/* Use DOMParser to workaround Firefox bug (see comment below) */
if (useDOMParser) {
try {
doc = new DOMParser().parseFromString(dirty, 'text/html');
} catch (error) {}
}
/* Remove title to fix a mXSS bug in older MS Edge */
if (removeTitle) {
addToSet(FORBID_TAGS, ['title']);
}
/* Otherwise use createHTMLDocument, because DOMParser is unsafe in
Safari (see comment below) */
if (!doc || !doc.documentElement) {
doc = implementation.createHTMLDocument('');
var _doc = doc,
body = _doc.body;
body.parentNode.removeChild(body.parentNode.firstElementChild);
body.outerHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
}
if (dirty && leadingWhitespace) {
doc.body.insertBefore(document.createTextNode(leadingWhitespace), doc.body.childNodes[0] || null);
}
/* Work on whole document or just its body */
return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];
};
// Firefox uses a different parser for innerHTML rather than
// DOMParser (see https://bugzilla.mozilla.org/show_bug.cgi?id=1205631)
// which means that you *must* use DOMParser, otherwise the output may
// not be safe if used in a document.write context later.
//
// So we feature detect the Firefox bug and use the DOMParser if necessary.
//
// Chrome 77 and other versions ship an mXSS bug that caused a bypass to
// happen. We now check for the mXSS trigger and react accordingly.
if (DOMPurify.isSupported) {
(function () {
try {
var doc = _initDocument('<svg><p><textarea><img src="</textarea><img src=x abc=1//">');
if (doc.querySelector('svg img')) {
useDOMParser = true;
}
} catch (error) {}
})();
(function () {
try {
var doc = _initDocument('<x/><title>&lt;/title&gt;&lt;img&gt;');
if (/<\/title/.test(doc.querySelector('title').innerHTML)) {
removeTitle = true;
}
} catch (error) {}
})();
}
/**
* _createIterator
*
* @param {Document} root document/fragment to create iterator for
* @return {Iterator} iterator instance
*/
var _createIterator = function _createIterator(root) {
return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, function () {
return NodeFilter.FILTER_ACCEPT;
}, false);
};
/**
* _isClobbered
*
* @param {Node} elm element to check for clobbering attacks
* @return {Boolean} true if clobbered, false if safe
*/
var _isClobbered = function _isClobbered(elm) {
if (elm instanceof Text || elm instanceof Comment) {
return false;
}
if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string') {
return true;
}
return false;
};
/**
* _isNode
*
* @param {Node} obj object to check whether it's a DOM node
* @return {Boolean} true is object is a DOM node
*/
var _isNode = function _isNode(obj) {
return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? obj instanceof Node : obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.nodeType === 'number' && typeof obj.nodeName === 'string';
};
/**
* _executeHook
* Execute user configurable hooks
*
* @param {String} entryPoint Name of the hook's entry point
* @param {Node} currentNode node to work on with the hook
* @param {Object} data additional hook parameters
*/
var _executeHook = function _executeHook(entryPoint, currentNode, data) {
if (!hooks[entryPoint]) {
return;
}
hooks[entryPoint].forEach(function (hook) {
hook.call(DOMPurify, currentNode, data, CONFIG);
});
};
/**
* _sanitizeElements
*
* @protect nodeName
* @protect textContent
* @protect removeChild
*
* @param {Node} currentNode to check for permission to exist
* @return {Boolean} true if node was killed, false if left alive
*/
// eslint-disable-next-line complexity
var _sanitizeElements = function _sanitizeElements(currentNode) {
var content = void 0;
/* Execute a hook if present */
_executeHook('beforeSanitizeElements', currentNode, null);
/* Check if element is clobbered or can clobber */
if (_isClobbered(currentNode)) {
_forceRemove(currentNode);
return true;
}
/* Now let's check the element's type and name */
var tagName = currentNode.nodeName.toLowerCase();
/* Execute a hook if present */
_executeHook('uponSanitizeElement', currentNode, {
tagName: tagName,
allowedTags: ALLOWED_TAGS
});
/* Take care of an mXSS pattern using p, br inside svg, math */
if ((tagName === 'svg' || tagName === 'math') && currentNode.querySelectorAll('p, br').length !== 0) {
_forceRemove(currentNode);
return true;
}
/* Remove element if anything forbids its presence */
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
/* Keep content except for black-listed elements */
if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && typeof currentNode.insertAdjacentHTML === 'function') {
try {
var htmlToInsert = currentNode.innerHTML;
currentNode.insertAdjacentHTML('AfterEnd', trustedTypesPolicy ? trustedTypesPolicy.createHTML(htmlToInsert) : htmlToInsert);
} catch (error) {}
}
_forceRemove(currentNode);
return true;
}
/* Remove in case a noscript/noembed XSS is suspected */
if (tagName === 'noscript' && /<\/noscript/i.test(currentNode.innerHTML)) {
_forceRemove(currentNode);
return true;
}
if (tagName === 'noembed' && /<\/noembed/i.test(currentNode.innerHTML)) {
_forceRemove(currentNode);
return true;
}
/* Convert markup to cover jQuery behavior */
if (SAFE_FOR_JQUERY && !currentNode.firstElementChild && (!currentNode.content || !currentNode.content.firstElementChild) && /</g.test(currentNode.textContent)) {
DOMPurify.removed.push({ element: currentNode.cloneNode() });
if (currentNode.innerHTML) {
currentNode.innerHTML = currentNode.innerHTML.replace(/</g, '&lt;');
} else {
currentNode.innerHTML = currentNode.textContent.replace(/</g, '&lt;');
}
}
/* Sanitize element content to be template-safe */
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {
/* Get the element's text content */
content = currentNode.textContent;
content = content.replace(MUSTACHE_EXPR$$1, ' ');
content = content.replace(ERB_EXPR$$1, ' ');
if (currentNode.textContent !== content) {
DOMPurify.removed.push({ element: currentNode.cloneNode() });
currentNode.textContent = content;
}
}
/* Execute a hook if present */
_executeHook('afterSanitizeElements', currentNode, null);
return false;
};
/**
* _isValidAttribute
*
* @param {string} lcTag Lowercase tag name of containing element.
* @param {string} lcName Lowercase attribute name.
* @param {string} value Attribute value.
* @return {Boolean} Returns true if `value` is valid, otherwise false.
*/
// eslint-disable-next-line complexity
var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
/* Make sure attribute cannot clobber */
if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
return false;
}
/* Allow valid data-* attributes: At least one character after "-"
(https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)
We don't need to check the value; it's always URI safe. */
if (ALLOW_DATA_ATTR && DATA_ATTR$$1.test(lcName)) {
// This attribute is safe
} else if (ALLOW_ARIA_ATTR && ARIA_ATTR$$1.test(lcName)) {
// This attribute is safe
/* Otherwise, check the name is permitted */
} else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
return false;
/* Check value is safe. First, is attr inert? If so, is safe */
} else if (URI_SAFE_ATTRIBUTES[lcName]) {
// This attribute is safe
/* Check no script, data or unknown possibly unsafe URI
unless we know URI values are safe for that attribute */
} else if (IS_ALLOWED_URI$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {
// This attribute is safe
/* Keep image data URIs alive if src/xlink:href is allowed */
/* Further prevent gadget XSS for dynamically built script tags */
} else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && value.indexOf('data:') === 0 && DATA_URI_TAGS[lcTag]) {
// This attribute is safe
/* Allow unknown protocols: This provides support for links that
are handled by protocol handlers which may be unknown ahead of
time, e.g. fb:, spotify: */
} else if (ALLOW_UNKNOWN_PROTOCOLS && !IS_SCRIPT_OR_DATA$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {
// This attribute is safe
/* Check for binary attributes */
// eslint-disable-next-line no-negated-condition
} else if (!value) {
// Binary attributes are safe at this point
/* Anything else, presume unsafe, do not add it back */
} else {
return false;
}
return true;
};
/**
* _sanitizeAttributes
*
* @protect attributes
* @protect nodeName
* @protect removeAttribute
* @protect setAttribute
*
* @param {Node} currentNode to sanitize
*/
// eslint-disable-next-line complexity
var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
var attr = void 0;
var value = void 0;
var lcName = void 0;
var idAttr = void 0;
var l = void 0;
/* Execute a hook if present */
_executeHook('beforeSanitizeAttributes', currentNode, null);
var attributes = currentNode.attributes;
/* Check if we have attributes; if not we might have a text node */
if (!attributes) {
return;
}
var hookEvent = {
attrName: '',
attrValue: '',
keepAttr: true,
allowedAttributes: ALLOWED_ATTR
};
l = attributes.length;
/* Go backwards over all attributes; safely remove bad ones */
while (l--) {
attr = attributes[l];
var _attr = attr,
name = _attr.name,
namespaceURI = _attr.namespaceURI;
value = attr.value.trim();
lcName = name.toLowerCase();
/* Execute a hook if present */
hookEvent.attrName = lcName;
hookEvent.attrValue = value;
hookEvent.keepAttr = true;
_executeHook('uponSanitizeAttribute', currentNode, hookEvent);
value = hookEvent.attrValue;
/* Remove attribute */
// Safari (iOS + Mac), last tested v8.0.5, crashes if you try to
// remove a "name" attribute from an <img> tag that has an "id"
// attribute at the time.
if (lcName === 'name' && currentNode.nodeName === 'IMG' && attributes.id) {
idAttr = attributes.id;
attributes = apply(arraySlice, attributes, []);
_removeAttribute('id', currentNode);
_removeAttribute(name, currentNode);
if (attributes.indexOf(idAttr) > l) {
currentNode.setAttribute('id', idAttr.value);
}
} else if (
// This works around a bug in Safari, where input[type=file]
// cannot be dynamically set after type has been removed
currentNode.nodeName === 'INPUT' && lcName === 'type' && value === 'file' && hookEvent.keepAttr && (ALLOWED_ATTR[lcName] || !FORBID_ATTR[lcName])) {
continue;
} else {
// This avoids a crash in Safari v9.0 with double-ids.
// The trick is to first set the id to be empty and then to
// remove the attribute
if (name === 'id') {
currentNode.setAttribute(name, '');
}
_removeAttribute(name, currentNode);
}
/* Did the hooks approve of the attribute? */
if (!hookEvent.keepAttr) {
continue;
}
/* Take care of an mXSS pattern using namespace switches */
if (/svg|math/i.test(currentNode.namespaceURI) && new RegExp('</(' + Object.keys(FORBID_CONTENTS).join('|') + ')', 'i').test(value)) {
_removeAttribute(name, currentNode);
continue;
}
/* Sanitize attribute content to be template-safe */
if (SAFE_FOR_TEMPLATES) {
value = value.replace(MUSTACHE_EXPR$$1, ' ');
value = value.replace(ERB_EXPR$$1, ' ');
}
/* Is `value` valid for this attribute? */
var lcTag = currentNode.nodeName.toLowerCase();
if (!_isValidAttribute(lcTag, lcName, value)) {
continue;
}
/* Handle invalid data-* attribute set by try-catching it */
try {
if (namespaceURI) {
currentNode.setAttributeNS(namespaceURI, name, value);
} else {
/* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */
currentNode.setAttribute(name, value);
}
DOMPurify.removed.pop();
} catch (error) {}
}
/* Execute a hook if present */
_executeHook('afterSanitizeAttributes', currentNode, null);
};
/**
* _sanitizeShadowDOM
*
* @param {DocumentFragment} fragment to iterate over recursively
*/
var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
var shadowNode = void 0;
var shadowIterator = _createIterator(fragment);
/* Execute a hook if present */
_executeHook('beforeSanitizeShadowDOM', fragment, null);
while (shadowNode = shadowIterator.nextNode()) {
/* Execute a hook if present */
_executeHook('uponSanitizeShadowNode', shadowNode, null);
/* Sanitize tags and elements */
if (_sanitizeElements(shadowNode)) {
continue;
}
/* Deep shadow DOM detected */
if (shadowNode.content instanceof DocumentFragment) {
_sanitizeShadowDOM(shadowNode.content);
}
/* Check attributes, sanitize if necessary */
_sanitizeAttributes(shadowNode);
}
/* Execute a hook if present */
_executeHook('afterSanitizeShadowDOM', fragment, null);
};
/**
* Sanitize
* Public method providing core sanitation functionality
*
* @param {String|Node} dirty string or DOM node
* @param {Object} configuration object
*/
// eslint-disable-next-line complexity
DOMPurify.sanitize = function (dirty, cfg) {
var body = void 0;
var importedNode = void 0;
var currentNode = void 0;
var oldNode = void 0;
var returnNode = void 0;
/* Make sure we have a string to sanitize.
DO NOT return early, as this will return the wrong type if
the user has requested a DOM object rather than a string */
if (!dirty) {
dirty = '<!-->';
}
/* Stringify, in case dirty is an object */
if (typeof dirty !== 'string' && !_isNode(dirty)) {
// eslint-disable-next-line no-negated-condition
if (typeof dirty.toString !== 'function') {
throw new TypeError('toString is not a function');
} else {
dirty = dirty.toString();
if (typeof dirty !== 'string') {
throw new TypeError('dirty is not a string, aborting');
}
}
}
/* Check we can run. Otherwise fall back or ignore */
if (!DOMPurify.isSupported) {
if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {
if (typeof dirty === 'string') {
return window.toStaticHTML(dirty);
}
if (_isNode(dirty)) {
return window.toStaticHTML(dirty.outerHTML);
}
}
return dirty;
}
/* Assign config vars */
if (!SET_CONFIG) {
_parseConfig(cfg);
}
/* Clean up removed elements */
DOMPurify.removed = [];
if (IN_PLACE) {
/* No special handling necessary for in-place sanitization */
} else if (dirty instanceof Node) {
/* If dirty is a DOM element, append to an empty document to avoid
elements being stripped by the parser */
body = _initDocument('<!-->');
importedNode = body.ownerDocument.importNode(dirty, true);
if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {
/* Node is already a body, use as is */
body = importedNode;
} else if (importedNode.nodeName === 'HTML') {
body = importedNode;
} else {
// eslint-disable-next-line unicorn/prefer-node-append
body.appendChild(importedNode);
}
} else {
/* Exit directly if we have nothing to do */
if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && RETURN_TRUSTED_TYPE && dirty.indexOf('<') === -1) {
return trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
}
/* Initialize the document to work on */
body = _initDocument(dirty);
/* Check we have a DOM node from the data */
if (!body) {
return RETURN_DOM ? null : emptyHTML;
}
}
/* Remove first element node (ours) if FORCE_BODY is set */
if (body && FORCE_BODY) {
_forceRemove(body.firstChild);
}
/* Get node iterator */
var nodeIterator = _createIterator(IN_PLACE ? dirty : body);
/* Now start iterating over the created document */
while (currentNode = nodeIterator.nextNode()) {
/* Fix IE's strange behavior with manipulated textNodes #89 */
if (currentNode.nodeType === 3 && currentNode === oldNode) {
continue;
}
/* Sanitize tags and elements */
if (_sanitizeElements(currentNode)) {
continue;
}
/* Shadow DOM detected, sanitize it */
if (currentNode.content instanceof DocumentFragment) {
_sanitizeShadowDOM(currentNode.content);
}
/* Check attributes, sanitize if necessary */
_sanitizeAttributes(currentNode);
oldNode = currentNode;
}
oldNode = null;
/* If we sanitized `dirty` in-place, return it. */
if (IN_PLACE) {
return dirty;
}
/* Return sanitized string or DOM */
if (RETURN_DOM) {
if (RETURN_DOM_FRAGMENT) {
returnNode = createDocumentFragment.call(body.ownerDocument);
while (body.firstChild) {
// eslint-disable-next-line unicorn/prefer-node-append
returnNode.appendChild(body.firstChild);
}
} else {
returnNode = body;
}
if (RETURN_DOM_IMPORT) {
/* AdoptNode() is not used because internal state is not reset
(e.g. the past names map of a HTMLFormElement), this is safe
in theory but we would rather not risk another attack vector.
The state that is cloned by importNode() is explicitly defined
by the specs. */
returnNode = importNode.call(originalDocument, returnNode, true);
}
return returnNode;
}
var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
/* Sanitize final string template-safe */
if (SAFE_FOR_TEMPLATES) {
serializedHTML = serializedHTML.replace(MUSTACHE_EXPR$$1, ' ');
serializedHTML = serializedHTML.replace(ERB_EXPR$$1, ' ');
}
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
};
/**
* Public method to set the configuration once
* setConfig
*
* @param {Object} cfg configuration object
*/
DOMPurify.setConfig = function (cfg) {
_parseConfig(cfg);
SET_CONFIG = true;
};
/**
* Public method to remove the configuration
* clearConfig
*
*/
DOMPurify.clearConfig = function () {
CONFIG = null;
SET_CONFIG = false;
};
/**
* Public method to check if an attribute value is valid.
* Uses last set config, if any. Otherwise, uses config defaults.
* isValidAttribute
*
* @param {string} tag Tag name of containing element.
* @param {string} attr Attribute name.
* @param {string} value Attribute value.
* @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.
*/
DOMPurify.isValidAttribute = function (tag, attr, value) {
/* Initialize shared config vars if necessary. */
if (!CONFIG) {
_parseConfig({});
}
var lcTag = tag.toLowerCase();
var lcName = attr.toLowerCase();
return _isValidAttribute(lcTag, lcName, value);
};
/**
* AddHook
* Public method to add DOMPurify hooks
*
* @param {String} entryPoint entry point for the hook to add
* @param {Function} hookFunction function to execute
*/
DOMPurify.addHook = function (entryPoint, hookFunction) {
if (typeof hookFunction !== 'function') {
return;
}
hooks[entryPoint] = hooks[entryPoint] || [];
hooks[entryPoint].push(hookFunction);
};
/**
* RemoveHook
* Public method to remove a DOMPurify hook at a given entryPoint
* (pops it from the stack of hooks if more are present)
*
* @param {String} entryPoint entry point for the hook to remove
*/
DOMPurify.removeHook = function (entryPoint) {
if (hooks[entryPoint]) {
hooks[entryPoint].pop();
}
};
/**
* RemoveHooks
* Public method to remove all DOMPurify hooks at a given entryPoint
*
* @param {String} entryPoint entry point for the hooks to remove
*/
DOMPurify.removeHooks = function (entryPoint) {
if (hooks[entryPoint]) {
hooks[entryPoint] = [];
}
};
/**
* RemoveAllHooks
* Public method to remove all DOMPurify hooks
*
*/
DOMPurify.removeAllHooks = function () {
hooks = {};
};
return DOMPurify;
}
var purify = createDOMPurify();
return purify;
})));
//# sourceMappingURL=purify.js.map
/*
WAToolkit
Author: Cristian Perez <http://www.cpr.name>
License: GNU GPLv3
*/
var debug = false;
var debugRepeating = false;
var whatsAppUrl = "https://web.whatsapp.com/";
var rateUrl = "https://chrome.google.com/webstore/detail/watoolkit/fedimamkpgiemhacbdhkkaihgofncola/reviews";
var optionsFragment = "#watOptions";
var sourceChatFragment = "#watSrcChatTitle=";
var safetyDelayShort = 300;
var safetyDelayLong = 600; // Must be smaller than checkBadgeInterval
var safetyDelayLonger = 1200;
var checkBadgeInterval = 5000; // Must be greater than safetyDelayLong
var checkLoadingErrorInterval = 30000;
// Default options, should match the ones defined in background.js
var backgroundNotif = true;
var wideText = false;
// Prevent page exit confirmation dialog. The window object is not shared between the original page and the content script: http://stackoverflow.com/a/12396221/423171
var scriptElem = document.createElement("script");
scriptElem.innerHTML = "window.onbeforeunload = null;";
document.head.appendChild(scriptElem);
chrome.runtime.sendMessage({ name: "getIsBackgroundPage" }, function (isBackgroundPage)
{
if (isBackgroundPage)
{
if (debug) console.info("WAT: Background script injected");
backgroundScript();
}
else
{
if (debug) console.info("WAT: Foreground script injected");
foregroundScript();
}
chrome.runtime.sendMessage({ name: "getOptions" }, function (options)
{
if (debug) console.info("WAT: Got options: " + JSON.stringify(options));
backgroundNotif = options.backgroundNotif;
wideText = options.wideText;
if (!isBackgroundPage)
{
updateWideText();
}
});
});
function backgroundScript()
{
addStopAnimations();
onMainUiReady(function ()
{
proxyNotifications(true);
checkBadge();
reCheckBadge(true);
});
reCheckLoadingError();
}
function foregroundScript()
{
onMainUiReady(function ()
{
proxyNotifications(false);
checkBadge();
reCheckBadge(false);
checkSrcChat();
addOptions();
});
}
// FOR BOTH BACKGROUND AND FOREGROUND SCRIPTS ////////////////////////////////////////////////////
function onMainUiReady(callback)
{
try
{
// First check if the main UI is already ready, just in case
if (document.querySelector("#app .two") != undefined)
{
if (debug) console.info("WAT: Found main UI, will notify main UI ready event directly");
setTimeout(function () { callback(); }, safetyDelayShort);
}
else
{
if (debug) console.info("WAT: Setting up mutation observer for main UI ready event...");
var appElem = document.querySelector("#app");
if (appElem != undefined)
{
var mutationObserver = new MutationObserver(function (mutations)
{
if (debug) console.info("WAT: Mutation observerd, will search main UI");
// Check if main UI is now ready (new child div with class "two")
if (document.querySelector("#app .two") != undefined)
{
if (debug) console.info("WAT: Found main UI, will notify main UI ready event");
mutationObserver.disconnect();
setTimeout(function () { callback(); }, safetyDelayShort);
}
});
mutationObserver.observe(appElem, { childList: true, subtree: true });
}
}
}
catch (err)
{
console.error("WAT: Exception while setting up mutation observer for main UI ready event");
console.error(err);
}
}
function proxyNotifications(isBackgroundScript)
{
// The window object is not shared between the original page and the content script: http://stackoverflow.com/a/12396221/423171
if (isBackgroundScript)
{
window.addEventListener("message", function (event)
{
if (event != undefined && event.data != undefined && event.data.name == "backgroundNotificationClicked")
{
chrome.runtime.sendMessage({ name: "backgroundNotificationClicked", srcChatTitle: event.data.srcChatTitle });
}
});
}
else
{
window.addEventListener("message", function (event)
{
if (event != undefined && event.data != undefined && (event.data.name == "foregroundNotificationClicked" || event.data.name == "foregroundNotificationShown"))
{
setTimeout(function () { checkBadge(); }, safetyDelayLonger);
}
});
}
var script = "";
script += "var debug = " + debug + ";";
script += "var isBackgroundScript = " + isBackgroundScript + ";";
script += "var backgroundNotif = " + backgroundNotif + ";";
script += "(" + function ()
{
// Notification spec: https://developer.mozilla.org/en/docs/Web/API/notification
// Save native notification
var _Notification = window.Notification;
// Create proxy notification
var ProxyNotification = function (title, options)
{
if (isBackgroundScript && !backgroundNotif)
{
if (debug) console.info("WAT: Notification creation intercepted, will not proxy it because the user disabled background notifications");
return;
}
else
{
if (debug) console.info("WAT: Notification creation intercepted, will proxy it");
}
// Proxy constructor
var _notification = new _Notification(title, options);
// Proxy instance properties
this.title = _notification.title;
this.dir = _notification.dir;
this.lang = _notification.lang;
this.body = _notification.body;
this.tag = _notification.tag;
this.icon = _notification.icon;
// Proxy event handlers
var that = this;
_notification.onclick = function (event)
{
if (that.onclick != undefined) that.onclick(event);
if (isBackgroundScript)
{
var srcChatTitle = undefined;
if (event != undefined && event.srcElement != undefined && typeof event.srcElement.title == "string" && event.srcElement.title.length > 0)
{
srcChatTitle = event.srcElement.title;
if (debug) console.info("WAT: Background notification click intercepted with srcChatTitle " + srcChatTitle);
}
window.postMessage({ name: "backgroundNotificationClicked", srcChatTitle: srcChatTitle }, "*");
}
else
{
if (debug) console.info("WAT: Foreground notification click intercepted");
window.postMessage({ name: "foregroundNotificationClicked" }, "*");
}
};
_notification.onshow = function (event)
{
if (that.onshow != undefined) that.onshow(event);
if (!isBackgroundScript)
{
if (debug) console.info("WAT: Foreground notification show intercepted");
window.postMessage({ name: "foregroundNotificationShown" }, "*");
}
};
_notification.onerror = function (event)
{
if (that.onerror != undefined) that.onerror(event);
};
_notification.onclose = function (event)
{
if (that.onclose != undefined) that.onclose(event);
};
// Proxy instance methods
this.close = function ()
{
_notification.close();
};
this.addEventListener = function (type, listener, useCapture)
{
_notification.addEventListener(type, listener, useCapture);
};
this.removeEventListener = function (type, listener, useCapture)
{
_notification.removeEventListener(type, listener, useCapture);
};
this.dispatchEvent = function (event)
{
_notification.dispatchEvent(event);
};
};
// Proxy static properties
ProxyNotification.permission = _Notification.permission;
// Proxy static methods
ProxyNotification.requestPermission = _Notification.requestPermission;
// Replace native notification with proxy notification
window.Notification = ProxyNotification;
} + ")();";
var scriptElem = document.createElement("script");
scriptElem.innerHTML = script;
document.head.appendChild(scriptElem);
}
var lastToolbarIconWarn = -1;
var lastToolbarIconBadgeText = -1;
var lastToolbarIconTooltipText = -1;
function reCheckBadge(isBackgroundScript)
{
if (isBackgroundScript)
{
setTimeout(function () { document.dispatchEvent(new CustomEvent("stopAnimations")); }, checkBadgeInterval - safetyDelayLong);
}
setTimeout(function () { checkBadge(); reCheckBadge(isBackgroundScript); }, checkBadgeInterval);
}
function checkBadge()
{
if (debugRepeating) console.info("WAT: Checking badge...");
try
{
var isSessionActive = document.querySelector("#pane-side") != undefined;
var warn = !isSessionActive || document.querySelector("[data-icon='alert-phone']") != undefined || document.querySelector("[data-icon='alert-computer']") != undefined;
if (isSessionActive)
{
var totalUnreadCount = 0;
var tooltipText = "";
var parentChatElem = document.querySelector("#pane-side").children[0].children[0].children[0];
var chatElems = parentChatElem.children;
for (var i = 0; i < chatElems.length; i++)
{
var chatElem = chatElems[i];
var unreadElem = chatElem.children[0].children[0].children[1].children[1].children[1];
var unreadCount = parseInt(unreadElem.textContent) || 0; // Returns 0 in case of isNaN
if (unreadCount > 0)
{
var chatTitle = chatElem.children[0].children[0].children[1].children[0].children[0].textContent;
var chatTime = chatElem.children[0].children[0].children[1].children[0].children[1].textContent;
var chatStatus = chatElem.children[0].children[0].children[1].children[1].children[0].textContent;
if (chatTitle.length > 30) // Max 30 chars
{
chatTitle = chatTitle.substr(0, 30 - 3) + "...";
}
if (chatStatus.length > 70) // Max 70 chars
{
chatStatus = chatStatus.substr(0, 70 - 3) + "...";
}
totalUnreadCount += unreadCount;
tooltipText += (i > 0 ? "\n" : "") + "(" + unreadCount + ") " + chatTitle + " → " + chatStatus + " [" + chatTime + "]";
}
}
var badgeText = "";
if (totalUnreadCount > 0)
{
badgeText = totalUnreadCount.toString();
}
if (tooltipText.length == 0)
{
tooltipText = "Open WhatsApp"; // Should match browser_action.default_title defined in manifest.json
}
if (lastToolbarIconWarn !== warn || lastToolbarIconBadgeText !== badgeText || lastToolbarIconTooltipText !== tooltipText)
{
if (debug) console.info("WAT: Will update toolbar icon info");
chrome.runtime.sendMessage({ name: "setToolbarIcon", warn: warn, badgeText: badgeText, tooltipText: tooltipText });
lastToolbarIconWarn = warn;
lastToolbarIconBadgeText = badgeText;
lastToolbarIconTooltipText = tooltipText;
}
else
{
if (debugRepeating) console.info("WAT: Will not update toolbar icon info because it did not change");
}
}
else
{
if (lastToolbarIconWarn !== warn)
{
if (debug) console.info("WAT: Will update toolbar icon warning info");
chrome.runtime.sendMessage({ name: "setToolbarIcon", warn: warn });
lastToolbarIconWarn = warn;
}
else
{
if (debugRepeating) console.info("WAT: Will not update toolbar icon warning info because it did not change");
}
}
}
catch (err)
{
console.error("WAT: Exception while checking badge");
console.error(err);
}
}
// FOR BACKGROUND SCRIPT /////////////////////////////////////////////////////////////////////////
function addStopAnimations()
{
// Provide stopAnimations method to clear all pending animations that can cause live DOM data such as unreadCount not to be up to date on the background page
// Velocity.js related thread: https://github.com/julianshapiro/velocity/issues/842 (special thanks to https://github.com/Rycochet)
// The window object is not shared between the original page and the content script: http://stackoverflow.com/a/12396221/423171
if (debug) console.info("WAT: Adding stopAnimations() function...");
var script = "";
script += "var debugRepeating = " + debugRepeating + ";";
script += "(" + function ()
{
function _stopAnimations(maxChecks)
{
try
{
var pendingElems = document.querySelectorAll(".velocity-animating");
if (pendingElems.length > 0)
{
if (debugRepeating) console.info("WAT: Will stop " + pendingElems.length + " pending animations");
Velocity(Array.from(pendingElems), "stop");
maxChecks--; // Max consecutive repetitions to prevent a potential infinite loop if WhatsApp changes something on their animation logic
if (maxChecks > 0)
{
setTimeout(function () { _stopAnimations(maxChecks); }, 0);
}
else
{
if (debugRepeating) console.info("WAT: Max repetitions reached while stopping animations, will not continue");
}
}
}
catch (err)
{
console.error("WAT: Exception while stopping Velocity.js animations");
console.error(err);
}
}
document.addEventListener("stopAnimations", function (e)
{
try
{
_stopAnimations(20); // maxChecks is set so that all consecutive _stopAnimations() calls should not exceed safetyDelayLong for optimal performance
}
catch (err)
{
console.error("WAT: Exception while stopping animations");
console.error(err);
}
});
} + ")();";
var scriptElem = document.createElement("script");
scriptElem.innerHTML = script;
document.head.appendChild(scriptElem);
}
var lastPotentialLoadingError = false;
function reCheckLoadingError()
{
setTimeout(function () { checkLoadingError(); }, checkLoadingErrorInterval);
}
function checkLoadingError()
{
if (debugRepeating) console.info("WAT: Checking potential loading error...");
try
{
var potentialLoadingError = document.querySelector("#startup") != undefined;
if (potentialLoadingError && !lastPotentialLoadingError)
{
if (debug) console.warn("WAT: Found potential loading error");
}
if (lastPotentialLoadingError && potentialLoadingError)
{
if (debug) console.warn("WAT: Found loading error, will reload");
window.location.href = whatsAppUrl;
}
else
{
lastPotentialLoadingError = potentialLoadingError;
}
}
catch (err)
{
console.error("WAT: Exception while checking loading error");
console.error(err);
}
reCheckLoadingError();
}
// FOR FOREGROUND SCRIPT /////////////////////////////////////////////////////////////////////////
function checkSrcChat()
{
if (debug) console.info("WAT: Checking source chat...");
try
{
var fragment = window.location.hash;
if (typeof fragment == "string" && fragment.indexOf(sourceChatFragment) == 0)
{
var srcChatTitle = decodeURIComponent(fragment.substr(sourceChatFragment.length));
var chatTitle = undefined;
var foundSrcChat = false;
var parentChatElem = document.querySelector("#pane-side").children[0].children[0].children[0];
var chatElems = parentChatElem.children;
for (var i = 0; i < chatElems.length; i++)
{
var chatElem = chatElems[i];
chatTitle = chatElem.children[0].children[0].children[1].children[0].children[0].children[0].children[0];
var chatTitleText = chatTitle.getAttribute("title");
if (typeof chatTitleText == "string" && chatTitleText == srcChatTitle)
{
foundSrcChat = true;
break;
}
}
if (foundSrcChat)
{
if (debug) console.info("WAT: Found source chat, will click it");
history.replaceState({}, document.title, "/");
setTimeout(function ()
{
// For some reason chatTitle.click() stopped working
chatTitle.dispatchEvent(new MouseEvent("mousedown", { bubbles: true, cancelable: true }));
}, safetyDelayShort); // The delay fixes some strange page misposition glitch
}
}
}
catch (err)
{
console.error("WAT: Exception while checking source chat");
console.error(err);
}
}
function addOptions()
{
if (debug) console.info("WAT: Adding options...");
try
{
var menu = document.querySelector("#side > header").children[1];
if (menu != undefined)
{
if (debug) console.info("WAT: Will add options");
var menuItem = document.createElement("div");
menuItem.setAttribute("class", "menu-watoolkit");
var iconElem = document.createElement("button");
iconElem.setAttribute("class", "icon-watoolkit");
iconElem.setAttribute("title", "WAToolkit options");
menuItem.appendChild(iconElem);
menu.firstChild.insertBefore(menuItem, menu.firstChild.firstChild);
chrome.runtime.sendMessage({ name: "getOptions" }, function (options)
{
if (debug) console.info("WAT: Got options: " + JSON.stringify(options));
backgroundNotif = options.backgroundNotif;
wideText = options.wideText;
var dropContent = " \
<div class='watoolkit-options-container'> \
<div class='watoolkit-options-title'>WAToolkit options</div> \
<div id='watoolkit-option-background-notif' class='watoolkit-options-item'> \
<div class='checkbox-watoolkit " + (backgroundNotif ? "checked" : "unchecked") + "'></div> \
Background notifications \
<div class='watoolkit-options-description'>Enable background notifications to receive new message notifications even when you have no WhatsApp tab or Chrome window open at all. Notifications must be enabled in WhatsApp's own settings menu for background notifications to work. If you disable the background notifications, you will probably want to silence them as well in WhatsApp's own settings menu.</div> \
</div> \
<div id='watoolkit-option-wide-text' class='watoolkit-options-item'> \
<div class='checkbox-watoolkit " + (wideText ? "checked" : "unchecked") + "'></div> \
Wide text bubbles \
<div class='watoolkit-options-description'>Enable wide text bubbles to make use of the full chat panel width in both outgoing and incomming messages.</div> \
</div> \
<div id='watoolkit-option-rate' class='watoolkit-options-item watoolkit-rate'> \
<div class='watoolkit-rate-heart'>❤</div> \
Rate WAToolkit in Chrome Web Store \
<div class='watoolkit-options-description'>If you enjoy WATookit and would like the development to continue, please help us with a 5 star ★★★★★ rating on Chrome Web Store.</div> \
</div> \
</div>";
var drop = new Drop({
target: menuItem,
content: dropContent,
position: "bottom left",
classes: "drop-theme-watoolkit",
openOn: "click",
tetherOptions: {
offset: "-4px -4px 0 0"
}
});
drop.on("open", function()
{
document.getElementsByClassName("menu-watoolkit")[0].setAttribute("class", "menu-horizontal-item active menu-watoolkit");
document.getElementById("watoolkit-option-background-notif").addEventListener("click", optionBackgroundNotifClick);
document.getElementById("watoolkit-option-wide-text").addEventListener("click", optionWideTextClick);
document.getElementById("watoolkit-option-rate").addEventListener("click", optionRateClick);
});
drop.on("close", function()
{
document.getElementsByClassName("menu-watoolkit")[0].setAttribute("class", "menu-horizontal-item menu-watoolkit");
document.getElementById("watoolkit-option-background-notif").removeEventListener("click", optionBackgroundNotifClick);
document.getElementById("watoolkit-option-wide-text").removeEventListener("click", optionWideTextClick);
document.getElementById("watoolkit-option-rate").removeEventListener("click", optionRateClick);
});
var fragment = window.location.hash;
if (typeof fragment == "string" && fragment.indexOf(optionsFragment) == 0)
{
history.replaceState({}, document.title, "/");
setTimeout(function () { drop.open(); }, safetyDelayLong); // The delay fixes a potential dialog misposition glitch
}
});
}
}
catch (err)
{
console.error("WAT: Exception while adding options");
console.error(err);
}
}
function optionBackgroundNotifClick()
{
var checkbox = document.querySelector("#watoolkit-option-background-notif .checkbox-watoolkit");
var checkboxClass = checkbox.getAttribute("class");
if (checkboxClass.indexOf("unchecked") > -1)
{
checkbox.setAttribute("class", checkboxClass.replace("unchecked", "checked"));
backgroundNotif = true;
}
else
{
checkbox.setAttribute("class", checkboxClass.replace("checked", "unchecked"));
backgroundNotif = false;
}
chrome.runtime.sendMessage({ name: "setOptions", backgroundNotif: backgroundNotif });
}
function optionWideTextClick()
{
var checkbox = document.querySelector("#watoolkit-option-wide-text .checkbox-watoolkit");
var checkboxClass = checkbox.getAttribute("class");
if (checkboxClass.indexOf("unchecked") > -1)
{
checkbox.setAttribute("class", checkboxClass.replace("unchecked", "checked"));
wideText = true;
}
else
{
checkbox.setAttribute("class", checkboxClass.replace("checked", "unchecked"));
wideText = false;
}
chrome.runtime.sendMessage({ name: "setOptions", wideText: wideText });
updateWideText();
}
function optionRateClick()
{
window.open(rateUrl);
}
var wideTextStyleElem;
function updateWideText()
{
if (debug) console.info("WAT: Updating wide text...");
if (wideTextStyleElem == undefined)
{
wideTextStyleElem = document.createElement("style");
wideTextStyleElem.setAttribute("type", "text/css");
wideTextStyleElem.innerHTML = ".message-in div, .message-out div { max-width: 100% !important; }";
}
if (wideText && wideTextStyleElem.parentElement == undefined)
{
if (debug) console.info("WAT: Will update wide text");
document.getElementsByTagName("head")[0].appendChild(wideTextStyleElem);
}
else if (!wideText && wideTextStyleElem.parentElement != undefined)
{
if (debug) console.info("WAT: Will update wide text");
wideTextStyleElem.parentElement.removeChild(wideTextStyleElem);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment