{"version":3,"sources":["_layouts/mocha/mocha.js","_layouts/mocha/excanvas_r73.js"],"names":["MUI","MochaUI","Hash","version","options","theme","advancedEffects","standardEffects","path","source","themes","plugins","themePath","files","fixPNG","myImage","Browser","Engine","trident4","document","body","filters","imgID","id","imgClass","className","imgTitle","title","alt","imgStyle","style","cssText","strNewHTML","width","height","src","outerHTML","addResizeRight","element","min","max","$","instance","Columns","instances","get","handle","getNext","setStyle","webkit","trident","events","mousedown","setCapture","mouseup","releaseCapture","isMobile","touchstart","touchend","addEvents","resize","makeResizable","modifiers","x","y","limit","onStart","getElements","bind","this","onDrag","gecko","$$","each","panel","length","hide","rWidth","getParent","show","getChildren","el","getStyle","toInt","onComplete","fireEvent","addResizeLeft","getPrevious","partner","invert","addResizeBottom","Panels","handleEl","onBeforeStart","originalHeight","partnerOriginalHeight","iframeEl","partnerHeight","resizeChildren","column","panelHeight","extend","Windows","ieSupport","updateContent","$extend","childElement","method","data","content","loadMethod","url","scrollbars","padding","require","onContentLoaded","$empty","css","images","js","onload","args","recipient","retrieve","getFittedTitle","titleEl","set","dockTabEl","dockTabTextEl","substring","contentEl","contentContainer","contentWrapperEl","setStyles","overflow","padding-top","top","padding-bottom","bottom","padding-left","left","padding-right","right","empty","getAllNext","destroy","colHandles","Require","presto","delay","loadSelect","fittedTitle","relativeWidth","Math","floor","updateContentXHR","updateContentIframe","updateContentJSON","updateContentHTML","Request","update","toQueryString","evalScripts","evalResponse","headers","Content-Type","onRequest","showSpinner","onFailure","hideSpinner","onException","onSuccess","json","JSON","decode","$A","HTML","response","error","RegExp","exec","responseText","typeOf","addClass","send","contentURL","removeClass","Element","name","class","marginwidth","marginheight","frameBorder","scrolling","styles","offsetHeight","panelEl","offsetWidth","injectInside","addEvent","e","elementTypes","Array","contains","$type","inject","reloadIframe","iframe","frames","location","reload","roundedRect","ctx","radius","rgb","a","fillStyle","join","beginPath","moveTo","lineTo","quadraticCurveTo","fill","triangle","closePath","circle","diameter","arc","PI","notification","message","Window","closeAfter","type","shadowBlur","toggleAdvancedEffects","link","toggleAdvancedEffectsLink","toggleStandardEffects","toggleStandardEffectsLink","underlayInitialize","getCoordinates","opacity","display","setUnderlaySize","MooTools","getTouchOrMouseEvent","event","blurAll","window","implement","shake","duration","parent","position","coords","getPosition","morph","cancel","oldOptions","i","start","$random","chain","String","parseQueryString","vars","split","rs","val","keys","decodeURIComponent","processHTML","text","match","getCSSRule","selector","ii","styleSheets","mysheet","myrules","cssRules","rules","selectorText","protocol","isSuccess","status","$try","ActiveXObject","XMLHttpRequest","Class","Implements","Options","initialize","setOptions","assetsToLoad","cssLoaded","assetsLoaded","sheet","getAsset","requireOnload","requireContinue","image","script","tries","checker","$clear","periodical","properties","oldonload","Asset","javascript","alert","check","$lambda","load","doc","webkit419","readystatechange","readyState","setProperties","head","media","rel","href","newWindowsFromHTML","arg","newWindowsFromJSON","arrangeCascade","arrangeTile","saveWorkspace","loadWorkspace","Themes","init","indexLevel","windowIDCount","windowsVisible","focusingWindow","windowOptions","icon","wrapperClass","toolbar","toolbarPosition","toolbarHeight","toolbarURL","toolbarData","toolbarContent","toolbarOnload","toolbar2","toolbar2Position","toolbar2Height","toolbar2URL","toolbar2Data","toolbar2Content","toolbar2Onload","footer","footerHeight","footerURL","footerData","footerContent","footerOnload","footerHide","container","restrict","shape","collapsible","minimizable","maximizable","closable","storeOnClose","modalOverlayClose","draggable","draggableGrid","draggableLimit","draggableSnap","resizable","resizeLimit","autoFit","minWidth","minHeight","headerHeight","cornerRadius","shadowOffset","controlsOffset","useCanvas","useCanvasControls","useSpinner","headerStartColor","headerStopColor","bodyBgColor","minimizeBgColor","minimizeBgAlpha","minimizeColor","minimizeAlpha","maximizeBgColor","maximizeBgAlpha","maximizeColor","maximizeAlpha","closeBgColor","closeBgAlpha","closeColor","closeAlpha","resizableColor","onBeforeBuild","onFocus","onBlur","onResize","onMinimize","onMaximize","onRestore","onClose","onCloseComplete","onBrowserResize","windowOptionsOriginal","$merge","Events","mochaControlsWidth","minimizebuttonX","maximizebuttonX","closebuttonX","headerFooterShadow","oldTop","oldLeft","isMaximized","isMinimized","isCollapsed","timestamp","$time","Desktop","desktop","contentBgColor","Dock","dock","windowEl","newWindow","focusWindow","saveValues","coordinates","instanceID","isClosing","zIndex","store","Platform","mac","test","navigator","userAgent","Number","$1","insertWindowElements","toolbar2WrapperEl","borderRadius","canvasControlsEl","controlsEl","mouseover","canvasHeaderEl","setColors","setMochaControlsWidth","toolbarEl","toolbar2El","footerEl","drawWindow","attachDraggable","attachResizable","setupEvents","adjustHandles","dimensions","getSize","getScroll","opacityMorph","Fx","Morph","transition","Transitions","Sine","easeInOut","displayNewWindow","resizeMorph","Elements","resizeAnimation","closeWindow","createDockTab","restoreMinimized","collapseToggle","setTimeout","pass","hasClass","currentButton","setDesktopSize","centerWindow","currentModal","openModalWindows","push","Modal","modalOverlayCloseMorph","modalOverlayOpenMorph","closeButtonEl","Event","stop","preventDefault","close","minimizeButtonEl","minimizeWindow","maximizeButtonEl","restoreWindow","maximizeWindow","titleBarEl","setupElements","elems","concat","elem","startsWith","getElement","elemName","windowDrag","Drag","Move","grid","snap","resizable1","n","ne","nw","resizeOnStart","y2","resizeOnDrag","resizeOnComplete","resizable2","resizable3","se","resizable4","s","sw","resizable5","w","x2","shadowBlur2x","detachResizable","detach","reattachResizable","attach","cache","zIndexFixEl","marginWidth","marginHeight","overlayEl","cursor","background","contentBorderEl","toolbarWrapperEl","canvasEl","G_vmlCanvasManager","initElement","spinnerEl","gradient","gradientFrom","from","gradientTo","to","replace","Color","mix","shadows","drawingWindow","borderHeight","getContext","clearRect","drawBox","drawGauge","drawControls","drawWindowCollapsed","drawBoxCollapsed","ctx2","closebutton","maximizebutton","minimizebutton","bodyRoundedRect","topRoundedRect","topRoundedRect2","lineWidth","lineCap","strokeStyle","stroke","lingrad","createLinearGradient","addColorStop","toLowerCase","indexOf","rgbBg","aBg","setProperty","minimize","maximize","restore","resizeWindow","center","handlePositionLimits","winSize","docSize","getTop","getLeft","newTop","newLeft","setPosition","pop","nextModalWindow","nextModalWindowZIndex","closingJobs","dispose","newFocus","getWindowWithHighestZindex","erase","loadingWorkspace","windowUnload","dockSortables","removeItems","closeAll","handles","visibility","toggleWindowVisibility","makeActiveTab","highestZindex","windowWithHighestZindex","windowPosTop","windowPosLeft","centered","oldWidth","getWidth","oldHeight","getHeight","toString","0","1","dynamicResize","key","control","Extends","modalInitialize","setModalSize","modalOverlay","initializeTabs","target","listitem","getFirst","selected","columnIDCount","panelIDCount","desktopHeader","desktopFooter","desktopNavBar","pageWrapper","page","margin","menuInitialize","enableOnResize","myChain","callChain","doOnBrowserResize","disableOnResize","windowDimensions","dockWrapper","dockOffset","dockVisible","pageWrapperHeight","getKeys","resizePanels","grab","newHeight","Column","placement","sortable","onCollapse","onExpand","panels","columnEl","columnHeight","addLists","sortables","Sortables","constrain","revert","onSort","panelWrapper","getLast","nextpanel","handleIconEl","columnToggle","switchPanel","activePanel","forEach","columnCollapse","removeEvents","columnExpand","Panel","tabsURL","tabsData","tabsOnload","header","headerToolbox","headerToolboxURL","headerToolboxOnload","onShow","onHide","showHandle","panelWrapperEl","panelHeaderEl","columnInstance","collapseToggleInit","panelHeaderToolboxEl","panelHeaderContentEl","addItems","focus","newPanel","panelHeaderCollapseBoxEl","collapseToggleEl","expandedSiblings","getAllPrevious","sibling","currentColumn","changing","action","panelHeight2","isVisible","panelsExpanded","tallestPanel","panelsToResize","tallestPanelHeight","panelsTotalHeight","anyNextSiblingsExpanded","anyExpandingNextSiblingsExpanded","anyNextContainsChanging","allNext","nextExpandedChanging","remainingHeight","ratio","newPanelHeight","isNaN","handleHeight","currentWidth","newWidth","clientWidth","closeColumn","closePanel","removeLists","minimizeAll","useControls","dockPosition","trueButtonColor","enabledButtonColor","disabledButtonColor","autoHideEvent","dockAutoHide","initializeDockControls","sidebarCheck","clone","setDockColors","canvas","dockPlacement","moveDock","getProperty","dockHotspotHeight","client","removeEvent","renderDockControls","dockButtonEnabled","backgroundColor","dockButtonDisabled","titleText","dockTab","timeDown","timeUp","toggle","createElement","m","mr","round","ms","sin","mc","cos","abs","sqrt","Z","Z2","context_","CanvasRenderingContext2D_","slice","prototype","encodeHtmlAttribute","addNamespace","prefix","urn","namespaces","add","addNamespacesAndStylesheet","ss","createStyleSheet","owningElement","G_vmlCanvasManager_","opt_doc","attachEvent","f","obj","var_args","call","arguments","apply","init_","els","getElementsByTagName","ownerDocument","innerHTML","onPropertyChange","attrs","attributes","specified","nodeValue","clientHeight","srcElement","propertyName","firstChild","decToHex","j","matrixMultiply","m1","m2","result","sum","z","copyState","o1","o2","lineJoin","miterLimit","shadowColor","shadowOffsetX","shadowOffsetY","globalAlpha","font","textAlign","textBaseline","arcScaleX_","arcScaleY_","lineScale_","colorData","aliceblue","antiquewhite","aquamarine","azure","beige","bisque","black","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","gainsboro","ghostwhite","gold","goldenrod","grey","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","limegreen","linen","magenta","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","oldlace","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","getRgbHslContent","styleString","end","parts","charAt","percent","parseFloat","clamp","v","hueToRgb","h","processStyleCache","processStyle","alpha","str","r","g","b","l","q","p","hslToRgb","color","DEFAULT_STYLE","fontStyleCache","lineCapMap","butt","canvasElement","m_","mStack_","aStack_","currentPath_","appendChild","cloneNode","filter","element_","contextPrototype","bezierCurveTo","self","cp1","cp2","cp1x","cp1y","cp2x","cp2y","currentX_","currentY_","appendStroke","lineStr","appendFill","arcScaleX","arcScaleY","CanvasGradient_","angle","shift","expansion","type_","x0","x0_","y0","y0_","x1","x1_","y1","y1_","p0","getCoords","p1","dx","dy","atan2","dimension","r0_","r1_","stops","colors_","sort","cs1","cs2","offset","color1","color2","opacity1","opacity2","colors","CanvasPattern_","deltaLeft","deltaTop","src_","aX","aY","setM","updateLineScale","isFinite","det","aType","repetition","img","nodeType","tagName","throwException","assertImageIsValid","repetition_","width_","height_","DOMException_","code","textMeasureEl_","removeNode","aCP1x","aCP1y","aCP2x","aCP2y","aCPx","aCPy","cp","aRadius","aStartAngle","aEndAngle","aClockwise","arcType","xStart","yStart","xEnd","yEnd","pStart","pEnd","rect","aWidth","aHeight","strokeRect","oldPath","fillRect","aX0","aY0","aX1","aY1","createRadialGradient","aR0","aR1","drawImage","dw","dh","sx","sy","sh","oldRuntimeWidth","runtimeStyle","oldRuntimeHeight","Error","d","vmlStr","c2","c3","c4","insertAdjacentHTML","aFill","save","o","translate","rotate","aRot","c","scale","transform","m11","m12","m21","m22","setTransform","drawText_","maxWidth","fontStyle","computedStyle","canvasFontSize","currentStyle","fontSize","size","getComputedStyle","ex","variant","fontVariant","weight","fontWeight","family","fontFamily","processFontStyle","fontStyleString","elementStyle","direction","delta","skewM","toFixed","skewOffset","fillText","strokeText","measureText","lastChild","createTextNode","clip","arcTo","createPattern","aOffset","aColor","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","HIERARCHY_REQUEST_ERR","WRONG_DOCUMENT_ERR","INVALID_CHARACTER_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","NOT_FOUND_ERR","NOT_SUPPORTED_ERR","INUSE_ATTRIBUTE_ERR","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","NAMESPACE_ERR","INVALID_ACCESS_ERR","VALIDATION_ERR","TYPE_MISMATCH_ERR","CanvasRenderingContext2D","CanvasGradient","CanvasPattern","DOMException"],"mappings":"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","file":"mocha.bundle.min.js","sourcesContent":["/*!\r\nDistributed under the MIT License:\r\n\r\n * Copyright (c) 2010 Greg Houston and Contributors in AUTHORS.txt\r\n * MIT (MIT-LICENSE.txt)\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n\r\n*/\r\n/*\r\n---\r\n\r\nname: Core\r\n\r\nscript: Core.js\r\n\r\ndescription: MUI - A Web Applications User Interface Framework.\r\n\r\ncopyright: (c) 2007-2009 Greg Houston, .\r\n\r\nlicense: MIT-style license.\r\n\r\nauthors:\r\n - Scott F. Frederick\r\n - Joel Lindau\r\n\r\nnote:\r\n This documentation is taken directly from the javascript source files. It is built using Natural Docs.\r\n\r\nrequires:\r\n - Core:1.2.4/Array\r\n - Core:1.2.4/Element\r\n - Core:1.2.4/Browser\r\n - Core:1.2.4/Request\r\n - Core:1.2.4/Request.HTML\r\n - Hash\r\n - More:1.2.4/Assets\r\n\r\nprovides: [MUI, MochaUI, MUI.Require]\r\n\r\n...\r\n*/\r\n\r\nvar MUI = MochaUI = new Hash({\r\n \r\n version: '0.9.7',\r\n\r\n options: new Hash({\r\n theme: 'default', \r\n advancedEffects: false, // Effects that require fast browsers and are cpu intensive.\r\n standardEffects: false // Basic effects that tend to run smoothly.\r\n }),\r\n\r\n path: {\r\n source: '../default/scripts/source/', // Path to MochaUI source JavaScript\r\n themes: 'themes/', // Path to MochaUI Themes\r\n plugins: '../../_layouts/' // Path to Plugins\r\n },\r\n \r\n // Returns the path to the current theme directory\r\n themePath: function(){\r\n return MUI.path.themes + MUI.options.theme + '/'; \r\n },\r\n \r\n files: new Hash()\r\n \r\n});\r\n\r\nMUI.files[MUI.path.source + 'Core/Core.js'] = 'loaded';\r\n\r\nMUI.extend({\r\n \r\n Windows: {\r\n instances: new Hash()\r\n },\r\n\r\n ieSupport: 'excanvas', // Makes it easier to switch between Excanvas and Moocanvas for testing \r\n \r\n /*\r\n \r\n Function: updateContent\r\n Replace the content of a window or panel.\r\n \r\n Arguments:\r\n updateOptions - (object)\r\n \r\n updateOptions:\r\n element - The parent window or panel.\r\n childElement - The child element of the window or panel recieving the content.\r\n method - ('get', or 'post') The way data is transmitted.\r\n data - (hash) Data to be transmitted\r\n title - (string) Change this if you want to change the title of the window or panel.\r\n content - (string or element) An html loadMethod option.\r\n loadMethod - ('html', 'xhr', or 'iframe')\r\n url - Used if loadMethod is set to 'xhr' or 'iframe'.\r\n scrollbars - (boolean)\r\n padding - (object)\r\n onContentLoaded - (function)\r\n\r\n */ \r\n updateContent: function(options){\r\n\r\n var options = $extend({\r\n element: null,\r\n childElement: null,\r\n method: null,\r\n data: null,\r\n title: null,\r\n content: null,\r\n loadMethod: null,\r\n url: null,\r\n scrollbars: null, \r\n padding: null,\r\n require: {},\r\n onContentLoaded: $empty\r\n }, options);\r\n\r\n options.require = $extend({\r\n css: [], images: [], js: [], onload: $empty\r\n }, options.require);\r\n\r\n var args = {};\r\n\r\n if (!options.element) return;\r\n var element = options.element;\r\n\r\n if (MUI.Windows.instances.get(element.id)){\r\n args.recipient = 'window';\r\n }\r\n else {\r\n args.recipient = 'panel';\r\n }\r\n\r\n var instance = element.retrieve('instance');\r\n if (options.title) {\r\n var title = MUI.getFittedTitle(options.title, options.width);\r\n instance.titleEl.set('html', title);\r\n instance.titleEl.set('title', options.title);\r\n\r\n var dockTabEl = $(instance.options.id + '_dockTab');\r\n if (dockTabEl)\r\n dockTabEl.set('title', options.title);\r\n\r\n var dockTabTextEl = $(instance.options.id + '_dockTabText');\r\n if (dockTabTextEl)\r\n dockTabTextEl.set('html', options.title.substring(0, 19) + (options.title.length > 19 ? '...' : ''));\r\n }\r\n\r\n var contentEl = instance.contentEl;\r\n args.contentContainer = options.childElement != null ? options.childElement : instance.contentEl; \r\n var contentWrapperEl = instance.contentWrapperEl;\r\n\r\n if (!options.loadMethod){\r\n if (!instance.options.loadMethod){\r\n if (!options.url){\r\n options.loadMethod = 'html';\r\n }\r\n else {\r\n options.loadMethod = 'xhr';\r\n }\r\n }\r\n else {\r\n options.loadMethod = instance.options.loadMethod;\r\n }\r\n }\r\n\r\n // Set scrollbars if loading content in main content container.\r\n // Always use 'hidden' for iframe windows\r\n var scrollbars = options.scrollbars || instance.options.scrollbars;\r\n if (args.contentContainer == instance.contentEl) {\r\n contentWrapperEl.setStyles({\r\n 'overflow': scrollbars != false && options.loadMethod != 'iframe' ? 'auto' : 'hidden'\r\n });\r\n }\r\n\r\n if (options.padding != null) {\r\n contentEl.setStyles({\r\n 'padding-top': options.padding.top,\r\n 'padding-bottom': options.padding.bottom,\r\n 'padding-left': options.padding.left,\r\n 'padding-right': options.padding.right\r\n });\r\n }\r\n\r\n // Remove old content.\r\n if (args.contentContainer == contentEl) {\r\n contentEl.empty().show();\r\n // Panels are not loaded into the padding div, so we remove them separately.\r\n contentEl.getAllNext('.column').destroy();\r\n var colHandles = contentEl.getAllNext('.columnHandle');\r\n if (colHandles)\r\n colHandles.destroy();\r\n }\r\n\r\n args.onContentLoaded = function(){\r\n\r\n if (options.require.js.length || typeof options.require.onload == 'function'){\r\n new MUI.Require({\r\n js: options.require.js,\r\n onload: function(){\r\n if (Browser.Engine.presto){\r\n options.require.onload.delay(100);\r\n }\r\n else {\r\n options.require.onload();\r\n }\r\n (options.onContentLoaded && options.onContentLoaded!=$empty) ? options.onContentLoaded() : instance.fireEvent('contentLoaded', element);\r\n }.bind(this)\r\n });\r\n }\r\n else {\r\n (options.onContentLoaded && options.onContentLoaded!=$empty) ? options.onContentLoaded() : instance.fireEvent('contentLoaded', element);\r\n }\r\n \r\n };\r\n \r\n if (options.require.css.length || options.require.images.length){\r\n new MUI.Require({\r\n css: options.require.css,\r\n images: options.require.images,\r\n onload: function(){\r\n this.loadSelect(instance, options, args);\r\n }.bind(this)\r\n });\r\n }\r\n else {\r\n this.loadSelect(instance, options, args);\r\n }\r\n },\r\n \r\n\r\n getFittedTitle: function(title, width) {\r\n if ((typeof title == \"undefined\") || (title == null))\r\n return title;\r\n\r\n var fittedTitle = title,\r\n relativeWidth = width / 8.25;\r\n if (title.length > relativeWidth)\r\n fittedTitle = title.substring(0, Math.floor(relativeWidth) - 4) + \"...\";\r\n\r\n return fittedTitle;\r\n },\r\n\r\n loadSelect: function(instance, options, args){\r\n\r\n // Load new content.\r\n switch(options.loadMethod){\r\n case 'xhr': \r\n this.updateContentXHR(instance, options, args);\r\n break;\r\n case 'iframe':\r\n this.updateContentIframe(instance, options, args);\r\n break;\r\n case 'json':\r\n this.updateContentJSON(instance, options, args);\r\n break;\r\n case 'html':\r\n default:\r\n this.updateContentHTML(instance, options, args);\r\n break;\r\n }\r\n\r\n },\r\n\r\n updateContentJSON: function(instance, options, args) {\r\n var contentEl = instance.contentEl;\r\n var contentContainer = args.contentContainer;\r\n\r\n new Request({\r\n url: options.url,\r\n update: contentContainer,\r\n method: options.method != null ? options.method : 'get',\r\n data: options.data != null ? new Hash(options.data).toQueryString() : '',\r\n evalScripts: false,\r\n evalResponse: false,\r\n headers: {'Content-Type':'application/json'},\r\n onRequest: function() {\r\n if (args.recipient == 'window' && contentContainer == contentEl) {\r\n instance.showSpinner();\r\n }\r\n else if (args.recipient == 'panel' && contentContainer == contentEl && $('spinner')) {\r\n $('spinner').show();\r\n }\r\n } .bind(this),\r\n onFailure: function() {\r\n if (contentContainer == contentEl) {\r\n contentContainer.set('html', '

Error Loading XMLHttpRequest

');\r\n if (recipient == 'window') {\r\n instance.hideSpinner();\r\n }\r\n else if (recipient == 'panel' && $('spinner')) {\r\n $('spinner').hide();\r\n }\r\n }\r\n\r\n if (contentContainer == contentEl) {\r\n contentContainer.set('html', '

Error Loading XMLHttpRequest

');\r\n if (args.recipient == 'window') {\r\n instance.hideSpinner();\r\n }\r\n else if (args.recipient == 'panel' && $('spinner')) {\r\n $('spinner').hide();\r\n }\r\n }\r\n } .bind(this),\r\n onException: function() { } .bind(this),\r\n onSuccess: function(json) {\r\n if (contentContainer == contentEl) {\r\n if (contentContainer == contentEl) {\r\n if (args.recipient == 'window') instance.hideSpinner();\r\n else if (args.recipient == 'panel' && $('spinner')) $('spinner').hide();\r\n }\r\n var json = JSON.decode(json);\r\n // calls onLoaded event instead of onContentLoaded\r\n // onLoaded - event should call updateContent again with loadMethod='html'\r\n instance.fireEvent('loaded', $A([options.element, json, instance]));\r\n }\r\n } .bind(this),\r\n onComplete: function() { } .bind(this)\r\n }).get();\r\n },\r\n\r\n updateContentXHR: function(instance, options, args){\r\n var contentEl = instance.contentEl;\r\n var contentContainer = args.contentContainer;\r\n var onContentLoaded = args.onContentLoaded;\r\n new Request.HTML({\r\n url: options.url,\r\n update: contentContainer,\r\n method: options.method != null ? options.method : 'get',\r\n data: options.data != null ? new Hash(options.data).toQueryString() : '', \r\n evalScripts: instance.options.evalScripts,\r\n evalResponse: instance.options.evalResponse, \r\n onRequest: function(){\r\n if (args.recipient == 'window' && contentContainer == contentEl){\r\n instance.showSpinner();\r\n }\r\n else if (args.recipient == 'panel' && contentContainer == contentEl && $('spinner')){\r\n $('spinner').show(); \r\n }\r\n }.bind(this),\r\n onFailure: function(response){\r\n if (contentContainer == contentEl){\r\n var getTitle = new RegExp(\"[\\n\\r\\s]*(.*)[\\n\\r\\s]*\", \"gmi\");\r\n var error = getTitle.exec(response.responseText);\r\n if (!error) error = 'Unknown';\r\n if (typeOf(error) == \"array\")\r\n error = error[1];\r\n contentContainer.set('html', '

Error: ' + error + '

');\r\n if (args.recipient == 'window'){\r\n instance.hideSpinner();\r\n } \r\n else if (args.recipient == 'panel' && $('spinner')){\r\n $('spinner').hide();\r\n } \r\n }\r\n }.bind(this),\r\n onSuccess: function(){\r\n contentEl.addClass(\"pad\");\r\n if (contentContainer == contentEl){\r\n if (args.recipient == 'window') instance.hideSpinner(); \r\n else if (args.recipient == 'panel' && $('spinner')) $('spinner').hide(); \r\n }\r\n Browser.Engine.trident4 ? onContentLoaded.delay(750) : onContentLoaded();\r\n }.bind(this),\r\n onComplete: function(){}.bind(this)\r\n }).send();\r\n },\r\n \r\n updateContentIframe: function(instance, options, args){\r\n var contentEl = instance.contentEl;\r\n var contentContainer = args.contentContainer;\r\n var contentWrapperEl = instance.contentWrapperEl;\r\n var onContentLoaded = args.onContentLoaded; \r\n if ( instance.options.contentURL == '' || contentContainer != contentEl) {\r\n return;\r\n }\r\n contentEl.removeClass(\"pad\");\r\n contentEl.setStyle(\"padding\",\"0px\");\r\n instance.iframeEl = new Element('iframe', {\r\n 'id': instance.options.id + '_iframe',\r\n 'name': instance.options.id + '_iframe',\r\n 'class': 'mochaIframe',\r\n 'src': options.url,\r\n 'marginwidth': 0,\r\n 'marginheight': 0,\r\n 'frameBorder': 0,\r\n 'scrolling': 'auto',\r\n 'styles': {\r\n 'height': Math.max(contentWrapperEl.offsetHeight - contentWrapperEl.getStyle('border-top').toInt() - contentWrapperEl.getStyle('border-bottom').toInt(), 0),\r\n 'width': instance.panelEl ? contentWrapperEl.offsetWidth - contentWrapperEl.getStyle('border-left').toInt() - contentWrapperEl.getStyle('border-right').toInt() : '100%' \r\n }\r\n }).injectInside(contentEl);\r\n\r\n // Add onload event to iframe so we can hide the spinner and run onContentLoaded()\r\n instance.iframeEl.addEvent('load', function(e) {\r\n if (args.recipient == 'window') instance.hideSpinner(); \r\n else if (args.recipient == 'panel' && contentContainer == contentEl && $('spinner')) $('spinner').hide();\r\n Browser.Engine.trident4 ? onContentLoaded.delay(50) : onContentLoaded();\r\n }.bind(this));\r\n if (args.recipient == 'window') instance.showSpinner(); \r\n else if (args.recipient == 'panel' && contentContainer == contentEl && $('spinner')) $('spinner').show();\r\n },\r\n \r\n updateContentHTML: function(instance, options, args){\r\n var contentEl = instance.contentEl;\r\n var contentContainer = args.contentContainer;\r\n var onContentLoaded = args.onContentLoaded; \r\n var elementTypes = new Array('element', 'textnode', 'whitespace', 'collection');\r\n\r\n contentEl.addClass(\"pad\");\r\n if (elementTypes.contains($type(options.content))){\r\n options.content.inject(contentContainer);\r\n } else {\r\n contentContainer.set('html', options.content);\r\n } \r\n if (contentContainer == contentEl){\r\n if (args.recipient == 'window') instance.hideSpinner(); \r\n else if (args.recipient == 'panel' && $('spinner')) $('spinner').hide(); \r\n }\r\n Browser.Engine.trident4 ? onContentLoaded.delay(50) : onContentLoaded();\r\n },\r\n \r\n /*\r\n \r\n Function: reloadIframe\r\n Reload an iframe. Fixes an issue in Firefox when trying to use location.reload on an iframe that has been destroyed and recreated.\r\n\r\n Arguments:\r\n iframe - This should be both the name and the id of the iframe.\r\n\r\n Syntax:\r\n (start code)\r\n MUI.reloadIframe(element);\r\n (end)\r\n\r\n Example:\r\n To reload an iframe from within another iframe:\r\n (start code)\r\n parent.MUI.reloadIframe('myIframeName');\r\n (end)\r\n\r\n */\r\n reloadIframe: function(iframe){\r\n Browser.Engine.gecko ? $(iframe).src = $(iframe).src : top.frames[iframe].location.reload(true); \r\n },\r\n \r\n roundedRect: function(ctx, x, y, width, height, radius, rgb, a){\r\n ctx.fillStyle = 'rgba(' + rgb.join(',') + ',' + a + ')';\r\n ctx.beginPath();\r\n ctx.moveTo(x, y + radius);\r\n ctx.lineTo(x, y + height - radius);\r\n ctx.quadraticCurveTo(x, y + height, x + radius, y + height);\r\n ctx.lineTo(x + width - radius, y + height);\r\n ctx.quadraticCurveTo(x + width, y + height, x + width, y + height - radius);\r\n ctx.lineTo(x + width, y + radius);\r\n ctx.quadraticCurveTo(x + width, y, x + width - radius, y);\r\n ctx.lineTo(x + radius, y);\r\n ctx.quadraticCurveTo(x, y, x, y + radius);\r\n ctx.fill(); \r\n },\r\n \r\n triangle: function(ctx, x, y, width, height, rgb, a){\r\n ctx.beginPath();\r\n ctx.moveTo(x + width, y);\r\n ctx.lineTo(x, y + height);\r\n ctx.lineTo(x + width, y + height);\r\n ctx.closePath();\r\n ctx.fillStyle = 'rgba(' + rgb.join(',') + ',' + a + ')';\r\n ctx.fill();\r\n },\r\n \r\n circle: function(ctx, x, y, diameter, rgb, a){\r\n ctx.beginPath();\r\n ctx.arc(x, y, diameter, 0, Math.PI*2, true);\r\n ctx.fillStyle = 'rgba(' + rgb.join(',') + ',' + a + ')';\r\n ctx.fill();\r\n },\r\n \r\n notification: function(message){\r\n new MUI.Window({\r\n loadMethod: 'html',\r\n closeAfter: 1500,\r\n type: 'notification',\r\n addClass: 'notification',\r\n content: message,\r\n width: 220,\r\n height: 40,\r\n y: 53,\r\n padding: { top: 10, right: 12, bottom: 10, left: 12 },\r\n shadowBlur: 5 \r\n });\r\n },\r\n \r\n /*\r\n \r\n Function: toggleEffects\r\n Turn effects on and off\r\n\r\n */\r\n toggleAdvancedEffects: function(link){\r\n if (MUI.options.advancedEffects == false) {\r\n MUI.options.advancedEffects = true;\r\n if (link){\r\n this.toggleAdvancedEffectsLink = new Element('div', {\r\n 'class': 'check',\r\n 'id': 'toggleAdvancedEffects_check'\r\n }).inject(link);\r\n } \r\n }\r\n else {\r\n MUI.options.advancedEffects = false;\r\n if (this.toggleAdvancedEffectsLink) {\r\n this.toggleAdvancedEffectsLink.destroy();\r\n } \r\n }\r\n },\r\n /*\r\n \r\n Function: toggleStandardEffects\r\n Turn standard effects on and off\r\n\r\n */\r\n toggleStandardEffects: function(link){\r\n if (MUI.options.standardEffects == false) {\r\n MUI.options.standardEffects = true;\r\n if (link){\r\n this.toggleStandardEffectsLink = new Element('div', {\r\n 'class': 'check',\r\n 'id': 'toggleStandardEffects_check'\r\n }).inject(link);\r\n } \r\n }\r\n else {\r\n MUI.options.standardEffects = false;\r\n if (this.toggleStandardEffectsLink) {\r\n this.toggleStandardEffectsLink.destroy();\r\n } \r\n }\r\n }, \r\n \r\n /*\r\n \r\n The underlay is inserted directly under windows when they are being dragged or resized\r\n so that the cursor is not captured by iframes or other plugins (such as Flash)\r\n underneath the window.\r\n \r\n */\r\n underlayInitialize: function(){\r\n var windowUnderlay = new Element('div', {\r\n 'id': 'windowUnderlay',\r\n 'styles': {\r\n 'height': document.getCoordinates().height,\r\n 'opacity': .01,\r\n 'display': 'none'\r\n }\r\n }).inject(document.body);\r\n },\r\n setUnderlaySize: function(){\r\n $('windowUnderlay').setStyle('height', document.getCoordinates().height);\r\n }\r\n});\r\n\r\n/* \r\n\r\nfunction: fixPNG\r\n Bob Osola's PngFix for IE6.\r\n\r\nexample:\r\n (begin code)\r\n \"foo\"\r\n (end)\r\n\r\nnote:\r\n You must have the image height and width attributes specified in the markup.\r\n\r\n*/\r\n\r\nfunction fixPNG(myImage){\r\n if (Browser.Engine.trident4 && document.body.filters){\r\n var imgID = (myImage.id) ? \"id='\" + myImage.id + \"' \" : \"\";\r\n var imgClass = (myImage.className) ? \"class='\" + myImage.className + \"' \" : \"\";\r\n var imgTitle = (myImage.title) ? \"title='\" + myImage.title + \"' \" : \"title='\" + myImage.alt + \"' \";\r\n var imgStyle = \"display:inline-block;\" + myImage.style.cssText;\r\n var strNewHTML = \"\";\r\n myImage.outerHTML = strNewHTML; \r\n }\r\n}\r\n\r\n// Blur all windows if user clicks anywhere else on the page\r\ndocument.addEvent(MooTools.getTouchOrMouseEvent('mousedown'), function(event){\r\n MUI.blurAll.delay(50);\r\n});\r\n\r\nwindow.addEvent('domready', function(){\r\n MUI.underlayInitialize();\r\n});\r\n\r\nwindow.addEvent('resize', function(){\r\n if ($('windowUnderlay')) {\r\n MUI.setUnderlaySize();\r\n }\r\n else {\r\n MUI.underlayInitialize();\r\n }\r\n});\r\n\r\n/* Removed by WM - 7/31/13\r\n * Already implemented better in MooTools\r\nElement.implement({\r\n hide: function(){\r\n this.setStyle('display', 'none');\r\n return this;\r\n },\r\n show: function(){\r\n this.setStyle('display', 'block');\r\n return this;\r\n } \r\n}); \r\n*/\r\n\r\n/*\r\n\r\nShake effect by Uvumi Tools\r\nhttp://tools.uvumi.com/element-shake.html\r\n\r\nFunction: shake\r\n\r\nExample:\r\n Shake a window.\r\n (start code)\r\n $('parametrics').shake()\r\n (end)\r\n \r\n*/\r\n\r\nElement.implement({\r\n shake: function(radius,duration){\r\n radius = radius || 3;\r\n duration = duration || 500;\r\n duration = (duration/50).toInt() - 1;\r\n var parent = this.getParent();\r\n if(parent != $(document.body) && parent.getStyle('position') == 'static'){\r\n parent.setStyle('position','relative');\r\n }\r\n var position = this.getStyle('position');\r\n if(position == 'static'){\r\n this.setStyle('position','relative');\r\n position = 'relative';\r\n }\r\n if(Browser.Engine.trident){\r\n parent.setStyle('height',parent.getStyle('height'));\r\n }\r\n var coords = this.getPosition(parent);\r\n if(position == 'relative' && !Browser.Engine.presto){\r\n coords.x -= parent.getStyle('paddingLeft').toInt();\r\n coords.y -= parent.getStyle('paddingTop').toInt();\r\n }\r\n var morph = this.retrieve('morph');\r\n if (morph){\r\n morph.cancel();\r\n var oldOptions = morph.options;\r\n }\r\n var morph = this.get('morph',{\r\n duration:50,\r\n link:'chain'\r\n });\r\n for(var i=0 ; i < duration ; i++){\r\n morph.start({\r\n top:coords.y+$random(-radius,radius),\r\n left:coords.x+$random(-radius,radius)\r\n });\r\n }\r\n morph.start({\r\n top:coords.y,\r\n left:coords.x\r\n }).chain(function(){\r\n if(oldOptions){\r\n this.set('morph',oldOptions);\r\n }\r\n }.bind(this));\r\n return this;\r\n }\r\n});\r\n\r\nString.implement({\r\n \r\n parseQueryString: function() {\r\n var vars = this.split(/[&;]/);\r\n var rs = {};\r\n if (vars.length) vars.each(function(val) {\r\n var keys = val.split('=');\r\n if (keys.length && keys.length == 2) rs[decodeURIComponent(keys[0])] = decodeURIComponent(keys[1]);\r\n });\r\n return rs;\r\n }\r\n \r\n});\r\n\r\n// Mootools Patch: Fixes issues in Safari, Chrome, and Internet Explorer caused by processing text as XML. \r\nRequest.HTML.implement({\r\n \r\n processHTML: function(text){\r\n var match = text.match(/]*>([\\s\\S]*?)<\\/body>/i);\r\n text = (match) ? match[1] : text; \r\n var container = new Element('div'); \r\n return container.set('html', text);\r\n }\r\n \r\n});\r\n\r\n/*\r\n\r\n Examples:\r\n (start code) \r\n getCSSRule('.myRule');\r\n getCSSRule('#myRule');\r\n (end)\r\n \r\n*/\r\nMUI.getCSSRule = function(selector) {\r\n for (var ii = 0; ii < document.styleSheets.length; ii++) {\r\n var mysheet = document.styleSheets[ii];\r\n if (!mysheet)\r\n continue;\r\n try {\r\n var myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules;\r\n if (!myrules)\r\n continue;\r\n for (i = 0; i < myrules.length; i++) {\r\n if (myrules[i].selectorText == selector) {\r\n return myrules[i];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // Ignore\r\n }\r\n }\r\n return false;\r\n};\r\n\r\n// This makes it so Request will work to some degree locally\r\nif (location.protocol == \"file:\"){\r\n\r\n Request.implement({\r\n isSuccess : function(status){\r\n return (status == 0 || (status >= 200) && (status < 300));\r\n }\r\n });\r\n\r\n Browser.Request = function(){\r\n return $try(function(){\r\n return new ActiveXObject('MSXML2.XMLHTTP');\r\n }, function(){\r\n return new XMLHttpRequest();\r\n });\r\n };\r\n \r\n}\r\n\r\nMUI.Require = new Class({\r\n\r\n Implements: [Options],\r\n\r\n options: {\r\n css: [],\r\n images: [],\r\n js: [], \r\n onload: $empty\r\n },\r\n \r\n initialize: function(options){\r\n this.setOptions(options);\r\n var options = this.options; \r\n \r\n this.assetsToLoad = options.css.length + options.images.length + options.js.length; \r\n this.assetsLoaded = 0;\r\n \r\n var cssLoaded = 0;\r\n \r\n // Load CSS before images and JavaScript \r\n \r\n if (options.css.length){\r\n options.css.each( function(sheet){\r\n \r\n this.getAsset(sheet, function(){\r\n if (cssLoaded == options.css.length - 1){\r\n \r\n if (this.assetsLoaded == this.assetsToLoad - 1){\r\n this.requireOnload();\r\n }\r\n else {\r\n // Add a little delay since we are relying on cached CSS from XHR request.\r\n this.assetsLoaded++; \r\n this.requireContinue.delay(50, this);\r\n } \r\n }\r\n else {\r\n cssLoaded++;\r\n this.assetsLoaded++; \r\n }\r\n }.bind(this));\r\n }.bind(this));\r\n }\r\n else if (!options.js.length && !options.images.length){\r\n this.options.onload();\r\n return true;\r\n }\r\n else {\r\n this.requireContinue.delay(50, this); // Delay is for Safari\r\n } \r\n \r\n },\r\n \r\n requireOnload: function(){\r\n this.assetsLoaded++;\r\n if (this.assetsLoaded == this.assetsToLoad){\r\n this.options.onload();\r\n return true; \r\n }\r\n\r\n }, \r\n \r\n requireContinue: function(){\r\n\r\n var options = this.options;\r\n if (options.images.length){\r\n options.images.each( function(image){\r\n this.getAsset(image, this.requireOnload.bind(this));\r\n }.bind(this));\r\n }\r\n \r\n if (options.js.length){\r\n options.js.each( function(script){\r\n this.getAsset(script, this.requireOnload.bind(this)); \r\n }.bind(this));\r\n }\r\n \r\n },\r\n \r\n getAsset: function(source, onload){\r\n\r\n // If the asset is loaded, fire the onload function.\r\n if ( MUI.files[source] == 'loaded' ){\r\n if (typeof onload == 'function'){\r\n onload();\r\n }\r\n return true; \r\n }\r\n \r\n // If the asset is loading, wait until it is loaded and then fire the onload function.\r\n // If asset doesn't load by a number of tries, fire onload anyway.\r\n else if ( MUI.files[source] == 'loading' ){\r\n var tries = 0;\r\n var checker = (function(){\r\n tries++;\r\n if (MUI.files[source] == 'loading' && tries < '100') return;\r\n $clear(checker);\r\n if (typeof onload == 'function'){\r\n onload();\r\n }\r\n }).periodical(50);\r\n }\r\n \r\n // If the asset is not yet loaded or loading, start loading the asset.\r\n else {\r\n MUI.files[source] = 'loading'; \r\n \r\n properties = {\r\n 'onload': onload != 'undefined' ? onload : $empty \r\n }; \r\n \r\n // Add to the onload function\r\n var oldonload = properties.onload;\r\n properties.onload = function() {\r\n MUI.files[source] = 'loaded';\r\n if (oldonload) {\r\n oldonload();\r\n } \r\n }.bind(this); \r\n \r\n switch ( source.match(/\\.\\w+$/)[0] ) {\r\n case '.js': return Asset.javascript(source, properties);\r\n case '.css': return Asset.css(source, properties);\r\n case '.jpg':\r\n case '.png':\r\n case '.gif': return Asset.image(source, properties);\r\n }\r\n \r\n alert('The required file \"' + source + '\" could not be loaded');\r\n }\r\n } \r\n \r\n});\r\n\r\n$extend(Asset, {\r\n\r\n /* Fix an Opera bug in Mootools 1.2 */\r\n javascript: function(source, properties){\r\n properties = $extend({\r\n onload: $empty,\r\n document: document,\r\n check: $lambda(true)\r\n }, properties);\r\n \r\n if ($(properties.id)) {\r\n properties.onload();\r\n return $(properties.id);\r\n } \r\n \r\n var script = new Element('script', {'src': source, 'type': 'text/javascript'});\r\n \r\n var load = properties.onload.bind(script), check = properties.check, doc = properties.document;\r\n delete properties.onload; delete properties.check; delete properties.document;\r\n \r\n if (!Browser.Engine.webkit419 && !Browser.Engine.presto){\r\n script.addEvents({\r\n load: load,\r\n readystatechange: function(){\r\n if (Browser.Engine.trident && ['loaded', 'complete'].contains(this.readyState)) \r\n load();\r\n }\r\n }).setProperties(properties);\r\n }\r\n else {\r\n var checker = (function(){\r\n if (!$try(check)) return;\r\n $clear(checker);\r\n // Opera has difficulty with multiple scripts being injected into the head simultaneously. We need to give it time to catch up.\r\n Browser.Engine.presto ? load.delay(500) : load();\r\n }).periodical(50);\r\n } \r\n return script.inject(doc.head);\r\n },\r\n \r\n // Get the CSS with XHR before appending it to document.head so that we can have an onload callback.\r\n css: function(source, properties){\r\n \r\n properties = $extend({\r\n id: null,\r\n media: 'screen',\r\n onload: $empty\r\n }, properties); \r\n \r\n new Request({\r\n method: 'get',\r\n url: source,\r\n onComplete: function(response) { \r\n var newSheet = new Element('link', {\r\n 'id': properties.id,\r\n 'rel': 'stylesheet',\r\n 'media': properties.media,\r\n 'type': 'text/css',\r\n 'href': source\r\n }).inject(document.head); \r\n properties.onload(); \r\n }.bind(this),\r\n onFailure: function(response){ \r\n }, \r\n onSuccess: function(){ \r\n }.bind(this)\r\n }).send(); \r\n } \r\n \r\n});\r\n\r\n/*\r\n\r\nREGISTER PLUGINS\r\n\r\n Register Components and Plugins for Lazy Loading\r\n\r\n How this works may take a moment to grasp. Take a look at MUI.Window below.\r\n If we try to create a new Window and Window.js has not been loaded then the function\r\n below will run. It will load the CSS required by the MUI.Window Class and then\r\n then it will load Window.js. Here is the interesting part. When Window.js loads,\r\n it will overwrite the function below, and new MUI.Window(arg) will be ran\r\n again. This time it will create a new MUI.Window instance, and any future calls\r\n to new MUI.Window(arg) will immediately create new windows since the assets\r\n have already been loaded and our temporary function below has been overwritten. \r\n \r\n Example:\r\n \r\n MyPlugins.extend({\r\n\r\n MyGadget: function(arg){\r\n new MUI.Require({\r\n css: [MUI.path.plugins + 'myGadget/css/style.css'],\r\n images: [MUI.path.plugins + 'myGadget/images/background.gif']\r\n js: [MUI.path.plugins + 'myGadget/scripts/myGadget.js'],\r\n onload: function(){\r\n new MyPlguins.MyGadget(arg);\r\n } \r\n });\r\n }\r\n \r\n }); \r\n \r\n-------------------------------------------------------------------- */\r\n\r\nMUI.extend({\r\n\r\n newWindowsFromHTML: function(arg){\r\n new MUI.Require({\r\n js: [MUI.path.plugins + 'mochaui/Window/Windows-from-html.js'],\r\n onload: function(){\r\n new MUI.newWindowsFromHTML(arg);\r\n }\r\n });\r\n },\r\n \r\n newWindowsFromJSON: function(arg){\r\n new MUI.Require({\r\n js: [MUI.path.plugins + 'mochaui/Window/Windows-from-json.js'],\r\n onload: function(){\r\n new MUI.newWindowsFromJSON(arg);\r\n }\r\n });\r\n },\r\n\r\n arrangeCascade: function(){\r\n new MUI.Require({\r\n js: [MUI.path.plugins + 'mochaui/Window/Arrange-cascade.js'],\r\n onload: function(){\r\n new MUI.arrangeCascade();\r\n } \r\n }); \r\n },\r\n \r\n arrangeTile: function(){\r\n new MUI.Require({\r\n js: [MUI.path.plugins + 'mochaui/Window/Arrange-tile.js'],\r\n onload: function(){\r\n new MUI.arrangeTile();\r\n } \r\n });\r\n },\r\n \r\n saveWorkspace: function(){\r\n new MUI.Require({\r\n js: [MUI.path.plugins + 'mochaui/Layout/Workspaces.js'],\r\n onload: function(){\r\n new MUI.saveWorkspace();\r\n } \r\n }); \r\n },\r\n \r\n loadWorkspace: function(){\r\n new MUI.Require({\r\n js: [MUI.path.plugins + 'mochaui/Layout/Workspaces.js'],\r\n onload: function(){\r\n new MUI.loadWorkspace();\r\n } \r\n }); \r\n },\r\n\r\n Themes: {\r\n init: function(arg){ \r\n new MUI.Require({\r\n js: [MUI.path.plugins + 'mochaui/Utilities/Themes.js'],\r\n onload: function(){\r\n MUI.Themes.init(arg);\r\n } \r\n }); \r\n }\r\n }\r\n \r\n});\r\n\r\nif (Browser.Engine.webkit) {\r\n new MUI.Require({\r\n js: [MUI.path.plugins + 'mocha/WebKitShadower.js']\r\n });\r\n}\r\n/*\r\n---\r\n\r\nname: Window\r\n\r\nscript: Window.js\r\n\r\ndescription: Build windows.\r\n\r\ncopyright: (c) 2007-2009 Greg Houston, .\r\n\r\nlicense: MIT-style license.\r\n\r\nrequires: [MochaUI/MUI]\r\n\r\nprovides: [MUI.Windows]\r\n\r\n...\r\n*/\r\n\r\nMUI.files[MUI.path.source + 'Window/Window.js'] = 'loading';\r\n//$require(MUI.themePath() + '/css/Dock.css');\r\n\r\n/*\r\nClass: Window\r\n Creates a single MochaUI window.\r\n\r\nSyntax:\r\n (start code)\r\n new MUI.Window(options);\r\n (end)\r\n\r\nArguments:\r\n options\r\n\r\nOptions:\r\n id - The ID of the window. If not defined, it will be set to 'win' + windowIDCount.\r\n title - The title of the window.\r\n icon - Place an icon in the window's titlebar. This is either set to false or to the url of the icon. It is set up for icons that are 16 x 16px.\r\n type - ('window', 'modal', 'modal2', or 'notification') Defaults to 'window'. Modals should be created with new MUI.Modal(options).\r\n loadMethod - ('html', 'xhr', or 'iframe') Defaults to 'html' if there is no contentURL. Defaults to 'xhr' if there is a contentURL. You only really need to set this if using the 'iframe' method.\r\n contentURL - Used if loadMethod is set to 'xhr' or 'iframe'.\r\n closeAfter - Either false or time in milliseconds. Closes the window after a certain period of time in milliseconds. This is particularly useful for notifications.\r\n evalScripts - (boolean) An xhr loadMethod option. Defaults to true.\r\n evalResponse - (boolean) An xhr loadMethod option. Defaults to false.\r\n content - (string or element) An html loadMethod option.\r\n toolbar - (boolean) Create window toolbar. Defaults to false. This can be used for tabs, media controls, and so forth.\r\n toolbarPosition - ('top' or 'bottom') Defaults to top.\r\n toolbarHeight - (number)\r\n toolbarURL - (url) Defaults to 'pages/lipsum.html'.\r\n toolbarContent - (string)\r\n toolbarOnload - (function)\r\n toolbar2 - (boolean) Create window toolbar. Defaults to false. This can be used for tabs, media controls, and so forth.\r\n toolbar2Position - ('top' or 'bottom') Defaults to top.\r\n toolbar2Height - (number)\r\n toolbar2URL - (url) Defaults to 'pages/lipsum.html'.\r\n toolbar2Content - (string)\r\n toolbar2Onload - (function)\r\n container - (element ID) Element the window is injected in. The container defaults to 'desktop'. If no desktop then to document.body. Use 'pageWrapper' if you don't want the windows to overlap the toolbars.\r\n restrict - (boolean) Restrict window to container when dragging.\r\n shape - ('box' or 'gauge') Shape of window. Defaults to 'box'.\r\n collapsible - (boolean) Defaults to true.\r\n minimizable - (boolean) Requires MUI.Desktop and MUI.Dock. Defaults to true if dependenices are met.\r\n maximizable - (boolean) Requires MUI.Desktop. Defaults to true if dependenices are met.\r\n closable - (boolean) Defaults to true.\r\n storeOnClose - (boolean) Hides a window and it's dock tab rather than destroying them on close. If you try to create the window again it will unhide the window and dock tab.\r\n modalOverlayClose - (boolean) Whether or not you can close a modal by clicking on the modal overlay. Defaults to true.\r\n draggable - (boolean) Defaults to false for modals; otherwise true.\r\n draggableGrid - (false or number) Distance in pixels for snap-to-grid dragging. Defaults to false.\r\n draggableLimit - (false or number) An object with x and y properties used to limit the movement of the Window. Defaults to false.\r\n draggableSnap - (boolean) The distance to drag before the Window starts to respond to the drag. Defaults to false.\r\n resizable - (boolean) Defaults to false for modals, notifications and gauges; otherwise true.\r\n resizeLimit - (object) Minimum and maximum width and height of window when resized.\r\n addClass - (string) Add a class to the window for more control over styling.\r\n width - (number) Width of content area.\r\n height - (number) Height of content area.\r\n headerHeight - (number) Height of window titlebar.\r\n footerHeight - (number) Height of window footer.\r\n cornerRadius - (number)\r\n x - (number) If x and y are left undefined the window is centered on the page.\r\n y - (number)\r\n scrollbars - (boolean)\r\n padding - (object)\r\n shadowBlur - (number) Width of shadows.\r\n shadowOffset - Should be positive and not be greater than the ShadowBlur.\r\n controlsOffset - Change this if you want to reposition the window controls.\r\n useCanvas - (boolean) Set this to false if you don't want a canvas body.\r\n useCanvasControls - (boolean) Set this to false if you wish to use images for the buttons.\r\n useSpinner - (boolean) Toggles whether or not the ajax spinners are displayed in window footers. Defaults to true.\r\n headerStartColor - ([r,g,b,]) Titlebar gradient's top color\r\n headerStopColor - ([r,g,b,]) Titlebar gradient's bottom color\r\n bodyBgColor - ([r,g,b,]) Background color of the main canvas shape\r\n minimizeBgColor - ([r,g,b,]) Minimize button background color\r\n minimizeColor - ([r,g,b,]) Minimize button color\r\n maximizeBgColor - ([r,g,b,]) Maximize button background color\r\n maximizeColor - ([r,g,b,]) Maximize button color\r\n closeBgColor - ([r,g,b,]) Close button background color\r\n closeColor - ([r,g,b,]) Close button color\r\n resizableColor - ([r,g,b,]) Resizable icon color\r\n onBeforeBuild - (function) Fired just before the window is built.\r\n onContentLoaded - (function) Fired when content is successfully loaded via XHR or Iframe.\r\n onFocus - (function) Fired when the window is focused.\r\n onBlur - (function) Fired when window loses focus.\r\n onResize - (function) Fired when the window is resized.\r\n onMinimize - (function) Fired when the window is minimized.\r\n onMaximize - (function) Fired when the window is maximized.\r\n onRestore - (function) Fired when a window is restored from minimized or maximized.\r\n onClose - (function) Fired just before the window is closed.\r\n onCloseComplete - (function) Fired after the window is closed.\r\n onBrowserResize - (function) Fired after the browser is resized.\r\n\r\nReturns:\r\n Window object.\r\n\r\nExample:\r\n Define a window. It is suggested you name the function the same as your window ID + \"Window\".\r\n (start code)\r\n var mywindowWindow = function(){\r\n new MUI.Window({\r\n id: 'mywindow',\r\n title: 'My Window',\r\n loadMethod: 'xhr',\r\n contentURL: 'pages/lipsum.html',\r\n width: 340,\r\n height: 150\r\n });\r\n }\r\n (end)\r\n\r\nExample:\r\n Create window onDomReady.\r\n (start code)\r\n window.addEvent('domready', function(){\r\n mywindow();\r\n });\r\n (end)\r\n\r\nExample:\r\n Add link events to build future windows. It is suggested you give your anchor the same ID as your window + \"WindowLink\" or + \"WindowLinkCheck\". Use the latter if it is a link in the menu toolbar.\r\n\r\n If you wish to add links in windows that open other windows remember to add events to those links when the windows are created.\r\n\r\n (start code)\r\n // Javascript:\r\n if ($('mywindowLink')){\r\n $('mywindowLink').addEvent('click', function(e) {\r\n new Event(e).stop();\r\n mywindow();\r\n });\r\n }\r\n\r\n // HTML:\r\n My Window\r\n (end)\r\n\r\n\r\n Loading Content with an XMLHttpRequest(xhr):\r\n For content to load via xhr all the files must be online and in the same domain. If you need to load content from another domain or wish to have it work offline, load the content in an iframe instead of using the xhr option.\r\n\r\n Iframes:\r\n If you use the iframe loadMethod your iframe will automatically be resized when the window it is in is resized. If you want this same functionality when using one of the other load options simply add class=\"mochaIframe\" to those iframes and they will be resized for you as well.\r\n\r\n*/\r\n\r\n// Having these options outside of the Class allows us to add, change, and remove\r\n// individual options without rewriting all of them.\r\n\r\nMUI.extend({\r\n Windows: {\r\n instances: new Hash(),\r\n indexLevel: 100, // Used for window z-Index\r\n windowIDCount: 0, // Used for windows without an ID defined by the user\r\n windowsVisible: true, // Ctrl-Alt-Q to toggle window visibility\r\n focusingWindow: false\r\n }\r\n});\r\n\r\nMUI.Windows.windowOptions = {\r\n id: null,\r\n title: 'New Window',\r\n icon: false,\r\n type: 'window',\r\n require: {\r\n css: [],\r\n images: [],\r\n js: [],\r\n onload: null\r\n },\r\n loadMethod: null,\r\n method: 'get',\r\n contentURL: null,\r\n data: null,\r\n\r\n closeAfter: false,\r\n\r\n // xhr options\r\n evalScripts: true,\r\n evalResponse: false,\r\n\r\n // html options\r\n content: 'Window content',\r\n wrapperClass: 'mochaContentWrapper',\r\n\r\n // Toolbar\r\n toolbar: false,\r\n toolbarPosition: 'top',\r\n toolbarHeight: 29,\r\n toolbarURL: 'pages/lipsum.html',\r\n toolbarData: null,\r\n toolbarContent: '',\r\n toolbarOnload: $empty,\r\n\r\n // Toolbar\r\n toolbar2: false,\r\n toolbar2Position: 'bottom',\r\n toolbar2Height: 29,\r\n toolbar2URL: 'pages/lipsum.html',\r\n toolbar2Data: null,\r\n toolbar2Content: '',\r\n toolbar2Onload: $empty,\r\n\r\n // Footer\r\n footer: false,\r\n footerHeight: 29,\r\n footerURL: 'pages/lipsum.html',\r\n footerData: null,\r\n footerContent: '',\r\n footerOnload: $empty,\r\n footerHide: false,\r\n\r\n // Container options\r\n container: null,\r\n restrict: true,\r\n shape: 'box',\r\n\r\n // Window Controls\r\n collapsible: true,\r\n minimizable: true,\r\n maximizable: true,\r\n closable: true,\r\n\r\n // Close options\r\n storeOnClose: false,\r\n\r\n // Modal options\r\n modalOverlayClose: true,\r\n\r\n // Draggable\r\n draggable: null,\r\n draggableGrid: false,\r\n draggableLimit: false,\r\n draggableSnap: false,\r\n\r\n // Resizable\r\n resizable: null,\r\n resizeLimit: {'x': [250, 2500], 'y': [125, 2000]},\r\n autoFit: true,\r\n\r\n // Style options:\r\n addClass: '',\r\n width: 300,\r\n minWidth: 100,\r\n height: 125,\r\n minHeight: 125,\r\n headerHeight: 25,\r\n cornerRadius: 8,\r\n x: null,\r\n y: null,\r\n scrollbars: true,\r\n padding: { top: 10, right: 12, bottom: 10, left: 12 },\r\n shadowBlur: 5,\r\n shadowOffset: {'x': 0, 'y': 1},\r\n controlsOffset: {'right': 6, 'top': 6},\r\n useCanvas: true,\r\n useCanvasControls: true,\r\n useSpinner: true,\r\n\r\n // Color options:\r\n headerStartColor: [250, 250, 250],\r\n headerStopColor: [229, 229, 229],\r\n bodyBgColor: [229, 229, 229],\r\n minimizeBgColor: [255, 255, 255],\r\n minimizeBgAlpha: 1.0,\r\n minimizeColor: [0, 0, 0],\r\n minimizeAlpha: 1.0,\r\n maximizeBgColor: [255, 255, 255],\r\n maximizeBgAlpha: 1.0,\r\n maximizeColor: [0, 0, 0],\r\n maximizeAlpha: 1.0,\r\n closeBgColor: [255, 255, 255],\r\n closeBgAlpha: 1.0,\r\n closeColor: [0, 0, 0],\r\n closeAlpha: 1.0,\r\n resizableColor: [254, 254, 254],\r\n\r\n // Events\r\n onBeforeBuild: $empty,\r\n onContentLoaded: $empty,\r\n onFocus: $empty,\r\n onBlur: $empty,\r\n onResize: $empty,\r\n onMinimize: $empty,\r\n onMaximize: $empty,\r\n onRestore: $empty,\r\n onClose: $empty,\r\n onCloseComplete: $empty,\r\n onBrowserResize: $empty\r\n};\r\n\r\nMUI.Windows.windowOptionsOriginal = $merge(MUI.Windows.windowOptions);\r\n\r\nMUI.Window = new Class({\r\n\r\n Implements: [Events, Options],\r\n\r\n options: MUI.Windows.windowOptions,\r\n\r\n initialize: function(options) {\r\n this.setOptions(options);\r\n\r\n // Shorten object chain\r\n var options = this.options;\r\n\r\n if (options.minHeight > options.height)\r\n options.minHeight = options.height;\r\n \r\n // Mod by JB Footerless Mocha Windows!\r\n options.footerHeight = this.options.footerHide ? 0 : options.footerHeight;\r\n\r\n $extend(this, {\r\n mochaControlsWidth: 0,\r\n minimizebuttonX: 0, // Minimize button horizontal position\r\n maximizebuttonX: 0, // Maximize button horizontal position\r\n closebuttonX: 0, // Close button horizontal position\r\n headerFooterShadow: options.headerHeight + options.footerHeight + (options.shadowBlur * 2), \r\n oldTop: 0,\r\n oldLeft: 0,\r\n isMaximized: false,\r\n isMinimized: false,\r\n isCollapsed: false,\r\n timestamp: $time()\r\n });\r\n\r\n if (options.type != 'window') {\r\n options.container = document.body;\r\n options.minimizable = false;\r\n }\r\n if (!options.container) {\r\n options.container = MUI.Desktop && MUI.Desktop.desktop ? MUI.Desktop.desktop : document.body;\r\n }\r\n\r\n // Set this.options.resizable to default if it was not defined\r\n if (options.resizable == null) {\r\n if (options.type != 'window' || options.shape == 'gauge') {\r\n options.resizable = false;\r\n }\r\n else {\r\n options.resizable = true;\r\n }\r\n }\r\n\r\n // Set this.options.draggable if it was not defined\r\n if (options.draggable == null) {\r\n options.draggable = options.type != 'window' ? false : true;\r\n }\r\n\r\n // Gauges are not maximizable or resizable\r\n if (options.shape == 'gauge' || options.type == 'notification') {\r\n options.collapsible = false;\r\n options.maximizable = false;\r\n options.contentBgColor = 'transparent';\r\n options.scrollbars = false;\r\n options.footerHeight = 0;\r\n }\r\n if (options.type == 'notification') {\r\n options.closable = false;\r\n options.headerHeight = 0;\r\n }\r\n\r\n // Minimizable, dock is required and window cannot be modal\r\n if (MUI.Dock && $(MUI.options.dock)) {\r\n if (MUI.Dock.dock && options.type != 'modal' && options.type != 'modal2') {\r\n options.minimizable = options.minimizable;\r\n }\r\n }\r\n else {\r\n options.minimizable = false;\r\n }\r\n\r\n // Maximizable, desktop is required\r\n options.maximizable = MUI.Desktop && MUI.Desktop.desktop && options.maximizable && options.type != 'modal' && options.type != 'modal2';\r\n\r\n if (this.options.type == 'modal2') {\r\n this.options.shadowBlur = 0;\r\n this.options.shadowOffset = { 'x': 0, 'y': 0 };\r\n this.options.useSpinner = false;\r\n this.options.useCanvas = false;\r\n this.options.footerHeight = 0;\r\n this.options.headerHeight = 0;\r\n }\r\n\r\n // If window has no ID, give it one.\r\n options.id = options.id || 'win' + (++MUI.Windows.windowIDCount);\r\n\r\n this.windowEl = $(options.id);\r\n\r\n if (options.require.css.length || options.require.images.length) {\r\n new MUI.Require({\r\n css: options.require.css,\r\n images: options.require.images,\r\n onload: function() {\r\n this.newWindow();\r\n } .bind(this)\r\n });\r\n }\r\n else {\r\n this.newWindow();\r\n }\r\n\r\n // added by AH 3/29/17\r\n MUI.focusWindow(this.windowEl);\r\n\r\n // Return window object\r\n return this;\r\n },\r\n saveValues: function() {\r\n var coordinates = this.windowEl.getCoordinates();\r\n this.options.x = coordinates.left.toInt();\r\n this.options.y = coordinates.top.toInt();\r\n },\r\n\r\n /*\r\n\r\n Internal Function: newWindow\r\n \r\n Arguments:\r\n properties\r\n\r\n */\r\n newWindow: function(properties) { // options is not doing anything\r\n\r\n // Shorten object chain\r\n var instances = MUI.Windows.instances;\r\n var instanceID = MUI.Windows.instances.get(this.options.id);\r\n var options = this.options;\r\n\r\n // Here we check to see if there is already a class instance for this window\r\n if (instanceID) var instance = instanceID;\r\n\r\n // Check if window already exists and is not in progress of closing\r\n if (this.windowEl && !this.isClosing) {\r\n // Restore if minimized\r\n if (instance.isMinimized) {\r\n MUI.Dock.restoreMinimized(this.windowEl);\r\n }\r\n // Expand and focus if collapsed\r\n else if (instance.isCollapsed) {\r\n MUI.collapseToggle(this.windowEl);\r\n setTimeout(MUI.focusWindow.pass(this.windowEl, this), 10);\r\n }\r\n else if (this.windowEl.hasClass('windowClosed')) {\r\n\r\n if (instance.check) instance.check.show();\r\n\r\n this.windowEl.removeClass('windowClosed');\r\n this.windowEl.setStyle('opacity', 0);\r\n this.windowEl.addClass('mocha');\r\n\r\n if (MUI.Dock && $(MUI.options.dock) && instance.options.type == 'window') {\r\n var currentButton = $(instance.options.id + '_dockTab');\r\n if (currentButton != null) {\r\n currentButton.show();\r\n }\r\n MUI.Desktop.setDesktopSize();\r\n MUI.rWidth(this.contentWrapperEl);\r\n }\r\n\r\n instance.displayNewWindow();\r\n\r\n }\r\n // Else focus\r\n else {\r\n var coordinates = document.getCoordinates();\r\n if (this.windowEl.getStyle('left').toInt() > coordinates.width || this.windowEl.getStyle('top').toInt() > coordinates.height) {\r\n MUI.centerWindow(this.windowEl);\r\n }\r\n setTimeout(MUI.focusWindow.pass(this.windowEl, this), 10);\r\n if (MUI.options.standardEffects == true) {\r\n this.windowEl.shake();\r\n }\r\n }\r\n return;\r\n }\r\n else {\r\n instances.set(options.id, this);\r\n }\r\n\r\n this.isClosing = false;\r\n this.fireEvent('onBeforeBuild');\r\n\r\n // Create window div\r\n MUI.Windows.indexLevel++;\r\n this.windowEl = new Element('div', {\r\n 'class': 'mocha mochaWindow',\r\n 'id': options.id,\r\n 'styles': {\r\n 'position': 'absolute',\r\n 'width': options.width,\r\n 'height': options.height,\r\n 'display': 'block',\r\n 'opacity': 0,\r\n 'zIndex': MUI.Windows.indexLevel += 2\r\n }\r\n });\r\n\r\n this.windowEl.store('instance', this);\r\n\r\n this.windowEl.addClass(options.addClass);\r\n\r\n if (options.type == 'modal2') {\r\n this.windowEl.addClass('modal2');\r\n }\r\n\r\n // Fix a mouseover issue with gauges in IE7\r\n if (Browser.Engine.trident && options.shape == 'gauge') {\r\n this.windowEl.setStyle('backgroundImage', 'url(../images/spacer.gif)');\r\n }\r\n\r\n if ((this.options.type == 'modal' || options.type == 'modal2') && Browser.Platform.mac && Browser.Engine.gecko) {\r\n if (/Firefox[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent)) {\r\n var ffversion = new Number(RegExp.$1);\r\n if (ffversion < 3) {\r\n this.windowEl.setStyle('position', 'fixed');\r\n }\r\n }\r\n }\r\n\r\n if (options.loadMethod == 'iframe') {\r\n options.padding = { top: 0, right: 0, bottom: 0, left: 0 };\r\n }\r\n\r\n // Insert sub elements inside windowEl\r\n this.insertWindowElements();\r\n\r\n // Set title\r\n if (options.title) {\r\n var title = MUI.getFittedTitle(options.title, options.width);\r\n this.titleEl.set('html', title);\r\n this.titleEl.set('title', options.title);\r\n }\r\n\r\n this.contentWrapperEl.setStyle('overflow', 'hidden');\r\n \r\n if (options.footerHide) {\r\n if (options.toolbar2 && options.toolbar2Position == 'bottom')\r\n this.toolbar2WrapperEl.setStyles({\r\n 'overflow': 'hidden',\r\n 'borderRadius': \"0 0 \" + options.cornerRadius + \"px \" + options.cornerRadius + \"px\"\r\n });\r\n else\r\n this.contentWrapperEl.setStyle('borderRadius', \"0 0 \" + options.cornerRadius + \"px \" + options.cornerRadius + \"px\");\r\n }\r\n\r\n this.contentEl.setStyles({\r\n 'padding-top': options.padding.top,\r\n 'padding-bottom': options.padding.bottom,\r\n 'padding-left': options.padding.left,\r\n 'padding-right': options.padding.right\r\n });\r\n\r\n if (options.shape == 'gauge') {\r\n if (options.useCanvasControls) {\r\n this.canvasControlsEl.setStyle('visibility', 'hidden');\r\n }\r\n else {\r\n this.controlsEl.setStyle('visibility', 'hidden');\r\n }\r\n this.windowEl.addEvent('mouseover', function() {\r\n this.mouseover = true;\r\n var showControls = function() {\r\n if (this.mouseover != false) {\r\n if (options.useCanvasControls) {\r\n this.canvasControlsEl.setStyle('visibility', 'visible');\r\n }\r\n else {\r\n this.controlsEl.setStyle('visibility', 'visible');\r\n }\r\n this.canvasHeaderEl.setStyle('visibility', 'visible');\r\n this.titleEl.show();\r\n }\r\n };\r\n showControls.delay(0, this);\r\n\r\n } .bind(this));\r\n this.windowEl.addEvent('mouseleave', function() {\r\n this.mouseover = false;\r\n if (this.options.useCanvasControls) {\r\n this.canvasControlsEl.setStyle('visibility', 'hidden');\r\n }\r\n else {\r\n this.controlsEl.setStyle('visibility', 'hidden');\r\n }\r\n this.canvasHeaderEl.setStyle('visibility', 'hidden');\r\n this.titleEl.hide();\r\n } .bind(this));\r\n }\r\n\r\n // Inject window into DOM\r\n this.windowEl.inject(options.container);\r\n\r\n // Convert CSS colors to Canvas colors.\r\n this.setColors();\r\n\r\n if (options.type != 'notification') {\r\n this.setMochaControlsWidth();\r\n }\r\n\r\n // Add content to window.\r\n MUI.updateContent({\r\n 'element': this.windowEl,\r\n 'content': options.content,\r\n 'method': options.method,\r\n 'url': options.contentURL,\r\n 'data': options.data,\r\n 'onContentLoaded': null,\r\n 'require': {\r\n js: options.require.js,\r\n onload: options.require.onload\r\n }\r\n });\r\n\r\n // Add content to window toolbar.\r\n if (this.options.toolbar == true) {\r\n MUI.updateContent({\r\n 'element': this.windowEl,\r\n 'childElement': this.toolbarEl,\r\n 'content': options.toolbarContent,\r\n 'loadMethod': 'xhr',\r\n 'method': options.method,\r\n 'url': options.toolbarURL,\r\n 'data': options.toolbarData,\r\n 'onContentLoaded': options.toolbarOnload\r\n });\r\n }\r\n\r\n // Add content to window toolbar.\r\n if (this.options.toolbar2 == true) {\r\n MUI.updateContent({\r\n 'element': this.windowEl,\r\n 'childElement': this.toolbar2El,\r\n 'content': options.toolbar2Content,\r\n 'loadMethod': 'xhr',\r\n 'method': options.method,\r\n 'url': options.toolbar2URL,\r\n 'data': options.toolbar2Data,\r\n 'onContentLoaded': options.toolbar2Onload\r\n });\r\n }\r\n\r\n // Add content to window footer.\r\n if (this.options.footer == true) {\r\n MUI.updateContent({\r\n 'element': this.windowEl,\r\n 'childElement': this.footerEl,\r\n 'content': options.footerContent,\r\n 'loadMethod': 'xhr',\r\n 'method': options.method,\r\n 'url': options.footerURL,\r\n 'data': options.footerData,\r\n 'onContentLoaded': options.footerOnload\r\n });\r\n }\r\n\r\n this.drawWindow();\r\n\r\n // Attach events to the window\r\n this.attachDraggable();\r\n this.attachResizable();\r\n this.setupEvents();\r\n\r\n if (options.resizable) {\r\n this.adjustHandles();\r\n }\r\n\r\n // Position window. If position not specified by user then center the window on the page.\r\n if (options.container == document.body || options.container == MUI.Desktop.desktop) {\r\n var dimensions = window.getSize();\r\n }\r\n else {\r\n var dimensions = $(this.options.container).getSize();\r\n }\r\n\r\n var x, y;\r\n if (!options.y) {\r\n if (MUI.Desktop && MUI.Desktop.desktop) {\r\n y = (dimensions.y * .5) - (this.windowEl.offsetHeight * .5);\r\n if (y < -options.shadowBlur) y = -options.shadowBlur;\r\n }\r\n else {\r\n y = window.getScroll().y + (window.getSize().y * .5) - (this.windowEl.offsetHeight * .5);\r\n if (y < -options.shadowBlur) y = -options.shadowBlur;\r\n }\r\n }\r\n else {\r\n y = options.y - options.shadowBlur;\r\n }\r\n\r\n if (this.options.x == null) {\r\n x = (dimensions.x * .5) - (this.windowEl.offsetWidth * .5);\r\n if (x < -options.shadowBlur) x = -options.shadowBlur;\r\n }\r\n else {\r\n x = options.x - options.shadowBlur;\r\n }\r\n\r\n this.windowEl.setStyles({\r\n 'top': y,\r\n 'left': x\r\n });\r\n\r\n // Create opacityMorph\r\n\r\n this.opacityMorph = new Fx.Morph(this.windowEl, {\r\n 'duration': 350,\r\n transition: Fx.Transitions.Sine.easeInOut,\r\n onComplete: function() {\r\n if (Browser.Engine.trident) {\r\n this.drawWindow();\r\n }\r\n } .bind(this)\r\n });\r\n\r\n this.displayNewWindow();\r\n\r\n // This is a generic morph that can be reused later by functions like centerWindow()\r\n // It returns the windowEl element rather than this Class.\r\n this.morph = new Fx.Morph(this.windowEl, {\r\n 'duration': 200\r\n });\r\n this.windowEl.store('morph', this.morph);\r\n\r\n this.resizeMorph = new Fx.Elements([this.contentWrapperEl, this.windowEl], {\r\n duration: 400,\r\n transition: Fx.Transitions.Sine.easeInOut,\r\n onStart: function() {\r\n this.resizeAnimation = this.drawWindow.periodical(20, this);\r\n } .bind(this),\r\n onComplete: function() {\r\n $clear(this.resizeAnimation);\r\n this.drawWindow();\r\n // Show iframe\r\n if (this.iframeEl) {\r\n this.iframeEl.setStyle('visibility', 'visible');\r\n }\r\n } .bind(this)\r\n });\r\n this.windowEl.store('resizeMorph', this.resizeMorph);\r\n\r\n // Add check mark to menu if link exists in menu\r\n // Need to make sure the check mark is not added to links not in menu\r\n if ($(this.windowEl.id + 'LinkCheck')) {\r\n this.check = new Element('div', {\r\n 'class': 'check',\r\n 'id': this.options.id + '_check'\r\n }).inject(this.windowEl.id + 'LinkCheck');\r\n }\r\n\r\n if (this.options.closeAfter != false) {\r\n MUI.closeWindow.delay(this.options.closeAfter, this, this.windowEl);\r\n }\r\n\r\n if (MUI.Dock && $(MUI.options.dock) && this.options.type == 'window') {\r\n MUI.Dock.createDockTab(this.windowEl);\r\n }\r\n\r\n },\r\n displayNewWindow: function() {\r\n\r\n options = this.options;\r\n if (options.type == 'modal' || options.type == 'modal2') {\r\n MUI.currentModal = this.windowEl;\r\n if (Browser.Engine.trident4) {\r\n $('modalFix').show();\r\n }\r\n\r\n // added by AH 3/23/17\r\n // keep track of current open modal windows\r\n MUI.openModalWindows.push(this.options.id);\r\n\r\n // modified by WM -- changed zIndex\r\n $('modalOverlay').setStyles({'zIndex': this.windowEl.getStyle('zIndex') - 2}).show();\r\n $('dockWrapper').setStyles({'zIndex': this.windowEl.getStyle('zIndex') - 1, 'opacity': 0.6});\r\n if (MUI.options.advancedEffects == false) {\r\n $('modalOverlay').setStyle('opacity', .7);\r\n this.windowEl.setStyles({\r\n 'opacity': 1\r\n });\r\n }\r\n else {\r\n MUI.Modal.modalOverlayCloseMorph.cancel();\r\n MUI.Modal.modalOverlayOpenMorph.start({\r\n 'opacity': .6\r\n });\r\n this.windowEl.setStyles({\r\n //'zIndex': 2100\r\n });\r\n this.opacityMorph.start({\r\n 'opacity': 1\r\n });\r\n }\r\n\r\n $$('.dockTab').removeClass('activeDockTab');\r\n $$('.mocha').removeClass('isFocused');\r\n this.windowEl.addClass('isFocused');\r\n\r\n }\r\n else if (MUI.options.advancedEffects == false) {\r\n this.windowEl.setStyle('opacity', 1);\r\n setTimeout(MUI.focusWindow.pass(this.windowEl, this), 10);\r\n }\r\n else {\r\n // IE cannot handle both element opacity and VML alpha at the same time.\r\n if (Browser.Engine.trident) {\r\n this.drawWindow(false);\r\n }\r\n this.opacityMorph.start({\r\n 'opacity': 1\r\n });\r\n setTimeout(MUI.focusWindow.pass(this.windowEl, this), 10);\r\n }\r\n\r\n },\r\n setupEvents: function() {\r\n var windowEl = this.windowEl;\r\n // Set events\r\n // Note: if a button does not exist, its due to properties passed to newWindow() stating otherwice\r\n if (this.closeButtonEl) {\r\n this.closeButtonEl.addEvent(MooTools.getTouchOrMouseEvent('click'), function(e) {\r\n new Event(e).stop();\r\n if (Browser.isMobile) e.preventDefault();\r\n // MODIFIED BY WM - 8/4/14\r\n // Call close instead of MUI.closeWindow, to allow overriding\r\n this.close(); \r\n } .bind(this));\r\n }\r\n\r\n if (this.options.type == 'window') {\r\n windowEl.addEvent(MooTools.getTouchOrMouseEvent('mousedown'), function(e) {\r\n // For some reason, when IE9 stops this event,\r\n // input elements no longer gain focus.\r\n if (Browser.Engine.trident && (Browser.version <= 8)) {\r\n new Event(e).stop();\r\n }\r\n MUI.focusWindow(windowEl);\r\n if (windowEl.getStyle('top').toInt() < -this.options.shadowBlur) {\r\n windowEl.setStyle('top', -this.options.shadowBlur);\r\n }\r\n } .bind(this));\r\n }\r\n\r\n if (this.minimizeButtonEl) {\r\n this.minimizeButtonEl.addEvent(MooTools.getTouchOrMouseEvent('click'), function(e) {\r\n new Event(e).stop();\r\n if (Browser.isMobile) e.preventDefault();\r\n MUI.Dock.minimizeWindow(windowEl);\r\n } .bind(this));\r\n }\r\n\r\n if (this.maximizeButtonEl) {\r\n this.maximizeButtonEl.addEvent(MooTools.getTouchOrMouseEvent('click'), function(e) {\r\n new Event(e).stop();\r\n if (Browser.isMobile) e.preventDefault();\r\n if (this.isMaximized) {\r\n MUI.Desktop.restoreWindow(windowEl);\r\n } else {\r\n MUI.Desktop.maximizeWindow(windowEl);\r\n }\r\n } .bind(this));\r\n }\r\n\r\n if (this.options.collapsible == true) {\r\n // Keep titlebar text from being selected on double click in Safari.\r\n this.titleEl.addEvent('selectstart', function(e) {\r\n e = new Event(e).stop();\r\n } .bind(this));\r\n\r\n if (Browser.Engine.trident) {\r\n this.titleBarEl.addEvent(MooTools.getTouchOrMouseEvent('mousedown'), function(e) {\r\n this.titleEl.setCapture();\r\n } .bind(this));\r\n this.titleBarEl.addEvent(MooTools.getTouchOrMouseEvent('mouseup'), function(e) {\r\n this.titleEl.releaseCapture();\r\n } .bind(this));\r\n }\r\n\r\n if (!Browser.isMobile) {\r\n this.titleBarEl.addEvent('dblclick', function(e) {\r\n e = new Event(e).stop();\r\n MUI.collapseToggle(this.windowEl);\r\n } .bind(this));\r\n }\r\n }\r\n\r\n },\r\n\r\n // ADDED BY WM - 12/11/12\r\n setupElements: function(elems) {\r\n if (!elems) {\r\n elems = this.contentEl.getElements('[id]');\r\n if (this.toolbarEl)\r\n elems = elems.concat(this.toolbarEl.getElements('[id]'));\r\n if (this.toolbar2El)\r\n elems = elems.concat(this.toolbar2El.getElements('[id]'));\r\n }\r\n\r\n for (var i = 0; i < elems.length; i++) {\r\n var elem = $(elems[i]);\r\n // Only change the id if it has one and it hasn't already been changed\r\n if (elem && elem.id && !elem.id.startsWith(this.options.id + '_'))\r\n elem.id = this.options.id + '_' + elem.id;\r\n }\r\n },\r\n\r\n getElement: function(elemName) {\r\n return $(this.options.id + '_' + elemName) || $(elemName);\r\n },\r\n // END ADDED BY WM\r\n\r\n /*\r\n\r\n Internal Function: attachDraggable()\r\n Make window draggable.\r\n\r\n */\r\n attachDraggable: function() {\r\n var windowEl = this.windowEl;\r\n if (!this.options.draggable) return;\r\n this.windowDrag = new Drag.Move(windowEl, {\r\n handle: this.titleBarEl,\r\n container: this.options.restrict == true ? $(this.options.container) : false,\r\n grid: this.options.draggableGrid,\r\n limit: this.options.draggableLimit,\r\n snap: this.options.draggableSnap,\r\n onStart: function() {\r\n if (this.options.type != 'modal' && this.options.type != 'modal2') {\r\n MUI.focusWindow(windowEl);\r\n $('windowUnderlay').show();\r\n }\r\n if (this.iframeEl) {\r\n if (!Browser.Engine.trident) {\r\n this.iframeEl.setStyle('visibility', 'hidden');\r\n }\r\n else {\r\n this.iframeEl.hide();\r\n }\r\n }\r\n } .bind(this),\r\n onComplete: function() {\r\n if (this.options.type != 'modal' && this.options.type != 'modal2') {\r\n $('windowUnderlay').hide();\r\n }\r\n if (this.iframeEl) {\r\n if (!Browser.Engine.trident) {\r\n this.iframeEl.setStyle('visibility', 'visible');\r\n }\r\n else {\r\n this.iframeEl.show();\r\n }\r\n }\r\n // Store new position in options.\r\n this.saveValues();\r\n } .bind(this)\r\n });\r\n },\r\n /*\r\n\r\n Internal Function: attachResizable\r\n Make window resizable.\r\n\r\n */\r\n attachResizable: function() {\r\n var windowEl = this.windowEl;\r\n if (!this.options.resizable) return;\r\n this.resizable1 = this.windowEl.makeResizable({\r\n handle: [this.n, this.ne, this.nw],\r\n limit: {\r\n y: [\r\n function() {\r\n return this.windowEl.getStyle('top').toInt() + this.windowEl.getStyle('height').toInt() - this.options.resizeLimit.y[1];\r\n } .bind(this),\r\n function() {\r\n return this.windowEl.getStyle('top').toInt() + this.windowEl.getStyle('height').toInt() - this.options.resizeLimit.y[0];\r\n } .bind(this)\r\n ]\r\n },\r\n modifiers: { x: false, y: 'top' },\r\n onStart: function() {\r\n this.resizeOnStart();\r\n this.coords = this.contentWrapperEl.getCoordinates();\r\n this.y2 = this.coords.top.toInt() + this.contentWrapperEl.offsetHeight;\r\n } .bind(this),\r\n onDrag: function() {\r\n this.coords = this.contentWrapperEl.getCoordinates();\r\n this.contentWrapperEl.setStyle('height', this.y2 - this.coords.top.toInt());\r\n this.resizeOnDrag();\r\n } .bind(this),\r\n onComplete: function() {\r\n this.resizeOnComplete();\r\n } .bind(this)\r\n });\r\n\r\n this.resizable2 = this.contentWrapperEl.makeResizable({\r\n handle: [this.e, this.ne],\r\n limit: {\r\n x: [this.options.resizeLimit.x[0] - (this.options.shadowBlur * 2), this.options.resizeLimit.x[1] - (this.options.shadowBlur * 2)]\r\n },\r\n modifiers: { x: 'width', y: false },\r\n onStart: function() {\r\n this.resizeOnStart();\r\n } .bind(this),\r\n onDrag: function() {\r\n this.resizeOnDrag();\r\n } .bind(this),\r\n onComplete: function() {\r\n this.resizeOnComplete();\r\n } .bind(this)\r\n });\r\n\r\n this.resizable3 = this.contentWrapperEl.makeResizable({\r\n container: this.options.restrict == true ? $(this.options.container) : false,\r\n handle: this.se,\r\n limit: {\r\n x: [this.options.resizeLimit.x[0] - (this.options.shadowBlur * 2), this.options.resizeLimit.x[1] - (this.options.shadowBlur * 2)],\r\n y: [this.options.resizeLimit.y[0] - this.headerFooterShadow, this.options.resizeLimit.y[1] - this.headerFooterShadow]\r\n },\r\n modifiers: { x: 'width', y: 'height' },\r\n onStart: function() {\r\n this.resizeOnStart();\r\n } .bind(this),\r\n onDrag: function() {\r\n this.resizeOnDrag();\r\n } .bind(this),\r\n onComplete: function() {\r\n this.resizeOnComplete();\r\n } .bind(this)\r\n });\r\n\r\n this.resizable4 = this.contentWrapperEl.makeResizable({\r\n handle: [this.s, this.sw],\r\n limit: {\r\n y: [this.options.resizeLimit.y[0] - this.headerFooterShadow, this.options.resizeLimit.y[1] - this.headerFooterShadow]\r\n },\r\n modifiers: { x: false, y: 'height' },\r\n onStart: function() {\r\n this.resizeOnStart();\r\n } .bind(this),\r\n onDrag: function() {\r\n this.resizeOnDrag();\r\n } .bind(this),\r\n onComplete: function() {\r\n this.resizeOnComplete();\r\n } .bind(this)\r\n });\r\n\r\n this.resizable5 = this.windowEl.makeResizable({\r\n handle: [this.w, this.sw, this.nw],\r\n limit: {\r\n x: [\r\n function() {\r\n return this.windowEl.getStyle('left').toInt() + this.windowEl.getStyle('width').toInt() - this.options.resizeLimit.x[1];\r\n } .bind(this),\r\n function() {\r\n return this.windowEl.getStyle('left').toInt() + this.windowEl.getStyle('width').toInt() - this.options.resizeLimit.x[0];\r\n } .bind(this)\r\n ]\r\n },\r\n modifiers: { x: 'left', y: false },\r\n onStart: function() {\r\n this.resizeOnStart();\r\n this.coords = this.contentWrapperEl.getCoordinates();\r\n this.x2 = this.coords.left.toInt() + this.contentWrapperEl.offsetWidth;\r\n } .bind(this),\r\n onDrag: function() {\r\n this.coords = this.contentWrapperEl.getCoordinates();\r\n this.contentWrapperEl.setStyle('width', this.x2 - this.coords.left.toInt());\r\n this.resizeOnDrag();\r\n } .bind(this),\r\n onComplete: function() {\r\n this.resizeOnComplete();\r\n } .bind(this)\r\n });\r\n\r\n },\r\n resizeOnStart: function() {\r\n $('windowUnderlay').show();\r\n if (this.iframeEl) {\r\n if (!Browser.Engine.trident) {\r\n this.iframeEl.setStyle('visibility', 'hidden');\r\n }\r\n else {\r\n this.iframeEl.hide();\r\n }\r\n }\r\n },\r\n resizeOnDrag: function() {\r\n // Fix for a rendering glitch in FF when resizing a window with panels in it\r\n if (Browser.Engine.gecko) {\r\n this.windowEl.getElements('.panel').each(function(panel) {\r\n panel.store('oldOverflow', panel.getStyle('overflow'));\r\n panel.setStyle('overflow', 'visible');\r\n });\r\n }\r\n this.drawWindow();\r\n this.adjustHandles();\r\n if (Browser.Engine.gecko) {\r\n this.windowEl.getElements('.panel').each(function(panel) {\r\n panel.setStyle('overflow', panel.retrieve('oldOverflow')); // Fix for a rendering bug in FF\r\n });\r\n }\r\n },\r\n resizeOnComplete: function() {\r\n $('windowUnderlay').hide();\r\n if (this.iframeEl) {\r\n if (!Browser.Engine.trident) {\r\n this.iframeEl.setStyle('visibility', 'visible');\r\n }\r\n else {\r\n this.iframeEl.show();\r\n // The following hack is to get IE8 RC1 IE8 Standards Mode to properly resize an iframe\r\n // when only the vertical dimension is changed.\r\n this.iframeEl.setStyle('width', '99%');\r\n this.iframeEl.setStyle('height', this.contentWrapperEl.offsetHeight);\r\n this.iframeEl.setStyle('width', '100%');\r\n this.iframeEl.setStyle('height', this.contentWrapperEl.offsetHeight);\r\n }\r\n }\r\n\r\n // Resize panels if there are any\r\n if (this.contentWrapperEl.getChildren('.column') != null) {\r\n MUI.rWidth(this.contentWrapperEl);\r\n this.contentWrapperEl.getChildren('.column').each(function(column) {\r\n MUI.panelHeight(column);\r\n });\r\n }\r\n\r\n this.fireEvent('onResize', this.windowEl);\r\n },\r\n adjustHandles: function() {\r\n\r\n var shadowBlur = this.options.shadowBlur;\r\n var shadowBlur2x = shadowBlur * 2;\r\n var shadowOffset = this.options.shadowOffset;\r\n var top = shadowBlur - shadowOffset.y - 1;\r\n var right = shadowBlur + shadowOffset.x - 1;\r\n var bottom = shadowBlur + shadowOffset.y - 1;\r\n var left = shadowBlur - shadowOffset.x - 1;\r\n\r\n var coordinates = this.windowEl.getCoordinates();\r\n var width = coordinates.width - shadowBlur2x + 2;\r\n var height = coordinates.height - shadowBlur2x + 2;\r\n\r\n this.n.setStyles({\r\n 'top': top,\r\n 'left': left + 10,\r\n 'width': width - 20\r\n });\r\n this.e.setStyles({\r\n 'top': top + 10,\r\n 'right': right,\r\n 'height': height - 30\r\n });\r\n this.s.setStyles({\r\n 'bottom': bottom,\r\n 'left': left + 10,\r\n 'width': width - 30\r\n });\r\n this.w.setStyles({\r\n 'top': top + 10,\r\n 'left': left,\r\n 'height': height - 20\r\n });\r\n this.ne.setStyles({\r\n 'top': top,\r\n 'right': right\r\n });\r\n this.se.setStyles({\r\n 'bottom': bottom,\r\n 'right': right\r\n });\r\n this.sw.setStyles({\r\n 'bottom': bottom,\r\n 'left': left\r\n });\r\n this.nw.setStyles({\r\n 'top': top,\r\n 'left': left\r\n });\r\n },\r\n detachResizable: function() {\r\n this.resizable1.detach();\r\n this.resizable2.detach();\r\n this.resizable3.detach();\r\n this.resizable4.detach();\r\n this.resizable5.detach();\r\n this.windowEl.getElements('.handle').hide();\r\n },\r\n reattachResizable: function() {\r\n this.resizable1.attach();\r\n this.resizable2.attach();\r\n this.resizable3.attach();\r\n this.resizable4.attach();\r\n this.resizable5.attach();\r\n this.windowEl.getElements('.handle').show();\r\n },\r\n /*\r\n\r\n Internal Function: insertWindowElements\r\n\r\n Arguments:\r\n windowEl\r\n\r\n */\r\n insertWindowElements: function() {\r\n\r\n var options = this.options;\r\n var height = options.height;\r\n var width = options.width;\r\n var id = options.id;\r\n //Added by JR 12/18/2014\r\n var footerHeight = options.footerHeight;\r\n\r\n var cache = {};\r\n\r\n if (Browser.Engine.trident4) {\r\n cache.zIndexFixEl = new Element('iframe', {\r\n 'id': id + '_zIndexFix',\r\n 'class': 'zIndexFix',\r\n 'scrolling': 'no',\r\n 'marginWidth': 0,\r\n 'marginHeight': 0,\r\n 'src': '',\r\n 'styles': {\r\n 'position': 'absolute' // This is set here to make theme transitions smoother\r\n }\r\n }).inject(this.windowEl);\r\n }\r\n\r\n cache.overlayEl = new Element('div', {\r\n 'id': id + '_overlay',\r\n 'class': 'mochaOverlay',\r\n 'styles': {\r\n 'position': 'absolute', // This is set here to make theme transitions smoother\r\n 'top': 0,\r\n 'left': 0\r\n }\r\n }).inject(this.windowEl);\r\n\r\n cache.titleBarEl = new Element('div', {\r\n 'id': id + '_titleBar',\r\n 'class': 'mochaTitlebar',\r\n 'styles': {\r\n 'cursor': options.draggable ? 'move' : 'default'\r\n }\r\n }).inject(cache.overlayEl, 'top');\r\n\r\n cache.titleEl = new Element('h3', {\r\n 'id': id + '_title',\r\n 'class': 'mochaTitle'\r\n }).inject(cache.titleBarEl);\r\n\r\n if (options.icon != false) {\r\n cache.titleEl.setStyles({\r\n 'padding-left': 28,\r\n 'background': 'url(' + options.icon + ') 5px 4px no-repeat'\r\n });\r\n }\r\n\r\n cache.contentBorderEl = new Element('div', {\r\n 'id': id + '_contentBorder',\r\n 'class': 'mochaContentBorder'\r\n }).inject(cache.overlayEl);\r\n\r\n if (options.toolbar) {\r\n cache.toolbarWrapperEl = new Element('div', {\r\n 'id': id + '_toolbarWrapper',\r\n 'class': 'mochaToolbarWrapper',\r\n 'styles': { 'height': options.toolbarHeight }\r\n }).inject(cache.contentBorderEl, options.toolbarPosition == 'bottom' ? 'after' : 'before');\r\n\r\n if (options.toolbarPosition == 'bottom') {\r\n cache.toolbarWrapperEl.addClass('bottom');\r\n }\r\n cache.toolbarEl = new Element('div', {\r\n 'id': id + '_toolbar',\r\n 'class': 'mochaToolbar',\r\n 'styles': { 'height': options.toolbarHeight }\r\n }).inject(cache.toolbarWrapperEl);\r\n }\r\n\r\n if (options.toolbar2) {\r\n cache.toolbar2WrapperEl = new Element('div', {\r\n 'id': id + '_toolbar2Wrapper',\r\n 'class': 'mochaToolbarWrapper',\r\n 'styles': { 'height': options.toolbar2Height }\r\n }).inject(cache.contentBorderEl, options.toolbar2Position == 'bottom' ? 'after' : 'before');\r\n\r\n if (options.toolbar2Position == 'bottom') {\r\n cache.toolbar2WrapperEl.addClass('bottom');\r\n }\r\n cache.toolbar2El = new Element('div', {\r\n 'id': id + '_toolbar2',\r\n 'class': 'mochaToolbar',\r\n 'styles': { 'height': options.toolbar2Height }\r\n }).inject(cache.toolbar2WrapperEl);\r\n }\r\n\r\n cache.contentWrapperEl = new Element('div', {\r\n 'id': id + '_contentWrapper',\r\n 'class': options.wrapperClass,\r\n 'styles': {\r\n 'width': width + 'px',\r\n 'height': height + 'px'\r\n }\r\n }).inject(cache.contentBorderEl);\r\n\r\n if (this.options.shape == 'gauge') {\r\n cache.contentBorderEl.setStyle('borderWidth', 0);\r\n }\r\n\r\n cache.contentEl = new Element('div', {\r\n 'id': id + '_content',\r\n 'class': 'mochaContent'\r\n }).inject(cache.contentWrapperEl);\r\n\r\n cache.footerEl = new Element('div', {\r\n 'id': id + '_footer',\r\n 'class': 'mochaFooter'\r\n }).inject(cache.overlayEl);\r\n\r\n\r\n //Added By JR 12/18/2014\r\n if (footerHeight == 0) {\r\n cache.footerEl.setStyles({\r\n 'display': 'none'\r\n });\r\n }\r\n\r\n if (this.options.useCanvas == true && Browser.Engine.trident != true) {\r\n cache.canvasEl = new Element('canvas', {\r\n 'id': id + '_canvas',\r\n 'class': 'mochaCanvas',\r\n 'width': 10,\r\n 'height': 10\r\n }).inject(this.windowEl);\r\n }\r\n\r\n if (this.options.useCanvas == true && Browser.Engine.trident) {\r\n cache.canvasEl = new Element('canvas', {\r\n 'id': id + '_canvas',\r\n 'class': 'mochaCanvas',\r\n 'width': 50000, // IE8 excanvas requires these large numbers\r\n 'height': 20000,\r\n 'styles': {\r\n 'position': 'absolute',\r\n 'top': 0,\r\n 'left': 0\r\n }\r\n }).inject(this.windowEl);\r\n\r\n if (Browser.Engine.trident && MUI.ieSupport == 'excanvas' && (Browser.version <= 8)) {\r\n G_vmlCanvasManager.initElement(cache.canvasEl);\r\n cache.canvasEl = this.windowEl.getElement('.mochaCanvas');\r\n }\r\n }\r\n\r\n cache.controlsEl = new Element('div', {\r\n 'id': id + '_controls',\r\n 'class': 'mochaControls'\r\n }).inject(cache.overlayEl, 'after');\r\n\r\n if (options.useCanvasControls == true) {\r\n cache.canvasControlsEl = new Element('canvas', {\r\n 'id': id + '_canvasControls',\r\n 'class': 'mochaCanvasControls',\r\n 'width': 14,\r\n 'height': 14\r\n }).inject(this.windowEl);\r\n\r\n if (Browser.Engine.trident && MUI.ieSupport == 'excanvas' && (Browser.version <= 8)) {\r\n G_vmlCanvasManager.initElement(cache.canvasControlsEl);\r\n cache.canvasControlsEl = this.windowEl.getElement('.mochaCanvasControls');\r\n }\r\n }\r\n\r\n if (options.closable) {\r\n cache.closeButtonEl = new Element('div', {\r\n 'id': id + '_closeButton',\r\n 'class': 'mochaCloseButton mochaWindowButton',\r\n 'title': 'Close'\r\n }).inject(cache.controlsEl);\r\n }\r\n\r\n if (options.maximizable) {\r\n cache.maximizeButtonEl = new Element('div', {\r\n 'id': id + '_maximizeButton',\r\n 'class': 'mochaMaximizeButton mochaWindowButton',\r\n 'title': 'Maximize'\r\n }).inject(cache.controlsEl);\r\n }\r\n\r\n if (options.minimizable) {\r\n cache.minimizeButtonEl = new Element('div', {\r\n 'id': id + '_minimizeButton',\r\n 'class': 'mochaMinimizeButton mochaWindowButton',\r\n 'title': 'Minimize'\r\n }).inject(cache.controlsEl);\r\n }\r\n\r\n if (options.useSpinner == true && options.shape != 'gauge' && options.type != 'notification') {\r\n cache.spinnerEl = new Element('div', {\r\n 'id': id + '_spinner',\r\n 'class': 'mochaSpinner',\r\n 'width': 16,\r\n 'height': 16\r\n }).inject(this.windowEl, 'bottom');\r\n }\r\n\r\n if (this.options.shape == 'gauge') {\r\n cache.canvasHeaderEl = new Element('canvas', {\r\n 'id': id + '_canvasHeader',\r\n 'class': 'mochaCanvasHeader',\r\n 'width': this.options.width,\r\n 'height': 26 // todo\r\n }).inject(this.windowEl, 'bottom');\r\n\r\n if (Browser.Engine.trident && MUI.ieSupport == 'excanvas' && (Browser.version <= 8)) {\r\n G_vmlCanvasManager.initElement(cache.canvasHeaderEl);\r\n cache.canvasHeaderEl = this.windowEl.getElement('.mochaCanvasHeader');\r\n }\r\n }\r\n\r\n if (Browser.Engine.trident) {\r\n cache.overlayEl.setStyle('zIndex', 2);\r\n }\r\n\r\n // For Mac Firefox 2 to help reduce scrollbar bugs in that browser\r\n if (Browser.Platform.mac && Browser.Engine.gecko) {\r\n if (/Firefox[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent)) {\r\n var ffversion = new Number(RegExp.$1);\r\n if (ffversion < 3) {\r\n cache.overlayEl.setStyle('overflow', 'auto');\r\n }\r\n }\r\n }\r\n\r\n if (options.resizable) {\r\n cache.n = new Element('div', {\r\n 'id': id + '_resizeHandle_n',\r\n 'class': 'handle',\r\n 'styles': {\r\n 'top': 0,\r\n 'left': 10,\r\n 'cursor': 'n-resize'\r\n }\r\n }).inject(cache.overlayEl, 'after');\r\n\r\n cache.ne = new Element('div', {\r\n 'id': id + '_resizeHandle_ne',\r\n 'class': 'handle corner',\r\n 'styles': {\r\n 'top': 0,\r\n 'right': 0,\r\n 'cursor': 'ne-resize'\r\n }\r\n }).inject(cache.overlayEl, 'after');\r\n\r\n cache.e = new Element('div', {\r\n 'id': id + '_resizeHandle_e',\r\n 'class': 'handle',\r\n 'styles': {\r\n 'top': 10,\r\n 'right': 0,\r\n 'cursor': 'e-resize'\r\n }\r\n }).inject(cache.overlayEl, 'after');\r\n\r\n cache.se = new Element('div', {\r\n 'id': id + '_resizeHandle_se',\r\n 'class': 'handle cornerSE',\r\n 'styles': {\r\n 'bottom': 0,\r\n 'right': 0,\r\n 'cursor': 'se-resize'\r\n }\r\n }).inject(cache.overlayEl, 'after');\r\n\r\n cache.s = new Element('div', {\r\n 'id': id + '_resizeHandle_s',\r\n 'class': 'handle',\r\n 'styles': {\r\n 'bottom': 0,\r\n 'left': 10,\r\n 'cursor': 's-resize'\r\n }\r\n }).inject(cache.overlayEl, 'after');\r\n\r\n cache.sw = new Element('div', {\r\n 'id': id + '_resizeHandle_sw',\r\n 'class': 'handle corner',\r\n 'styles': {\r\n 'bottom': 0,\r\n 'left': 0,\r\n 'cursor': 'sw-resize'\r\n }\r\n }).inject(cache.overlayEl, 'after');\r\n\r\n cache.w = new Element('div', {\r\n 'id': id + '_resizeHandle_w',\r\n 'class': 'handle',\r\n 'styles': {\r\n 'top': 10,\r\n 'left': 0,\r\n 'cursor': 'w-resize'\r\n }\r\n }).inject(cache.overlayEl, 'after');\r\n\r\n cache.nw = new Element('div', {\r\n 'id': id + '_resizeHandle_nw',\r\n 'class': 'handle corner',\r\n 'styles': {\r\n 'top': 0,\r\n 'left': 0,\r\n 'cursor': 'nw-resize'\r\n }\r\n }).inject(cache.overlayEl, 'after');\r\n }\r\n $extend(this, cache);\r\n\r\n },\r\n /*\r\n\r\n Convert CSS colors to Canvas colors.\r\n\r\n */\r\n setColors: function() {\r\n\r\n if (this.options.useCanvas == true) {\r\n\r\n // Set TitlebarColor\r\n var pattern = /\\?(.*?)\\)/;\r\n if (this.titleBarEl.getStyle('backgroundImage') != 'none') {\r\n var gradient = this.titleBarEl.getStyle('backgroundImage');\r\n gradient = gradient.match(pattern)[1];\r\n gradient = gradient.parseQueryString();\r\n var gradientFrom = gradient.from;\r\n var gradientTo = gradient.to.replace(/\\\"/, ''); // IE7 was adding a quotation mark in. No idea why.\r\n\r\n this.options.headerStartColor = new Color(gradientFrom);\r\n this.options.headerStopColor = new Color(gradientTo);\r\n this.titleBarEl.addClass('replaced');\r\n }\r\n else if (this.titleBarEl.getStyle('background-color') !== '' && this.titleBarEl.getStyle('background-color') !== 'transparent') {\r\n this.options.headerStartColor = new Color(this.titleBarEl.getStyle('background-color')).mix('#fff', 20);\r\n this.options.headerStopColor = new Color(this.titleBarEl.getStyle('background-color')).mix('#000', 20);\r\n this.titleBarEl.addClass('replaced');\r\n }\r\n\r\n // Set BodyBGColor\r\n if (this.windowEl.getStyle('background-color') !== '' && this.windowEl.getStyle('background-color') !== 'transparent') {\r\n this.options.bodyBgColor = new Color(this.windowEl.getStyle('background-color'));\r\n this.windowEl.addClass('replaced');\r\n }\r\n\r\n // Set resizableColor, the color of the SE corner resize handle\r\n if (this.options.resizable && this.se.getStyle('background-color') !== '' && this.se.getStyle('background-color') !== 'transparent') {\r\n this.options.resizableColor = new Color(this.se.getStyle('background-color'));\r\n this.se.addClass('replaced');\r\n }\r\n\r\n }\r\n\r\n if (this.options.useCanvasControls == true) {\r\n\r\n if (this.minimizeButtonEl) {\r\n\r\n // Set Minimize Button Foreground Color\r\n if (this.minimizeButtonEl.getStyle('color') !== '' && this.minimizeButtonEl.getStyle('color') !== 'transparent') {\r\n this.options.minimizeColor = new Color(this.minimizeButtonEl.getStyle('color'));\r\n }\r\n\r\n // Set Minimize Button Background Color\r\n if (this.minimizeButtonEl.getStyle('background-color') !== '' && this.minimizeButtonEl.getStyle('background-color') !== 'transparent') {\r\n this.options.minimizeBgColor = new Color(this.minimizeButtonEl.getStyle('background-color'));\r\n this.minimizeButtonEl.addClass('replaced');\r\n }\r\n\r\n }\r\n\r\n if (this.maximizeButtonEl) {\r\n\r\n // Set Maximize Button Foreground Color\r\n if (this.maximizeButtonEl.getStyle('color') !== '' && this.maximizeButtonEl.getStyle('color') !== 'transparent') {\r\n this.options.maximizeColor = new Color(this.maximizeButtonEl.getStyle('color'));\r\n }\r\n\r\n // Set Maximize Button Background Color\r\n if (this.maximizeButtonEl.getStyle('background-color') !== '' && this.maximizeButtonEl.getStyle('background-color') !== 'transparent') {\r\n this.options.maximizeBgColor = new Color(this.maximizeButtonEl.getStyle('background-color'));\r\n this.maximizeButtonEl.addClass('replaced');\r\n }\r\n\r\n }\r\n\r\n if (this.closeButtonEl) {\r\n\r\n // Set Close Button Foreground Color\r\n if (this.closeButtonEl.getStyle('color') !== '' && this.closeButtonEl.getStyle('color') !== 'transparent') {\r\n this.options.closeColor = new Color(this.closeButtonEl.getStyle('color'));\r\n }\r\n\r\n // Set Close Button Background Color\r\n if (this.closeButtonEl.getStyle('background-color') !== '' && this.closeButtonEl.getStyle('background-color') !== 'transparent') {\r\n this.options.closeBgColor = new Color(this.closeButtonEl.getStyle('background-color'));\r\n this.closeButtonEl.addClass('replaced');\r\n }\r\n\r\n }\r\n }\r\n },\r\n /*\r\n\r\n Internal function: drawWindow\r\n This is where we create the canvas GUI\r\n\r\n Arguments:\r\n windowEl: the $(window)\r\n shadows: (boolean) false will draw a window without shadows\r\n\r\n */\r\n drawWindow: function(shadows) {\r\n\r\n if (this.drawingWindow == true) return;\r\n this.drawingWindow = true;\r\n\r\n if (this.isCollapsed) {\r\n this.drawWindowCollapsed(shadows);\r\n return;\r\n }\r\n\r\n var windowEl = this.windowEl;\r\n\r\n var options = this.options;\r\n var shadowBlur = options.shadowBlur;\r\n var shadowBlur2x = shadowBlur * 2;\r\n var shadowOffset = this.options.shadowOffset;\r\n\r\n this.overlayEl.setStyles({\r\n 'width': this.contentWrapperEl.offsetWidth\r\n });\r\n\r\n // Resize iframe when window is resized\r\n if (this.iframeEl) {\r\n this.iframeEl.setStyle('height', this.contentWrapperEl.offsetHeight);\r\n }\r\n\r\n var borderHeight = this.contentBorderEl.getStyle('border-top').toInt() + this.contentBorderEl.getStyle('border-bottom').toInt();\r\n var toolbarHeight = this.toolbarWrapperEl ? this.toolbarWrapperEl.getStyle('height').toInt() + this.toolbarWrapperEl.getStyle('border-top').toInt() : 0;\r\n var toolbar2Height = this.toolbar2WrapperEl ? this.toolbar2WrapperEl.getStyle('height').toInt() + this.toolbar2WrapperEl.getStyle('border-top').toInt() : 0;\r\n\r\n this.headerFooterShadow = options.headerHeight + options.footerHeight + shadowBlur2x;\r\n var height = this.contentWrapperEl.getStyle('height').toInt() + this.headerFooterShadow + toolbarHeight + toolbar2Height + borderHeight;\r\n var width = this.contentWrapperEl.getStyle('width').toInt() + shadowBlur2x;\r\n\r\n this.windowEl.setStyles({\r\n 'height': height,\r\n 'width': width\r\n });\r\n\r\n this.overlayEl.setStyles({\r\n 'height': height,\r\n 'top': shadowBlur - shadowOffset.y,\r\n 'left': shadowBlur - shadowOffset.x\r\n });\r\n\r\n if (this.options.useCanvas == true) {\r\n if (Browser.Engine.trident) {\r\n this.canvasEl.height = 20000;\r\n this.canvasEl.width = 50000;\r\n }\r\n this.canvasEl.height = height;\r\n this.canvasEl.width = width;\r\n }\r\n\r\n // Part of the fix for IE6 select z-index bug\r\n if (Browser.Engine.trident4) {\r\n this.zIndexFixEl.setStyles({\r\n 'width': width,\r\n 'height': height\r\n });\r\n }\r\n\r\n this.titleBarEl.setStyles({\r\n 'width': width - shadowBlur2x,\r\n 'height': options.headerHeight\r\n });\r\n\r\n // Make sure loading icon is placed correctly.\r\n if (options.useSpinner == true && options.shape != 'gauge' && options.type != 'notification') {\r\n this.spinnerEl.setStyles({\r\n 'left': shadowBlur - shadowOffset.x + 3,\r\n 'bottom': shadowBlur + shadowOffset.y + 4\r\n });\r\n }\r\n\r\n if (this.options.useCanvas != false) {\r\n\r\n // Draw Window\r\n var ctx = this.canvasEl.getContext('2d');\r\n ctx.clearRect(0, 0, width, height);\r\n\r\n switch (options.shape) {\r\n case 'box':\r\n this.drawBox(ctx, width, height, shadowBlur, shadowOffset, shadows);\r\n break;\r\n case 'gauge':\r\n this.drawGauge(ctx, width, height, shadowBlur, shadowOffset, shadows);\r\n break;\r\n }\r\n\r\n if (options.resizable) {\r\n MUI.triangle(\r\n ctx,\r\n width - (shadowBlur + shadowOffset.x + 17),\r\n height - (shadowBlur + shadowOffset.y + 18),\r\n 11,\r\n 11,\r\n options.resizableColor,\r\n 1.0\r\n );\r\n }\r\n\r\n // Invisible dummy object. The last element drawn is not rendered consistently while resizing in IE6 and IE7\r\n if (Browser.Engine.trident) {\r\n MUI.triangle(ctx, 0, 0, 10, 10, options.resizableColor, 0);\r\n }\r\n }\r\n\r\n if (options.type != 'notification' && options.useCanvasControls == true) {\r\n this.drawControls(width, height, shadows);\r\n }\r\n\r\n // Resize panels if there are any\r\n if (MUI.Desktop && this.contentWrapperEl.getChildren('.column').length != 0) {\r\n MUI.rWidth(this.contentWrapperEl);\r\n this.contentWrapperEl.getChildren('.column').each(function(column) {\r\n MUI.panelHeight(column);\r\n });\r\n }\r\n\r\n this.drawingWindow = false;\r\n return this;\r\n\r\n },\r\n drawWindowCollapsed: function(shadows) {\r\n\r\n var windowEl = this.windowEl;\r\n\r\n var options = this.options;\r\n var shadowBlur = options.shadowBlur;\r\n var shadowBlur2x = shadowBlur * 2;\r\n var shadowOffset = options.shadowOffset;\r\n\r\n var headerShadow = options.headerHeight + shadowBlur2x + 2;\r\n var height = headerShadow;\r\n var width = this.contentWrapperEl.getStyle('width').toInt() + shadowBlur2x;\r\n this.windowEl.setStyle('height', height);\r\n\r\n this.overlayEl.setStyles({\r\n 'height': height,\r\n 'top': shadowBlur - shadowOffset.y,\r\n 'left': shadowBlur - shadowOffset.x\r\n });\r\n\r\n // Part of the fix for IE6 select z-index bug\r\n if (Browser.Engine.trident4) {\r\n this.zIndexFixEl.setStyles({\r\n 'width': width,\r\n 'height': height\r\n });\r\n }\r\n\r\n // Set width\r\n this.windowEl.setStyle('width', width);\r\n this.overlayEl.setStyle('width', width);\r\n this.titleBarEl.setStyles({\r\n 'width': width - shadowBlur2x,\r\n 'height': options.headerHeight\r\n });\r\n\r\n // Draw Window\r\n if (this.options.useCanvas != false) {\r\n this.canvasEl.height = height;\r\n this.canvasEl.width = width;\r\n\r\n var ctx = this.canvasEl.getContext('2d');\r\n ctx.clearRect(0, 0, width, height);\r\n\r\n this.drawBoxCollapsed(ctx, width, height, shadowBlur, shadowOffset, shadows);\r\n if (options.useCanvasControls == true) {\r\n this.drawControls(width, height, shadows);\r\n }\r\n\r\n // Invisible dummy object. The last element drawn is not rendered consistently while resizing in IE6 and IE7\r\n if (Browser.Engine.trident) {\r\n MUI.triangle(ctx, 0, 0, 10, 10, options.resizableColor, 0);\r\n }\r\n }\r\n\r\n this.drawingWindow = false;\r\n return this;\r\n\r\n },\r\n drawControls: function(width, height, shadows) {\r\n var options = this.options;\r\n var shadowBlur = options.shadowBlur;\r\n var shadowOffset = options.shadowOffset;\r\n var controlsOffset = options.controlsOffset;\r\n\r\n // Make sure controls are placed correctly.\r\n this.controlsEl.setStyles({\r\n 'right': shadowBlur + shadowOffset.x + controlsOffset.right,\r\n 'top': shadowBlur - shadowOffset.y + controlsOffset.top\r\n });\r\n\r\n this.canvasControlsEl.setStyles({\r\n 'right': shadowBlur + shadowOffset.x + controlsOffset.right,\r\n 'top': shadowBlur - shadowOffset.y + controlsOffset.top\r\n });\r\n\r\n // Calculate X position for controlbuttons\r\n //var mochaControlsWidth = 52;\r\n this.closebuttonX = options.closable ? this.mochaControlsWidth - 7 : this.mochaControlsWidth + 12;\r\n this.maximizebuttonX = this.closebuttonX - (options.maximizable ? 19 : 0);\r\n this.minimizebuttonX = this.maximizebuttonX - (options.minimizable ? 19 : 0);\r\n\r\n var ctx2 = this.canvasControlsEl.getContext('2d');\r\n ctx2.clearRect(0, 0, 100, 100);\r\n\r\n if (this.options.closable) {\r\n this.closebutton(\r\n ctx2,\r\n this.closebuttonX,\r\n 7,\r\n options.closeBgColor,\r\n options.closeBgAlpha,\r\n options.closeColor,\r\n options.closeAlpha\r\n );\r\n }\r\n if (this.options.maximizable) {\r\n this.maximizebutton(\r\n ctx2,\r\n this.maximizebuttonX,\r\n 7,\r\n options.maximizeBgColor,\r\n options.maximizeBgAlpha,\r\n options.maximizeColor,\r\n options.maximizeAlpha\r\n );\r\n }\r\n if (this.options.minimizable) {\r\n this.minimizebutton(\r\n ctx2,\r\n this.minimizebuttonX,\r\n 7,\r\n options.minimizeBgColor,\r\n options.minimizeBgAlpha,\r\n options.minimizeColor,\r\n options.minimizeAlpha\r\n );\r\n }\r\n // Invisible dummy object. The last element drawn is not rendered consistently while resizing in IE6 and IE7\r\n if (Browser.Engine.trident) {\r\n MUI.circle(ctx2, 0, 0, 3, this.options.resizableColor, 0);\r\n }\r\n\r\n },\r\n drawBox: function(ctx, width, height, shadowBlur, shadowOffset, shadows) {\r\n\r\n var options = this.options;\r\n var shadowBlur2x = shadowBlur * 2;\r\n var cornerRadius = this.options.cornerRadius;\r\n\r\n // This is the drop shadow. It is created onion style.\r\n if (shadows != false) {\r\n for (var x = 0; x <= shadowBlur; x++) {\r\n MUI.roundedRect(\r\n ctx,\r\n shadowOffset.x + x,\r\n shadowOffset.y + x,\r\n width - (x * 2) - shadowOffset.x,\r\n height - (x * 2) - shadowOffset.y,\r\n cornerRadius + (shadowBlur - x),\r\n [0, 0, 0],\r\n x == shadowBlur ? .29 : .065 + (x * .01)\r\n );\r\n }\r\n }\r\n // Window body.\r\n this.bodyRoundedRect(\r\n ctx, // context\r\n shadowBlur - shadowOffset.x, // x\r\n shadowBlur - shadowOffset.y, // y\r\n width - shadowBlur2x, // width\r\n height - shadowBlur2x, // height\r\n cornerRadius, // corner radius\r\n options.bodyBgColor // Footer color\r\n );\r\n\r\n if (this.options.type != 'notification') {\r\n // Window header.\r\n this.topRoundedRect(\r\n ctx, // context\r\n shadowBlur - shadowOffset.x, // x\r\n shadowBlur - shadowOffset.y, // y\r\n width - shadowBlur2x, // width\r\n options.headerHeight, // height\r\n cornerRadius, // corner radius\r\n options.headerStartColor, // Header gradient's top color\r\n options.headerStopColor // Header gradient's bottom color\r\n );\r\n }\r\n },\r\n drawBoxCollapsed: function(ctx, width, height, shadowBlur, shadowOffset, shadows) {\r\n\r\n var options = this.options;\r\n var shadowBlur2x = shadowBlur * 2;\r\n var cornerRadius = options.cornerRadius;\r\n\r\n // This is the drop shadow. It is created onion style.\r\n if (shadows != false) {\r\n for (var x = 0; x <= shadowBlur; x++) {\r\n MUI.roundedRect(\r\n ctx,\r\n shadowOffset.x + x,\r\n shadowOffset.y + x,\r\n width - (x * 2) - shadowOffset.x,\r\n height - (x * 2) - shadowOffset.y,\r\n cornerRadius + (shadowBlur - x),\r\n [0, 0, 0],\r\n x == shadowBlur ? .3 : .06 + (x * .01)\r\n );\r\n }\r\n }\r\n\r\n // Window header\r\n this.topRoundedRect2(\r\n ctx, // context\r\n shadowBlur - shadowOffset.x, // x\r\n shadowBlur - shadowOffset.y, // y\r\n width - shadowBlur2x, // width\r\n options.headerHeight + 2, // height\r\n cornerRadius, // corner radius\r\n options.headerStartColor, // Header gradient's top color\r\n options.headerStopColor // Header gradient's bottom color\r\n );\r\n\r\n },\r\n drawGauge: function(ctx, width, height, shadowBlur, shadowOffset, shadows) {\r\n var options = this.options;\r\n var radius = (width * .5) - (shadowBlur) + 16;\r\n if (shadows != false) {\r\n for (var x = 0; x <= shadowBlur; x++) {\r\n MUI.circle(\r\n ctx,\r\n width * .5 + shadowOffset.x,\r\n (height + options.headerHeight) * .5 + shadowOffset.x,\r\n (width * .5) - (x * 2) - shadowOffset.x,\r\n [0, 0, 0],\r\n x == shadowBlur ? .75 : .075 + (x * .04)\r\n );\r\n }\r\n }\r\n MUI.circle(\r\n ctx,\r\n width * .5 - shadowOffset.x,\r\n (height + options.headerHeight) * .5 - shadowOffset.y,\r\n (width * .5) - shadowBlur,\r\n options.bodyBgColor,\r\n 1\r\n );\r\n\r\n // Draw gauge header\r\n this.canvasHeaderEl.setStyles({\r\n 'top': shadowBlur - shadowOffset.y,\r\n 'left': shadowBlur - shadowOffset.x\r\n });\r\n var ctx = this.canvasHeaderEl.getContext('2d');\r\n ctx.clearRect(0, 0, width, 100);\r\n ctx.beginPath();\r\n ctx.lineWidth = 24;\r\n ctx.lineCap = 'round';\r\n ctx.moveTo(13, 13);\r\n ctx.lineTo(width - (shadowBlur * 2) - 13, 13);\r\n ctx.strokeStyle = 'rgba(0, 0, 0, .65)';\r\n ctx.stroke();\r\n },\r\n bodyRoundedRect: function(ctx, x, y, width, height, radius, rgb) {\r\n ctx.fillStyle = 'rgba(' + rgb.join(',') + ', 1)';\r\n ctx.beginPath();\r\n ctx.moveTo(x, y + radius);\r\n ctx.lineTo(x, y + height - radius);\r\n ctx.quadraticCurveTo(x, y + height, x + radius, y + height);\r\n ctx.lineTo(x + width - radius, y + height);\r\n ctx.quadraticCurveTo(x + width, y + height, x + width, y + height - radius);\r\n ctx.lineTo(x + width, y + radius);\r\n ctx.quadraticCurveTo(x + width, y, x + width - radius, y);\r\n ctx.lineTo(x + radius, y);\r\n ctx.quadraticCurveTo(x, y, x, y + radius);\r\n ctx.fill();\r\n\r\n },\r\n topRoundedRect: function(ctx, x, y, width, height, radius, headerStartColor, headerStopColor) {\r\n var lingrad = ctx.createLinearGradient(0, 0, 0, height);\r\n lingrad.addColorStop(0, 'rgb(' + headerStartColor.join(',') + ')');\r\n lingrad.addColorStop(1, 'rgb(' + headerStopColor.join(',') + ')');\r\n ctx.fillStyle = lingrad;\r\n ctx.beginPath();\r\n ctx.moveTo(x, y);\r\n ctx.lineTo(x, y + height);\r\n ctx.lineTo(x + width, y + height);\r\n ctx.lineTo(x + width, y + radius);\r\n ctx.quadraticCurveTo(x + width, y, x + width - radius, y);\r\n ctx.lineTo(x + radius, y);\r\n ctx.quadraticCurveTo(x, y, x, y + radius);\r\n ctx.fill();\r\n\r\n },\r\n topRoundedRect2: function(ctx, x, y, width, height, radius, headerStartColor, headerStopColor) {\r\n // Chrome is having trouble rendering the LinearGradient in this particular case\r\n if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {\r\n ctx.fillStyle = 'rgba(' + headerStopColor.join(',') + ', 1)';\r\n }\r\n else {\r\n var lingrad = ctx.createLinearGradient(0, this.options.shadowBlur - 1, 0, height + this.options.shadowBlur + 3);\r\n lingrad.addColorStop(0, 'rgb(' + headerStartColor.join(',') + ')');\r\n lingrad.addColorStop(1, 'rgb(' + headerStopColor.join(',') + ')');\r\n ctx.fillStyle = lingrad;\r\n }\r\n ctx.beginPath();\r\n ctx.moveTo(x, y + radius);\r\n ctx.lineTo(x, y + height - radius);\r\n ctx.quadraticCurveTo(x, y + height, x + radius, y + height);\r\n ctx.lineTo(x + width - radius, y + height);\r\n ctx.quadraticCurveTo(x + width, y + height, x + width, y + height - radius);\r\n ctx.lineTo(x + width, y + radius);\r\n ctx.quadraticCurveTo(x + width, y, x + width - radius, y);\r\n ctx.lineTo(x + radius, y);\r\n ctx.quadraticCurveTo(x, y, x, y + radius);\r\n ctx.fill();\r\n },\r\n maximizebutton: function(ctx, x, y, rgbBg, aBg, rgb, a) {\r\n // Circle\r\n ctx.beginPath();\r\n ctx.arc(x, y, 7, 0, Math.PI * 2, true);\r\n ctx.fillStyle = 'rgba(' + rgbBg.join(',') + ',' + aBg + ')';\r\n ctx.fill();\r\n // Square that looks like a window\r\n ctx.strokeStyle = 'rgba(' + rgb.join(',') + ',' + a + ')';\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n // Top-Left\r\n ctx.moveTo(x - 3.5, y - 3);\r\n // Top-Right\r\n ctx.lineTo(x + 3.5, y - 3);\r\n ctx.stroke();\r\n\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n // Bottom-Right\r\n ctx.moveTo(x + 3.5, y - 3);\r\n ctx.lineTo(x + 3.5, y + 3);\r\n // Bottom-Left\r\n ctx.moveTo(x + 3.5, y + 3);\r\n ctx.lineTo(x - 3.5, y + 3);\r\n // Top-Left\r\n ctx.moveTo(x - 3.5, y + 3);\r\n ctx.lineTo(x - 3.5, y - 3);\r\n\r\n ctx.stroke();\r\n },\r\n closebutton: function(ctx, x, y, rgbBg, aBg, rgb, a) {\r\n // Circle\r\n ctx.beginPath();\r\n ctx.arc(x, y, 7, 0, Math.PI * 2, true);\r\n ctx.fillStyle = 'rgba(' + rgbBg.join(',') + ',' + aBg + ')';\r\n ctx.fill();\r\n // X sign\r\n ctx.strokeStyle = 'rgba(' + rgb.join(',') + ',' + a + ')';\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n ctx.moveTo(x - 3, y - 3);\r\n ctx.lineTo(x + 3, y + 3);\r\n ctx.moveTo(x + 3, y - 3);\r\n ctx.lineTo(x - 3, y + 3);\r\n ctx.stroke();\r\n },\r\n minimizebutton: function(ctx, x, y, rgbBg, aBg, rgb, a) {\r\n // Circle\r\n ctx.beginPath();\r\n ctx.arc(x, y, 7, 0, Math.PI * 2, true);\r\n ctx.fillStyle = 'rgba(' + rgbBg.join(',') + ',' + aBg + ')';\r\n ctx.fill();\r\n // Minus sign\r\n ctx.strokeStyle = 'rgba(' + rgb.join(',') + ',' + a + ')';\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n ctx.moveTo(x - 3.5, y);\r\n ctx.lineTo(x + 3.5, y);\r\n ctx.stroke();\r\n },\r\n setMochaControlsWidth: function(){\r\n // MODIFIED BY MAL - 10/22/2012\r\n // Add one to each control's width to fix\r\n // the case where Chrome was rounding the width down\r\n // from 13.9999046 to 13 instead of up to 14\r\n this.mochaControlsWidth = 0;\r\n var options = this.options;\r\n if (options.minimizable) {\r\n this.mochaControlsWidth += (this.minimizeButtonEl.getStyle('margin-left').toInt() + this.minimizeButtonEl.getStyle('width').toInt()) + 1;\r\n }\r\n if (options.maximizable) {\r\n this.mochaControlsWidth += (this.maximizeButtonEl.getStyle('margin-left').toInt() + this.maximizeButtonEl.getStyle('width').toInt()) + 1;\r\n }\r\n if (options.closable) {\r\n this.mochaControlsWidth += (this.closeButtonEl.getStyle('margin-left').toInt() + this.closeButtonEl.getStyle('width').toInt()) + 1;\r\n }\r\n this.controlsEl.setStyle('width', this.mochaControlsWidth);\r\n if (options.useCanvasControls == true) {\r\n this.canvasControlsEl.setProperty('width', this.mochaControlsWidth);\r\n }\r\n },\r\n /*\r\n\r\n Function: hideSpinner\r\n Hides the spinner.\r\n\r\n Example:\r\n (start code)\r\n $('myWindow').retrieve('instance').hideSpinner();\r\n (end)\r\n\r\n */\r\n hideSpinner: function() {\r\n if (this.spinnerEl) this.spinnerEl.hide();\r\n return this;\r\n },\r\n /*\r\n\r\n Function: showSpinner\r\n Shows the spinner.\r\n\r\n Example:\r\n (start code)\r\n $('myWindow').retrieve('instance').showSpinner();\r\n (end)\r\n\r\n */\r\n showSpinner: function() {\r\n if (this.spinnerEl) this.spinnerEl.show();\r\n return this;\r\n },\r\n /*\r\n\r\n Function: close\r\n Closes the window. This is an alternative to using MUI.Core.closeWindow().\r\n\r\n Example:\r\n (start code)\r\n $('myWindow').retrieve('instance').close();\r\n (end)\r\n\r\n */\r\n close: function() {\r\n if (!this.isClosing) MUI.closeWindow(this.windowEl);\r\n return this;\r\n },\r\n /*\r\n\r\n Function: minimize\r\n Minimizes the window.\r\n\r\n Example:\r\n (start code)\r\n $('myWindow').retrieve('instance').minimize();\r\n (end)\r\n\r\n */\r\n minimize: function() {\r\n MUI.Dock.minimizeWindow(this.windowEl);\r\n return this;\r\n },\r\n /*\r\n\r\n Function: maximize\r\n Maximizes the window.\r\n\r\n Example:\r\n (start code)\r\n $('myWindow').retrieve('instance').maximize();\r\n (end)\r\n\r\n */\r\n maximize: function() {\r\n if (this.isMinimized) {\r\n MUI.Dock.restoreMinimized(this.windowEl);\r\n }\r\n MUI.Desktop.maximizeWindow(this.windowEl);\r\n return this;\r\n },\r\n /*\r\n\r\n Function: restore\r\n Restores a minimized/maximized window to its original size.\r\n\r\n Example:\r\n (start code)\r\n $('myWindow').retrieve('instance').restore();\r\n (end)\r\n\r\n */\r\n restore: function() {\r\n if (this.isMinimized)\r\n MUI.Dock.restoreMinimized(this.windowEl);\r\n else if (this.isMaximized)\r\n MUI.Desktop.restoreWindow(this.windowEl);\r\n return this;\r\n },\r\n /*\r\n\r\n Function: resize\r\n Resize a window.\r\n\r\n Notes:\r\n If Advanced Effects are on the resize is animated. If centered is set to true the window remains centered as it resizes.\r\n\r\n Example:\r\n (start code)\r\n $('myWindow').retrieve('instance').resize({width:500,height:300,centered:true});\r\n (end)\r\n\r\n */\r\n resize: function(options) {\r\n MUI.resizeWindow(this.windowEl, options);\r\n return this;\r\n },\r\n /*\r\n\r\n Function: center\r\n Center a window.\r\n\r\n Example:\r\n (start code)\r\n $('myWindow').retrieve('instance').center();\r\n (end)\r\n\r\n */\r\n center: function() {\r\n MUI.centerWindow(this.windowEl);\r\n return this;\r\n },\r\n\r\n hide: function() {\r\n if (this.windowEl) this.windowEl.setStyle('display', 'none');\r\n return this;\r\n },\r\n\r\n show: function() {\r\n if (this.windowEl) { \r\n this.windowEl.setStyle('display', 'block');\r\n\r\n // added by AH 3/29/17\r\n MUI.focusWindow(this.windowEl);\r\n }\r\n return this;\r\n },\r\n\r\n // ADDED BY MAL - 11-19-2012\r\n // Handles moving windows into the viewable browser space\r\n // Called automatically onBrowserResize\r\n handlePositionLimits: function() {\r\n // Get the current sizes and positions\r\n var winSize = this.windowEl.getSize();\r\n var docSize = document.getSize();\r\n var top = this.windowEl.getTop();\r\n var left = this.windowEl.getLeft();\r\n var newTop = null, newLeft = null;\r\n this.resize();\r\n\r\n // If the window is going below the bottom, move it up\r\n if ((top + winSize.y) > docSize.y)\r\n newTop = Math.max(docSize.y - winSize.y, 0);\r\n\r\n // If the window is going above the top, move it down\r\n if (top < 0)\r\n newTop = 0;\r\n\r\n // If the window is going outside on the right, move it left\r\n if ((left + winSize.x) > docSize.x)\r\n newLeft = Math.max(docSize.x - winSize.x, 0);\r\n\r\n // If the window is going outside on the left, move it right\r\n if (left < 0)\r\n newLeft = 0;\r\n\r\n // If neither the top nor left have been changed, don't continue\r\n if ((newTop == null) && (newLeft == null))\r\n return;\r\n\r\n // If the top position hasn't been changed, use the current value\r\n if (newTop == null)\r\n newTop = top;\r\n\r\n // If the left position hasn't been changed, use the current value\r\n if (newLeft == null)\r\n newLeft = left;\r\n\r\n // Set the window position\r\n this.windowEl.setPosition({ x: newLeft, y: newTop });\r\n }\r\n});\r\n\r\nMUI.extend({\r\n\r\n // added by AH 3/23/17\r\n // stores id of all open modal windows \r\n openModalWindows: [],\r\n\r\n /*\r\n\r\n Function: closeWindow\r\n Closes a window.\r\n\r\n Syntax:\r\n (start code)\r\n MUI.closeWindow();\r\n (end)\r\n\r\n Arguments:\r\n windowEl - the ID of the window to be closed\r\n\r\n Returns:\r\n true - the window was closed\r\n false - the window was not closed\r\n\r\n */\r\n closeWindow: function(windowEl){\r\n\r\n var instance = windowEl.retrieve('instance');\r\n\r\n // Does window exist and is not already in process of closing ?\r\n if (windowEl != $(windowEl) || !instance || instance.isClosing) return;\r\n\r\n instance.isClosing = true;\r\n instance.fireEvent('onClose', windowEl);\r\n\r\n if (instance.options.storeOnClose){\r\n this.storeOnClose(instance, windowEl);\r\n return;\r\n }\r\n if (instance.check) instance.check.destroy();\r\n\r\n if ((instance.options.type == 'modal' || instance.options.type == 'modal2') && Browser.Engine.trident4){\r\n $('modalFix').hide();\r\n }\r\n\r\n // Modified By AH 3/23/17 (to allow multiple modal windows)\r\n $('dockWrapper').setStyles({'opacity': 1.0});\r\n if (MUI.options.advancedEffects == false){\r\n\r\n // window is modal and there is only one open modal window\r\n if ((instance.options.type == 'modal' || instance.options.type == 'modal2') && this.openModalWindows.length <= 1){\r\n\r\n // remove closing window from set of current open modal windows\r\n this.openModalWindows.pop();\r\n\r\n // hide modal overlay\r\n $('modalOverlay').setStyle('opacity', 0);\r\n $('modalOverlay').hide();\r\n }\r\n\r\n // other open modal windows, place overlay behind new top window\r\n else if((instance.options.type == 'modal' || instance.options.type == 'modal2') && this.openModalWindows.length > 1) {\r\n\r\n // remove closing window from set of current open modal windows\r\n this.openModalWindows.pop();\r\n\r\n // set current modal window to the window immediatly behind closing window\r\n var nextModalWindow = $(this.openModalWindows[this.openModalWindows.length - 1]);\r\n MUI.currentModal = nextModalWindow;\r\n\r\n // position modal overlay behind window immediatly behind closing window\r\n var nextModalWindowZIndex = nextModalWindow.getStyle(\"z-index\");\r\n $('modalOverlay').setStyle(\"z-index\", nextModalWindowZIndex - 2);\r\n }\r\n\r\n MUI.closingJobs(windowEl);\r\n return true;\r\n }\r\n else {\r\n // Redraws IE windows without shadows since IE messes up canvas alpha when you change element opacity\r\n if (Browser.Engine.trident) instance.drawWindow(false);\r\n if (instance.options.type == 'modal' || instance.options.type == 'modal2'){\r\n MUI.Modal.modalOverlayCloseMorph.start({\r\n 'opacity': 0\r\n });\r\n }\r\n var closeMorph = new Fx.Morph(windowEl, {\r\n duration: 120,\r\n onComplete: function(){\r\n MUI.closingJobs(windowEl);\r\n return true;\r\n }.bind(this)\r\n });\r\n closeMorph.start({\r\n 'opacity': .4\r\n });\r\n }\r\n\r\n },\r\n closingJobs: function(windowEl){\r\n\r\n var instances = MUI.Windows.instances;\r\n var instance = instances.get(windowEl.id);\r\n windowEl.setStyle('visibility', 'hidden');\r\n // Destroy throws an error in IE8\r\n if (Browser.Engine.trident) {\r\n windowEl.dispose();\r\n }\r\n else {\r\n windowEl.destroy();\r\n }\r\n instance.fireEvent('onCloseComplete');\r\n\r\n if (instance.options.type != 'notification'){\r\n var newFocus = this.getWindowWithHighestZindex();\r\n this.focusWindow(newFocus);\r\n }\r\n\r\n instances.erase(instance.options.id);\r\n if (this.loadingWorkspace == true) {\r\n this.windowUnload();\r\n }\r\n\r\n if (MUI.Dock && $(MUI.options.dock) && instance.options.type == 'window') {\r\n var currentButton = $(instance.options.id + '_dockTab');\r\n if (currentButton != null) {\r\n MUI.Dock.dockSortables.removeItems(currentButton).destroy();\r\n }\r\n // Need to resize everything in case the dock becomes smaller when a tab is removed\r\n MUI.Desktop.setDesktopSize();\r\n }\r\n },\r\n storeOnClose: function(instance, windowEl){\r\n\r\n if (instance.check) instance.check.hide();\r\n\r\n windowEl.setStyles({\r\n zIndex: -1\r\n });\r\n windowEl.addClass('windowClosed');\r\n windowEl.removeClass('mocha');\r\n windowEl.removeClass('isFocused');\r\n\r\n if (MUI.Dock && $(MUI.options.dock) && instance.options.type == 'window') {\r\n var currentButton = $(instance.options.id + '_dockTab');\r\n if (currentButton != null) {\r\n currentButton.hide();\r\n }\r\n MUI.Desktop.setDesktopSize();\r\n }\r\n\r\n instance.fireEvent('onCloseComplete');\r\n\r\n if (instance.options.type != 'notification'){\r\n var newFocus = this.getWindowWithHighestZindex();\r\n this.focusWindow(newFocus);\r\n }\r\n\r\n instance.isClosing = false;\r\n\r\n },\r\n /*\r\n\r\n Function: closeAll\r\n Close all open windows.\r\n\r\n */\r\n closeAll: function() {\r\n $$('.mocha').each(function(windowEl){\r\n this.closeWindow(windowEl);\r\n }.bind(this));\r\n },\r\n /*\r\n\r\n Function: collapseToggle\r\n Collapses an expanded window. Expands a collapsed window.\r\n\r\n */\r\n collapseToggle: function(windowEl){\r\n var instance = windowEl.retrieve('instance');\r\n var handles = windowEl.getElements('.handle');\r\n if (instance.isMaximized == true) return;\r\n if (instance.isCollapsed == false) {\r\n instance.isCollapsed = true;\r\n handles.hide();\r\n if ( instance.iframeEl ) {\r\n instance.iframeEl.setStyle('visibility', 'hidden');\r\n }\r\n instance.contentBorderEl.setStyles({\r\n visibility: 'hidden',\r\n position: 'absolute',\r\n top: -10000,\r\n left: -10000\r\n });\r\n if(instance.toolbarWrapperEl){\r\n instance.toolbarWrapperEl.setStyles({\r\n visibility: 'hidden',\r\n position: 'absolute',\r\n top: -10000,\r\n left: -10000\r\n });\r\n }\r\n if(instance.toolbar2WrapperEl) {\r\n instance.toolbar2WrapperEl.setStyles({\r\n visibility: 'hidden',\r\n position: 'absolute',\r\n top: -10000,\r\n left: -10000\r\n });\r\n }\r\n instance.drawWindowCollapsed();\r\n }\r\n else {\r\n instance.isCollapsed = false;\r\n instance.drawWindow();\r\n instance.contentBorderEl.setStyles({\r\n visibility: 'visible',\r\n position: null,\r\n top: null,\r\n left: null\r\n });\r\n if(instance.toolbarWrapperEl){\r\n instance.toolbarWrapperEl.setStyles({\r\n visibility: 'visible',\r\n position: null,\r\n top: null,\r\n left: null\r\n });\r\n }\r\n if(instance.toolbar2WrapperEl) {\r\n instance.toolbar2WrapperEl.setStyles({\r\n visibility: 'visible',\r\n position: null,\r\n top: null,\r\n left: null\r\n });\r\n }\r\n if ( instance.iframeEl ) {\r\n instance.iframeEl.setStyle('visibility', 'visible');\r\n }\r\n handles.show();\r\n }\r\n },\r\n /*\r\n\r\n Function: toggleWindowVisibility\r\n Toggle window visibility with Ctrl-Alt-Q.\r\n\r\n */\r\n toggleWindowVisibility: function(){\r\n MUI.Windows.instances.each(function(instance){\r\n if (instance.options.type == 'modal' || instance.options.type == 'modal2' || instance.isMinimized == true) return;\r\n var id = $(instance.options.id);\r\n if (id.getStyle('visibility') == 'visible'){\r\n if (instance.iframe){\r\n instance.iframeEl.setStyle('visibility', 'hidden');\r\n }\r\n if (instance.toolbarEl){\r\n instance.toolbarWrapperEl.setStyle('visibility', 'hidden');\r\n }\r\n instance.contentBorderEl.setStyle('visibility', 'hidden');\r\n instance.contentBorderEl.setStyle('display', 'none');\r\n id.setStyle('visibility', 'hidden');\r\n MUI.Windows.windowsVisible = false;\r\n }\r\n else {\r\n id.setStyle('visibility', 'visible');\r\n instance.contentBorderEl.setStyle('visibility', 'visible');\r\n if (instance.iframe){\r\n instance.iframeEl.setStyle('visibility', 'visible');\r\n }\r\n if (instance.toolbarEl){\r\n instance.toolbarWrapperEl.setStyle('visibility', 'visible');\r\n instance.contentBorderEl.setStyle('display', 'block');\r\n }\r\n MUI.Windows.windowsVisible = true;\r\n }\r\n }.bind(this));\r\n\r\n },\r\n focusWindow: function(windowEl, fireEvent){\r\n\r\n // This is used with blurAll\r\n MUI.Windows.focusingWindow = true;\r\n var windowClicked = function(){\r\n MUI.Windows.focusingWindow = false;\r\n };\r\n windowClicked.delay(170, this);\r\n\r\n // Only focus when needed\r\n if ($$('.mocha').length === 0) return;\r\n\r\n var instances = MUI.Windows.instances;\r\n var instance = instances.get(windowEl.id);\r\n\r\n // modified by AH 3/29/17\r\n if ((windowEl != $(windowEl) || windowEl.hasClass('isFocused')) && instance && instance.options.type !== \"modal\" ) { \r\n return;\r\n };\r\n\r\n if (instance && instance.options.type == 'notification') {\r\n windowEl.setStyle('zIndex', 11001);\r\n return;\r\n };\r\n\r\n MUI.Windows.indexLevel += 2;\r\n windowEl.setStyle('zIndex', MUI.Windows.indexLevel);\r\n\r\n // Used when dragging and resizing windows\r\n if (!$('windowUnderlay'))\r\n MUI.underlayInitialize();\r\n\r\n $('windowUnderlay').setStyle('zIndex', MUI.Windows.indexLevel - 1).inject($(windowEl),'after');\r\n\r\n // Fire onBlur for the window that lost focus.\r\n instances.each(function(instance){\r\n if (instance.windowEl.hasClass('isFocused')){\r\n instance.fireEvent('onBlur', instance.windowEl);\r\n }\r\n instance.windowEl.removeClass('isFocused');\r\n });\r\n\r\n if (MUI.Dock && $(MUI.options.dock) && instance && instance.options.type == 'window')\r\n MUI.Dock.makeActiveTab();\r\n windowEl.addClass('isFocused');\r\n\r\n if (instance && (fireEvent != false))\r\n instance.fireEvent('onFocus', windowEl);\r\n },\r\n getWindowWithHighestZindex: function(){\r\n this.highestZindex = 0;\r\n $$('.mocha').each(function(element){\r\n this.zIndex = element.getStyle('zIndex');\r\n if (this.zIndex >= this.highestZindex) {\r\n this.highestZindex = this.zIndex;\r\n }\r\n }.bind(this));\r\n $$('.mocha').each(function(element){\r\n if (element.getStyle('zIndex') == this.highestZindex) {\r\n this.windowWithHighestZindex = element;\r\n }\r\n }.bind(this));\r\n return this.windowWithHighestZindex;\r\n },\r\n blurAll: function(){\r\n if (MUI.Windows.focusingWindow == false) {\r\n $$('.mocha').each(function(windowEl){\r\n var instance = windowEl.retrieve('instance');\r\n if (instance.options.type != 'modal' && instance.options.type != 'modal2'){\r\n windowEl.removeClass('isFocused');\r\n instance.fireEvent('onBlur', windowEl);\r\n }\r\n });\r\n $$('.dockTab').removeClass('activeDockTab');\r\n }\r\n },\r\n centerWindow: function(windowEl){\r\n\r\n if(!windowEl){\r\n MUI.Windows.instances.each(function(instance){\r\n if (instance.windowEl.hasClass('isFocused')){\r\n windowEl = instance.windowEl;\r\n }\r\n });\r\n }\r\n\r\n var instance = windowEl.retrieve('instance');\r\n var options = instance.options;\r\n var dimensions = options.container.getCoordinates();\r\n\r\n var windowPosTop = window.getScroll().y + (window.getSize().y * .5) - (windowEl.offsetHeight * .5);\r\n if (windowPosTop < -instance.options.shadowBlur){\r\n windowPosTop = -instance.options.shadowBlur;\r\n }\r\n var windowPosLeft = (dimensions.width * .5) - (windowEl.offsetWidth * .5);\r\n if (windowPosLeft < -instance.options.shadowBlur){\r\n windowPosLeft = -instance.options.shadowBlur;\r\n }\r\n if (MUI.options.advancedEffects == true){\r\n instance.morph.start({\r\n 'top': windowPosTop,\r\n 'left': windowPosLeft\r\n });\r\n }\r\n else {\r\n windowEl.setStyles({\r\n 'top': windowPosTop,\r\n 'left': windowPosLeft\r\n });\r\n }\r\n },\r\n resizeWindow: function(windowEl, options){\r\n var instance = windowEl.retrieve('instance');\r\n if (!instance)\r\n return null;\r\n\r\n $extend({\r\n width: null,\r\n height: null,\r\n top: null,\r\n left: null,\r\n centered: true\r\n }, options);\r\n\r\n // modified by JR 4/11/17, fixed incorect modal centering bug\r\n // Since windowEl adds the header dimensions\r\n var oldWidth = instance.contentWrapperEl.getWidth();\r\n var oldHeight = instance.contentWrapperEl.getHeight();\r\n\r\n var oldTop = windowEl.getTop();\r\n var oldLeft = windowEl.getLeft();\r\n var top, left, height, width;\r\n\r\n if (options.centered){\r\n top = typeof (options.top) != 'undefined' ? options.top : oldTop - ((options.height - oldHeight) * .5);\r\n left = typeof (options.left) != 'undefined' ? options.left : oldLeft - ((options.width - oldWidth) * .5);\r\n }\r\n else {\r\n top = typeof (options.top) != 'undefined' ? options.top : oldTop;\r\n left = typeof (options.left) != 'undefined' ? options.left : oldLeft;\r\n }\r\n\r\n height = typeof (options.height) != 'undefined' ? options.height : oldHeight;\r\n width = typeof (options.width) != 'undefined' ? options.width : oldWidth;\r\n\r\n if (MUI.options.advancedEffects == false){\r\n windowEl.setStyles({\r\n 'top': top + ((top.toString()).contains('px') ? '' : 'px'),\r\n 'left': left + ((left.toString()).contains('px') ? '' : 'px')\r\n });\r\n instance.contentWrapperEl.setStyles({\r\n 'height': height + ((height.toString()).contains('px') ? '' : 'px'),\r\n 'width': width + ((width.toString()).contains('px') ? '' : 'px')\r\n });\r\n instance.drawWindow();\r\n // Show iframe\r\n if (instance.iframeEl){\r\n if (!Browser.Engine.trident) {\r\n instance.iframeEl.setStyle('visibility', 'visible');\r\n }\r\n else {\r\n instance.iframeEl.show();\r\n }\r\n }\r\n }\r\n else {\r\n windowEl.retrieve('resizeMorph').start({\r\n '0': { 'height': height,\r\n 'width': width\r\n },\r\n '1': { 'top': top,\r\n 'left': left\r\n }\r\n });\r\n }\r\n return instance;\r\n },\r\n /*\r\n\r\n Internal Function: dynamicResize\r\n Use with a timer to resize a window as the window's content size changes, such as with an accordion.\r\n\r\n */\r\n dynamicResize: function(windowEl){\r\n var instance = windowEl.retrieve('instance');\r\n var contentWrapperEl = instance.contentWrapperEl;\r\n var contentEl = instance.contentEl;\r\n\r\n contentWrapperEl.setStyles({\r\n 'height': contentEl.offsetHeight,\r\n 'width': contentEl.offsetWidth\r\n });\r\n instance.drawWindow();\r\n }\r\n});\r\n\r\n// Toggle window visibility with Ctrl-Alt-Q\r\ndocument.addEvent('keydown', function(event){\r\n if (event.key == 'q' && event.control && event.alt) {\r\n MUI.toggleWindowVisibility();\r\n }\r\n});\r\n\r\n/*\r\n---\r\n\r\nname: Modal\r\n\r\nscript: Modal.js\r\n\r\ndescription: Create modal dialog windows.\r\n\r\ncopyright: (c) 2007-2009 Greg Houston, . \r\n\r\nlicense: MIT-style license. \r\n\r\nSee Also: \r\n\r\nrequires:\r\n - MochaUI/MUI\r\n - MochaUI/MUI.Windows\r\n\r\nprovides: [MUI.Modal]\r\n\r\n...\r\n*/\r\n\r\nMUI.files[MUI.path.source + 'Window/Modal.js'] = 'loaded';\r\n\r\nMUI.Modal = new Class({\r\n\r\n Extends: MUI.Window,\r\n \r\n options: {\r\n type: 'modal'\r\n }, \r\n \r\n initialize: function(options){\r\n \r\n if (!$('modalOverlay')){\r\n this.modalInitialize();\r\n \r\n window.addEvent('resize', function(){\r\n this.setModalSize();\r\n }.bind(this));\r\n } \r\n this.parent(options);\r\n\r\n },\r\n modalInitialize: function(){\r\n var modalOverlay = new Element('div', {\r\n 'id': 'modalOverlay',\r\n 'styles': {\r\n 'height': document.getCoordinates().height, \r\n 'opacity': .6\r\n }\r\n }).inject(document.body);\r\n \r\n modalOverlay.setStyles({\r\n 'position': Browser.Engine.trident4 ? 'absolute' : 'fixed'\r\n });\r\n \r\n modalOverlay.addEvent(MooTools.getTouchOrMouseEvent('click'), function(e){\r\n var instance = MUI.Windows.instances.get(MUI.currentModal.id);\r\n if (instance && instance.options.modalOverlayClose == true) {\r\n MUI.closeWindow(MUI.currentModal);\r\n }\r\n });\r\n \r\n if (Browser.Engine.trident4){\r\n var modalFix = new Element('iframe', {\r\n 'id': 'modalFix',\r\n 'scrolling': 'no',\r\n 'marginWidth': 0,\r\n 'marginHeight': 0,\r\n 'src': '',\r\n 'styles': {\r\n 'height': document.getCoordinates().height\r\n }\r\n }).inject(document.body);\r\n }\r\n\r\n MUI.Modal.modalOverlayOpenMorph = new Fx.Morph($('modalOverlay'), {\r\n 'duration': 150\r\n });\r\n MUI.Modal.modalOverlayCloseMorph = new Fx.Morph($('modalOverlay'), {\r\n 'duration': 150,\r\n onComplete: function(){\r\n $('modalOverlay').hide();\r\n if (Browser.Engine.trident4){\r\n $('modalFix').hide();\r\n }\r\n }.bind(this)\r\n });\r\n },\r\n setModalSize: function(){\r\n $('modalOverlay').setStyle('height', document.getCoordinates().height);\r\n if (Browser.Engine.trident4){\r\n $('modalFix').setStyle('height', document.getCoordinates().height);\r\n }\r\n }\r\n\r\n});\r\n/*\r\n---\r\n\r\nname: Tabs\r\n\r\nscript: Tabs.js\r\n\r\ndescription: Functionality for window tabs.\r\n\r\ncopyright: (c) 2007-2008 Greg Houston, . \r\n\r\nlicense: MIT-style license.\r\n\r\nrequires:\r\n - MochaUI/MUI\r\n - MochaUI/MUI.Windows\r\n - MochaUI/MUI.Column\r\n - MochaUI/MUI.Panel\r\n\r\nprovides: [MUI.initializeTabs]\r\n\r\n...\r\n*/\r\n\r\nMUI.extend({\r\n /*\r\n\r\n Function: initializeTabs\r\n Add click event to each list item that fires the selected function.\r\n\r\n */\r\n initializeTabs: function(el, target){\r\n $(el).setStyle('list-style', 'none'); // This is to fix a glitch that occurs in IE8 RC1 when dynamically switching themes\r\n $(el).getElements('li').each(function(listitem){\r\n var link = listitem.getFirst('a').addEvent(MooTools.getTouchOrMouseEvent('click'), function(e){\r\n e.preventDefault();\r\n });\r\n listitem.addEvent(MooTools.getTouchOrMouseEvent('click'), function(e){\r\n MUI.updateContent({\r\n 'element': $(target),\r\n 'url': link.get('href')\r\n });\r\n MUI.selected(this, el);\r\n });\r\n });\r\n },\r\n /*\r\n\r\n Function: selected\r\n Add \"selected\" class to current list item and remove it from sibling list items.\r\n\r\n Syntax:\r\n (start code)\r\n selected(el, parent);\r\n (end)\r\n\r\nArguments:\r\n el - the list item\r\n parent - the ul\r\n\r\n */\r\n selected: function(el, parent){\r\n $(parent).getChildren().each(function(listitem){\r\n listitem.removeClass('selected');\r\n });\r\n el.addClass('selected');\r\n }\r\n});\r\n\r\n/*\r\n---\r\n\r\nname: Layout\r\n\r\nscript: Layout.js\r\n\r\ndescription: Create web application layouts. Enables window maximize.\r\n\r\ncopyright: (c) 2007-2009 Greg Houston, .\r\n\r\nlicense: MIT-style license.\r\n\r\nrequires:\r\n - MochaUI/MUI\r\n\r\nprovides: [MUI.Desktop, MUI.Column, MUI.Panel]\r\n\r\n...\r\n*/\r\n\r\nMUI.files[MUI.path.source + 'Layout/Layout.js'] = 'loaded';\r\n\r\nMUI.extend({\r\n Columns: {\r\n instances: new Hash(),\r\n columnIDCount: 0 // Used for columns without an ID defined by the user\r\n },\r\n Panels: {\r\n instances: new Hash(),\r\n panelIDCount: 0 // Used for panels without an ID defined by the user\r\n }\r\n});\r\n\r\nMUI.Desktop = {\r\n\r\n options: {\r\n // Naming options:\r\n // If you change the IDs of the MochaUI Desktop containers in your HTML, you need to change them here as well.\r\n desktop: 'desktop',\r\n desktopHeader: 'desktopHeader',\r\n desktopFooter: 'desktopFooter',\r\n desktopNavBar: 'desktopNavbar',\r\n pageWrapper: 'pageWrapper',\r\n page: 'page',\r\n desktopFooter: 'desktopFooterWrapper'\r\n },\r\n initialize: function(){\r\n\r\n this.desktop = $(this.options.desktop);\r\n this.desktopHeader = $(this.options.desktopHeader);\r\n this.desktopNavBar = $(this.options.desktopNavBar);\r\n this.pageWrapper = $(this.options.pageWrapper);\r\n this.page = $(this.options.page);\r\n this.desktopFooter = $(this.options.desktopFooter);\r\n\r\n if (this.desktop) {\r\n ($$('body')).setStyles({\r\n overflow: 'hidden',\r\n height: '100%',\r\n margin: 0\r\n });\r\n ($$('html')).setStyles({\r\n overflow: 'hidden',\r\n height: '100%'\r\n });\r\n }\r\n\r\n // This is run on dock initialize so no need to do it twice.\r\n if (!MUI.Dock) \r\n this.setDesktopSize();\r\n\r\n this.menuInitialize();\r\n this.enableOnResize();\r\n\r\n // Resize desktop, page wrapper, modal overlay, and maximized windows when browser window is resized\r\n window.addEvent('resize', function(e){\r\n this.onBrowserResize();\r\n }.bind(this));\r\n\r\n if (MUI.myChain){\r\n MUI.myChain.callChain();\r\n }\r\n\r\n },\r\n enableOnResize: function() {\r\n this.onBrowserResize = this.doOnBrowserResize;\r\n },\r\n disableOnResize: function() {\r\n this.onBrowserResize = $empty;\r\n },\r\n menuInitialize: function(){\r\n // Fix for dropdown menus in IE6\r\n if (Browser.Engine.trident4 && this.desktopNavBar){\r\n this.desktopNavBar.getElements('li').each(function(element) {\r\n element.addEvent('mouseenter', function(){\r\n this.addClass('ieHover');\r\n });\r\n element.addEvent('mouseleave', function(){\r\n this.removeClass('ieHover');\r\n });\r\n });\r\n };\r\n },\r\n doOnBrowserResize: function(){\r\n this.setDesktopSize();\r\n // Resize maximized windows to fit new browser window size\r\n setTimeout( function(){\r\n MUI.Windows.instances.each(function(instance){\r\n if (instance.isMaximized){\r\n\r\n // Hide iframe while resize for better performance\r\n if ( instance.iframeEl ){\r\n instance.iframeEl.setStyle('visibility', 'hidden');\r\n }\r\n\r\n var coordinates = document.getCoordinates();\r\n var borderHeight = instance.contentBorderEl.getStyle('border-top').toInt() + instance.contentBorderEl.getStyle('border-bottom').toInt();\r\n var toolbarHeight = instance.toolbarWrapperEl ? instance.toolbarWrapperEl.getStyle('height').toInt() + instance.toolbarWrapperEl.getStyle('border-top').toInt() : 0;\r\n instance.contentWrapperEl.setStyles({\r\n 'height': coordinates.height - instance.options.headerHeight - instance.options.footerHeight - borderHeight - toolbarHeight,\r\n 'width': coordinates.width\r\n });\r\n\r\n instance.drawWindow();\r\n if ( instance.iframeEl ){\r\n instance.iframeEl.setStyles({\r\n 'height': instance.contentWrapperEl.getStyle('height')\r\n });\r\n instance.iframeEl.setStyle('visibility', 'visible');\r\n }\r\n }\r\n instance.fireEvent('onBrowserResize');\r\n // ADDED BY MAL - 11-19-2012\r\n // Make sure this window still fits in the resized browser\r\n instance.handlePositionLimits();\r\n // END ADDED BY MAL\r\n }.bind(this));\r\n }.bind(this), 100);\r\n },\r\n setDesktopSize: function(){\r\n var windowDimensions = window.getCoordinates();\r\n\r\n // var dock = $(MUI.options.dock);\r\n var dockWrapper = $(MUI.options.dockWrapper);\r\n\r\n // Setting the desktop height may only be needed by IE7\r\n if (this.desktop){\r\n this.desktop.setStyle('height', windowDimensions.height);\r\n }\r\n\r\n // Set pageWrapper height so the dock doesn't cover the pageWrapper scrollbars.\r\n if (this.pageWrapper) {\r\n var dockOffset = MUI.dockVisible ? dockWrapper.offsetHeight : 0;\r\n var pageWrapperHeight = windowDimensions.height;\r\n pageWrapperHeight -= this.pageWrapper.getStyle('border-top').toInt();\r\n pageWrapperHeight -= this.pageWrapper.getStyle('border-bottom').toInt();\r\n if (this.desktopHeader){ pageWrapperHeight -= this.desktopHeader.offsetHeight; }\r\n if (this.desktopFooter){ pageWrapperHeight -= this.desktopFooter.offsetHeight; }\r\n pageWrapperHeight -= dockOffset;\r\n\r\n if (pageWrapperHeight < 0){\r\n pageWrapperHeight = 0;\r\n }\r\n this.pageWrapper.setStyle('height', pageWrapperHeight);\r\n }\r\n\r\n if (MUI.Columns.instances.getKeys().length > 0){ // Conditional is a fix for a bug in IE6 in the no toolbars demo.\r\n MUI.Desktop.resizePanels();\r\n }\r\n },\r\n resizePanels: function(){\r\n MUI.panelHeight();\r\n MUI.rWidth();\r\n },\r\n /*\r\n\r\n Function: maximizeWindow\r\n Maximize a window.\r\n\r\n Syntax:\r\n (start code)\r\n MUI.Desktop.maximizeWindow(windowEl);\r\n (end)\r\n\r\n */\r\n maximizeWindow: function(windowEl){\r\n\r\n var instance = MUI.Windows.instances.get(windowEl.id);\r\n var options = instance.options;\r\n var windowDrag = instance.windowDrag;\r\n\r\n // If window no longer exists or is maximized, stop\r\n if (windowEl != $(windowEl) || instance.isMaximized ) return;\r\n\r\n instance.fireEvent('onPreMaximize', windowEl);\r\n if (instance.isCollapsed){\r\n MUI.collapseToggle(windowEl);\r\n }\r\n\r\n instance.isMaximized = true;\r\n\r\n // If window is restricted to a container, it should not be draggable when maximized.\r\n if (instance.options.restrict){\r\n //windowDrag.detach();\r\n if (options.resizable) {\r\n instance.detachResizable();\r\n }\r\n instance.titleBarEl.setStyle('cursor', 'default');\r\n }\r\n\r\n // If the window has a container that is not the desktop\r\n // temporarily move the window to the desktop while it is minimized.\r\n if (this.desktop && (options.container != this.desktop)){\r\n this.desktop.grab(windowEl);\r\n if (this.options.restrict){\r\n windowDrag.container = this.desktop;\r\n }\r\n }\r\n\r\n // Save original position\r\n instance.oldTop = windowEl.getStyle('top');\r\n instance.oldLeft = windowEl.getStyle('left');\r\n\r\n var contentWrapperEl = instance.contentWrapperEl;\r\n\r\n // Save original dimensions\r\n contentWrapperEl.oldWidth = contentWrapperEl.getStyle('width');\r\n contentWrapperEl.oldHeight = contentWrapperEl.getStyle('height');\r\n\r\n // Hide iframe\r\n // Iframe should be hidden when minimizing, maximizing, and moving for performance and Flash issues\r\n if ( instance.iframeEl ) {\r\n if (!Browser.Engine.trident) {\r\n instance.iframeEl.setStyle('visibility', 'hidden');\r\n }\r\n else {\r\n instance.iframeEl.hide();\r\n }\r\n }\r\n\r\n var windowDimensions = document.getCoordinates();\r\n var options = instance.options;\r\n var shadowBlur = options.shadowBlur;\r\n var shadowOffset = options.shadowOffset;\r\n var newHeight = windowDimensions.height - options.headerHeight - options.footerHeight;\r\n newHeight -= instance.contentBorderEl.getStyle('border-top').toInt();\r\n newHeight -= instance.contentBorderEl.getStyle('border-bottom').toInt();\r\n newHeight -= (instance.toolbarWrapperEl ? instance.toolbarWrapperEl.getStyle('height').toInt() + instance.toolbarWrapperEl.getStyle('border-top').toInt() : 0);\r\n\r\n MUI.resizeWindow(windowEl, {\r\n width: windowDimensions.width,\r\n height: newHeight,\r\n top: shadowOffset.y - shadowBlur,\r\n left: shadowOffset.x - shadowBlur\r\n });\r\n instance.fireEvent('onMaximize', windowEl);\r\n\r\n if (instance.maximizeButtonEl) {\r\n instance.maximizeButtonEl.setProperty('title', 'Restore');\r\n }\r\n MUI.focusWindow(windowEl);\r\n\r\n },\r\n /*\r\n\r\n Function: restoreWindow\r\n Restore a maximized window.\r\n\r\n Syntax:\r\n (start code)\r\n MUI.Desktop.restoreWindow(windowEl);\r\n (end)\r\n\r\n */\r\n restoreWindow: function(windowEl){\r\n\r\n var instance = windowEl.retrieve('instance');\r\n\r\n // Window exists and is maximized ?\r\n if (windowEl != $(windowEl) || !instance.isMaximized) return;\r\n\r\n var options = instance.options;\r\n instance.isMaximized = false;\r\n\r\n if (options.restrict){\r\n //instance.windowDrag.attach();\r\n if (options.resizable){\r\n instance.reattachResizable();\r\n }\r\n instance.titleBarEl.setStyle('cursor', 'move');\r\n }\r\n\r\n // Hide iframe\r\n // Iframe should be hidden when minimizing, maximizing, and moving for performance and Flash issues\r\n if ( instance.iframeEl ) {\r\n if (!Browser.Engine.trident) {\r\n instance.iframeEl.setStyle('visibility', 'hidden');\r\n }\r\n else {\r\n instance.iframeEl.hide();\r\n }\r\n }\r\n\r\n var contentWrapperEl = instance.contentWrapperEl;\r\n\r\n MUI.resizeWindow(windowEl,{\r\n width: contentWrapperEl.oldWidth,\r\n height: contentWrapperEl.oldHeight,\r\n top: instance.oldTop,\r\n left: instance.oldLeft\r\n });\r\n instance.fireEvent('onRestore', windowEl);\r\n\r\n if (instance.maximizeButtonEl){\r\n instance.maximizeButtonEl.setProperty('title', 'Maximize');\r\n }\r\n }\r\n};\r\n\r\n/*\r\n\r\nClass: Column\r\n Create a column. Columns should be created from left to right.\r\n\r\nSyntax:\r\n(start code)\r\n MUI.Column();\r\n(end)\r\n\r\nArguments:\r\n options\r\n\r\nOptions:\r\n id - The ID of the column. This must be set when creating the column.\r\n container - Defaults to MUI.Desktop.pageWrapper.\r\n placement - Can be 'right', 'main', or 'left'. There must be at least one column with the 'main' option.\r\n width - 'main' column is fluid and should not be given a width.\r\n resizeLimit - resizelimit of a 'right' or 'left' column.\r\n sortable - (boolean) Whether the panels can be reordered via drag and drop.\r\n onResize - (function) Fired when the column is resized.\r\n onCollapse - (function) Fired when the column is collapsed.\r\n onExpand - (function) Fired when the column is expanded.\r\n\r\n*/\r\nMUI.Column = new Class({\r\n\r\n Implements: [Events, Options],\r\n\r\n options: {\r\n id: null,\r\n container: null,\r\n placement: null,\r\n width: null,\r\n resizeLimit: [],\r\n resizable: true,\r\n sortable: true,\r\n isCollapsed: false,\r\n\r\n // Events\r\n onResize: $empty,\r\n onCollapse: $empty,\r\n onExpand: $empty\r\n\r\n },\r\n\r\n panels: [],\r\n\r\n initialize: function(options){\r\n this.setOptions(options);\r\n\r\n $extend(this, {\r\n timestamp: $time(),\r\n isCollapsed: false,\r\n oldWidth: 0\r\n });\r\n\r\n // If column has no ID, give it one.\r\n if (this.options.id == null) {\r\n this.options.id = 'column' + (++MUI.Columns.columnIDCount);\r\n }\r\n\r\n // Shorten object chain\r\n var options = this.options;\r\n var instances = MUI.Columns.instances;\r\n var instanceID = instances.get(options.id);\r\n\r\n if (options.container == null) {\r\n options.container = MUI.Desktop.pageWrapper;\r\n }\r\n else {\r\n $(options.container).setStyle('overflow', 'hidden');\r\n }\r\n\r\n if (typeof this.options.container == 'string'){\r\n this.options.container = $(this.options.container);\r\n }\r\n\r\n // Check to see if there is already a class instance for this Column\r\n if (instanceID){\r\n var instance = instanceID;\r\n }\r\n\r\n // Check if column already exists\r\n if ( this.columnEl ){\r\n return;\r\n }\r\n else {\r\n instances.set(options.id, this);\r\n }\r\n\r\n // If loading columns into a panel, hide the regular content container.\r\n if ($(options.container).hasClass('panel') && $(options.container).getElement('.pad') != null) {\r\n $(options.container).getElement('.pad').hide();\r\n }\r\n\r\n // If loading columns into a window, hide the regular content container.\r\n if ($(options.container).getElement('.mochaContent') != null) {\r\n $(options.container).getElement('.mochaContent').hide();\r\n }\r\n\r\n this.columnEl = new Element('div', {\r\n 'id': this.options.id,\r\n 'class': 'column expanded',\r\n 'styles': {\r\n 'width': options.placement == 'main' ? null : options.width\r\n }\r\n }).inject($(options.container));\r\n\r\n this.columnEl.store('instance', this);\r\n\r\n var parent = this.columnEl.getParent();\r\n var columnHeight = parent.getStyle('height').toInt();\r\n this.columnEl.setStyle('height', columnHeight);\r\n\r\n if (this.options.sortable){\r\n if (!this.options.container.retrieve('sortables')){\r\n var sortables = new Sortables(this.columnEl, {\r\n opacity: 1,\r\n handle: '.panel-header',\r\n constrain: false,\r\n revert: false,\r\n onSort: function(){\r\n $$('.column').each(function(column){\r\n column.getChildren('.panelWrapper').each(function(panelWrapper){\r\n panelWrapper.getElement('.panel').removeClass('bottomPanel');\r\n });\r\n if (column.getChildren('.panelWrapper').getLast()){\r\n column.getChildren('.panelWrapper').getLast().getElement('.panel').addClass('bottomPanel');\r\n }\r\n column.getChildren('.panelWrapper').each(function(panelWrapper){\r\n var panel = panelWrapper.getElement('.panel');\r\n var column = panelWrapper.getParent().id;\r\n instance = MUI.Panels.instances.get(panel.id);\r\n instance.options.column = column;\r\n if(instance) {\r\n var nextpanel = panel.getParent().getNext('.expanded');\r\n if(nextpanel) {\r\n nextpanel=nextpanel.getElement('.panel'); }\r\n instance.partner = nextpanel;\r\n }\r\n });\r\n MUI.panelHeight();\r\n }.bind(this));\r\n }.bind(this)\r\n });\r\n this.options.container.store('sortables', sortables);\r\n }\r\n else {\r\n this.options.container.retrieve('sortables').addLists(this.columnEl);\r\n }\r\n }\r\n\r\n if (options.placement == 'main'){\r\n this.columnEl.addClass('rWidth');\r\n }\r\n\r\n if (options.resizable) {\r\n switch (this.options.placement) {\r\n case 'left':\r\n this.handleEl = new Element('div', {\r\n 'id': this.options.id + '_handle',\r\n 'class': 'columnHandle'\r\n }).inject(this.columnEl, 'after');\r\n\r\n this.handleIconEl = new Element('div', {\r\n 'id': options.id + '_handle_icon',\r\n 'class': 'handleIcon'\r\n }).inject(this.handleEl);\r\n\r\n addResizeRight(this.columnEl, options.resizeLimit[0], options.resizeLimit[1]);\r\n break;\r\n case 'right':\r\n this.handleEl = new Element('div', {\r\n 'id': this.options.id + '_handle',\r\n 'class': 'columnHandle'\r\n }).inject(this.columnEl, 'before');\r\n\r\n this.handleIconEl = new Element('div', {\r\n 'id': options.id + '_handle_icon',\r\n 'class': 'handleIcon'\r\n }).inject(this.handleEl);\r\n addResizeLeft(this.columnEl, options.resizeLimit[0], options.resizeLimit[1]);\r\n break;\r\n }\r\n }\r\n\r\n if (this.options.isCollapsed && this.options.placement!='main'){\r\n this.columnToggle();\r\n }\r\n\r\n if (this.handleEl != null){\r\n this.handleEl.addEvent(MooTools.getTouchOrMouseEvent('dblclick'), function(){\r\n this.columnToggle();\r\n }.bind(this));\r\n }\r\n\r\n // MODIFIED BY WM - 2/13/13\r\n // Added container parameter\r\n MUI.rWidth(this.options.container);\r\n },\r\n\r\n switchPanel: function(activePanel) {\r\n this.panels.forEach(function(panel) {\r\n panel.hide();\r\n });\r\n\r\n if (activePanel)\r\n activePanel.show();\r\n },\r\n\r\n columnCollapse: function(){\r\n var column = this.columnEl;\r\n\r\n this.oldWidth = column.getStyle('width').toInt();\r\n\r\n if (this.resize)\r\n this.resize.detach();\r\n if (this.handleEl) {\r\n this.handleEl.removeEvents(MooTools.getTouchOrMouseEvent('dblclick'));\r\n this.handleEl.addEvent(MooTools.getTouchOrMouseEvent('click'), function() {\r\n this.columnExpand();\r\n // ADDED BY MAL - 10/4/2012\r\n this.fireEvent('onToggle');\r\n // END ADDED BY MAL\r\n }.bind(this));\r\n this.handleEl.setStyle('cursor', 'pointer').addClass('detached');\r\n }\r\n\r\n column.setStyle('width', 0);\r\n this.isCollapsed = true;\r\n column.addClass('collapsed');\r\n column.removeClass('expanded');\r\n MUI.rWidth();\r\n this.fireEvent('onCollapse');\r\n\r\n return true;\r\n },\r\n\r\n columnExpand : function(){\r\n var column = this.columnEl;\r\n\r\n // MODIFIED BY WM 12/12/12 - Fix when oldWidth somehow becomes 0\r\n column.setStyle('width', this.oldWidth || this.options.width);\r\n this.isCollapsed = false;\r\n column.addClass('expanded');\r\n column.removeClass('collapsed');\r\n if (this.handleEl) {\r\n this.handleEl.removeEvents(MooTools.getTouchOrMouseEvent('click'));\r\n this.handleEl.addEvent(MooTools.getTouchOrMouseEvent('dblclick'), function() {\r\n this.columnCollapse();\r\n // ADDED BY MAL - 10/4/2012\r\n this.fireEvent('onToggle');\r\n // END ADDED BY MAL\r\n } .bind(this));\r\n }\r\n if (this.resize)\r\n this.resize.attach();\r\n if (this.handleEl)\r\n this.handleEl.setStyle('cursor', Browser.Engine.webkit ? 'col-resize' : 'e-resize').addClass('attached');\r\n\r\n MUI.rWidth();\r\n this.fireEvent('onExpand');\r\n\r\n return true;\r\n },\r\n\r\n columnToggle: function(){\r\n if (this.isCollapsed == false)\r\n this.columnCollapse();\r\n else\r\n this.columnExpand();\r\n // ADDED BY MAL - 10/4/2012\r\n this.fireEvent('onToggle');\r\n // END ADDED BY MAL\r\n }\r\n});\r\nMUI.Column.implement(new Options, new Events);\r\n\r\n/*\r\n\r\nClass: Panel\r\n Create a panel. Panels go one on top of another in columns. Create your columns first and then add your panels. Panels should be created from top to bottom, left to right.\r\n\r\nSyntax:\r\n(start code)\r\n MUI.Panel();\r\n(end)\r\n\r\nArguments:\r\n options\r\n\r\nOptions:\r\n id - The ID of the panel. This must be set when creating the panel.\r\n column - Where to inject the panel. This must be set when creating the panel.\r\n loadMethod - ('html', 'xhr', or 'iframe') Defaults to 'html' if there is no contentURL. Defaults to 'xhr' if there is a contentURL. You only really need to set this if using the 'iframe' method. May create a 'panel' loadMethod in the future.\r\n contentURL - Used if loadMethod is set to 'xhr' or 'iframe'.\r\n method - ('get', or 'post') The method used to get the data. Defaults to 'get'.\r\n data - (hash) Data to send with the URL. Defaults to null.\r\n evalScripts - (boolean) An xhr loadMethod option. Defaults to true.\r\n evalResponse - (boolean) An xhr loadMethod option. Defaults to false.\r\n content - (string or element) An html loadMethod option.\r\n tabsURL - (url)\r\n tabsData - (hash) Data to send with the URL. Defaults to null.\r\n tabsOnload - (function)\r\n header - (boolean) Display the panel header or not\r\n headerToolbox: (boolean)\r\n headerToolboxURL: (url)\r\n headerToolboxOnload: (function)\r\n height - (number) Height of content area.\r\n addClass - (string) Add a class to the panel.\r\n scrollbars - (boolean)\r\n padding - (object)\r\n collapsible - (boolean)\r\n onBeforeBuild - (function) Fired before the panel is created.\r\n onContentLoaded - (function) Fired after the panel's conten is loaded.\r\n onResize - (function) Fired when the panel is resized.\r\n onCollapse - (function) Fired when the panel is collapsed.\r\n onExpand - (function) Fired when the panel is expanded.\r\n\r\n*/\r\nMUI.Panel = new Class({\r\n\r\n Implements: [Events, Options],\r\n\r\n options: {\r\n id: null,\r\n title: 'New Panel',\r\n column: null,\r\n require: {\r\n css: [],\r\n images: [],\r\n js: [],\r\n onload: null\r\n },\r\n loadMethod: null,\r\n contentURL: null,\r\n\r\n // xhr options\r\n method: 'get',\r\n data: null,\r\n evalScripts: true,\r\n evalResponse: false,\r\n\r\n // html options\r\n content: 'Panel content',\r\n\r\n // Tabs\r\n tabsURL: null,\r\n tabsData: null,\r\n tabsOnload: $empty,\r\n\r\n header: true,\r\n headerToolbox: false,\r\n headerToolboxURL: 'pages/lipsum.html',\r\n headerToolboxOnload: $empty,\r\n\r\n // Style options:\r\n height: 125,\r\n addClass: '',\r\n scrollbars: true,\r\n padding: { top: 8, right: 8, bottom: 8, left: 8 },\r\n\r\n // Other:\r\n collapsible: true,\r\n resizable: true, // ADDED BY WM 12/02/12\r\n // Events\r\n onBeforeBuild: $empty,\r\n onContentLoaded: $empty,\r\n onResize: $empty,\r\n onCollapse: $empty,\r\n onExpand: $empty,\r\n onShow: $empty,\r\n onHide: $empty\r\n },\r\n initialize: function(options) {\r\n this.setOptions(options);\r\n\r\n $extend(this, {\r\n timestamp: $time(),\r\n isCollapsed: false, // This is probably redundant since we can check for the class\r\n oldHeight: 0,\r\n partner: null\r\n });\r\n\r\n // If panel has no ID, give it one.\r\n if (this.options.id == null) {\r\n this.options.id = 'panel' + (++MUI.Panels.panelIDCount);\r\n }\r\n\r\n // Shorten object chain\r\n var instances = MUI.Panels.instances;\r\n var instanceID = instances.get(this.options.id);\r\n var options = this.options;\r\n\r\n // Check to see if there is already a class instance for this panel\r\n if (instanceID) {\r\n var instance = instanceID;\r\n }\r\n\r\n // Check if panel already exists\r\n if (this.panelEl) {\r\n return;\r\n }\r\n else {\r\n instances.set(this.options.id, this);\r\n }\r\n\r\n this.fireEvent('onBeforeBuild');\r\n\r\n if (options.loadMethod == 'iframe') {\r\n // Iframes have their own padding.\r\n options.padding = { top: 0, right: 0, bottom: 0, left: 0 };\r\n }\r\n\r\n this.showHandle = true;\r\n if ($(options.column).getChildren().length == 0) {\r\n this.showHandle = false;\r\n }\r\n\r\n this.panelWrapperEl = new Element('div', {\r\n 'id': this.options.id + '_wrapper',\r\n 'class': 'panelWrapper expanded'\r\n }).inject($(options.column));\r\n\r\n this.panelEl = new Element('div', {\r\n 'id': this.options.id,\r\n 'class': 'panel expanded',\r\n 'styles': {\r\n 'height': options.height\r\n }\r\n }).inject(this.panelWrapperEl);\r\n\r\n this.panelEl.store('instance', this);\r\n\r\n this.panelEl.addClass(options.addClass);\r\n\r\n this.contentEl = new Element('div', {\r\n 'id': options.id + '_pad',\r\n 'class': 'pad'\r\n }).inject(this.panelEl);\r\n\r\n // This is in order to use the same variable as the windows do in updateContent.\r\n // May rethink this.\r\n this.contentWrapperEl = this.panelEl;\r\n\r\n this.contentEl.setStyles({\r\n 'padding-top': options.padding.top,\r\n 'padding-bottom': options.padding.bottom,\r\n 'padding-left': options.padding.left,\r\n 'padding-right': options.padding.right\r\n });\r\n\r\n this.panelHeaderEl = new Element('div', {\r\n 'id': this.options.id + '_header',\r\n 'class': 'panel-header',\r\n 'styles': {\r\n 'display': options.header ? 'block' : 'none'\r\n }\r\n }).inject(this.panelEl, 'before');\r\n\r\n var columnInstances = MUI.Columns.instances;\r\n var columnInstance = columnInstances.get(this.options.column);\r\n\r\n if (columnInstance) \r\n columnInstance.panels.push(this);\r\n\r\n if (this.options.collapsible) {\r\n this.collapseToggleInit();\r\n }\r\n\r\n if (this.options.headerToolbox) {\r\n this.panelHeaderToolboxEl = new Element('div', {\r\n 'id': options.id + '_headerToolbox',\r\n 'class': 'panel-header-toolbox'\r\n }).inject(this.panelHeaderEl);\r\n }\r\n\r\n this.panelHeaderContentEl = new Element('div', {\r\n 'id': options.id + '_headerContent',\r\n 'class': 'panel-headerContent'\r\n }).inject(this.panelHeaderEl);\r\n\r\n if (columnInstance.options.sortable) {\r\n this.panelHeaderEl.setStyle('cursor', 'move');\r\n columnInstance.options.container.retrieve('sortables').addItems(this.panelWrapperEl);\r\n if (this.panelHeaderToolboxEl) {\r\n this.panelHeaderToolboxEl.addEvent(MooTools.getTouchOrMouseEvent('mousedown'), function(e) {\r\n e = new Event(e).stop();\r\n e.target.focus();\r\n });\r\n this.panelHeaderToolboxEl.setStyle(\"cursor\", \"default\");\r\n }\r\n }\r\n\r\n this.titleEl = new Element('h2', {\r\n 'id': options.id + '_title'\r\n }).inject(this.panelHeaderContentEl);\r\n\r\n if (options.resizable) {\r\n this.handleEl = new Element('div', {\r\n 'id': options.id + '_handle',\r\n 'class': 'horizontalHandle',\r\n 'styles': {\r\n 'display': this.showHandle == true ? 'block' : 'none'\r\n }\r\n }).inject(this.panelEl, 'after');\r\n\r\n this.handleIconEl = new Element('div', {\r\n 'id': options.id + '_handle_icon',\r\n 'class': 'handleIcon'\r\n }).inject(this.handleEl);\r\n\r\n addResizeBottom(options.id);\r\n }\r\n\r\n if (options.require.css.length || options.require.images.length) {\r\n new MUI.Require({\r\n css: options.require.css,\r\n images: options.require.images,\r\n onload: function() {\r\n this.newPanel();\r\n } .bind(this)\r\n });\r\n }\r\n else {\r\n this.newPanel();\r\n }\r\n },\r\n newPanel: function() {\r\n\r\n options = this.options;\r\n\r\n if (this.options.headerToolbox) {\r\n MUI.updateContent({\r\n 'element': this.panelEl,\r\n 'childElement': this.panelHeaderToolboxEl,\r\n 'loadMethod': 'xhr',\r\n 'url': options.headerToolboxURL,\r\n 'onContentLoaded': options.headerToolboxOnload\r\n });\r\n }\r\n\r\n if (options.tabsURL == null) {\r\n this.titleEl.set('html', options.title);\r\n } else {\r\n this.panelHeaderContentEl.addClass('tabs');\r\n MUI.updateContent({\r\n 'element': this.panelEl,\r\n 'childElement': this.panelHeaderContentEl,\r\n 'loadMethod': 'xhr',\r\n 'url': options.tabsURL,\r\n 'data': options.tabsData,\r\n 'onContentLoaded': options.tabsOnload\r\n });\r\n }\r\n\r\n // Add content to panel.\r\n MUI.updateContent({\r\n 'element': this.panelEl,\r\n 'content': options.content,\r\n 'method': options.method,\r\n 'data': options.data,\r\n 'url': options.contentURL,\r\n 'onContentLoaded': null,\r\n 'require': {\r\n js: options.require.js,\r\n onload: options.require.onload\r\n }\r\n });\r\n\r\n if (options.column) {\r\n // Do this when creating and removing panels\r\n $(options.column).getChildren('.panelWrapper').each(function(panelWrapper) {\r\n panelWrapper.getElement('.panel').removeClass('bottomPanel');\r\n });\r\n $(options.column).getChildren('.panelWrapper').getLast().getElement('.panel').addClass('bottomPanel');\r\n\r\n MUI.panelHeight(options.column, this.panelEl, 'new');\r\n }\r\n },\r\n show: function() {\r\n this.panelWrapperEl.show();\r\n\r\n this.fireEvent('onShow');\r\n },\r\n hide: function() {\r\n this.panelWrapperEl.hide();\r\n\r\n this.fireEvent('onHide');\r\n },\r\n collapseToggleInit: function(options) {\r\n\r\n var options = this.options;\r\n\r\n this.panelHeaderCollapseBoxEl = new Element('div', {\r\n 'id': options.id + '_headerCollapseBox',\r\n 'class': 'toolbox'\r\n }).inject(this.panelHeaderEl);\r\n\r\n if (options.headerToolbox) {\r\n this.panelHeaderCollapseBoxEl.addClass('divider');\r\n }\r\n\r\n this.collapseToggleEl = new Element('div', {\r\n 'id': options.id + '_collapseToggle',\r\n 'class': 'panel-collapse icon16',\r\n 'styles': {\r\n 'width': 16,\r\n 'height': 16\r\n },\r\n 'title': 'Collapse Panel'\r\n }).inject(this.panelHeaderCollapseBoxEl);\r\n\r\n this.collapseToggleEl.addEvent(MooTools.getTouchOrMouseEvent('click'), function(event) {\r\n var panel = this.panelEl;\r\n var panelWrapper = this.panelWrapperEl;\r\n\r\n // Get siblings and make sure they are not all collapsed.\r\n // If they are all collapsed and the current panel is collapsing\r\n // Then collapse the column.\r\n var instances = MUI.Panels.instances;\r\n var expandedSiblings = [];\r\n\r\n panelWrapper.getAllPrevious('.panelWrapper').each(function(sibling) {\r\n var instance = instances.get(sibling.getElement('.panel').id);\r\n if (instance.isCollapsed == false) {\r\n expandedSiblings.push(sibling.getElement('.panel').id);\r\n }\r\n });\r\n\r\n panelWrapper.getAllNext('.panelWrapper').each(function(sibling) {\r\n var instance = instances.get(sibling.getElement('.panel').id);\r\n if (instance.isCollapsed == false) {\r\n expandedSiblings.push(sibling.getElement('.panel').id);\r\n }\r\n });\r\n\r\n // Collapse Panel\r\n if (this.isCollapsed == false) {\r\n var currentColumn = MUI.Columns.instances.get($(options.column).id);\r\n\r\n if (expandedSiblings.length == 0 && currentColumn.options.placement != 'main') {\r\n var currentColumn = MUI.Columns.instances.get($(options.column).id);\r\n currentColumn.columnToggle();\r\n return;\r\n }\r\n else if (expandedSiblings.length == 0 && currentColumn.options.placement == 'main') {\r\n return;\r\n }\r\n this.oldHeight = panel.getStyle('height').toInt();\r\n if (this.oldHeight < 10) this.oldHeight = 20;\r\n this.contentEl.setStyle('position', 'absolute'); // This is so IE6 and IE7 will collapse the panel all the way\r\n panel.setStyle('height', 0);\r\n this.isCollapsed = true;\r\n panelWrapper.addClass('collapsed');\r\n panelWrapper.removeClass('expanded');\r\n MUI.panelHeight(options.column, panel, 'collapsing');\r\n MUI.panelHeight(); // Run this a second time for panels within panels\r\n this.collapseToggleEl.removeClass('panel-collapsed');\r\n this.collapseToggleEl.addClass('panel-expand');\r\n this.collapseToggleEl.setProperty('title', 'Expand Panel');\r\n this.fireEvent('onCollapse');\r\n }\r\n\r\n // Expand Panel\r\n else {\r\n this.contentEl.setStyle('position', null); // This is so IE6 and IE7 will collapse the panel all the way\r\n panel.setStyle('height', this.oldHeight);\r\n this.isCollapsed = false;\r\n panelWrapper.addClass('expanded');\r\n panelWrapper.removeClass('collapsed');\r\n MUI.panelHeight(this.options.column, panel, 'expanding');\r\n MUI.panelHeight(); // Run this a second time for panels within panels\r\n this.collapseToggleEl.removeClass('panel-expand');\r\n this.collapseToggleEl.addClass('panel-collapsed');\r\n this.collapseToggleEl.setProperty('title', 'Collapse Panel');\r\n this.fireEvent('onExpand');\r\n }\r\n } .bind(this));\r\n }\r\n});\r\nMUI.Panel.implement(new Options, new Events);\r\n\r\n/*\r\n arguments:\r\n column - The column to resize the panels in\r\n changing - The panel that is collapsing, expanding, or new\r\n action - collapsing, expanding, or new\r\n\r\n*/\r\n\r\nMUI.extend({\r\n // Panel Height\r\n panelHeight: function(column, changing, action){\r\n if (column != null) {\r\n MUI.panelHeight2($(column), changing, action);\r\n }\r\n else {\r\n $$('.column').each(function(column){\r\n MUI.panelHeight2(column);\r\n }.bind(this));\r\n }\r\n },\r\n /*\r\n\r\n actions can be new, collapsing or expanding.\r\n\r\n */\r\n panelHeight2: function(column, changing, action) {\r\n // MODIFIED BY WM - 2/26/13\r\n // Don't resize when elements are hidden because offsetHeight doesn't work\r\n if (!column.isVisible())\r\n return;\r\n\r\n var instances = MUI.Panels.instances;\r\n\r\n var parent = column.getParent();\r\n var columnHeight = parent.getStyle('height').toInt();\r\n if (Browser.Engine.trident4 && parent == MUI.Desktop.pageWrapper) {\r\n columnHeight -= 1;\r\n }\r\n column.setStyle('height', columnHeight);\r\n\r\n // Get column panels\r\n var panels = [];\r\n column.getChildren('.panelWrapper').each( function(panelWrapper){\r\n panels.push(panelWrapper.getElement('.panel'));\r\n }.bind(this));\r\n\r\n // Get expanded column panels\r\n var panelsExpanded = [];\r\n column.getChildren('.expanded').each( function(panelWrapper){\r\n panelsExpanded.push(panelWrapper.getElement('.panel'));\r\n }.bind(this));\r\n\r\n // All the panels in the column whose height will be effected.\r\n var panelsToResize = [];\r\n\r\n // The panel with the greatest height. Remainders will be added to this panel\r\n var tallestPanel;\r\n var tallestPanelHeight = 0;\r\n\r\n this.panelsTotalHeight = 0; // Height of all the panels in the column\r\n this.height = 0; // Height of all the elements in the column\r\n\r\n // Set panel resize partners\r\n panels.each(function(panel){\r\n var instance = instances.get(panel.id);\r\n\r\n if (instance.options.resizable) {\r\n if (panel.getParent().hasClass('expanded') && panel.getParent().getNext('.expanded')) {\r\n instance.partner = panel.getParent().getNext('.expanded').getElement('.panel');\r\n instance.resize.attach();\r\n instance.handleEl.setStyles({\r\n 'display': 'block',\r\n 'cursor': Browser.Engine.webkit ? 'row-resize' : 'n-resize'\r\n }).removeClass('detached');\r\n } else {\r\n instance.resize.detach();\r\n instance.handleEl.setStyles({\r\n 'display': 'none',\r\n 'cursor': null\r\n }).addClass('detached');\r\n }\r\n if (panel.getParent().getNext('.panelWrapper') == null) {\r\n instance.handleEl.hide();\r\n }\r\n }\r\n }.bind(this));\r\n\r\n // Add panels to panelsToResize\r\n // Get the total height of all the resizable panels\r\n // Get the total height of all the column's children\r\n column.getChildren().each(function(panelWrapper){\r\n\r\n panelWrapper.getChildren().each(function(el){\r\n\r\n if (el.hasClass('panel')){\r\n var instance = instances.get(el.id);\r\n\r\n // Are any next siblings Expanded?\r\n anyNextSiblingsExpanded = function(el){\r\n var test;\r\n el.getParent().getAllNext('.panelWrapper').each(function(sibling){\r\n var siblingInstance = instances.get(sibling.getElement('.panel').id);\r\n if (siblingInstance.isCollapsed == false){\r\n test = true;\r\n }\r\n }.bind(this));\r\n return test;\r\n }.bind(this);\r\n\r\n // If a next sibling is expanding, are any of the nexts siblings of the expanding sibling Expanded?\r\n anyExpandingNextSiblingsExpanded = function(el){\r\n var test;\r\n changing.getParent().getAllNext('.panelWrapper').each(function(sibling){\r\n var siblingInstance = instances.get(sibling.getElement('.panel').id);\r\n if (siblingInstance.isCollapsed == false){\r\n test = true;\r\n }\r\n }.bind(this));\r\n return test;\r\n }.bind(this);\r\n\r\n // Is the panel that is collapsing, expanding, or new located after this panel?\r\n anyNextContainsChanging = function(el){\r\n var allNext = [];\r\n el.getParent().getAllNext('.panelWrapper').each(function(panelWrapper){\r\n allNext.push(panelWrapper.getElement('.panel'));\r\n }.bind(this));\r\n var test = allNext.contains(changing);\r\n return test;\r\n }.bind(this);\r\n\r\n nextExpandedChanging = function(el){\r\n var test;\r\n if (el.getParent().getNext('.expanded')){\r\n if (el.getParent().getNext('.expanded').getElement('.panel') == changing) test = true;\r\n }\r\n return test;\r\n }\r\n\r\n // NEW PANEL\r\n // Resize panels that are \"new\" and not collapsed\r\n if (action == 'new') {\r\n if (!instance.isCollapsed /* && el != changing */ ) {\r\n panelsToResize.push(el);\r\n this.panelsTotalHeight += el.offsetHeight.toInt();\r\n }\r\n }\r\n\r\n // COLLAPSING PANELS and CURRENTLY EXPANDED PANELS\r\n // Resize panels that are not collapsed.\r\n // If a panel is collapsing resize any expanded panels below.\r\n // If there are no expanded panels below it, resize the expanded panels above it.\r\n else if (action == null || action == 'collapsing' ){\r\n if (!instance.isCollapsed && (!anyNextContainsChanging(el) || !anyNextSiblingsExpanded(el))){\r\n panelsToResize.push(el);\r\n this.panelsTotalHeight += el.offsetHeight.toInt();\r\n }\r\n }\r\n\r\n // EXPANDING PANEL\r\n // Resize panels that are not collapsed and are not expanding.\r\n // Resize any expanded panels below the expanding panel.\r\n // If there are no expanded panels below the expanding panel, resize the first expanded panel above it.\r\n else if (action == 'expanding' && !instance.isCollapsed && el != changing){\r\n if (!anyNextContainsChanging(el) || (!anyExpandingNextSiblingsExpanded(el) && nextExpandedChanging(el))){\r\n panelsToResize.push(el);\r\n this.panelsTotalHeight += el.offsetHeight.toInt();\r\n }\r\n }\r\n\r\n if (el.style.height){\r\n this.height += el.getStyle('height').toInt();\r\n }\r\n }\r\n else {\r\n this.height += el.offsetHeight.toInt();\r\n }\r\n }.bind(this));\r\n\r\n }.bind(this));\r\n\r\n this.height = 0;\r\n\r\n // Get height of all the column's children\r\n column.getChildren().each(function(el){\r\n this.height += el.offsetHeight.toInt();\r\n }.bind(this));\r\n\r\n // Get the remaining height\r\n var remainingHeight = column.offsetHeight.toInt() - this.height;\r\n\r\n panelsToResize.each(function(panel) {\r\n // MODIFIED BY WM - 8/19/14\r\n // Don't resize when elements are hidden because offsetHeight doesn't work\r\n if (!panel.isVisible())\r\n return;\r\n\r\n var ratio = this.panelsTotalHeight / panel.offsetHeight.toInt();\r\n var newPanelHeight = panel.getStyle('height').toInt() + (remainingHeight / ratio);\r\n if (isNaN(newPanelHeight) || (newPanelHeight < 1)){\r\n newPanelHeight = 0;\r\n }\r\n panel.setStyle('height', newPanelHeight);\r\n }.bind(this));\r\n\r\n // Make sure the remaining height is 0. If not add/subtract the\r\n // remaining height to the tallest panel. This makes up for browser resizing,\r\n // off ratios, and users trying to give panels too much height.\r\n\r\n // Get height of all the column's children\r\n // MODIFIED BY WM - 11/27/13\r\n // Account for non-panel elements in column\r\n this.height = 0;\r\n column.getChildren().each(function(panelWrapper){\r\n if (panelWrapper.hasClass(\"panelWrapper\")) {\r\n panelWrapper.getChildren().each(function(el){\r\n this.height += el.offsetHeight.toInt();\r\n\r\n if (!el.hasClass('panel') || !el.isVisible())\r\n return;\r\n\r\n if (tallestPanel == null || el.getStyle('height').toInt() > tallestPanelHeight){\r\n tallestPanel = el;\r\n tallestPanelHeight = el.getStyle('height').toInt();\r\n }\r\n }.bind(this));\r\n } \r\n else\r\n this.height += panelWrapper.offsetHeight.toInt();\r\n }.bind(this));\r\n\r\n var remainingHeight = column.offsetHeight.toInt() - this.height;\r\n\r\n if (remainingHeight > 0 && tallestPanel) {\r\n tallestPanel.setStyle('height', tallestPanel.getStyle('height').toInt() + remainingHeight );\r\n if (tallestPanel.getStyle('height') < 1){\r\n tallestPanel.setStyle('height', 0 );\r\n }\r\n }\r\n\r\n var colHandles = parent.getChildren('.columnHandle');\r\n if (colHandles) {\r\n colHandles.each(function(handle) {\r\n var parent = handle.getParent();\r\n if (parent.getStyle('height').toInt() < 1) return; // Keeps IE7 and 8 from throwing an error when collapsing a panel within a panel\r\n var handleHeight = parent.getStyle('height').toInt() - handle.getStyle('border-top').toInt() - handle.getStyle('border-bottom').toInt();\r\n if (Browser.Engine.trident4 && parent == MUI.Desktop.pageWrapper){\r\n handleHeight -= 1;\r\n }\r\n handle.setStyle('height', handleHeight);\r\n });\r\n }\r\n\r\n panelsExpanded.each(function(panel){\r\n MUI.resizeChildren(panel);\r\n }.bind(this));\r\n\r\n },\r\n // May rename this resizeIframeEl()\r\n resizeChildren: function(panel) {\r\n var instances = MUI.Panels.instances;\r\n var instance = instances.get(panel.id);\r\n var contentWrapperEl = instance.contentWrapperEl;\r\n\r\n if (instance.iframeEl) {\r\n if (!Browser.Engine.trident) {\r\n instance.iframeEl.setStyles({\r\n 'height': contentWrapperEl.getStyle('height'),\r\n 'width': Math.max(contentWrapperEl.offsetWidth - contentWrapperEl.getStyle('border-left').toInt() - contentWrapperEl.getStyle('border-right').toInt(), 0)\r\n });\r\n }\r\n else {\r\n // The following hack is to get IE8 RC1 IE8 Standards Mode to properly resize an iframe\r\n // when only the vertical dimension is changed.\r\n instance.iframeEl.setStyles({\r\n 'height': contentWrapperEl.getStyle('height'),\r\n 'width': Math.max(contentWrapperEl.offsetWidth - contentWrapperEl.getStyle('border-left').toInt() - contentWrapperEl.getStyle('border-right').toInt(), 1)\r\n });\r\n instance.iframeEl.setStyles({\r\n 'width': Math.max(contentWrapperEl.offsetWidth - contentWrapperEl.getStyle('border-left').toInt() - contentWrapperEl.getStyle('border-right').toInt(), 0)\r\n });\r\n }\r\n }\r\n },\r\n // Remaining Width\r\n rWidth: function(container){\r\n if (container == null) {\r\n var container = MUI.Desktop.pageWrapper;\r\n }\r\n container.getElements('.rWidth').each(function(column){\r\n\r\n // modified by AH 4/3/17, to correct IE bug\r\n var currentWidth = !isNaN(column.getStyle('width').toInt()) ? column.getStyle('width').toInt() : 0;\r\n\r\n currentWidth -= column.getStyle('border-left').toInt();\r\n currentWidth -= column.getStyle('border-right').toInt();\r\n\r\n var parent = column.getParent();\r\n this.width = 0;\r\n\r\n // Get the total width of all the parent element's children\r\n parent.getChildren().each(function(el) {\r\n if (el.hasClass('mocha') != true) {\r\n this.width += el.offsetWidth.toInt();\r\n }\r\n }.bind(this));\r\n\r\n // Add the remaining width to the current element\r\n var remainingWidth = parent.clientWidth.toInt() - (this.width + 1); //parent.offsetWidth.toInt() - this.width;\r\n var newWidth = currentWidth + remainingWidth - 1;\r\n if (newWidth < 1) newWidth = 0;\r\n column.setStyle('width', newWidth);\r\n column.getChildren('.panel').each(function(panel){\r\n panel.setStyle('width', newWidth - panel.getStyle('border-left').toInt() - panel.getStyle('border-right').toInt());\r\n MUI.resizeChildren(panel);\r\n }.bind(this));\r\n\r\n });\r\n }\r\n\r\n});\r\n\r\nfunction addResizeRight(element, min, max){\r\n if (!$(element)) return;\r\n element = $(element);\r\n\r\n var instances = MUI.Columns.instances;\r\n var instance = instances.get(element.id);\r\n\r\n var handle = element.getNext('.columnHandle');\r\n handle.setStyle('cursor', Browser.Engine.webkit ? 'col-resize' : 'e-resize');\r\n if (!min) min = 50;\r\n if (!max) max = 250;\r\n if (Browser.Engine.trident) {\r\n \r\n var events = {\r\n 'mousedown': function() {\r\n handle.setCapture();\r\n },\r\n 'mouseup': function() {\r\n handle.releaseCapture();\r\n }\r\n };\r\n if (Browser.isMobile) {\r\n events = {\r\n 'touchstart': function() {\r\n handle.setCapture();\r\n },\r\n 'touchend': function() {\r\n handle.releaseCapture();\r\n }\r\n };\r\n }\r\n handle.addEvents(events);\r\n }\r\n instance.resize = element.makeResizable({\r\n handle: handle,\r\n modifiers: {\r\n x: 'width',\r\n y: false\r\n },\r\n limit: {\r\n x: [min, max]\r\n },\r\n onStart: function(){\r\n element.getElements('iframe').setStyle('visibility', 'hidden');\r\n element.getNext('.column').getElements('iframe').setStyle('visibility', 'hidden');\r\n }.bind(this),\r\n onDrag: function(){\r\n if (Browser.Engine.gecko) {\r\n $$('.panel').each(function(panel){\r\n if (panel.getElements('.mochaIframe').length == 0) {\r\n panel.hide(); // Fix for a rendering bug in FF\r\n }\r\n });\r\n }\r\n MUI.rWidth(element.getParent());\r\n if (Browser.Engine.gecko) {\r\n $$('.panel').show(); // Fix for a rendering bug in FF\r\n }\r\n if (Browser.Engine.trident4) {\r\n element.getChildren().each(function(el){\r\n var width = $(element).getStyle('width').toInt();\r\n width -= el.getStyle('border-right').toInt();\r\n width -= el.getStyle('border-left').toInt();\r\n width -= el.getStyle('padding-right').toInt();\r\n width -= el.getStyle('padding-left').toInt();\r\n el.setStyle('width', width);\r\n }.bind(this));\r\n }\r\n }.bind(this),\r\n onComplete: function(){\r\n MUI.rWidth(element.getParent());\r\n element.getElements('iframe').setStyle('visibility', 'visible');\r\n element.getNext('.column').getElements('iframe').setStyle('visibility', 'visible');\r\n instance.fireEvent('onResize');\r\n }.bind(this)\r\n });\r\n}\r\n\r\nfunction addResizeLeft(element, min, max){\r\n if (!$(element)) return;\r\n element = $(element);\r\n\r\n var instances = MUI.Columns.instances;\r\n var instance = instances.get(element.id);\r\n\r\n var handle = element.getPrevious('.columnHandle');\r\n handle.setStyle('cursor', Browser.Engine.webkit ? 'col-resize' : 'e-resize');\r\n var partner = element.getPrevious('.column');\r\n if (!min) min = 50;\r\n if (!max) max = 250;\r\n if (Browser.Engine.trident) {\r\n var events = {\r\n 'mousedown': function() {\r\n handle.setCapture();\r\n },\r\n 'mouseup': function() {\r\n handle.releaseCapture();\r\n }\r\n };\r\n if (Browser.isMobile) {\r\n events = {\r\n 'touchstart': function() {\r\n handle.setCapture();\r\n },\r\n 'touchend': function() {\r\n handle.releaseCapture();\r\n }\r\n };\r\n }\r\n handle.addEvents(events);\r\n }\r\n instance.resize = element.makeResizable({\r\n handle: handle,\r\n modifiers: {x: 'width' , y: false},\r\n invert: true,\r\n limit: { x: [min, max] },\r\n onStart: function(){\r\n $(element).getElements('iframe').setStyle('visibility','hidden');\r\n partner.getElements('iframe').setStyle('visibility','hidden');\r\n }.bind(this),\r\n onDrag: function(){\r\n MUI.rWidth(element.getParent());\r\n }.bind(this),\r\n onComplete: function(){\r\n MUI.rWidth(element.getParent());\r\n $(element).getElements('iframe').setStyle('visibility','visible');\r\n partner.getElements('iframe').setStyle('visibility','visible');\r\n instance.fireEvent('onResize');\r\n }.bind(this)\r\n });\r\n}\r\n\r\nfunction addResizeBottom(element){\r\n if (!$(element)) return;\r\n var element = $(element);\r\n\r\n var instances = MUI.Panels.instances;\r\n var instance = instances.get(element.id);\r\n var handle = instance.handleEl;\r\n handle.setStyle('cursor', Browser.Engine.webkit ? 'row-resize' : 'n-resize');\r\n partner = instance.partner;\r\n min = 0;\r\n max = function(){\r\n return element.getStyle('height').toInt() + partner.getStyle('height').toInt();\r\n }.bind(this);\r\n\r\n if (Browser.Engine.trident) {\r\n var events = {\r\n 'mousedown': function() {\r\n handle.setCapture();\r\n },\r\n 'mouseup': function() {\r\n handle.releaseCapture();\r\n }\r\n };\r\n if (Browser.isMobile) {\r\n events = {\r\n 'touchstart': function() {\r\n handle.setCapture();\r\n },\r\n 'touchend': function() {\r\n handle.releaseCapture();\r\n }\r\n };\r\n }\r\n handle.addEvents(events);\r\n }\r\n instance.resize = element.makeResizable({\r\n handle: handle,\r\n modifiers: {x: false, y: 'height'},\r\n limit: { y: [min, max] },\r\n invert: false,\r\n onBeforeStart: function(){\r\n partner = instance.partner;\r\n this.originalHeight = element.getStyle('height').toInt();\r\n this.partnerOriginalHeight = partner.getStyle('height').toInt();\r\n }.bind(this),\r\n onStart: function(){\r\n if (instance.iframeEl) {\r\n if (!Browser.Engine.trident) {\r\n instance.iframeEl.setStyle('visibility', 'hidden');\r\n partner.getElements('iframe').setStyle('visibility','hidden');\r\n }\r\n else {\r\n instance.iframeEl.hide();\r\n partner.getElements('iframe').hide();\r\n }\r\n }\r\n\r\n }.bind(this),\r\n onDrag: function(){\r\n partnerHeight = partnerOriginalHeight;\r\n partnerHeight += (this.originalHeight - element.getStyle('height').toInt());\r\n partner.setStyle('height', partnerHeight);\r\n MUI.resizeChildren(element, element.getStyle('height').toInt());\r\n MUI.resizeChildren(partner, partnerHeight);\r\n element.getChildren('.column').each( function(column){\r\n MUI.panelHeight(column);\r\n });\r\n partner.getChildren('.column').each( function(column){\r\n MUI.panelHeight(column);\r\n });\r\n }.bind(this),\r\n onComplete: function(){\r\n partnerHeight = partnerOriginalHeight;\r\n partnerHeight += (this.originalHeight - element.getStyle('height').toInt());\r\n partner.setStyle('height', partnerHeight);\r\n MUI.resizeChildren(element, element.getStyle('height').toInt());\r\n MUI.resizeChildren(partner, partnerHeight);\r\n element.getChildren('.column').each( function(column){\r\n MUI.panelHeight(column);\r\n });\r\n partner.getChildren('.column').each( function(column){\r\n MUI.panelHeight(column);\r\n });\r\n if (instance.iframeEl) {\r\n if (!Browser.Engine.trident) {\r\n instance.iframeEl.setStyle('visibility', 'visible');\r\n partner.getElements('iframe').setStyle('visibility','visible');\r\n }\r\n else {\r\n instance.iframeEl.show();\r\n partner.getElements('iframe').show();\r\n // The following hack is to get IE8 Standards Mode to properly resize an iframe\r\n // when only the vertical dimension is changed.\r\n var width = instance.iframeEl.getStyle('width').toInt();\r\n instance.iframeEl.setStyle('width', width - 1);\r\n MUI.rWidth();\r\n instance.iframeEl.setStyle('width', width);\r\n }\r\n }\r\n instance.fireEvent('onResize');\r\n }.bind(this)\r\n });\r\n}\r\n\r\nMUI.extend({\r\n /*\r\n\r\n Function: closeColumn\r\n Destroys/removes a column.\r\n\r\n Syntax:\r\n (start code)\r\n MUI.closeColumn();\r\n (end)\r\n\r\n Arguments:\r\n columnEl - the ID of the column to be closed\r\n\r\n Returns:\r\n true - the column was closed\r\n false - the column was not closed\r\n\r\n */\r\n closeColumn: function(columnEl){\r\n columnEl=$(columnEl);\r\n if(columnEl==null) return;\r\n var instances = MUI.Columns.instances;\r\n var instance = instances.get(columnEl.id);\r\n if (instance==null || instance.isClosing) return;\r\n\r\n instance.isClosing = true;\r\n\r\n // Destroy all the panels in the column.\r\n var panels = $(columnEl).getElements('.panel');\r\n panels.each(function(panel){\r\n MUI.closePanel(panel.id);\r\n }.bind(this));\r\n\r\n if (Browser.Engine.trident) {\r\n columnEl.dispose();\r\n if (instance.handleEl != null) {\r\n instance.handleEl.dispose();\r\n }\r\n }\r\n else {\r\n columnEl.destroy();\r\n if (instance.handleEl != null) {\r\n instance.handleEl.destroy();\r\n }\r\n } \r\n\r\n if (MUI.Desktop) {\r\n MUI.Desktop.resizePanels();\r\n }\r\n\r\n var sortables=instance.options.container.retrieve('sortables');\r\n if(sortables) sortables.removeLists(columnEl);\r\n\r\n instances.erase(instance.options.id);\r\n return true;\r\n },\r\n /*\r\n\r\n Function: closePanel\r\n Destroys/removes a panel.\r\n\r\n Syntax:\r\n (start code)\r\n MUI.closePanel();\r\n (end)\r\n\r\n Arguments:\r\n panelEl - the ID of the panel to be closed\r\n\r\n Returns:\r\n true - the panel was closed\r\n false - the panel was not closed\r\n\r\n */\r\n closePanel: function(panelEl){\r\n panelEl=$(panelEl);\r\n if(panelEl==null) return;\r\n var instances = MUI.Panels.instances;\r\n var instance = instances.get(panelEl.id);\r\n if (panelEl != $(panelEl) || instance.isClosing) return;\r\n\r\n var column = instance.options.column;\r\n\r\n instance.isClosing = true;\r\n\r\n var columnInstances = MUI.Columns.instances;\r\n var columnInstance = columnInstances.get(column);\r\n\r\n if (columnInstance.options.sortable){\r\n columnInstance.options.container.retrieve('sortables').removeItems(instance.panelWrapperEl);\r\n }\r\n\r\n instance.panelWrapperEl.destroy();\r\n\r\n if (MUI.Desktop) {\r\n MUI.Desktop.resizePanels();\r\n }\r\n\r\n // Do this when creating and removing panels\r\n var panels=$(column).getElements('.panelWrapper');\r\n panels.each(function(panelWrapper){\r\n panelWrapper.getElement('.panel').removeClass('bottomPanel');\r\n });\r\n if(panels.length>0) panels.getLast().getElement('.panel').addClass('bottomPanel');\r\n\r\n instances.erase(instance.options.id);\r\n return true;\r\n\r\n }\r\n});\r\n/*\r\n---\r\n\r\nname: Dock\r\n\r\nscript: Dock.js\r\n\r\ndescription: Implements the dock/taskbar. Enables window minimize.\r\n\r\ncopyright: (c) 2007-2009 Greg Houston, .\r\n\r\nlicense: MIT-style license.\r\n\r\ntodo:\r\n - Make it so the dock requires no initial html markup.\r\n\r\nrequires:\r\n - MochaUI/MUI\r\n - MochaUI/MUI.Windows\r\n - MochaUI/MUI.Column\r\n - MochaUI/MUI.Panel\r\n\r\nprovides: [MUI.Dock]\r\n\r\n...\r\n*/\r\n\r\nMUI.files[MUI.path.source + 'Layout/Dock.js'] = 'loaded';\r\n\r\nMUI.options.extend({\r\n // Naming options:\r\n // If you change the IDs of the Mocha Desktop containers in your HTML, you need to change them here as well.\r\n dockWrapper: 'dockWrapper',\r\n dockVisible: 'true',\r\n dock: 'dock'\r\n});\r\n\r\nMUI.extend({\r\n /*\r\n\r\n Function: minimizeAll\r\n Minimize all windows that are minimizable.\r\n\r\n */\r\n minimizeAll: function() {\r\n $$('.mocha').each(function(windowEl){\r\n var instance = windowEl.retrieve('instance');\r\n if (!instance.isMinimized && instance.options.minimizable == true){\r\n MUI.Dock.minimizeWindow(windowEl);\r\n }\r\n }.bind(this));\r\n }\r\n});\r\n\r\nMUI.Dock = {\r\n\r\n options: {\r\n useControls: true, // Toggles autohide and dock placement controls.\r\n dockPosition: 'bottom', // Position the dock starts in, top or bottom.\r\n dockVisible: true, // is the dock visible\r\n // Style options\r\n trueButtonColor: [51, 204, 51], // Color for autohide on\r\n enabledButtonColor: [115, 153, 191],\r\n disabledButtonColor: [170, 170, 170]\r\n },\r\n\r\n initialize: function(options){\r\n // Stops if MUI.Desktop is not implemented\r\n if (!MUI.Desktop) return;\r\n\r\n MUI.dockVisible = this.options.dockVisible;\r\n this.dockWrapper = $(MUI.options.dockWrapper);\r\n this.dock = $(MUI.options.dock);\r\n this.autoHideEvent = null;\r\n this.dockAutoHide = false; // True when dock autohide is set to on, false if set to off\r\n\r\n if (!this.dockWrapper) return;\r\n\r\n if (!this.options.useControls){\r\n if($('dockPlacement')){\r\n $('dockPlacement').setStyle('cursor', 'default');\r\n }\r\n if($('dockAutoHide')){\r\n $('dockAutoHide').setStyle('cursor', 'default');\r\n }\r\n }\r\n\r\n this.dockWrapper.setStyles({\r\n 'display': 'block',\r\n 'position': 'absolute',\r\n 'top': null,\r\n 'bottom': MUI.Desktop.desktopFooter ? MUI.Desktop.desktopFooter.offsetHeight : 0,\r\n 'left': 0\r\n });\r\n\r\n if (this.options.useControls){\r\n this.initializeDockControls();\r\n }\r\n\r\n // Add check mark to menu if link exists in menu\r\n if ($('dockLinkCheck')){\r\n this.sidebarCheck = new Element('div', {\r\n 'class': 'check',\r\n 'id': 'dock_check'\r\n }).inject($('dockLinkCheck'));\r\n }\r\n\r\n this.dockSortables = new Sortables('#dockSort', {\r\n opacity: 1,\r\n constrain: true,\r\n clone: false,\r\n revert: false\r\n });\r\n\r\n if (!(MUI.dockVisible)) { this.dockWrapper.hide(); }\r\n MUI.Desktop.setDesktopSize();\r\n\r\n if (MUI.myChain){\r\n MUI.myChain.callChain();\r\n }\r\n\r\n },\r\n\r\n initializeDockControls: function(){\r\n\r\n // Convert CSS colors to Canvas colors.\r\n this.setDockColors();\r\n\r\n if (this.options.useControls){\r\n // Insert canvas\r\n var canvas = new Element('canvas', {\r\n 'id': 'dockCanvas',\r\n 'width': '15',\r\n 'height': '18'\r\n }).inject(this.dock);\r\n\r\n // Dynamically initialize canvas using excanvas. This is only required by IE\r\n if (Browser.Engine.trident && MUI.ieSupport == 'excanvas' && (Browser.version <= 8)){\r\n G_vmlCanvasManager.initElement(canvas);\r\n }\r\n }\r\n\r\n var dockPlacement = $('dockPlacement');\r\n var dockAutoHide = $('dockAutoHide');\r\n\r\n // Position top or bottom selector\r\n dockPlacement.setProperty('title','Position Dock Top');\r\n\r\n // Attach event\r\n dockPlacement.addEvent(MooTools.getTouchOrMouseEvent('click'), function(){\r\n this.moveDock();\r\n }.bind(this));\r\n\r\n // Auto Hide toggle switch\r\n dockAutoHide.setProperty('title','Turn Auto Hide On');\r\n\r\n // Attach event Auto Hide\r\n dockAutoHide.addEvent(MooTools.getTouchOrMouseEvent('click'), function(event){\r\n if ( this.dockWrapper.getProperty('dockPosition') == 'top' )\r\n return false;\r\n\r\n var ctx = $('dockCanvas').getContext('2d');\r\n this.dockAutoHide = !this.dockAutoHide; // Toggle\r\n if (this.dockAutoHide){\r\n $('dockAutoHide').setProperty('title', 'Turn Auto Hide Off');\r\n //ctx.clearRect(0, 11, 100, 100);\r\n MUI.circle(ctx, 5 , 14, 3, this.options.trueButtonColor, 1.0);\r\n\r\n // Define event\r\n this.autoHideEvent = function(event) {\r\n if (!this.dockAutoHide)\r\n return;\r\n if (!MUI.Desktop.desktopFooter) {\r\n var dockHotspotHeight = this.dockWrapper.offsetHeight;\r\n if (dockHotspotHeight < 25) dockHotspotHeight = 25;\r\n }\r\n else if (MUI.Desktop.desktopFooter) {\r\n var dockHotspotHeight = this.dockWrapper.offsetHeight + MUI.Desktop.desktopFooter.offsetHeight;\r\n if (dockHotspotHeight < 25) dockHotspotHeight = 25;\r\n }\r\n if (!MUI.Desktop.desktopFooter && event.client.y > (document.getCoordinates().height - dockHotspotHeight)){\r\n if (!MUI.dockVisible){\r\n this.dockWrapper.show();\r\n MUI.dockVisible = true;\r\n MUI.Desktop.setDesktopSize();\r\n }\r\n }\r\n else if (MUI.Desktop.desktopFooter && event.client.y > (document.getCoordinates().height - dockHotspotHeight)){\r\n if (!MUI.dockVisible){\r\n this.dockWrapper.show();\r\n MUI.dockVisible = true;\r\n MUI.Desktop.setDesktopSize();\r\n }\r\n }\r\n else if (MUI.dockVisible){\r\n this.dockWrapper.hide();\r\n MUI.dockVisible = false;\r\n MUI.Desktop.setDesktopSize();\r\n\r\n }\r\n }.bind(this);\r\n\r\n // Add event\r\n document.addEvent(MooTools.getTouchOrMouseEvent('mousemove'), this.autoHideEvent);\r\n\r\n } else {\r\n $('dockAutoHide').setProperty('title', 'Turn Auto Hide On');\r\n //ctx.clearRect(0, 11, 100, 100);\r\n MUI.circle(ctx, 5 , 14, 3, this.options.enabledButtonColor, 1.0);\r\n // Remove event\r\n document.removeEvent(MooTools.getTouchOrMouseEvent('mousemove'), this.autoHideEvent);\r\n }\r\n\r\n }.bind(this));\r\n\r\n this.renderDockControls();\r\n\r\n if (this.options.dockPosition == 'top'){\r\n this.moveDock();\r\n }\r\n\r\n },\r\n\r\n setDockColors: function(){\r\n var dockButtonEnabled = MUI.getCSSRule('.dockButtonEnabled');\r\n if (dockButtonEnabled && dockButtonEnabled.style.backgroundColor){\r\n this.options.enabledButtonColor = new Color(dockButtonEnabled.style.backgroundColor);\r\n }\r\n\r\n var dockButtonDisabled = MUI.getCSSRule('.dockButtonDisabled');\r\n if (dockButtonDisabled && dockButtonDisabled.style.backgroundColor){\r\n this.options.disabledButtonColor = new Color(dockButtonDisabled.style.backgroundColor);\r\n }\r\n\r\n var trueButtonColor = MUI.getCSSRule('.dockButtonTrue');\r\n if (trueButtonColor && trueButtonColor.style.backgroundColor){\r\n this.options.trueButtonColor = new Color(trueButtonColor.style.backgroundColor);\r\n }\r\n },\r\n\r\n renderDockControls: function(){\r\n // Draw dock controls\r\n var ctx = $('dockCanvas').getContext('2d');\r\n ctx.clearRect(0, 0, 100, 100);\r\n MUI.circle(ctx, 5 , 4, 3, this.options.enabledButtonColor, 1.0);\r\n\r\n if( this.dockWrapper.getProperty('dockPosition') == 'top'){\r\n MUI.circle(ctx, 5 , 14, 3, this.options.disabledButtonColor, 1.0)\r\n }\r\n else if (this.dockAutoHide){\r\n MUI.circle(ctx, 5 , 14, 3, this.options.trueButtonColor, 1.0);\r\n }\r\n else {\r\n MUI.circle(ctx, 5 , 14, 3, this.options.enabledButtonColor, 1.0);\r\n }\r\n },\r\n\r\n moveDock: function(){\r\n var ctx = $('dockCanvas').getContext('2d');\r\n // Move dock to top position\r\n if (this.dockWrapper.getStyle('position') != 'relative'){\r\n this.dockWrapper.setStyles({\r\n 'position': 'relative',\r\n 'bottom': null\r\n });\r\n this.dockWrapper.addClass('top');\r\n MUI.Desktop.setDesktopSize();\r\n this.dockWrapper.setProperty('dockPosition','top');\r\n ctx.clearRect(0, 0, 100, 100);\r\n MUI.circle(ctx, 5, 4, 3, this.options.enabledButtonColor, 1.0);\r\n MUI.circle(ctx, 5, 14, 3, this.options.disabledButtonColor, 1.0);\r\n $('dockPlacement').setProperty('title', 'Position Dock Bottom');\r\n $('dockAutoHide').setProperty('title', 'Auto Hide Disabled in Top Dock Position');\r\n this.dockAutoHide = false;\r\n }\r\n // Move dock to bottom position\r\n else {\r\n this.dockWrapper.setStyles({\r\n 'position': 'absolute',\r\n 'bottom': MUI.Desktop.desktopFooter ? MUI.Desktop.desktopFooter.offsetHeight : 0\r\n });\r\n this.dockWrapper.removeClass('top');\r\n MUI.Desktop.setDesktopSize();\r\n this.dockWrapper.setProperty('dockPosition', 'bottom');\r\n ctx.clearRect(0, 0, 100, 100);\r\n MUI.circle(ctx, 5, 4, 3, this.options.enabledButtonColor, 1.0);\r\n MUI.circle(ctx, 5 , 14, 3, this.options.enabledButtonColor, 1.0);\r\n $('dockPlacement').setProperty('title', 'Position Dock Top');\r\n $('dockAutoHide').setProperty('title', 'Turn Auto Hide On');\r\n }\r\n },\r\n\r\n createDockTab: function(windowEl){\r\n\r\n var instance = windowEl.retrieve('instance');\r\n var titleText = instance.titleEl.title;\r\n\r\n var dockTab = new Element('div', {\r\n 'id': instance.options.id + '_dockTab',\r\n 'class': 'dockTab',\r\n 'title': titleText\r\n }).inject($('dockClear'), 'before');\r\n\r\n dockTab.addEvent(MooTools.getTouchOrMouseEvent('mousedown'), function(e){\r\n new Event(e).stop();\r\n this.timeDown = $time();\r\n });\r\n\r\n dockTab.addEvent(MooTools.getTouchOrMouseEvent('mouseup'), function(e){\r\n this.timeUp = $time();\r\n if ((this.timeUp - this.timeDown) < 275){\r\n // If the visibility of the windows on the page are toggled off, toggle visibility on.\r\n if (MUI.Windows.windowsVisible == false) {\r\n MUI.toggleWindowVisibility();\r\n if (instance.isMinimized == true) {\r\n MUI.Dock.restoreMinimized.delay(25, MUI.Dock, windowEl);\r\n }\r\n else {\r\n MUI.focusWindow(windowEl);\r\n }\r\n return;\r\n }\r\n // If window is minimized, restore window.\r\n if (instance.isMinimized == true) {\r\n MUI.Dock.restoreMinimized.delay(25, MUI.Dock, windowEl);\r\n }\r\n else{\r\n // If window is not minimized and is focused, minimize window.\r\n if (instance.windowEl.hasClass('isFocused') && instance.options.minimizable == true){\r\n MUI.Dock.minimizeWindow(windowEl)\r\n }\r\n // If window is not minimized and is not focused, focus window.\r\n else{\r\n MUI.focusWindow(windowEl);\r\n }\r\n // if the window is not minimized and is outside the viewport, center it in the viewport.\r\n var coordinates = document.getCoordinates();\r\n if (windowEl.getStyle('left').toInt() > coordinates.width || windowEl.getStyle('top').toInt() > coordinates.height){\r\n MUI.centerWindow(windowEl);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.dockSortables.addItems(dockTab);\r\n\r\n var dockTabText = new Element('div', {\r\n 'id': instance.options.id + '_dockTabText',\r\n 'class': 'dockText'\r\n }).set('html', titleText.substring(0,19) + (titleText.length > 19 ? '...' : '')).inject($(dockTab));\r\n\r\n // If I implement this again, will need to also adjust the titleText truncate and the tab's\r\n // left padding.\r\n if (instance.options.icon != false){\r\n // dockTabText.setStyle('background', 'url(' + instance.options.icon + ') 4px 4px no-repeat');\r\n }\r\n\r\n // Need to resize everything in case the dock wraps when a new tab is added\r\n MUI.Desktop.setDesktopSize();\r\n\r\n },\r\n\r\n makeActiveTab: function(){\r\n\r\n // getWindowWith HighestZindex is used in case the currently focused window\r\n // is closed.\r\n var windowEl = MUI.getWindowWithHighestZindex();\r\n var instance = windowEl.retrieve('instance');\r\n\r\n $$('.dockTab').removeClass('activeDockTab');\r\n if (instance.isMinimized != true) {\r\n\r\n instance.windowEl.addClass('isFocused');\r\n\r\n var currentButton = $(instance.options.id + '_dockTab');\r\n if (currentButton != null) {\r\n currentButton.addClass('activeDockTab');\r\n }\r\n }\r\n else {\r\n instance.windowEl.removeClass('isFocused');\r\n instance.fireEvent('onBlur', instance.windowEl);\r\n }\r\n },\r\n\r\n minimizeWindow: function(windowEl){\r\n if (windowEl != $(windowEl)) return;\r\n\r\n var instance = windowEl.retrieve('instance');\r\n instance.isMinimized = true;\r\n\r\n // Hide iframe\r\n // Iframe should be hidden when minimizing, maximizing, and moving for performance and Flash issues\r\n if ( instance.iframeEl ) {\r\n // Some elements are still visible in IE8 in the iframe when the iframe's visibility is set to hidden.\r\n if (!Browser.Engine.trident) {\r\n instance.iframeEl.setStyle('visibility', 'hidden');\r\n }\r\n else {\r\n instance.iframeEl.hide();\r\n }\r\n }\r\n\r\n // Hide window and add to dock\r\n instance.contentBorderEl.setStyle('visibility', 'hidden');\r\n instance.contentBorderEl.setStyle('display', 'none');\r\n if(instance.toolbarWrapperEl){\r\n instance.toolbarWrapperEl.hide();\r\n }\r\n windowEl.setStyle('visibility', 'hidden');\r\n\r\n // Fixes a scrollbar issue in Mac FF2\r\n if (Browser.Platform.mac && Browser.Engine.gecko){\r\n if (/Firefox[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent)){\r\n var ffversion = new Number(RegExp.$1);\r\n if (ffversion < 3) {\r\n instance.contentWrapperEl.setStyle('overflow', 'hidden');\r\n }\r\n }\r\n }\r\n\r\n MUI.Desktop.setDesktopSize();\r\n\r\n // Have to use timeout because window gets focused when you click on the minimize button\r\n setTimeout(function(){\r\n windowEl.setStyle('zIndex', 1);\r\n windowEl.removeClass('isFocused');\r\n instance.fireEvent('onBlur', windowEl);\r\n this.makeActiveTab();\r\n }.bind(this),100);\r\n\r\n instance.fireEvent('onMinimize', windowEl);\r\n },\r\n\r\n restoreMinimized: function(windowEl) {\r\n\r\n var instance = windowEl.retrieve('instance');\r\n if (!instance) return;\r\n if (instance.isMinimized == false) return;\r\n\r\n if (MUI.Windows.windowsVisible == false){\r\n MUI.toggleWindowVisibility();\r\n }\r\n\r\n MUI.Desktop.setDesktopSize();\r\n\r\n // Part of Mac FF2 scrollbar fix\r\n if (instance.options.scrollbars == true && !instance.iframeEl){\r\n instance.contentWrapperEl.setStyle('overflow', 'auto');\r\n }\r\n\r\n if (instance.isCollapsed) {\r\n MUI.collapseToggle(windowEl);\r\n }\r\n\r\n windowEl.setStyle('visibility', 'visible');\r\n instance.contentBorderEl.setStyle('visibility', 'visible');\r\n instance.contentBorderEl.setStyle('display', 'block');\r\n if(instance.toolbarWrapperEl){\r\n instance.toolbarWrapperEl.show();\r\n }\r\n\r\n // Show iframe\r\n if (instance.iframeEl){\r\n if (!Browser.Engine.trident){\r\n instance.iframeEl.setStyle('visibility', 'visible');\r\n }\r\n else {\r\n instance.iframeEl.show();\r\n }\r\n }\r\n\r\n instance.isMinimized = false;\r\n MUI.focusWindow(windowEl);\r\n instance.fireEvent('onRestore', windowEl);\r\n\r\n },\r\n\r\n toggle: function(){\r\n if (!MochaUI.dockVisible){\r\n this.dockWrapper.show();\r\n MUI.dockVisible = true;\r\n MUI.Desktop.setDesktopSize();\r\n }\r\n else {\r\n this.dockWrapper.hide();\r\n MUI.dockVisible = false;\r\n MUI.Desktop.setDesktopSize();\r\n }\r\n }\r\n};\r\n \r\n","// Copyright 2006 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n\n// Known Issues:\n//\n// * Patterns only support repeat.\n// * Radial gradient are not implemented. The VML version of these look very\n// different from the canvas one.\n// * Clipping paths are not implemented.\n// * Coordsize. The width and height attribute have higher priority than the\n// width and height style values which isn't correct.\n// * Painting mode isn't implemented.\n// * Canvas width/height should is using content-box by default. IE in\n// Quirks mode will draw the canvas using border-box. Either change your\n// doctype to HTML5\n// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)\n// or use Box Sizing Behavior from WebFX\n// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)\n// * Non uniform scaling does not correctly scale strokes.\n// * Optimize. There is always room for speed improvements.\n\n// Only add this code if we do not already have a canvas implementation\nif (!document.createElement('canvas').getContext) {\n\n(function() {\n\n // alias some functions to make (compiled) code shorter\n var m = Math;\n var mr = m.round;\n var ms = m.sin;\n var mc = m.cos;\n var abs = m.abs;\n var sqrt = m.sqrt;\n\n // this is used for sub pixel precision\n var Z = 10;\n var Z2 = Z / 2;\n\n var IE_VERSION = +navigator.userAgent.match(/MSIE ([\\d.]+)?/)[1];\n\n /**\n * This funtion is assigned to the elements as element.getContext().\n * @this {HTMLElement}\n * @return {CanvasRenderingContext2D_}\n */\n function getContext() {\n return this.context_ ||\n (this.context_ = new CanvasRenderingContext2D_(this));\n }\n\n var slice = Array.prototype.slice;\n\n /**\n * Binds a function to an object. The returned function will always use the\n * passed in {@code obj} as {@code this}.\n *\n * Example:\n *\n * g = bind(f, obj, a, b)\n * g(c, d) // will do f.call(obj, a, b, c, d)\n *\n * @param {Function} f The function to bind the object to\n * @param {Object} obj The object that should act as this when the function\n * is called\n * @param {*} var_args Rest arguments that will be used as the initial\n * arguments when the function is called\n * @return {Function} A new function that has bound this\n */\n function bind(f, obj, var_args) {\n var a = slice.call(arguments, 2);\n return function() {\n return f.apply(obj, a.concat(slice.call(arguments)));\n };\n }\n\n function encodeHtmlAttribute(s) {\n return String(s).replace(/&/g, '&').replace(/\"/g, '"');\n }\n\n function addNamespace(doc, prefix, urn) {\n if (!doc.namespaces[prefix]) {\n doc.namespaces.add(prefix, urn, '#default#VML');\n }\n }\n\n function addNamespacesAndStylesheet(doc) {\n addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');\n addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');\n\n // Setup default CSS. Only add one style sheet per document\n if (!doc.styleSheets['ex_canvas_']) {\n var ss = doc.createStyleSheet();\n ss.owningElement.id = 'ex_canvas_';\n ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +\n // default size is 300x150 in Gecko and Opera\n 'text-align:left;width:300px;height:150px}';\n }\n }\n\n // Add namespaces and stylesheet at startup.\n addNamespacesAndStylesheet(document);\n\n var G_vmlCanvasManager_ = {\n init: function(opt_doc) {\n var doc = opt_doc || document;\n // Create a dummy element so that IE will allow canvas elements to be\n // recognized.\n doc.createElement('canvas');\n doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));\n },\n\n init_: function(doc) {\n // find all canvas elements\n var els = doc.getElementsByTagName('canvas');\n for (var i = 0; i < els.length; i++) {\n this.initElement(els[i]);\n }\n },\n\n /**\n * Public initializes a canvas element so that it can be used as canvas\n * element from now on. This is called automatically before the page is\n * loaded but if you are creating elements using createElement you need to\n * make sure this is called on the element.\n * @param {HTMLElement} el The canvas element to initialize.\n * @return {HTMLElement} the element that was created.\n */\n initElement: function(el) {\n if (!el.getContext) {\n el.getContext = getContext;\n\n // Add namespaces and stylesheet to document of the element.\n addNamespacesAndStylesheet(el.ownerDocument);\n\n // Remove fallback content. There is no way to hide text nodes so we\n // just remove all childNodes. We could hide all elements and remove\n // text nodes but who really cares about the fallback content.\n el.innerHTML = '';\n\n // do not use inline function because that will leak memory\n el.attachEvent('onpropertychange', onPropertyChange);\n el.attachEvent('onresize', onResize);\n\n var attrs = el.attributes;\n if (attrs.width && attrs.width.specified) {\n // TODO: use runtimeStyle and coordsize\n // el.getContext().setWidth_(attrs.width.nodeValue);\n el.style.width = attrs.width.nodeValue + 'px';\n } else {\n el.width = el.clientWidth;\n }\n if (attrs.height && attrs.height.specified) {\n // TODO: use runtimeStyle and coordsize\n // el.getContext().setHeight_(attrs.height.nodeValue);\n el.style.height = attrs.height.nodeValue + 'px';\n } else {\n el.height = el.clientHeight;\n }\n //el.getContext().setCoordsize_()\n }\n return el;\n }\n };\n\n function onPropertyChange(e) {\n var el = e.srcElement;\n\n switch (e.propertyName) {\n case 'width':\n el.getContext().clearRect();\n el.style.width = el.attributes.width.nodeValue + 'px';\n // In IE8 this does not trigger onresize.\n el.firstChild.style.width = el.clientWidth + 'px';\n break;\n case 'height':\n el.getContext().clearRect();\n el.style.height = el.attributes.height.nodeValue + 'px';\n el.firstChild.style.height = el.clientHeight + 'px';\n break;\n }\n }\n\n function onResize(e) {\n var el = e.srcElement;\n if (el.firstChild) {\n el.firstChild.style.width = el.clientWidth + 'px';\n el.firstChild.style.height = el.clientHeight + 'px';\n }\n }\n\n G_vmlCanvasManager_.init();\n\n // precompute \"00\" to \"FF\"\n var decToHex = [];\n for (var i = 0; i < 16; i++) {\n for (var j = 0; j < 16; j++) {\n decToHex[i * 16 + j] = i.toString(16) + j.toString(16);\n }\n }\n\n function createMatrixIdentity() {\n return [\n [1, 0, 0],\n [0, 1, 0],\n [0, 0, 1]\n ];\n }\n\n function matrixMultiply(m1, m2) {\n var result = createMatrixIdentity();\n\n for (var x = 0; x < 3; x++) {\n for (var y = 0; y < 3; y++) {\n var sum = 0;\n\n for (var z = 0; z < 3; z++) {\n sum += m1[x][z] * m2[z][y];\n }\n\n result[x][y] = sum;\n }\n }\n return result;\n }\n\n function copyState(o1, o2) {\n o2.fillStyle = o1.fillStyle;\n o2.lineCap = o1.lineCap;\n o2.lineJoin = o1.lineJoin;\n o2.lineWidth = o1.lineWidth;\n o2.miterLimit = o1.miterLimit;\n o2.shadowBlur = o1.shadowBlur;\n o2.shadowColor = o1.shadowColor;\n o2.shadowOffsetX = o1.shadowOffsetX;\n o2.shadowOffsetY = o1.shadowOffsetY;\n o2.strokeStyle = o1.strokeStyle;\n o2.globalAlpha = o1.globalAlpha;\n o2.font = o1.font;\n o2.textAlign = o1.textAlign;\n o2.textBaseline = o1.textBaseline;\n o2.arcScaleX_ = o1.arcScaleX_;\n o2.arcScaleY_ = o1.arcScaleY_;\n o2.lineScale_ = o1.lineScale_;\n }\n\n var colorData = {\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000000',\n blanchedalmond: '#FFEBCD',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#00FFFF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgreen: '#006400',\n darkgrey: '#A9A9A9',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n grey: '#808080',\n greenyellow: '#ADFF2F',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgreen: '#90EE90',\n lightgrey: '#D3D3D3',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#FF00FF',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n oldlace: '#FDF5E6',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n whitesmoke: '#F5F5F5',\n yellowgreen: '#9ACD32'\n };\n\n\n function getRgbHslContent(styleString) {\n var start = styleString.indexOf('(', 3);\n var end = styleString.indexOf(')', start + 1);\n var parts = styleString.substring(start + 1, end).split(',');\n // add alpha if needed\n if (parts.length != 4 || styleString.charAt(3) != 'a') {\n parts[3] = 1;\n }\n return parts;\n }\n\n function percent(s) {\n return parseFloat(s) / 100;\n }\n\n function clamp(v, min, max) {\n return Math.min(max, Math.max(min, v));\n }\n\n function hslToRgb(parts){\n var r, g, b, h, s, l;\n h = parseFloat(parts[0]) / 360 % 360;\n if (h < 0)\n h++;\n s = clamp(percent(parts[1]), 0, 1);\n l = clamp(percent(parts[2]), 0, 1);\n if (s == 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hueToRgb(p, q, h + 1 / 3);\n g = hueToRgb(p, q, h);\n b = hueToRgb(p, q, h - 1 / 3);\n }\n\n return '#' + decToHex[Math.floor(r * 255)] +\n decToHex[Math.floor(g * 255)] +\n decToHex[Math.floor(b * 255)];\n }\n\n function hueToRgb(m1, m2, h) {\n if (h < 0)\n h++;\n if (h > 1)\n h--;\n\n if (6 * h < 1)\n return m1 + (m2 - m1) * 6 * h;\n else if (2 * h < 1)\n return m2;\n else if (3 * h < 2)\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n else\n return m1;\n }\n\n var processStyleCache = {};\n\n function processStyle(styleString) {\n if (styleString in processStyleCache) {\n return processStyleCache[styleString];\n }\n\n var str, alpha = 1;\n\n styleString = String(styleString);\n if (styleString.charAt(0) == '#') {\n str = styleString;\n } else if (/^rgb/.test(styleString)) {\n var parts = getRgbHslContent(styleString);\n var str = '#', n;\n for (var i = 0; i < 3; i++) {\n if (parts[i].indexOf('%') != -1) {\n n = Math.floor(percent(parts[i]) * 255);\n } else {\n n = +parts[i];\n }\n str += decToHex[clamp(n, 0, 255)];\n }\n alpha = +parts[3];\n } else if (/^hsl/.test(styleString)) {\n var parts = getRgbHslContent(styleString);\n str = hslToRgb(parts);\n alpha = parts[3];\n } else {\n str = colorData[styleString] || styleString;\n }\n return processStyleCache[styleString] = {color: str, alpha: alpha};\n }\n\n var DEFAULT_STYLE = {\n style: 'normal',\n variant: 'normal',\n weight: 'normal',\n size: 10,\n family: 'sans-serif'\n };\n\n // Internal text style cache\n var fontStyleCache = {};\n\n function processFontStyle(styleString) {\n if (fontStyleCache[styleString]) {\n return fontStyleCache[styleString];\n }\n\n var el = document.createElement('div');\n var style = el.style;\n try {\n style.font = styleString;\n } catch (ex) {\n // Ignore failures to set to invalid font.\n }\n\n return fontStyleCache[styleString] = {\n style: style.fontStyle || DEFAULT_STYLE.style,\n variant: style.fontVariant || DEFAULT_STYLE.variant,\n weight: style.fontWeight || DEFAULT_STYLE.weight,\n size: style.fontSize || DEFAULT_STYLE.size,\n family: style.fontFamily || DEFAULT_STYLE.family\n };\n }\n\n function getComputedStyle(style, element) {\n var computedStyle = {};\n\n for (var p in style) {\n computedStyle[p] = style[p];\n }\n\n // Compute the size\n var canvasFontSize = parseFloat(element.currentStyle.fontSize),\n fontSize = parseFloat(style.size);\n\n if (typeof style.size == 'number') {\n computedStyle.size = style.size;\n } else if (style.size.indexOf('px') != -1) {\n computedStyle.size = fontSize;\n } else if (style.size.indexOf('em') != -1) {\n computedStyle.size = canvasFontSize * fontSize;\n } else if(style.size.indexOf('%') != -1) {\n computedStyle.size = (canvasFontSize / 100) * fontSize;\n } else if (style.size.indexOf('pt') != -1) {\n computedStyle.size = fontSize / .75;\n } else {\n computedStyle.size = canvasFontSize;\n }\n\n // Different scaling between normal text and VML text. This was found using\n // trial and error to get the same size as non VML text.\n computedStyle.size *= 0.981;\n\n return computedStyle;\n }\n\n function buildStyle(style) {\n return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +\n style.size + 'px ' + style.family;\n }\n\n var lineCapMap = {\n 'butt': 'flat',\n 'round': 'round'\n };\n\n function processLineCap(lineCap) {\n return lineCapMap[lineCap] || 'square';\n }\n\n /**\n * This class implements CanvasRenderingContext2D interface as described by\n * the WHATWG.\n * @param {HTMLElement} canvasElement The element that the 2D context should\n * be associated with\n */\n function CanvasRenderingContext2D_(canvasElement) {\n this.m_ = createMatrixIdentity();\n\n this.mStack_ = [];\n this.aStack_ = [];\n this.currentPath_ = [];\n\n // Canvas context properties\n this.strokeStyle = '#000';\n this.fillStyle = '#000';\n\n this.lineWidth = 1;\n this.lineJoin = 'miter';\n this.lineCap = 'butt';\n this.miterLimit = Z * 1;\n this.globalAlpha = 1;\n this.font = '10px sans-serif';\n this.textAlign = 'left';\n this.textBaseline = 'alphabetic';\n this.canvas = canvasElement;\n\n var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' +\n canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';\n var el = canvasElement.ownerDocument.createElement('div');\n el.style.cssText = cssText;\n canvasElement.appendChild(el);\n\n var overlayEl = el.cloneNode(false);\n // Use a non transparent background.\n //overlayEl.style.backgroundColor = 'red';\n overlayEl.style.filter = 'alpha(opacity=0)';\n canvasElement.appendChild(overlayEl);\n\n this.element_ = el;\n this.arcScaleX_ = 1;\n this.arcScaleY_ = 1;\n this.lineScale_ = 1;\n }\n\n var contextPrototype = CanvasRenderingContext2D_.prototype;\n contextPrototype.clearRect = function() {\n if (this.textMeasureEl_) {\n this.textMeasureEl_.removeNode(true);\n this.textMeasureEl_ = null;\n }\n this.element_.innerHTML = '';\n };\n\n contextPrototype.beginPath = function() {\n // TODO: Branch current matrix so that save/restore has no effect\n // as per safari docs.\n this.currentPath_ = [];\n };\n\n contextPrototype.moveTo = function(aX, aY) {\n var p = getCoords(this, aX, aY);\n this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});\n this.currentX_ = p.x;\n this.currentY_ = p.y;\n };\n\n contextPrototype.lineTo = function(aX, aY) {\n var p = getCoords(this, aX, aY);\n this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});\n\n this.currentX_ = p.x;\n this.currentY_ = p.y;\n };\n\n contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,\n aCP2x, aCP2y,\n aX, aY) {\n var p = getCoords(this, aX, aY);\n var cp1 = getCoords(this, aCP1x, aCP1y);\n var cp2 = getCoords(this, aCP2x, aCP2y);\n bezierCurveTo(this, cp1, cp2, p);\n };\n\n // Helper function that takes the already fixed cordinates.\n function bezierCurveTo(self, cp1, cp2, p) {\n self.currentPath_.push({\n type: 'bezierCurveTo',\n cp1x: cp1.x,\n cp1y: cp1.y,\n cp2x: cp2.x,\n cp2y: cp2.y,\n x: p.x,\n y: p.y\n });\n self.currentX_ = p.x;\n self.currentY_ = p.y;\n }\n\n contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {\n // the following is lifted almost directly from\n // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes\n\n var cp = getCoords(this, aCPx, aCPy);\n var p = getCoords(this, aX, aY);\n\n var cp1 = {\n x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),\n y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)\n };\n var cp2 = {\n x: cp1.x + (p.x - this.currentX_) / 3.0,\n y: cp1.y + (p.y - this.currentY_) / 3.0\n };\n\n bezierCurveTo(this, cp1, cp2, p);\n };\n\n contextPrototype.arc = function(aX, aY, aRadius,\n aStartAngle, aEndAngle, aClockwise) {\n aRadius *= Z;\n var arcType = aClockwise ? 'at' : 'wa';\n\n var xStart = aX + mc(aStartAngle) * aRadius - Z2;\n var yStart = aY + ms(aStartAngle) * aRadius - Z2;\n\n var xEnd = aX + mc(aEndAngle) * aRadius - Z2;\n var yEnd = aY + ms(aEndAngle) * aRadius - Z2;\n\n // IE won't render arches drawn counter clockwise if xStart == xEnd.\n if (xStart == xEnd && !aClockwise) {\n xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something\n // that can be represented in binary\n }\n\n var p = getCoords(this, aX, aY);\n var pStart = getCoords(this, xStart, yStart);\n var pEnd = getCoords(this, xEnd, yEnd);\n\n this.currentPath_.push({type: arcType,\n x: p.x,\n y: p.y,\n radius: aRadius,\n xStart: pStart.x,\n yStart: pStart.y,\n xEnd: pEnd.x,\n yEnd: pEnd.y});\n\n };\n\n contextPrototype.rect = function(aX, aY, aWidth, aHeight) {\n this.moveTo(aX, aY);\n this.lineTo(aX + aWidth, aY);\n this.lineTo(aX + aWidth, aY + aHeight);\n this.lineTo(aX, aY + aHeight);\n this.closePath();\n };\n\n contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {\n var oldPath = this.currentPath_;\n this.beginPath();\n\n this.moveTo(aX, aY);\n this.lineTo(aX + aWidth, aY);\n this.lineTo(aX + aWidth, aY + aHeight);\n this.lineTo(aX, aY + aHeight);\n this.closePath();\n this.stroke();\n\n this.currentPath_ = oldPath;\n };\n\n contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {\n var oldPath = this.currentPath_;\n this.beginPath();\n\n this.moveTo(aX, aY);\n this.lineTo(aX + aWidth, aY);\n this.lineTo(aX + aWidth, aY + aHeight);\n this.lineTo(aX, aY + aHeight);\n this.closePath();\n this.fill();\n\n this.currentPath_ = oldPath;\n };\n\n contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {\n var gradient = new CanvasGradient_('gradient');\n gradient.x0_ = aX0;\n gradient.y0_ = aY0;\n gradient.x1_ = aX1;\n gradient.y1_ = aY1;\n return gradient;\n };\n\n contextPrototype.createRadialGradient = function(aX0, aY0, aR0,\n aX1, aY1, aR1) {\n var gradient = new CanvasGradient_('gradientradial');\n gradient.x0_ = aX0;\n gradient.y0_ = aY0;\n gradient.r0_ = aR0;\n gradient.x1_ = aX1;\n gradient.y1_ = aY1;\n gradient.r1_ = aR1;\n return gradient;\n };\n\n contextPrototype.drawImage = function(image, var_args) {\n var dx, dy, dw, dh, sx, sy, sw, sh;\n\n // to find the original width we overide the width and height\n var oldRuntimeWidth = image.runtimeStyle.width;\n var oldRuntimeHeight = image.runtimeStyle.height;\n image.runtimeStyle.width = 'auto';\n image.runtimeStyle.height = 'auto';\n\n // get the original size\n var w = image.width;\n var h = image.height;\n\n // and remove overides\n image.runtimeStyle.width = oldRuntimeWidth;\n image.runtimeStyle.height = oldRuntimeHeight;\n\n if (arguments.length == 3) {\n dx = arguments[1];\n dy = arguments[2];\n sx = sy = 0;\n sw = dw = w;\n sh = dh = h;\n } else if (arguments.length == 5) {\n dx = arguments[1];\n dy = arguments[2];\n dw = arguments[3];\n dh = arguments[4];\n sx = sy = 0;\n sw = w;\n sh = h;\n } else if (arguments.length == 9) {\n sx = arguments[1];\n sy = arguments[2];\n sw = arguments[3];\n sh = arguments[4];\n dx = arguments[5];\n dy = arguments[6];\n dw = arguments[7];\n dh = arguments[8];\n } else {\n throw Error('Invalid number of arguments');\n }\n\n var d = getCoords(this, dx, dy);\n\n var w2 = sw / 2;\n var h2 = sh / 2;\n\n var vmlStr = [];\n\n var W = 10;\n var H = 10;\n\n // For some reason that I've now forgotten, using divs didn't work\n vmlStr.push(' ' ,\n '',\n '');\n\n this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));\n };\n\n contextPrototype.stroke = function(aFill) {\n var lineStr = [];\n var lineOpen = false;\n\n var W = 10;\n var H = 10;\n\n lineStr.push(' max.x) {\n max.x = p.x;\n }\n if (min.y == null || p.y < min.y) {\n min.y = p.y;\n }\n if (max.y == null || p.y > max.y) {\n max.y = p.y;\n }\n }\n }\n lineStr.push(' \">');\n\n if (!aFill) {\n appendStroke(this, lineStr);\n } else {\n appendFill(this, lineStr, min, max);\n }\n\n lineStr.push('');\n\n this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n };\n\n function appendStroke(ctx, lineStr) {\n var a = processStyle(ctx.strokeStyle);\n var color = a.color;\n var opacity = a.alpha * ctx.globalAlpha;\n var lineWidth = ctx.lineScale_ * ctx.lineWidth;\n\n // VML cannot correctly render a line if the width is less than 1px.\n // In that case, we dilute the color to make the line look thinner.\n if (lineWidth < 1) {\n opacity *= lineWidth;\n }\n\n lineStr.push(\n ''\n );\n }\n\n function appendFill(ctx, lineStr, min, max) {\n var fillStyle = ctx.fillStyle;\n var arcScaleX = ctx.arcScaleX_;\n var arcScaleY = ctx.arcScaleY_;\n var width = max.x - min.x;\n var height = max.y - min.y;\n if (fillStyle instanceof CanvasGradient_) {\n // TODO: Gradients transformed with the transformation matrix.\n var angle = 0;\n var focus = {x: 0, y: 0};\n\n // additional offset\n var shift = 0;\n // scale factor for offset\n var expansion = 1;\n\n if (fillStyle.type_ == 'gradient') {\n var x0 = fillStyle.x0_ / arcScaleX;\n var y0 = fillStyle.y0_ / arcScaleY;\n var x1 = fillStyle.x1_ / arcScaleX;\n var y1 = fillStyle.y1_ / arcScaleY;\n var p0 = getCoords(ctx, x0, y0);\n var p1 = getCoords(ctx, x1, y1);\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n angle = Math.atan2(dx, dy) * 180 / Math.PI;\n\n // The angle should be a non-negative number.\n if (angle < 0) {\n angle += 360;\n }\n\n // Very small angles produce an unexpected result because they are\n // converted to a scientific notation string.\n if (angle < 1e-6) {\n angle = 0;\n }\n } else {\n var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);\n focus = {\n x: (p0.x - min.x) / width,\n y: (p0.y - min.y) / height\n };\n\n width /= arcScaleX * Z;\n height /= arcScaleY * Z;\n var dimension = m.max(width, height);\n shift = 2 * fillStyle.r0_ / dimension;\n expansion = 2 * fillStyle.r1_ / dimension - shift;\n }\n\n // We need to sort the color stops in ascending order by offset,\n // otherwise IE won't interpret it correctly.\n var stops = fillStyle.colors_;\n stops.sort(function(cs1, cs2) {\n return cs1.offset - cs2.offset;\n });\n\n var length = stops.length;\n var color1 = stops[0].color;\n var color2 = stops[length - 1].color;\n var opacity1 = stops[0].alpha * ctx.globalAlpha;\n var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;\n\n var colors = [];\n for (var i = 0; i < length; i++) {\n var stop = stops[i];\n colors.push(stop.offset * expansion + shift + ' ' + stop.color);\n }\n\n // When colors attribute is used, the meanings of opacity and o:opacity2\n // are reversed.\n lineStr.push('');\n } else if (fillStyle instanceof CanvasPattern_) {\n if (width && height) {\n var deltaLeft = -min.x;\n var deltaTop = -min.y;\n lineStr.push('');\n }\n } else {\n var a = processStyle(ctx.fillStyle);\n var color = a.color;\n var opacity = a.alpha * ctx.globalAlpha;\n lineStr.push('');\n }\n }\n\n contextPrototype.fill = function() {\n this.stroke(true);\n };\n\n contextPrototype.closePath = function() {\n this.currentPath_.push({type: 'close'});\n };\n\n function getCoords(ctx, aX, aY) {\n var m = ctx.m_;\n return {\n x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,\n y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2\n };\n };\n\n contextPrototype.save = function() {\n var o = {};\n copyState(this, o);\n this.aStack_.push(o);\n this.mStack_.push(this.m_);\n this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);\n };\n\n contextPrototype.restore = function() {\n if (this.aStack_.length) {\n copyState(this.aStack_.pop(), this);\n this.m_ = this.mStack_.pop();\n }\n };\n\n function matrixIsFinite(m) {\n return isFinite(m[0][0]) && isFinite(m[0][1]) &&\n isFinite(m[1][0]) && isFinite(m[1][1]) &&\n isFinite(m[2][0]) && isFinite(m[2][1]);\n }\n\n function setM(ctx, m, updateLineScale) {\n if (!matrixIsFinite(m)) {\n return;\n }\n ctx.m_ = m;\n\n if (updateLineScale) {\n // Get the line scale.\n // Determinant of this.m_ means how much the area is enlarged by the\n // transformation. So its square root can be used as a scale factor\n // for width.\n var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];\n ctx.lineScale_ = sqrt(abs(det));\n }\n }\n\n contextPrototype.translate = function(aX, aY) {\n var m1 = [\n [1, 0, 0],\n [0, 1, 0],\n [aX, aY, 1]\n ];\n\n setM(this, matrixMultiply(m1, this.m_), false);\n };\n\n contextPrototype.rotate = function(aRot) {\n var c = mc(aRot);\n var s = ms(aRot);\n\n var m1 = [\n [c, s, 0],\n [-s, c, 0],\n [0, 0, 1]\n ];\n\n setM(this, matrixMultiply(m1, this.m_), false);\n };\n\n contextPrototype.scale = function(aX, aY) {\n this.arcScaleX_ *= aX;\n this.arcScaleY_ *= aY;\n var m1 = [\n [aX, 0, 0],\n [0, aY, 0],\n [0, 0, 1]\n ];\n\n setM(this, matrixMultiply(m1, this.m_), true);\n };\n\n contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {\n var m1 = [\n [m11, m12, 0],\n [m21, m22, 0],\n [dx, dy, 1]\n ];\n\n setM(this, matrixMultiply(m1, this.m_), true);\n };\n\n contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {\n var m = [\n [m11, m12, 0],\n [m21, m22, 0],\n [dx, dy, 1]\n ];\n\n setM(this, m, true);\n };\n\n /**\n * The text drawing function.\n * The maxWidth argument isn't taken in account, since no browser supports\n * it yet.\n */\n contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {\n var m = this.m_,\n delta = 1000,\n left = 0,\n right = delta,\n offset = {x: 0, y: 0},\n lineStr = [];\n\n var fontStyle = getComputedStyle(processFontStyle(this.font),\n this.element_);\n\n var fontStyleString = buildStyle(fontStyle);\n\n var elementStyle = this.element_.currentStyle;\n var textAlign = this.textAlign.toLowerCase();\n switch (textAlign) {\n case 'left':\n case 'center':\n case 'right':\n break;\n case 'end':\n textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';\n break;\n case 'start':\n textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';\n break;\n default:\n textAlign = 'left';\n }\n\n // 1.75 is an arbitrary number, as there is no info about the text baseline\n switch (this.textBaseline) {\n case 'hanging':\n case 'top':\n offset.y = fontStyle.size / 1.75;\n break;\n case 'middle':\n break;\n default:\n case null:\n case 'alphabetic':\n case 'ideographic':\n case 'bottom':\n offset.y = -fontStyle.size / 2.25;\n break;\n }\n\n switch(textAlign) {\n case 'right':\n left = delta;\n right = 0.05;\n break;\n case 'center':\n left = right = delta / 2;\n break;\n }\n\n var d = getCoords(this, x + offset.x, y + offset.y);\n\n lineStr.push('');\n\n if (stroke) {\n appendStroke(this, lineStr);\n } else {\n // TODO: Fix the min and max params.\n appendFill(this, lineStr, {x: -left, y: 0},\n {x: right, y: fontStyle.size});\n }\n\n var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +\n m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';\n\n var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);\n\n lineStr.push('',\n '',\n '');\n\n this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n };\n\n contextPrototype.fillText = function(text, x, y, maxWidth) {\n this.drawText_(text, x, y, maxWidth, false);\n };\n\n contextPrototype.strokeText = function(text, x, y, maxWidth) {\n this.drawText_(text, x, y, maxWidth, true);\n };\n\n contextPrototype.measureText = function(text) {\n if (!this.textMeasureEl_) {\n var s = '';\n this.element_.insertAdjacentHTML('beforeEnd', s);\n this.textMeasureEl_ = this.element_.lastChild;\n }\n var doc = this.element_.ownerDocument;\n this.textMeasureEl_.innerHTML = '';\n this.textMeasureEl_.style.font = this.font;\n // Don't use innerHTML or innerText because they allow markup/whitespace.\n this.textMeasureEl_.appendChild(doc.createTextNode(text));\n return {width: this.textMeasureEl_.offsetWidth};\n };\n\n /******** STUBS ********/\n contextPrototype.clip = function() {\n // TODO: Implement\n };\n\n contextPrototype.arcTo = function() {\n // TODO: Implement\n };\n\n contextPrototype.createPattern = function(image, repetition) {\n return new CanvasPattern_(image, repetition);\n };\n\n // Gradient / Pattern Stubs\n function CanvasGradient_(aType) {\n this.type_ = aType;\n this.x0_ = 0;\n this.y0_ = 0;\n this.r0_ = 0;\n this.x1_ = 0;\n this.y1_ = 0;\n this.r1_ = 0;\n this.colors_ = [];\n }\n\n CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {\n aColor = processStyle(aColor);\n this.colors_.push({offset: aOffset,\n color: aColor.color,\n alpha: aColor.alpha});\n };\n\n function CanvasPattern_(image, repetition) {\n assertImageIsValid(image);\n switch (repetition) {\n case 'repeat':\n case null:\n case '':\n this.repetition_ = 'repeat';\n break\n case 'repeat-x':\n case 'repeat-y':\n case 'no-repeat':\n this.repetition_ = repetition;\n break;\n default:\n throwException('SYNTAX_ERR');\n }\n\n this.src_ = image.src;\n this.width_ = image.width;\n this.height_ = image.height;\n }\n\n function throwException(s) {\n throw new DOMException_(s);\n }\n\n function assertImageIsValid(img) {\n if (!img || img.nodeType != 1 || img.tagName != 'IMG') {\n throwException('TYPE_MISMATCH_ERR');\n }\n if (img.readyState != 'complete') {\n throwException('INVALID_STATE_ERR');\n }\n }\n\n function DOMException_(s) {\n this.code = this[s];\n this.message = s +': DOM Exception ' + this.code;\n }\n var p = DOMException_.prototype = new Error;\n p.INDEX_SIZE_ERR = 1;\n p.DOMSTRING_SIZE_ERR = 2;\n p.HIERARCHY_REQUEST_ERR = 3;\n p.WRONG_DOCUMENT_ERR = 4;\n p.INVALID_CHARACTER_ERR = 5;\n p.NO_DATA_ALLOWED_ERR = 6;\n p.NO_MODIFICATION_ALLOWED_ERR = 7;\n p.NOT_FOUND_ERR = 8;\n p.NOT_SUPPORTED_ERR = 9;\n p.INUSE_ATTRIBUTE_ERR = 10;\n p.INVALID_STATE_ERR = 11;\n p.SYNTAX_ERR = 12;\n p.INVALID_MODIFICATION_ERR = 13;\n p.NAMESPACE_ERR = 14;\n p.INVALID_ACCESS_ERR = 15;\n p.VALIDATION_ERR = 16;\n p.TYPE_MISMATCH_ERR = 17;\n\n // set up externs\n G_vmlCanvasManager = G_vmlCanvasManager_;\n CanvasRenderingContext2D = CanvasRenderingContext2D_;\n CanvasGradient = CanvasGradient_;\n CanvasPattern = CanvasPattern_;\n DOMException = DOMException_;\n})();\n\n} // if\n"]}