%PDF-1.7 GIF89;
Server IP : 5.161.254.237 / Your IP : 216.73.216.93 Web Server : Apache System : Linux diamond.sialwebvps.com 4.18.0-553.8.1.el8_10.x86_64 #1 SMP Tue Jul 2 07:26:33 EDT 2024 x86_64 User : stellasp ( 1131) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/stellasp/public_html/frontend/magiczoom/ |
Upload File : |
/* Magic Zoom v5.1.10 DEMO Copyright 2016 Magic Toolbox Buy a license: https://www.magictoolbox.com/magiczoom/ License agreement: https://www.magictoolbox.com/license/ */ window.MagicZoom = (function() { var w, y; w = y = (function() { var S = { version: "v3.3-b3-10-g8c8a487", UUID: 0, storage: {}, $uuid: function(W) { return (W.$J_UUID || (W.$J_UUID = ++M.UUID)) }, getStorage: function(W) { return (M.storage[W] || (M.storage[W] = {})) }, $F: function() {}, $false: function() { return false }, $true: function() { return true }, stylesId: "mjs-" + Math.floor(Math.random() * new Date().getTime()), defined: function(W) { return (undefined != W) }, ifndef: function(X, W) { return (undefined != X) ? X : W }, exists: function(W) { return !!(W) }, jTypeOf: function(W) { if (!M.defined(W)) { return false } if (W.$J_TYPE) { return W.$J_TYPE } if (!!W.nodeType) { if (1 == W.nodeType) { return "element" } if (3 == W.nodeType) { return "textnode" } } if (W.length && W.item) { return "collection" } if (W.length && W.callee) { return "arguments" } if ((W instanceof window.Object || W instanceof window.Function) && W.constructor === M.Class) { return "class" } if (W instanceof window.Array) { return "array" } if (W instanceof window.Function) { return "function" } if (W instanceof window.String) { return "string" } if (M.browser.trident) { if (M.defined(W.cancelBubble)) { return "event" } } else { if (W === window.event || W.constructor == window.Event || W.constructor == window.MouseEvent || W.constructor == window.UIEvent || W.constructor == window.KeyboardEvent || W.constructor == window.KeyEvent) { return "event" } } if (W instanceof window.Date) { return "date" } if (W instanceof window.RegExp) { return "regexp" } if (W === window) { return "window" } if (W === document) { return "document" } return typeof(W) }, extend: function(ab, aa) { if (!(ab instanceof window.Array)) { ab = [ab] } if (!aa) { return ab[0] } for (var Z = 0, X = ab.length; Z < X; Z++) { if (!M.defined(ab)) { continue } for (var Y in aa) { if (!Object.prototype.hasOwnProperty.call(aa, Y)) { continue } try { ab[Z][Y] = aa[Y] } catch (W) {} } } return ab[0] }, implement: function(aa, Z) { if (!(aa instanceof window.Array)) { aa = [aa] } for (var Y = 0, W = aa.length; Y < W; Y++) { if (!M.defined(aa[Y])) { continue } if (!aa[Y].prototype) { continue } for (var X in (Z || {})) { if (!aa[Y].prototype[X]) { aa[Y].prototype[X] = Z[X] } } } return aa[0] }, nativize: function(Y, X) { if (!M.defined(Y)) { return Y } for (var W in (X || {})) { if (!Y[W]) { Y[W] = X[W] } } return Y }, $try: function() { for (var X = 0, W = arguments.length; X < W; X++) { try { return arguments[X]() } catch (Y) {} } return null }, $A: function(Y) { if (!M.defined(Y)) { return M.$([]) } if (Y.toArray) { return M.$(Y.toArray()) } if (Y.item) { var X = Y.length || 0, W = new Array(X); while (X--) { W[X] = Y[X] } return M.$(W) } return M.$(Array.prototype.slice.call(Y)) }, now: function() { return new Date().getTime() }, detach: function(aa) { var Y; switch (M.jTypeOf(aa)) { case "object": Y = {}; for (var Z in aa) { Y[Z] = M.detach(aa[Z]) } break; case "array": Y = []; for (var X = 0, W = aa.length; X < W; X++) { Y[X] = M.detach(aa[X]) } break; default: return aa } return M.$(Y) }, $: function(Y) { var W = true; if (!M.defined(Y)) { return null } if (Y.$J_EXT) { return Y } switch (M.jTypeOf(Y)) { case "array": Y = M.nativize(Y, M.extend(M.Array, { $J_EXT: M.$F })); Y.jEach = Y.forEach; return Y; break; case "string": var X = document.getElementById(Y); if (M.defined(X)) { return M.$(X) } return null; break; case "window": case "document": M.$uuid(Y); Y = M.extend(Y, M.Doc); break; case "element": M.$uuid(Y); Y = M.extend(Y, M.Element); break; case "event": Y = M.extend(Y, M.Event); break; case "textnode": case "function": case "array": case "date": default: W = false; break } if (W) { return M.extend(Y, { $J_EXT: M.$F }) } else { return Y } }, $new: function(W, Y, X) { return M.$(M.doc.createElement(W)).setProps(Y || {}).jSetCss(X || {}) }, addCSS: function(X, Z, ad) { var aa, Y, ab, ac = [], W = -1; ad || (ad = M.stylesId); aa = M.$(ad) || M.$new("style", { id: ad, type: "text/css" }).jAppendTo((document.head || document.body), "top"); Y = aa.sheet || aa.styleSheet; if ("string" != M.jTypeOf(Z)) { for (var ab in Z) { ac.push(ab + ":" + Z[ab]) } Z = ac.join(";") } if (Y.insertRule) { W = Y.insertRule(X + " {" + Z + "}", Y.cssRules.length) } else { W = Y.addRule(X, Z) } return W }, removeCSS: function(Z, W) { var Y, X; Y = M.$(Z); if ("element" !== M.jTypeOf(Y)) { return } X = Y.sheet || Y.styleSheet; if (X.deleteRule) { X.deleteRule(W) } else { if (X.removeRule) { X.removeRule(W) } } }, generateUUID: function() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(Y) { var X = Math.random() * 16 | 0, W = Y == "x" ? X : (X & 3 | 8); return W.toString(16) }).toUpperCase() }, getAbsoluteURL: (function() { var W; return function(X) { if (!W) { W = document.createElement("a") } W.setAttribute("href", X); return ("!!" + W.href).replace("!!", "") } })(), getHashCode: function(Y) { var Z = 0, W = Y.length; for (var X = 0; X < W; ++X) { Z = 31 * Z + Y.charCodeAt(X); Z %= 4294967296 } return Z } }; var M = S; var N = S.$; if (!window.magicJS) { window.magicJS = S; window.$mjs = S.$ } M.Array = { $J_TYPE: "array", indexOf: function(Z, aa) { var W = this.length; for (var X = this.length, Y = (aa < 0) ? Math.max(0, X + aa) : aa || 0; Y < X; Y++) { if (this[Y] === Z) { return Y } } return -1 }, contains: function(W, X) { return this.indexOf(W, X) != -1 }, forEach: function(W, Z) { for (var Y = 0, X = this.length; Y < X; Y++) { if (Y in this) { W.call(Z, this[Y], Y, this) } } }, filter: function(W, ab) { var aa = []; for (var Z = 0, X = this.length; Z < X; Z++) { if (Z in this) { var Y = this[Z]; if (W.call(ab, this[Z], Z, this)) { aa.push(Y) } } } return aa }, map: function(W, aa) { var Z = []; for (var Y = 0, X = this.length; Y < X; Y++) { if (Y in this) { Z[Y] = W.call(aa, this[Y], Y, this) } } return Z } }; M.implement(String, { $J_TYPE: "string", jTrim: function() { return this.replace(/^\s+|\s+$/g, "") }, eq: function(W, X) { return (X || false) ? (this.toString() === W.toString()) : (this.toLowerCase().toString() === W.toLowerCase().toString()) }, jCamelize: function() { return this.replace(/-\D/g, function(W) { return W.charAt(1).toUpperCase() }) }, dashize: function() { return this.replace(/[A-Z]/g, function(W) { return ("-" + W.charAt(0).toLowerCase()) }) }, jToInt: function(W) { return parseInt(this, W || 10) }, toFloat: function() { return parseFloat(this) }, jToBool: function() { return !this.replace(/true/i, "").jTrim() }, has: function(X, W) { W = W || ""; return (W + this + W).indexOf(W + X + W) > -1 } }); S.implement(Function, { $J_TYPE: "function", jBind: function() { var X = M.$A(arguments), W = this, Y = X.shift(); return function() { return W.apply(Y || null, X.concat(M.$A(arguments))) } }, jBindAsEvent: function() { var X = M.$A(arguments), W = this, Y = X.shift(); return function(Z) { return W.apply(Y || null, M.$([Z || (M.browser.ieMode ? window.event : null)]).concat(X)) } }, jDelay: function() { var X = M.$A(arguments), W = this, Y = X.shift(); return window.setTimeout(function() { return W.apply(W, X) }, Y || 0) }, jDefer: function() { var X = M.$A(arguments), W = this; return function() { return W.jDelay.apply(W, X) } }, interval: function() { var X = M.$A(arguments), W = this, Y = X.shift(); return window.setInterval(function() { return W.apply(W, X) }, Y || 0) } }); var T = {}, L = navigator.userAgent.toLowerCase(), K = L.match(/(webkit|gecko|trident|presto)\/(\d+\.?\d*)/i), P = L.match(/(edge|opr)\/(\d+\.?\d*)/i) || L.match(/(crios|chrome|safari|firefox|opera|opr)\/(\d+\.?\d*)/i), R = L.match(/version\/(\d+\.?\d*)/i), G = document.documentElement.style; function H(X) { var W = X.charAt(0).toUpperCase() + X.slice(1); return X in G || ("Webkit" + W) in G || ("Moz" + W) in G || ("ms" + W) in G || ("O" + W) in G } M.browser = { features: { xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector), fullScreen: !!(document.fullscreenEnabled || document.msFullscreenEnabled || document.exitFullscreen || document.cancelFullScreen || document.webkitexitFullscreen || document.webkitCancelFullScreen || document.mozCancelFullScreen || document.oCancelFullScreen || document.msCancelFullScreen), xhr2: !!(window.ProgressEvent) && !!(window.FormData) && (window.XMLHttpRequest && "withCredentials" in new XMLHttpRequest), transition: H("transition"), transform: H("transform"), perspective: H("perspective"), animation: H("animation"), requestAnimationFrame: false, multibackground: false, cssFilters: false, svg: (function() { return document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image", "1.1") })() }, touchScreen: function() { return "ontouchstart" in window || (window.DocumentTouch && document instanceof DocumentTouch) }(), mobile: L.match(/(android|bb\d+|meego).+|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/) ? true : false, engine: (K && K[1]) ? K[1].toLowerCase() : (window.opera) ? "presto" : !!(window.ActiveXObject) ? "trident" : (undefined !== document.getBoxObjectFor || null != window.mozInnerScreenY) ? "gecko" : (null !== window.WebKitPoint || !navigator.taintEnabled) ? "webkit" : "unknown", version: (K && K[2]) ? parseFloat(K[2]) : 0, uaName: (P && P[1]) ? P[1].toLowerCase() : "", uaVersion: (P && P[2]) ? parseFloat(P[2]) : 0, cssPrefix: "", cssDomPrefix: "", domPrefix: "", ieMode: 0, platform: L.match(/ip(?:ad|od|hone)/) ? "ios" : (L.match(/(?:webos|android)/) || navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase(), backCompat: document.compatMode && "backcompat" == document.compatMode.toLowerCase(), scrollbarsWidth: 0, getDoc: function() { return (document.compatMode && "backcompat" == document.compatMode.toLowerCase()) ? document.body : document.documentElement }, requestAnimationFrame: window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || undefined, cancelAnimationFrame: window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || undefined, ready: false, onready: function() { if (M.browser.ready) { return } var Z, Y; M.browser.ready = true; M.body = M.$(document.body); M.win = M.$(window); try { var X = M.$new("div").jSetCss({ width: 100, height: 100, overflow: "scroll", position: "absolute", top: -9999 }).jAppendTo(document.body); M.browser.scrollbarsWidth = X.offsetWidth - X.clientWidth; X.jRemove() } catch (W) {} try { Z = M.$new("div"); Y = Z.style; Y.cssText = "background:url(https://),url(https://),red url(https://)"; M.browser.features.multibackground = (/(url\s*\(.*?){3}/).test(Y.background); Y = null; Z = null } catch (W) {} if (!M.browser.cssTransformProp) { M.browser.cssTransformProp = M.normalizeCSS("transform").dashize() } try { Z = M.$new("div"); Z.style.cssText = M.normalizeCSS("filter").dashize() + ":blur(2px);"; M.browser.features.cssFilters = !!Z.style.length && (!M.browser.ieMode || M.browser.ieMode > 9); Z = null } catch (W) {} if (!M.browser.features.cssFilters) { M.$(document.documentElement).jAddClass("no-cssfilters-magic") } if (undefined === window.TransitionEvent && undefined !== window.WebKitTransitionEvent) { T.transitionend = "webkitTransitionEnd" } M.Doc.jCallEvent.call(M.$(document), "domready") } }; (function() { var aa = [], Z, Y, X; function W() { return !!(arguments.callee.caller) } switch (M.browser.engine) { case "trident": if (!M.browser.version) { M.browser.version = !!(window.XMLHttpRequest) ? 3 : 2 } break; case "gecko": M.browser.version = (P && P[2]) ? parseFloat(P[2]) : 0; break } M.browser[M.browser.engine] = true; if (P && "crios" === P[1]) { M.browser.uaName = "chrome" } if (!!window.chrome) { M.browser.chrome = true } if (P && "opr" === P[1]) { M.browser.uaName = "opera"; M.browser.opera = true } if ("safari" === M.browser.uaName && (R && R[1])) { M.browser.uaVersion = parseFloat(R[1]) } if ("android" == M.browser.platform && M.browser.webkit && (R && R[1])) { M.browser.androidBrowser = true } Z = ({ gecko: ["-moz-", "Moz", "moz"], webkit: ["-webkit-", "Webkit", "webkit"], trident: ["-ms-", "ms", "ms"], presto: ["-o-", "O", "o"] })[M.browser.engine] || ["", "", ""]; M.browser.cssPrefix = Z[0]; M.browser.cssDomPrefix = Z[1]; M.browser.domPrefix = Z[2]; M.browser.ieMode = (!M.browser.trident) ? undefined : (document.documentMode) ? document.documentMode : function() { var ab = 0; if (M.browser.backCompat) { return 5 } switch (M.browser.version) { case 2: ab = 6; break; case 3: ab = 7; break } return ab }(); aa.push(M.browser.platform + "-magic"); if (M.browser.mobile) { aa.push("mobile-magic") } if (M.browser.androidBrowser) { aa.push("android-browser-magic") } if (M.browser.ieMode) { M.browser.uaName = "ie"; M.browser.uaVersion = M.browser.ieMode; aa.push("ie" + M.browser.ieMode + "-magic"); for (Y = 11; Y > M.browser.ieMode; Y--) { aa.push("lt-ie" + Y + "-magic") } } if (M.browser.webkit && M.browser.version < 536) { M.browser.features.fullScreen = false } if (M.browser.requestAnimationFrame) { M.browser.requestAnimationFrame.call(window, function() { M.browser.features.requestAnimationFrame = true }) } if (M.browser.features.svg) { aa.push("svg-magic") } else { aa.push("no-svg-magic") } X = (document.documentElement.className || "").match(/\S+/g) || []; document.documentElement.className = M.$(X).concat(aa).join(" "); if (M.browser.ieMode && M.browser.ieMode < 9) { document.createElement("figure"); document.createElement("figcaption") } })(); (function() { M.browser.fullScreen = { capable: M.browser.features.fullScreen, enabled: function() { return !!(document.fullscreenElement || document[M.browser.domPrefix + "FullscreenElement"] || document.fullScreen || document.webkitIsFullScreen || document[M.browser.domPrefix + "FullScreen"]) }, request: function(W, X) { X || (X = {}); if (this.capable) { M.$(document).jAddEvent(this.changeEventName, this.onchange = function(Y) { if (this.enabled()) { X.onEnter && X.onEnter() } else { M.$(document).jRemoveEvent(this.changeEventName, this.onchange); X.onExit && X.onExit() } }.jBindAsEvent(this)); M.$(document).jAddEvent(this.errorEventName, this.onerror = function(Y) { X.fallback && X.fallback(); M.$(document).jRemoveEvent(this.errorEventName, this.onerror) }.jBindAsEvent(this)); (W[M.browser.domPrefix + "RequestFullscreen"] || W[M.browser.domPrefix + "RequestFullScreen"] || W.requestFullscreen || function() {}).call(W) } else { if (X.fallback) { X.fallback() } } }, cancel: (document.exitFullscreen || document.cancelFullScreen || document[M.browser.domPrefix + "ExitFullscreen"] || document[M.browser.domPrefix + "CancelFullScreen"] || function() {}).jBind(document), changeEventName: document.msExitFullscreen ? "MSFullscreenChange" : (document.exitFullscreen ? "" : M.browser.domPrefix) + "fullscreenchange", errorEventName: document.msExitFullscreen ? "MSFullscreenError" : (document.exitFullscreen ? "" : M.browser.domPrefix) + "fullscreenerror", prefix: M.browser.domPrefix, activeElement: null } })(); var V = /\S+/g, J = /^(border(Top|Bottom|Left|Right)Width)|((padding|margin)(Top|Bottom|Left|Right))$/, O = { "float": ("undefined" === typeof(G.styleFloat)) ? "cssFloat" : "styleFloat" }, Q = { fontWeight: true, lineHeight: true, opacity: true, zIndex: true, zoom: true }, I = (window.getComputedStyle) ? function(Y, W) { var X = window.getComputedStyle(Y, null); return X ? X.getPropertyValue(W) || X[W] : null } : function(Z, X) { var Y = Z.currentStyle, W = null; W = Y ? Y[X] : null; if (null == W && Z.style && Z.style[X]) { W = Z.style[X] } return W }; function U(Y) { var W, X; X = (M.browser.webkit && "filter" == Y) ? false : (Y in G); if (!X) { W = M.browser.cssDomPrefix + Y.charAt(0).toUpperCase() + Y.slice(1); if (W in G) { return W } } return Y } M.normalizeCSS = U; M.Element = { jHasClass: function(W) { return !(W || "").has(" ") && (this.className || "").has(W, " ") }, jAddClass: function(aa) { var X = (this.className || "").match(V) || [], Z = (aa || "").match(V) || [], W = Z.length, Y = 0; for (; Y < W; Y++) { if (!M.$(X).contains(Z[Y])) { X.push(Z[Y]) } } this.className = X.join(" "); return this }, jRemoveClass: function(ab) { var X = (this.className || "").match(V) || [], aa = (ab || "").match(V) || [], W = aa.length, Z = 0, Y; for (; Z < W; Z++) { if ((Y = M.$(X).indexOf(aa[Z])) > -1) { X.splice(Y, 1) } } this.className = ab ? X.join(" ") : ""; return this }, jToggleClass: function(W) { return this.jHasClass(W) ? this.jRemoveClass(W) : this.jAddClass(W) }, jGetCss: function(X) { var Y = X.jCamelize(), W = null; X = O[Y] || (O[Y] = U(Y)); W = I(this, X); if ("auto" === W) { W = null } if (null !== W) { if ("opacity" == X) { return M.defined(W) ? parseFloat(W) : 1 } if (J.test(X)) { W = parseInt(W, 10) ? W : "0px" } } return W }, jSetCssProp: function(X, W) { var Z = X.jCamelize(); try { if ("opacity" == X) { this.jSetOpacity(W); return this } X = O[Z] || (O[Z] = U(Z)); this.style[X] = W + (("number" == M.jTypeOf(W) && !Q[Z]) ? "px" : "") } catch (Y) {} return this }, jSetCss: function(X) { for (var W in X) { this.jSetCssProp(W, X[W]) } return this }, jGetStyles: function() { var W = {}; M.$A(arguments).jEach(function(X) { W[X] = this.jGetCss(X) }, this); return W }, jSetOpacity: function(Y, W) { var X; W = W || false; this.style.opacity = Y; Y = parseInt(parseFloat(Y) * 100); if (W) { if (0 === Y) { if ("hidden" != this.style.visibility) { this.style.visibility = "hidden" } } else { if ("visible" != this.style.visibility) { this.style.visibility = "visible" } } } if (M.browser.ieMode && M.browser.ieMode < 9) { if (!isNaN(Y)) { if (!~this.style.filter.indexOf("Alpha")) { this.style.filter += " progid:DXImageTransform.Microsoft.Alpha(Opacity=" + Y + ")" } else { this.style.filter = this.style.filter.replace(/Opacity=\d*/i, "Opacity=" + Y) } } else { this.style.filter = this.style.filter.replace(/progid:DXImageTransform.Microsoft.Alpha\(Opacity=\d*\)/i, "").jTrim(); if ("" === this.style.filter) { this.style.removeAttribute("filter") } } } return this }, setProps: function(W) { for (var X in W) { if ("class" === X) { this.jAddClass("" + W[X]) } else { this.setAttribute(X, "" + W[X]) } } return this }, jGetTransitionDuration: function() { var X = 0, W = 0; X = this.jGetCss("transition-duration"); W = this.jGetCss("transition-delay"); X = X.indexOf("ms") > -1 ? parseFloat(X) : X.indexOf("s") > -1 ? parseFloat(X) * 1000 : 0; W = W.indexOf("ms") > -1 ? parseFloat(W) : W.indexOf("s") > -1 ? parseFloat(W) * 1000 : 0; return X + W }, hide: function() { return this.jSetCss({ display: "none", visibility: "hidden" }) }, show: function() { return this.jSetCss({ display: "", visibility: "visible" }) }, jGetSize: function() { return { width: this.offsetWidth, height: this.offsetHeight } }, getInnerSize: function(X) { var W = this.jGetSize(); W.width -= (parseFloat(this.jGetCss("border-left-width") || 0) + parseFloat(this.jGetCss("border-right-width") || 0)); W.height -= (parseFloat(this.jGetCss("border-top-width") || 0) + parseFloat(this.jGetCss("border-bottom-width") || 0)); if (!X) { W.width -= (parseFloat(this.jGetCss("padding-left") || 0) + parseFloat(this.jGetCss("padding-right") || 0)); W.height -= (parseFloat(this.jGetCss("padding-top") || 0) + parseFloat(this.jGetCss("padding-bottom") || 0)) } return W }, jGetScroll: function() { return { top: this.scrollTop, left: this.scrollLeft } }, jGetFullScroll: function() { var W = this, X = { top: 0, left: 0 }; do { X.left += W.scrollLeft || 0; X.top += W.scrollTop || 0; W = W.parentNode } while (W); return X }, jGetPosition: function() { var aa = this, X = 0, Z = 0; if (M.defined(document.documentElement.getBoundingClientRect)) { var W = this.getBoundingClientRect(), Y = M.$(document).jGetScroll(), ab = M.browser.getDoc(); return { top: W.top + Y.y - ab.clientTop, left: W.left + Y.x - ab.clientLeft } } do { X += aa.offsetLeft || 0; Z += aa.offsetTop || 0; aa = aa.offsetParent } while (aa && !(/^(?:body|html)$/i).test(aa.tagName)); return { top: Z, left: X } }, jGetRect: function() { var X = this.jGetPosition(); var W = this.jGetSize(); return { top: X.top, bottom: X.top + W.height, left: X.left, right: X.left + W.width } }, changeContent: function(X) { try { this.innerHTML = X } catch (W) { this.innerText = X } return this }, jRemove: function() { return (this.parentNode) ? this.parentNode.removeChild(this) : this }, kill: function() { M.$A(this.childNodes).jEach(function(W) { if (3 == W.nodeType || 8 == W.nodeType) { return } M.$(W).kill() }); this.jRemove(); this.jClearEvents(); if (this.$J_UUID) { M.storage[this.$J_UUID] = null; delete M.storage[this.$J_UUID] } return null }, append: function(Y, X) { X = X || "bottom"; var W = this.firstChild; ("top" == X && W) ? this.insertBefore(Y, W): this.appendChild(Y); return this }, jAppendTo: function(Y, X) { var W = M.$(Y).append(this, X); return this }, enclose: function(W) { this.append(W.parentNode.replaceChild(this, W)); return this }, hasChild: function(W) { if ("element" !== M.jTypeOf("string" == M.jTypeOf(W) ? W = document.getElementById(W) : W)) { return false } return (this == W) ? false : (this.contains && !(M.browser.webkit419)) ? (this.contains(W)) : (this.compareDocumentPosition) ? !!(this.compareDocumentPosition(W) & 16) : M.$A(this.byTag(W.tagName)).contains(W) } }; M.Element.jGetStyle = M.Element.jGetCss; M.Element.jSetStyle = M.Element.jSetCss; if (!window.Element) { window.Element = M.$F; if (M.browser.engine.webkit) { window.document.createElement("iframe") } window.Element.prototype = (M.browser.engine.webkit) ? window["[[DOMElement.prototype]]"] : {} } M.implement(window.Element, { $J_TYPE: "element" }); M.Doc = { jGetSize: function() { if (M.browser.touchScreen || M.browser.presto925 || M.browser.webkit419) { return { width: window.innerWidth, height: window.innerHeight } } return { width: M.browser.getDoc().clientWidth, height: M.browser.getDoc().clientHeight } }, jGetScroll: function() { return { x: window.pageXOffset || M.browser.getDoc().scrollLeft, y: window.pageYOffset || M.browser.getDoc().scrollTop } }, jGetFullSize: function() { var W = this.jGetSize(); return { width: Math.max(M.browser.getDoc().scrollWidth, W.width), height: Math.max(M.browser.getDoc().scrollHeight, W.height) } } }; M.extend(document, { $J_TYPE: "document" }); M.extend(window, { $J_TYPE: "window" }); M.extend([M.Element, M.Doc], { jFetch: function(Z, X) { var W = M.getStorage(this.$J_UUID), Y = W[Z]; if (undefined !== X && undefined === Y) { Y = W[Z] = X } return (M.defined(Y) ? Y : null) }, jStore: function(Y, X) { var W = M.getStorage(this.$J_UUID); W[Y] = X; return this }, jDel: function(X) { var W = M.getStorage(this.$J_UUID); delete W[X]; return this } }); if (!(window.HTMLElement && window.HTMLElement.prototype && window.HTMLElement.prototype.getElementsByClassName)) { M.extend([M.Element, M.Doc], { getElementsByClassName: function(W) { return M.$A(this.getElementsByTagName("*")).filter(function(Y) { try { return (1 == Y.nodeType && Y.className.has(W, " ")) } catch (X) {} }) } }) } M.extend([M.Element, M.Doc], { byClass: function() { return this.getElementsByClassName(arguments[0]) }, byTag: function() { return this.getElementsByTagName(arguments[0]) } }); if (M.browser.fullScreen.capable && !document.requestFullScreen) { M.Element.requestFullScreen = function() { M.browser.fullScreen.request(this) } } M.Event = { $J_TYPE: "event", isQueueStopped: M.$false, stop: function() { return this.stopDistribution().stopDefaults() }, stopDistribution: function() { if (this.stopPropagation) { this.stopPropagation() } else { this.cancelBubble = true } return this }, stopDefaults: function() { if (this.preventDefault) { this.preventDefault() } else { this.returnValue = false } return this }, stopQueue: function() { this.isQueueStopped = M.$true; return this }, getClientXY: function() { var X, W; X = ((/touch/i).test(this.type)) ? this.changedTouches[0] : this; return (!M.defined(X)) ? { x: 0, y: 0 } : { x: X.clientX, y: X.clientY } }, jGetPageXY: function() { var X, W; X = ((/touch/i).test(this.type)) ? this.changedTouches[0] : this; return (!M.defined(X)) ? { x: 0, y: 0 } : { x: X.pageX || X.clientX + M.browser.getDoc().scrollLeft, y: X.pageY || X.clientY + M.browser.getDoc().scrollTop } }, getTarget: function() { var W = this.target || this.srcElement; while (W && 3 == W.nodeType) { W = W.parentNode } return W }, getRelated: function() { var X = null; switch (this.type) { case "mouseover": case "pointerover": case "MSPointerOver": X = this.relatedTarget || this.fromElement; break; case "mouseout": case "pointerout": case "MSPointerOut": X = this.relatedTarget || this.toElement; break; default: return X } try { while (X && 3 == X.nodeType) { X = X.parentNode } } catch (W) { X = null } return X }, getButton: function() { if (!this.which && this.button !== undefined) { return (this.button & 1 ? 1 : (this.button & 2 ? 3 : (this.button & 4 ? 2 : 0))) } return this.which }, isTouchEvent: function() { return (this.pointerType && ("touch" === this.pointerType || this.pointerType === this.MSPOINTER_TYPE_TOUCH)) || (/touch/i).test(this.type) }, isPrimaryTouch: function() { return this.pointerType ? (("touch" === this.pointerType || this.MSPOINTER_TYPE_TOUCH === this.pointerType) && this.isPrimary) : 1 === this.changedTouches.length && (this.targetTouches.length ? this.targetTouches[0].identifier == this.changedTouches[0].identifier : true) } }; M._event_add_ = "addEventListener"; M._event_del_ = "removeEventListener"; M._event_prefix_ = ""; if (!document.addEventListener) { M._event_add_ = "attachEvent"; M._event_del_ = "detachEvent"; M._event_prefix_ = "on" } M.Event.Custom = { type: "", x: null, y: null, timeStamp: null, button: null, target: null, relatedTarget: null, $J_TYPE: "event.custom", isQueueStopped: M.$false, events: M.$([]), pushToEvents: function(W) { var X = W; this.events.push(X) }, stop: function() { return this.stopDistribution().stopDefaults() }, stopDistribution: function() { this.events.jEach(function(X) { try { X.stopDistribution() } catch (W) {} }); return this }, stopDefaults: function() { this.events.jEach(function(X) { try { X.stopDefaults() } catch (W) {} }); return this }, stopQueue: function() { this.isQueueStopped = M.$true; return this }, getClientXY: function() { return { x: this.clientX, y: this.clientY } }, jGetPageXY: function() { return { x: this.x, y: this.y } }, getTarget: function() { return this.target }, getRelated: function() { return this.relatedTarget }, getButton: function() { return this.button }, getOriginalTarget: function() { return this.events.length > 0 ? this.events[0].getTarget() : undefined } }; M.extend([M.Element, M.Doc], { jAddEvent: function(Y, aa, ab, ae) { var ad, W, Z, ac, X; if ("string" == M.jTypeOf(Y)) { X = Y.split(" "); if (X.length > 1) { Y = X } } if (M.jTypeOf(Y) == "array") { M.$(Y).jEach(this.jAddEvent.jBindAsEvent(this, aa, ab, ae)); return this } if (!Y || !aa || M.jTypeOf(Y) != "string" || M.jTypeOf(aa) != "function") { return this } if (Y == "domready" && M.browser.ready) { aa.call(this); return this } Y = T[Y] || Y; ab = parseInt(ab || 50); if (!aa.$J_EUID) { aa.$J_EUID = Math.floor(Math.random() * M.now()) } ad = M.Doc.jFetch.call(this, "_EVENTS_", {}); W = ad[Y]; if (!W) { ad[Y] = W = M.$([]); Z = this; if (M.Event.Custom[Y]) { M.Event.Custom[Y].handler.add.call(this, ae) } else { W.handle = function(af) { af = M.extend(af || window.e, { $J_TYPE: "event" }); M.Doc.jCallEvent.call(Z, Y, M.$(af)) }; this[M._event_add_](M._event_prefix_ + Y, W.handle, false) } } ac = { type: Y, fn: aa, priority: ab, euid: aa.$J_EUID }; W.push(ac); W.sort(function(ag, af) { return ag.priority - af.priority }); return this }, jRemoveEvent: function(ac) { var aa = M.Doc.jFetch.call(this, "_EVENTS_", {}), Y, W, X, ad, ab, Z; ab = arguments.length > 1 ? arguments[1] : -100; if ("string" == M.jTypeOf(ac)) { Z = ac.split(" "); if (Z.length > 1) { ac = Z } } if (M.jTypeOf(ac) == "array") { M.$(ac).jEach(this.jRemoveEvent.jBindAsEvent(this, ab)); return this } ac = T[ac] || ac; if (!ac || M.jTypeOf(ac) != "string" || !aa || !aa[ac]) { return this } Y = aa[ac] || []; for (X = 0; X < Y.length; X++) { W = Y[X]; if (-100 == ab || !!ab && ab.$J_EUID === W.euid) { ad = Y.splice(X--, 1) } } if (0 === Y.length) { if (M.Event.Custom[ac]) { M.Event.Custom[ac].handler.jRemove.call(this) } else { this[M._event_del_](M._event_prefix_ + ac, Y.handle, false) } delete aa[ac] } return this }, jCallEvent: function(aa, ac) { var Z = M.Doc.jFetch.call(this, "_EVENTS_", {}), Y, W, X; aa = T[aa] || aa; if (!aa || M.jTypeOf(aa) != "string" || !Z || !Z[aa]) { return this } try { ac = M.extend(ac || {}, { type: aa }) } catch (ab) {} if (undefined === ac.timeStamp) { ac.timeStamp = M.now() } Y = Z[aa] || []; for (X = 0; X < Y.length && !(ac.isQueueStopped && ac.isQueueStopped()); X++) { Y[X].fn.call(this, ac) } }, jRaiseEvent: function(X, W) { var aa = ("domready" == X) ? false : true, Z = this, Y; X = T[X] || X; if (!aa) { M.Doc.jCallEvent.call(this, X); return this } if (Z === document && document.createEvent && !Z.dispatchEvent) { Z = document.documentElement } if (document.createEvent) { Y = document.createEvent(X); Y.initEvent(W, true, true) } else { Y = document.createEventObject(); Y.eventType = X } if (document.createEvent) { Z.dispatchEvent(Y) } else { Z.fireEvent("on" + W, Y) } return Y }, jClearEvents: function() { var X = M.Doc.jFetch.call(this, "_EVENTS_"); if (!X) { return this } for (var W in X) { M.Doc.jRemoveEvent.call(this, W) } M.Doc.jDel.call(this, "_EVENTS_"); return this } }); (function(W) { if ("complete" === document.readyState) { return W.browser.onready.jDelay(1) } if (W.browser.webkit && W.browser.version < 420) { (function() { (W.$(["loaded", "complete"]).contains(document.readyState)) ? W.browser.onready(): arguments.callee.jDelay(50) })() } else { if (W.browser.trident && W.browser.ieMode < 9 && window == top) { (function() { (W.$try(function() { W.browser.getDoc().doScroll("left"); return true })) ? W.browser.onready(): arguments.callee.jDelay(50) })() } else { W.Doc.jAddEvent.call(W.$(document), "DOMContentLoaded", W.browser.onready); W.Doc.jAddEvent.call(W.$(window), "load", W.browser.onready) } } })(S); M.Class = function() { var aa = null, X = M.$A(arguments); if ("class" == M.jTypeOf(X[0])) { aa = X.shift() } var W = function() { for (var ad in this) { this[ad] = M.detach(this[ad]) } if (this.constructor.$parent) { this.$parent = {}; var af = this.constructor.$parent; for (var ae in af) { var ac = af[ae]; switch (M.jTypeOf(ac)) { case "function": this.$parent[ae] = M.Class.wrap(this, ac); break; case "object": this.$parent[ae] = M.detach(ac); break; case "array": this.$parent[ae] = M.detach(ac); break } } } var ab = (this.init) ? this.init.apply(this, arguments) : this; delete this.caller; return ab }; if (!W.prototype.init) { W.prototype.init = M.$F } if (aa) { var Z = function() {}; Z.prototype = aa.prototype; W.prototype = new Z; W.$parent = {}; for (var Y in aa.prototype) { W.$parent[Y] = aa.prototype[Y] } } else { W.$parent = null } W.constructor = M.Class; W.prototype.constructor = W; M.extend(W.prototype, X[0]); M.extend(W, { $J_TYPE: "class" }); return W }; S.Class.wrap = function(W, X) { return function() { var Z = this.caller; var Y = X.apply(W, arguments); return Y } }; (function(Z) { var Y = Z.$; var W = 5, X = 300; Z.Event.Custom.btnclick = new Z.Class(Z.extend(Z.Event.Custom, { type: "btnclick", init: function(ac, ab) { var aa = ab.jGetPageXY(); this.x = aa.x; this.y = aa.y; this.clientX = ab.clientX; this.clientY = ab.clientY; this.timeStamp = ab.timeStamp; this.button = ab.getButton(); this.target = ac; this.pushToEvents(ab) } })); Z.Event.Custom.btnclick.handler = { options: { threshold: X, button: 1 }, add: function(aa) { this.jStore("event:btnclick:options", Z.extend(Z.detach(Z.Event.Custom.btnclick.handler.options), aa || {})); this.jAddEvent("mousedown", Z.Event.Custom.btnclick.handler.handle, 1); this.jAddEvent("mouseup", Z.Event.Custom.btnclick.handler.handle, 1); this.jAddEvent("click", Z.Event.Custom.btnclick.handler.onclick, 1); if (Z.browser.trident && Z.browser.ieMode < 9) { this.jAddEvent("dblclick", Z.Event.Custom.btnclick.handler.handle, 1) } }, jRemove: function() { this.jRemoveEvent("mousedown", Z.Event.Custom.btnclick.handler.handle); this.jRemoveEvent("mouseup", Z.Event.Custom.btnclick.handler.handle); this.jRemoveEvent("click", Z.Event.Custom.btnclick.handler.onclick); if (Z.browser.trident && Z.browser.ieMode < 9) { this.jRemoveEvent("dblclick", Z.Event.Custom.btnclick.handler.handle) } }, onclick: function(aa) { aa.stopDefaults() }, handle: function(ad) { var ac, aa, ab; aa = this.jFetch("event:btnclick:options"); if (ad.type != "dblclick" && ad.getButton() != aa.button) { return } if (this.jFetch("event:btnclick:ignore")) { this.jDel("event:btnclick:ignore"); return } if ("mousedown" == ad.type) { ac = new Z.Event.Custom.btnclick(this, ad); this.jStore("event:btnclick:btnclickEvent", ac) } else { if ("mouseup" == ad.type) { ac = this.jFetch("event:btnclick:btnclickEvent"); if (!ac) { return } ab = ad.jGetPageXY(); this.jDel("event:btnclick:btnclickEvent"); ac.pushToEvents(ad); if (ad.timeStamp - ac.timeStamp <= aa.threshold && Math.sqrt(Math.pow(ab.x - ac.x, 2) + Math.pow(ab.y - ac.y, 2)) <= W) { this.jCallEvent("btnclick", ac) } document.jCallEvent("mouseup", ad) } else { if (ad.type == "dblclick") { ac = new Z.Event.Custom.btnclick(this, ad); this.jCallEvent("btnclick", ac) } } } } } })(S); (function(X) { var W = X.$; X.Event.Custom.mousedrag = new X.Class(X.extend(X.Event.Custom, { type: "mousedrag", state: "dragstart", dragged: false, init: function(ab, aa, Z) { var Y = aa.jGetPageXY(); this.x = Y.x; this.y = Y.y; this.clientX = aa.clientX; this.clientY = aa.clientY; this.timeStamp = aa.timeStamp; this.button = aa.getButton(); this.target = ab; this.pushToEvents(aa); this.state = Z } })); X.Event.Custom.mousedrag.handler = { add: function() { var Z = X.Event.Custom.mousedrag.handler.handleMouseMove.jBindAsEvent(this), Y = X.Event.Custom.mousedrag.handler.handleMouseUp.jBindAsEvent(this); this.jAddEvent("mousedown", X.Event.Custom.mousedrag.handler.handleMouseDown, 1); this.jAddEvent("mouseup", X.Event.Custom.mousedrag.handler.handleMouseUp, 1); document.jAddEvent("mousemove", Z, 1); document.jAddEvent("mouseup", Y, 1); this.jStore("event:mousedrag:listeners:document:move", Z); this.jStore("event:mousedrag:listeners:document:end", Y) }, jRemove: function() { this.jRemoveEvent("mousedown", X.Event.Custom.mousedrag.handler.handleMouseDown); this.jRemoveEvent("mouseup", X.Event.Custom.mousedrag.handler.handleMouseUp); W(document).jRemoveEvent("mousemove", this.jFetch("event:mousedrag:listeners:document:move") || X.$F); W(document).jRemoveEvent("mouseup", this.jFetch("event:mousedrag:listeners:document:end") || X.$F); this.jDel("event:mousedrag:listeners:document:move"); this.jDel("event:mousedrag:listeners:document:end") }, handleMouseDown: function(Z) { var Y; if (1 != Z.getButton()) { return } Z.stopDefaults(); Y = new X.Event.Custom.mousedrag(this, Z, "dragstart"); this.jStore("event:mousedrag:dragstart", Y) }, handleMouseUp: function(Z) { var Y; Y = this.jFetch("event:mousedrag:dragstart"); if (!Y) { return } Z.stopDefaults(); Y = new X.Event.Custom.mousedrag(this, Z, "dragend"); this.jDel("event:mousedrag:dragstart"); this.jCallEvent("mousedrag", Y) }, handleMouseMove: function(Z) { var Y; Y = this.jFetch("event:mousedrag:dragstart"); if (!Y) { return } Z.stopDefaults(); if (!Y.dragged) { Y.dragged = true; this.jCallEvent("mousedrag", Y) } Y = new X.Event.Custom.mousedrag(this, Z, "dragmove"); this.jCallEvent("mousedrag", Y) } } })(S); (function(X) { var W = X.$; X.Event.Custom.dblbtnclick = new X.Class(X.extend(X.Event.Custom, { type: "dblbtnclick", timedout: false, tm: null, init: function(aa, Z) { var Y = Z.jGetPageXY(); this.x = Y.x; this.y = Y.y; this.clientX = Z.clientX; this.clientY = Z.clientY; this.timeStamp = Z.timeStamp; this.button = Z.getButton(); this.target = aa; this.pushToEvents(Z) } })); X.Event.Custom.dblbtnclick.handler = { options: { threshold: 200 }, add: function(Y) { this.jStore("event:dblbtnclick:options", X.extend(X.detach(X.Event.Custom.dblbtnclick.handler.options), Y || {})); this.jAddEvent("btnclick", X.Event.Custom.dblbtnclick.handler.handle, 1) }, jRemove: function() { this.jRemoveEvent("btnclick", X.Event.Custom.dblbtnclick.handler.handle) }, handle: function(aa) { var Z, Y; Z = this.jFetch("event:dblbtnclick:event"); Y = this.jFetch("event:dblbtnclick:options"); if (!Z) { Z = new X.Event.Custom.dblbtnclick(this, aa); Z.tm = setTimeout(function() { Z.timedout = true; aa.isQueueStopped = X.$false; this.jCallEvent("btnclick", aa); this.jDel("event:dblbtnclick:event") }.jBind(this), Y.threshold + 10); this.jStore("event:dblbtnclick:event", Z); aa.stopQueue() } else { clearTimeout(Z.tm); this.jDel("event:dblbtnclick:event"); if (!Z.timedout) { Z.pushToEvents(aa); aa.stopQueue().stop(); this.jCallEvent("dblbtnclick", Z) } else {} } } } })(S); (function(ac) { var ab = ac.$; function W(ad) { return ad.pointerType ? (("touch" === ad.pointerType || ad.MSPOINTER_TYPE_TOUCH === ad.pointerType) && ad.isPrimary) : 1 === ad.changedTouches.length && (ad.targetTouches.length ? ad.targetTouches[0].identifier == ad.changedTouches[0].identifier : true) } function Y(ad) { if (ad.pointerType) { return ("touch" === ad.pointerType || ad.MSPOINTER_TYPE_TOUCH === ad.pointerType) ? ad.pointerId : null } else { return ad.changedTouches[0].identifier } } function Z(ad) { if (ad.pointerType) { return ("touch" === ad.pointerType || ad.MSPOINTER_TYPE_TOUCH === ad.pointerType) ? ad : null } else { return ad.changedTouches[0] } } ac.Event.Custom.tap = new ac.Class(ac.extend(ac.Event.Custom, { type: "tap", id: null, init: function(ae, ad) { var af = Z(ad); this.id = af.pointerId || af.identifier; this.x = af.pageX; this.y = af.pageY; this.pageX = af.pageX; this.pageY = af.pageY; this.clientX = af.clientX; this.clientY = af.clientY; this.timeStamp = ad.timeStamp; this.button = 0; this.target = ae; this.pushToEvents(ad) } })); var X = 10, aa = 200; ac.Event.Custom.tap.handler = { add: function(ad) { this.jAddEvent(["touchstart", window.navigator.pointerEnabled ? "pointerdown" : "MSPointerDown"], ac.Event.Custom.tap.handler.onTouchStart, 1); this.jAddEvent(["touchend", window.navigator.pointerEnabled ? "pointerup" : "MSPointerUp"], ac.Event.Custom.tap.handler.onTouchEnd, 1); this.jAddEvent("click", ac.Event.Custom.tap.handler.onClick, 1) }, jRemove: function() { this.jRemoveEvent(["touchstart", window.navigator.pointerEnabled ? "pointerdown" : "MSPointerDown"], ac.Event.Custom.tap.handler.onTouchStart); this.jRemoveEvent(["touchend", window.navigator.pointerEnabled ? "pointerup" : "MSPointerUp"], ac.Event.Custom.tap.handler.onTouchEnd); this.jRemoveEvent("click", ac.Event.Custom.tap.handler.onClick) }, onClick: function(ad) { ad.stopDefaults() }, onTouchStart: function(ad) { if (!W(ad)) { this.jDel("event:tap:event"); return } this.jStore("event:tap:event", new ac.Event.Custom.tap(this, ad)); this.jStore("event:btnclick:ignore", true) }, onTouchEnd: function(ag) { var ae = ac.now(), af = this.jFetch("event:tap:event"), ad = this.jFetch("event:tap:options"); if (!af || !W(ag)) { return } this.jDel("event:tap:event"); if (af.id == Y(ag) && ag.timeStamp - af.timeStamp <= aa && Math.sqrt(Math.pow(Z(ag).pageX - af.x, 2) + Math.pow(Z(ag).pageY - af.y, 2)) <= X) { this.jDel("event:btnclick:btnclickEvent"); ag.stop(); af.pushToEvents(ag); this.jCallEvent("tap", af) } } } })(S); M.Event.Custom.dbltap = new M.Class(M.extend(M.Event.Custom, { type: "dbltap", timedout: false, tm: null, init: function(X, W) { this.x = W.x; this.y = W.y; this.clientX = W.clientX; this.clientY = W.clientY; this.timeStamp = W.timeStamp; this.button = 0; this.target = X; this.pushToEvents(W) } })); M.Event.Custom.dbltap.handler = { options: { threshold: 300 }, add: function(W) { this.jStore("event:dbltap:options", M.extend(M.detach(M.Event.Custom.dbltap.handler.options), W || {})); this.jAddEvent("tap", M.Event.Custom.dbltap.handler.handle, 1) }, jRemove: function() { this.jRemoveEvent("tap", M.Event.Custom.dbltap.handler.handle) }, handle: function(Y) { var X, W; X = this.jFetch("event:dbltap:event"); W = this.jFetch("event:dbltap:options"); if (!X) { X = new M.Event.Custom.dbltap(this, Y); X.tm = setTimeout(function() { X.timedout = true; Y.isQueueStopped = M.$false; this.jCallEvent("tap", Y) }.jBind(this), W.threshold + 10); this.jStore("event:dbltap:event", X); Y.stopQueue() } else { clearTimeout(X.tm); this.jDel("event:dbltap:event"); if (!X.timedout) { X.pushToEvents(Y); Y.stopQueue().stop(); this.jCallEvent("dbltap", X) } else {} } } }; (function(ab) { var aa = ab.$; function W(ac) { return ac.pointerType ? (("touch" === ac.pointerType || ac.MSPOINTER_TYPE_TOUCH === ac.pointerType) && ac.isPrimary) : 1 === ac.changedTouches.length && (ac.targetTouches.length ? ac.targetTouches[0].identifier == ac.changedTouches[0].identifier : true) } function Y(ac) { if (ac.pointerType) { return ("touch" === ac.pointerType || ac.MSPOINTER_TYPE_TOUCH === ac.pointerType) ? ac.pointerId : null } else { return ac.changedTouches[0].identifier } } function Z(ac) { if (ac.pointerType) { return ("touch" === ac.pointerType || ac.MSPOINTER_TYPE_TOUCH === ac.pointerType) ? ac : null } else { return ac.changedTouches[0] } } var X = 10; ab.Event.Custom.touchdrag = new ab.Class(ab.extend(ab.Event.Custom, { type: "touchdrag", state: "dragstart", id: null, dragged: false, init: function(ae, ad, ac) { var af = Z(ad); this.id = af.pointerId || af.identifier; this.clientX = af.clientX; this.clientY = af.clientY; this.pageX = af.pageX; this.pageY = af.pageY; this.x = af.pageX; this.y = af.pageY; this.timeStamp = ad.timeStamp; this.button = 0; this.target = ae; this.pushToEvents(ad); this.state = ac } })); ab.Event.Custom.touchdrag.handler = { add: function() { var ad = ab.Event.Custom.touchdrag.handler.onTouchMove.jBind(this), ac = ab.Event.Custom.touchdrag.handler.onTouchEnd.jBind(this); this.jAddEvent(["touchstart", window.navigator.pointerEnabled ? "pointerdown" : "MSPointerDown"], ab.Event.Custom.touchdrag.handler.onTouchStart, 1); this.jAddEvent(["touchend", window.navigator.pointerEnabled ? "pointerup" : "MSPointerUp"], ab.Event.Custom.touchdrag.handler.onTouchEnd, 1); this.jAddEvent(["touchmove", window.navigator.pointerEnabled ? "pointermove" : "MSPointerMove"], ab.Event.Custom.touchdrag.handler.onTouchMove, 1); this.jStore("event:touchdrag:listeners:document:move", ad); this.jStore("event:touchdrag:listeners:document:end", ac); aa(document).jAddEvent(window.navigator.pointerEnabled ? "pointermove" : "MSPointerMove", ad, 1); aa(document).jAddEvent(window.navigator.pointerEnabled ? "pointerup" : "MSPointerUp", ac, 1) }, jRemove: function() { this.jRemoveEvent(["touchstart", window.navigator.pointerEnabled ? "pointerdown" : "MSPointerDown"], ab.Event.Custom.touchdrag.handler.onTouchStart); this.jRemoveEvent(["touchend", window.navigator.pointerEnabled ? "pointerup" : "MSPointerUp"], ab.Event.Custom.touchdrag.handler.onTouchEnd); this.jRemoveEvent(["touchmove", window.navigator.pointerEnabled ? "pointermove" : "MSPointerMove"], ab.Event.Custom.touchdrag.handler.onTouchMove); aa(document).jRemoveEvent(window.navigator.pointerEnabled ? "pointermove" : "MSPointerMove", this.jFetch("event:touchdrag:listeners:document:move") || ab.$F, 1); aa(document).jRemoveEvent(window.navigator.pointerEnabled ? "pointerup" : "MSPointerUp", this.jFetch("event:touchdrag:listeners:document:end") || ab.$F, 1); this.jDel("event:touchdrag:listeners:document:move"); this.jDel("event:touchdrag:listeners:document:end") }, onTouchStart: function(ad) { var ac; if (!W(ad)) { return } ac = new ab.Event.Custom.touchdrag(this, ad, "dragstart"); this.jStore("event:touchdrag:dragstart", ac) }, onTouchEnd: function(ad) { var ac; ac = this.jFetch("event:touchdrag:dragstart"); if (!ac || !ac.dragged || ac.id != Y(ad)) { return } ac = new ab.Event.Custom.touchdrag(this, ad, "dragend"); this.jDel("event:touchdrag:dragstart"); this.jCallEvent("touchdrag", ac) }, onTouchMove: function(ad) { var ac; ac = this.jFetch("event:touchdrag:dragstart"); if (!ac || !W(ad)) { return } if (ac.id != Y(ad)) { this.jDel("event:touchdrag:dragstart"); return } if (!ac.dragged && Math.sqrt(Math.pow(Z(ad).pageX - ac.x, 2) + Math.pow(Z(ad).pageY - ac.y, 2)) > X) { ac.dragged = true; this.jCallEvent("touchdrag", ac) } if (!ac.dragged) { return } ac = new ab.Event.Custom.touchdrag(this, ad, "dragmove"); this.jCallEvent("touchdrag", ac) } } })(S); M.Event.Custom.touchpinch = new M.Class(M.extend(M.Event.Custom, { type: "touchpinch", scale: 1, previousScale: 1, curScale: 1, state: "pinchstart", init: function(X, W) { this.timeStamp = W.timeStamp; this.button = 0; this.target = X; this.x = W.touches[0].clientX + (W.touches[1].clientX - W.touches[0].clientX) / 2; this.y = W.touches[0].clientY + (W.touches[1].clientY - W.touches[0].clientY) / 2; this._initialDistance = Math.sqrt(Math.pow(W.touches[0].clientX - W.touches[1].clientX, 2) + Math.pow(W.touches[0].clientY - W.touches[1].clientY, 2)); this.pushToEvents(W) }, update: function(W) { var X; this.state = "pinchupdate"; if (W.changedTouches[0].identifier != this.events[0].touches[0].identifier || W.changedTouches[1].identifier != this.events[0].touches[1].identifier) { return } X = Math.sqrt(Math.pow(W.changedTouches[0].clientX - W.changedTouches[1].clientX, 2) + Math.pow(W.changedTouches[0].clientY - W.changedTouches[1].clientY, 2)); this.previousScale = this.scale; this.scale = X / this._initialDistance; this.curScale = this.scale / this.previousScale; this.x = W.changedTouches[0].clientX + (W.changedTouches[1].clientX - W.changedTouches[0].clientX) / 2; this.y = W.changedTouches[0].clientY + (W.changedTouches[1].clientY - W.changedTouches[0].clientY) / 2; this.pushToEvents(W) } })); M.Event.Custom.touchpinch.handler = { add: function() { this.jAddEvent("touchstart", M.Event.Custom.touchpinch.handler.handleTouchStart, 1); this.jAddEvent("touchend", M.Event.Custom.touchpinch.handler.handleTouchEnd, 1); this.jAddEvent("touchmove", M.Event.Custom.touchpinch.handler.handleTouchMove, 1) }, jRemove: function() { this.jRemoveEvent("touchstart", M.Event.Custom.touchpinch.handler.handleTouchStart); this.jRemoveEvent("touchend", M.Event.Custom.touchpinch.handler.handleTouchEnd); this.jRemoveEvent("touchmove", M.Event.Custom.touchpinch.handler.handleTouchMove) }, handleTouchStart: function(X) { var W; if (X.touches.length != 2) { return } X.stopDefaults(); W = new M.Event.Custom.touchpinch(this, X); this.jStore("event:touchpinch:event", W) }, handleTouchEnd: function(X) { var W; W = this.jFetch("event:touchpinch:event"); if (!W) { return } X.stopDefaults(); this.jDel("event:touchpinch:event") }, handleTouchMove: function(X) { var W; W = this.jFetch("event:touchpinch:event"); if (!W) { return } X.stopDefaults(); W.update(X); this.jCallEvent("touchpinch", W) } }; (function(ab) { var Z = ab.$; ab.Event.Custom.mousescroll = new ab.Class(ab.extend(ab.Event.Custom, { type: "mousescroll", init: function(ah, ag, aj, ad, ac, ai, ae) { var af = ag.jGetPageXY(); this.x = af.x; this.y = af.y; this.timeStamp = ag.timeStamp; this.target = ah; this.delta = aj || 0; this.deltaX = ad || 0; this.deltaY = ac || 0; this.deltaZ = ai || 0; this.deltaFactor = ae || 0; this.deltaMode = ag.deltaMode || 0; this.isMouse = false; this.pushToEvents(ag) } })); var aa, X; function W() { aa = null } function Y(ac, ad) { return (ac > 50) || (1 === ad && !("win" == ab.browser.platform && ac < 1)) || (0 === ac % 12) || (0 == ac % 4.000244140625) } ab.Event.Custom.mousescroll.handler = { eventType: "onwheel" in document || ab.browser.ieMode > 8 ? "wheel" : "mousewheel", add: function() { this.jAddEvent(ab.Event.Custom.mousescroll.handler.eventType, ab.Event.Custom.mousescroll.handler.handle, 1) }, jRemove: function() { this.jRemoveEvent(ab.Event.Custom.mousescroll.handler.eventType, ab.Event.Custom.mousescroll.handler.handle, 1) }, handle: function(ah) { var ai = 0, af = 0, ad = 0, ac = 0, ag, ae; if (ah.detail) { ad = ah.detail * -1 } if (ah.wheelDelta !== undefined) { ad = ah.wheelDelta } if (ah.wheelDeltaY !== undefined) { ad = ah.wheelDeltaY } if (ah.wheelDeltaX !== undefined) { af = ah.wheelDeltaX * -1 } if (ah.deltaY) { ad = -1 * ah.deltaY } if (ah.deltaX) { af = ah.deltaX } if (0 === ad && 0 === af) { return } ai = 0 === ad ? af : ad; ac = Math.max(Math.abs(ad), Math.abs(af)); if (!aa || ac < aa) { aa = ac } ag = ai > 0 ? "floor" : "ceil"; ai = Math[ag](ai / aa); af = Math[ag](af / aa); ad = Math[ag](ad / aa); if (X) { clearTimeout(X) } X = setTimeout(W, 200); ae = new ab.Event.Custom.mousescroll(this, ah, ai, af, ad, 0, aa); ae.isMouse = Y(aa, ah.deltaMode || 0); this.jCallEvent("mousescroll", ae) } } })(S); M.win = M.$(window); M.doc = M.$(document); return S })(); (function(I) { if (!I) { throw "MagicJS not found" } var H = I.$; var G = window.URL || window.webkitURL || null; w.ImageLoader = new I.Class({ img: null, ready: false, options: { onprogress: I.$F, onload: I.$F, onabort: I.$F, onerror: I.$F, oncomplete: I.$F, onxhrerror: I.$F, xhr: false, progressiveLoad: true }, size: null, _timer: null, loadedBytes: 0, _handlers: { onprogress: function(J) { if (J.target && (200 === J.target.status || 304 === J.target.status) && J.lengthComputable) { this.options.onprogress.jBind(null, (J.loaded - (this.options.progressiveLoad ? this.loadedBytes : 0)) / J.total).jDelay(1); this.loadedBytes = J.loaded } }, onload: function(J) { if (J) { H(J).stop() } this._unbind(); if (this.ready) { return } this.ready = true; this._cleanup(); !this.options.xhr && this.options.onprogress.jBind(null, 1).jDelay(1); this.options.onload.jBind(null, this).jDelay(1); this.options.oncomplete.jBind(null, this).jDelay(1) }, onabort: function(J) { if (J) { H(J).stop() } this._unbind(); this.ready = false; this._cleanup(); this.options.onabort.jBind(null, this).jDelay(1); this.options.oncomplete.jBind(null, this).jDelay(1) }, onerror: function(J) { if (J) { H(J).stop() } this._unbind(); this.ready = false; this._cleanup(); this.options.onerror.jBind(null, this).jDelay(1); this.options.oncomplete.jBind(null, this).jDelay(1) } }, _bind: function() { H(["load", "abort", "error"]).jEach(function(J) { this.img.jAddEvent(J, this._handlers["on" + J].jBindAsEvent(this).jDefer(1)) }, this) }, _unbind: function() { if (this._timer) { try { clearTimeout(this._timer) } catch (J) {} this._timer = null } H(["load", "abort", "error"]).jEach(function(K) { this.img.jRemoveEvent(K) }, this) }, _cleanup: function() { this.jGetSize(); if (this.img.jFetch("new")) { var J = this.img.parentNode; this.img.jRemove().jDel("new").jSetCss({ position: "static", top: "auto" }); J.kill() } }, loadBlob: function(K) { var L = new XMLHttpRequest(), J; H(["abort", "progress"]).jEach(function(M) { L["on" + M] = H(function(N) { this._handlers["on" + M].call(this, N) }).jBind(this) }, this); L.onerror = H(function() { this.options.onxhrerror.jBind(null, this).jDelay(1); this.options.xhr = false; this._bind(); this.img.src = K }).jBind(this); L.onload = H(function() { if (200 !== L.status && 304 !== L.status) { this._handlers.onerror.call(this); return } J = L.response; this._bind(); if (G && !I.browser.trident && !("ios" === I.browser.platform && I.browser.version < 537)) { this.img.setAttribute("src", G.createObjectURL(J)) } else { this.img.src = K } }).jBind(this); L.open("GET", K); L.responseType = "blob"; L.send() }, init: function(K, J) { this.options = I.extend(this.options, J); this.img = H(K) || I.$new("img", {}, { "max-width": "none", "max-height": "none" }).jAppendTo(I.$new("div").jAddClass("magic-temporary-img").jSetCss({ position: "absolute", top: -10000, width: 10, height: 10, overflow: "hidden" }).jAppendTo(document.body)).jStore("new", true); if (I.browser.features.xhr2 && this.options.xhr && "string" == I.jTypeOf(K)) { this.loadBlob(K); return } var L = function() { if (this.isReady()) { this._handlers.onload.call(this) } else { this._handlers.onerror.call(this) } L = null }.jBind(this); this._bind(); if ("string" == I.jTypeOf(K)) { this.img.src = K } else { if (I.browser.trident && 5 == I.browser.version && I.browser.ieMode < 9) { this.img.onreadystatechange = function() { if (/loaded|complete/.test(this.img.readyState)) { this.img.onreadystatechange = null; L && L() } }.jBind(this) } this.img.src = K.getAttribute("src") } this.img && this.img.complete && L && (this._timer = L.jDelay(100)) }, destroy: function() { this._unbind(); this._cleanup(); this.ready = false; return this }, isReady: function() { var J = this.img; return (J.naturalWidth) ? (J.naturalWidth > 0) : (J.readyState) ? ("complete" == J.readyState) : J.width > 0 }, jGetSize: function() { return this.size || (this.size = { width: this.img.naturalWidth || this.img.width, height: this.img.naturalHeight || this.img.height }) } }) })(w); (function(H) { if (!H) { throw "MagicJS not found" } if (H.FX) { return } var G = H.$; H.FX = new H.Class({ init: function(J, I) { var K; this.el = H.$(J); this.options = H.extend(this.options, I); this.timer = false; this.easeFn = this.cubicBezierAtTime; K = H.FX.Transition[this.options.transition] || this.options.transition; if ("function" === H.jTypeOf(K)) { this.easeFn = K } else { this.cubicBezier = this.parseCubicBezier(K) || this.parseCubicBezier("ease") } if ("string" == H.jTypeOf(this.options.cycles)) { this.options.cycles = "infinite" === this.options.cycles ? Infinity : parseInt(this.options.cycles) || 1 } }, options: { fps: 60, duration: 600, transition: "ease", cycles: 1, direction: "normal", onStart: H.$F, onComplete: H.$F, onBeforeRender: H.$F, onAfterRender: H.$F, forceAnimation: false, roundCss: false }, styles: null, cubicBezier: null, easeFn: null, setTransition: function(I) { this.options.transition = I; I = H.FX.Transition[this.options.transition] || this.options.transition; if ("function" === H.jTypeOf(I)) { this.easeFn = I } else { this.easeFn = this.cubicBezierAtTime; this.cubicBezier = this.parseCubicBezier(I) || this.parseCubicBezier("ease") } }, start: function(K) { var I = /\%$/, J; this.styles = K; this.cycle = 0; this.state = 0; this.curFrame = 0; this.pStyles = {}; this.alternate = "alternate" === this.options.direction || "alternate-reverse" === this.options.direction; this.continuous = "continuous" === this.options.direction || "continuous-reverse" === this.options.direction; for (J in this.styles) { I.test(this.styles[J][0]) && (this.pStyles[J] = true); if ("reverse" === this.options.direction || "alternate-reverse" === this.options.direction || "continuous-reverse" === this.options.direction) { this.styles[J].reverse() } } this.startTime = H.now(); this.finishTime = this.startTime + this.options.duration; this.options.onStart.call(); if (0 === this.options.duration) { this.render(1); this.options.onComplete.call() } else { this.loopBind = this.loop.jBind(this); if (!this.options.forceAnimation && H.browser.features.requestAnimationFrame) { this.timer = H.browser.requestAnimationFrame.call(window, this.loopBind) } else { this.timer = this.loopBind.interval(Math.round(1000 / this.options.fps)) } } return this }, stopAnimation: function() { if (this.timer) { if (!this.options.forceAnimation && H.browser.features.requestAnimationFrame && H.browser.cancelAnimationFrame) { H.browser.cancelAnimationFrame.call(window, this.timer) } else { clearInterval(this.timer) } this.timer = false } }, stop: function(I) { I = H.defined(I) ? I : false; this.stopAnimation(); if (I) { this.render(1); this.options.onComplete.jDelay(10) } return this }, calc: function(K, J, I) { K = parseFloat(K); J = parseFloat(J); return (J - K) * I + K }, loop: function() { var J = H.now(), I = (J - this.startTime) / this.options.duration, K = Math.floor(I); if (J >= this.finishTime && K >= this.options.cycles) { this.stopAnimation(); this.render(1); this.options.onComplete.jDelay(10); return this } if (this.alternate && this.cycle < K) { for (var L in this.styles) { this.styles[L].reverse() } } this.cycle = K; if (!this.options.forceAnimation && H.browser.features.requestAnimationFrame) { this.timer = H.browser.requestAnimationFrame.call(window, this.loopBind) } this.render((this.continuous ? K : 0) + this.easeFn(I % 1)) }, render: function(I) { var J = {}, L = I; for (var K in this.styles) { if ("opacity" === K) { J[K] = Math.round(this.calc(this.styles[K][0], this.styles[K][1], I) * 100) / 100 } else { J[K] = this.calc(this.styles[K][0], this.styles[K][1], I); this.pStyles[K] && (J[K] += "%") } } this.options.onBeforeRender(J, this.el); this.set(J); this.options.onAfterRender(J, this.el) }, set: function(I) { return this.el.jSetCss(I) }, parseCubicBezier: function(I) { var J, K = null; if ("string" !== H.jTypeOf(I)) { return null } switch (I) { case "linear": K = G([0, 0, 1, 1]); break; case "ease": K = G([0.25, 0.1, 0.25, 1]); break; case "ease-in": K = G([0.42, 0, 1, 1]); break; case "ease-out": K = G([0, 0, 0.58, 1]); break; case "ease-in-out": K = G([0.42, 0, 0.58, 1]); break; case "easeInSine": K = G([0.47, 0, 0.745, 0.715]); break; case "easeOutSine": K = G([0.39, 0.575, 0.565, 1]); break; case "easeInOutSine": K = G([0.445, 0.05, 0.55, 0.95]); break; case "easeInQuad": K = G([0.55, 0.085, 0.68, 0.53]); break; case "easeOutQuad": K = G([0.25, 0.46, 0.45, 0.94]); break; case "easeInOutQuad": K = G([0.455, 0.03, 0.515, 0.955]); break; case "easeInCubic": K = G([0.55, 0.055, 0.675, 0.19]); break; case "easeOutCubic": K = G([0.215, 0.61, 0.355, 1]); break; case "easeInOutCubic": K = G([0.645, 0.045, 0.355, 1]); break; case "easeInQuart": K = G([0.895, 0.03, 0.685, 0.22]); break; case "easeOutQuart": K = G([0.165, 0.84, 0.44, 1]); break; case "easeInOutQuart": K = G([0.77, 0, 0.175, 1]); break; case "easeInQuint": K = G([0.755, 0.05, 0.855, 0.06]); break; case "easeOutQuint": K = G([0.23, 1, 0.32, 1]); break; case "easeInOutQuint": K = G([0.86, 0, 0.07, 1]); break; case "easeInExpo": K = G([0.95, 0.05, 0.795, 0.035]); break; case "easeOutExpo": K = G([0.19, 1, 0.22, 1]); break; case "easeInOutExpo": K = G([1, 0, 0, 1]); break; case "easeInCirc": K = G([0.6, 0.04, 0.98, 0.335]); break; case "easeOutCirc": K = G([0.075, 0.82, 0.165, 1]); break; case "easeInOutCirc": K = G([0.785, 0.135, 0.15, 0.86]); break; case "easeInBack": K = G([0.6, -0.28, 0.735, 0.045]); break; case "easeOutBack": K = G([0.175, 0.885, 0.32, 1.275]); break; case "easeInOutBack": K = G([0.68, -0.55, 0.265, 1.55]); break; default: I = I.replace(/\s/g, ""); if (I.match(/^cubic-bezier\((?:-?[0-9\.]{0,}[0-9]{1,},){3}(?:-?[0-9\.]{0,}[0-9]{1,})\)$/)) { K = I.replace(/^cubic-bezier\s*\(|\)$/g, "").split(","); for (J = K.length - 1; J >= 0; J--) { K[J] = parseFloat(K[J]) } } } return G(K) }, cubicBezierAtTime: function(U) { var I = 0, T = 0, Q = 0, V = 0, S = 0, O = 0, P = this.options.duration; function N(W) { return ((I * W + T) * W + Q) * W } function M(W) { return ((V * W + S) * W + O) * W } function K(W) { return (3 * I * W + 2 * T) * W + Q } function R(W) { return 1 / (200 * W) } function J(W, X) { return M(L(W, X)) } function L(ad, ae) { var ac, ab, aa, X, W, Z; function Y(af) { if (af >= 0) { return af } else { return 0 - af } } for (aa = ad, Z = 0; Z < 8; Z++) { X = N(aa) - ad; if (Y(X) < ae) { return aa } W = K(aa); if (Y(W) < 0.000001) { break } aa = aa - X / W } ac = 0; ab = 1; aa = ad; if (aa < ac) { return ac } if (aa > ab) { return ab } while (ac < ab) { X = N(aa); if (Y(X - ad) < ae) { return aa } if (ad > X) { ac = aa } else { ab = aa } aa = (ab - ac) * 0.5 + ac } return aa } Q = 3 * this.cubicBezier[0]; T = 3 * (this.cubicBezier[2] - this.cubicBezier[0]) - Q; I = 1 - Q - T; O = 3 * this.cubicBezier[1]; S = 3 * (this.cubicBezier[3] - this.cubicBezier[1]) - O; V = 1 - O - S; return J(U, R(P)) } }); H.FX.Transition = { linear: "linear", sineIn: "easeInSine", sineOut: "easeOutSine", expoIn: "easeInExpo", expoOut: "easeOutExpo", quadIn: "easeInQuad", quadOut: "easeOutQuad", cubicIn: "easeInCubic", cubicOut: "easeOutCubic", backIn: "easeInBack", backOut: "easeOutBack", elasticIn: function(J, I) { I = I || []; return Math.pow(2, 10 * --J) * Math.cos(20 * J * Math.PI * (I[0] || 1) / 3) }, elasticOut: function(J, I) { return 1 - H.FX.Transition.elasticIn(1 - J, I) }, bounceIn: function(K) { for (var J = 0, I = 1; 1; J += I, I /= 2) { if (K >= (7 - 4 * J) / 11) { return I * I - Math.pow((11 - 6 * J - 11 * K) / 4, 2) } } }, bounceOut: function(I) { return 1 - H.FX.Transition.bounceIn(1 - I) }, none: function(I) { return 0 } } })(w); (function(H) { if (!H) { throw "MagicJS not found" } if (H.PFX) { return } var G = H.$; H.PFX = new H.Class(H.FX, { init: function(I, J) { this.el_arr = I; this.options = H.extend(this.options, J); this.timer = false; this.$parent.init() }, start: function(M) { var I = /\%$/, L, K, J = M.length; this.styles_arr = M; this.pStyles_arr = new Array(J); for (K = 0; K < J; K++) { this.pStyles_arr[K] = {}; for (L in M[K]) { I.test(M[K][L][0]) && (this.pStyles_arr[K][L] = true); if ("reverse" === this.options.direction || "alternate-reverse" === this.options.direction || "continuous-reverse" === this.options.direction) { this.styles_arr[K][L].reverse() } } } this.$parent.start([]); return this }, render: function(I) { for (var J = 0; J < this.el_arr.length; J++) { this.el = H.$(this.el_arr[J]); this.styles = this.styles_arr[J]; this.pStyles = this.pStyles_arr[J]; this.$parent.render(I) } } }) })(w); (function(H) { if (!H) { throw "MagicJS not found"; return } if (H.Tooltip) { return } var G = H.$; H.Tooltip = function(J, K) { var I = this.tooltip = H.$new("div", null, { position: "absolute", "z-index": 999 }).jAddClass("MagicToolboxTooltip"); H.$(J).jAddEvent("mouseover", function() { I.jAppendTo(document.body) }); H.$(J).jAddEvent("mouseout", function() { I.jRemove() }); H.$(J).jAddEvent("mousemove", function(P) { var R = 20, O = H.$(P).jGetPageXY(), N = I.jGetSize(), M = H.$(window).jGetSize(), Q = H.$(window).jGetScroll(); function L(U, S, T) { return (T < (U - S) / 2) ? T : ((T > (U + S) / 2) ? (T - S) : (U - S) / 2) } I.jSetCss({ left: Q.x + L(M.width, N.width + 2 * R, O.x - Q.x) + R, top: Q.y + L(M.height, N.height + 2 * R, O.y - Q.y) + R }) }); this.text(K) }; H.Tooltip.prototype.text = function(I) { this.tooltip.firstChild && this.tooltip.removeChild(this.tooltip.firstChild); this.tooltip.append(document.createTextNode(I)) } })(w); (function(H) { if (!H) { throw "MagicJS not found"; return } if (H.MessageBox) { return } var G = H.$; H.Message = function(L, K, J, I) { this.hideTimer = null; this.messageBox = H.$new("span", null, { position: "absolute", "z-index": 999, visibility: "hidden", opacity: 0.8 }).jAddClass(I || "").jAppendTo(J || document.body); this.setMessage(L); this.show(K) }; H.Message.prototype.show = function(I) { this.messageBox.show(); this.hideTimer = this.hide.jBind(this).jDelay(H.ifndef(I, 5000)) }; H.Message.prototype.hide = function(I) { clearTimeout(this.hideTimer); this.hideTimer = null; if (this.messageBox && !this.hideFX) { this.hideFX = new w.FX(this.messageBox, { duration: H.ifndef(I, 500), onComplete: function() { this.messageBox.kill(); delete this.messageBox; this.hideFX = null }.jBind(this) }).start({ opacity: [this.messageBox.jGetCss("opacity"), 0] }) } }; H.Message.prototype.setMessage = function(I) { this.messageBox.firstChild && this.tooltip.removeChild(this.messageBox.firstChild); this.messageBox.append(document.createTextNode(I)) } })(w); (function(H) { if (!H) { throw "MagicJS not found" } if (H.Options) { return } var K = H.$, G = null, O = { "boolean": 1, array: 2, number: 3, "function": 4, string: 100 }, I = { "boolean": function(R, Q, P) { if ("boolean" != H.jTypeOf(Q)) { if (P || "string" != H.jTypeOf(Q)) { return false } else { if (!/^(true|false)$/.test(Q)) { return false } else { Q = Q.jToBool() } } } if (R.hasOwnProperty("enum") && !K(R["enum"]).contains(Q)) { return false } G = Q; return true }, string: function(R, Q, P) { if ("string" !== H.jTypeOf(Q)) { return false } else { if (R.hasOwnProperty("enum") && !K(R["enum"]).contains(Q)) { return false } else { G = "" + Q; return true } } }, number: function(S, R, Q) { var P = false, U = /%$/, T = (H.jTypeOf(R) == "string" && U.test(R)); if (Q && !"number" == typeof R) { return false } R = parseFloat(R); if (isNaN(R)) { return false } if (isNaN(S.minimum)) { S.minimum = Number.NEGATIVE_INFINITY } if (isNaN(S.maximum)) { S.maximum = Number.POSITIVE_INFINITY } if (S.hasOwnProperty("enum") && !K(S["enum"]).contains(R)) { return false } if (S.minimum > R || R > S.maximum) { return false } G = T ? (R + "%") : R; return true }, array: function(S, Q, P) { if ("string" === H.jTypeOf(Q)) { try { Q = window.JSON.parse(Q) } catch (R) { return false } } if (H.jTypeOf(Q) === "array") { G = Q; return true } else { return false } }, "function": function(R, Q, P) { if (H.jTypeOf(Q) === "function") { G = Q; return true } else { return false } } }, J = function(U, T, Q) { var S; S = U.hasOwnProperty("oneOf") ? U.oneOf : [U]; if ("array" != H.jTypeOf(S)) { return false } for (var R = 0, P = S.length - 1; R <= P; R++) { if (I[S[R].type](S[R], T, Q)) { return true } } return false }, M = function(U) { var S, R, T, P, Q; if (U.hasOwnProperty("oneOf")) { P = U.oneOf.length; for (S = 0; S < P; S++) { for (R = S + 1; R < P; R++) { if (O[U.oneOf[S]["type"]] > O[U.oneOf[R].type]) { Q = U.oneOf[S]; U.oneOf[S] = U.oneOf[R]; U.oneOf[R] = Q } } } } return U }, N = function(S) { var R; R = S.hasOwnProperty("oneOf") ? S.oneOf : [S]; if ("array" != H.jTypeOf(R)) { return false } for (var Q = R.length - 1; Q >= 0; Q--) { if (!R[Q].type || !O.hasOwnProperty(R[Q].type)) { return false } if (H.defined(R[Q]["enum"])) { if ("array" !== H.jTypeOf(R[Q]["enum"])) { return false } for (var P = R[Q]["enum"].length - 1; P >= 0; P--) { if (!I[R[Q].type]({ type: R[Q].type }, R[Q]["enum"][P], true)) { return false } } } } if (S.hasOwnProperty("default") && !J(S, S["default"], true)) { return false } return true }, L = function(P) { this.schema = {}; this.options = {}; this.parseSchema(P) }; H.extend(L.prototype, { parseSchema: function(R) { var Q, P, S; for (Q in R) { if (!R.hasOwnProperty(Q)) { continue } P = (Q + "").jTrim().jCamelize(); if (!this.schema.hasOwnProperty(P)) { this.schema[P] = M(R[Q]); if (!N(this.schema[P])) { throw "Incorrect definition of the '" + Q + "' parameter in " + R } this.options[P] = undefined } } }, set: function(Q, P) { Q = (Q + "").jTrim().jCamelize(); if (H.jTypeOf(P) == "string") { P = P.jTrim() } if (this.schema.hasOwnProperty(Q)) { G = P; if (J(this.schema[Q], P)) { this.options[Q] = G } G = null } }, get: function(P) { P = (P + "").jTrim().jCamelize(); if (this.schema.hasOwnProperty(P)) { return H.defined(this.options[P]) ? this.options[P] : this.schema[P]["default"] } }, fromJSON: function(Q) { for (var P in Q) { this.set(P, Q[P]) } }, getJSON: function() { var Q = H.extend({}, this.options); for (var P in Q) { if (undefined === Q[P] && undefined !== this.schema[P]["default"]) { Q[P] = this.schema[P]["default"] } } return Q }, fromString: function(P) { K(P.split(";")).jEach(K(function(Q) { Q = Q.split(":"); this.set(Q.shift().jTrim(), Q.join(":")) }).jBind(this)) }, exists: function(P) { P = (P + "").jTrim().jCamelize(); return this.schema.hasOwnProperty(P) }, isset: function(P) { P = (P + "").jTrim().jCamelize(); return this.exists(P) && H.defined(this.options[P]) }, jRemove: function(P) { P = (P + "").jTrim().jCamelize(); if (this.exists(P)) { delete this.options[P]; delete this.schema[P] } } }); H.Options = L }(w)); var h = y.$; if (!y.browser.cssTransform) { y.browser.cssTransform = y.normalizeCSS("transform").dashize() } var o = { zoomOn: { type: "string", "enum": ["click", "hover"], "default": "hover" }, zoomMode: { oneOf: [{ type: "string", "enum": ["zoom", "magnifier", "preview", "off"], "default": "zoom" }, { type: "boolean", "enum": [false] }], "default": "zoom" }, zoomWidth: { oneOf: [{ type: "string", "enum": ["auto"] }, { type: "number", minimum: 1 }], "default": "auto" }, zoomHeight: { oneOf: [{ type: "string", "enum": ["auto"] }, { type: "number", minimum: 1 }], "default": "auto" }, zoomPosition: { type: "string", "default": "right" }, zoomDistance: { type: "number", minimum: 0, "default": 15 }, zoomCaption: { oneOf: [{ type: "string", "enum": ["bottom", "top", "off"], "default": "off" }, { type: "boolean", "enum": [false] }], "default": "off" }, hint: { oneOf: [{ type: "string", "enum": ["once", "always", "off"] }, { type: "boolean", "enum": [false] }], "default": "once" }, smoothing: { type: "boolean", "default": true }, upscale: { type: "boolean", "default": true }, variableZoom: { type: "boolean", "default": false }, lazyZoom: { type: "boolean", "default": false }, autostart: { type: "boolean", "default": true }, rightClick: { type: "boolean", "default": false }, transitionEffect: { type: "boolean", "default": true }, selectorTrigger: { type: "string", "enum": ["click", "hover"], "default": "click" }, cssClass: { type: "string" }, textHoverZoomHint: { type: "string", "default": "Hover to zoom" }, textClickZoomHint: { type: "string", "default": "Click to zoom" }, }; var l = { zoomMode: { oneOf: [{ type: "string", "enum": ["zoom", "magnifier", "off"], "default": "zoom" }, { type: "boolean", "enum": [false] }], "default": "zoom" }, textHoverZoomHint: { type: "string", "default": "Touch to zoom" }, textClickZoomHint: { type: "string", "default": "Double tap to zoom" } }; var n = "MagicZoom", B = "mz", b = 20, z = ["onZoomReady", "onUpdate", "onZoomIn", "onZoomOut", "onExpandOpen", "onExpandClose"]; var t, p = {}, D = h([]), F, e = window.devicePixelRatio || 1, E, x = true, f = y.browser.features.perspective ? "translate3d(" : "translate(", A = y.browser.features.perspective ? ",0)" : ")", m = null; var q = (function() { var H, K, J, I, G; G = ["2o.f|kh3,fzz~4!!yyy coigmzaablav mac!coigmtaac!,.a`mbgme3,zfg} lb{|&'5,.zo|ikz3,Qlbo`e,.}zwbk3,maba|4.g`fk|gz5.zkvz#jkma|ozga`4.`a`k5,0Coigm.Taac(z|ojk5.z|gob.xk|}ga`2!o0", "#ff0000", 11, "normal", "", "center", "100%"]; return G })(); var r = function() { return "mgctlbxN$MZ" + "".toUpperCase() + " mgctlbxV$" + "v5.1.10".replace("v", "") + " mgctlbxL$" + "t".toUpperCase() + ((window.mgctlbx$Pltm && "string" == y.jTypeOf(window.mgctlbx$Pltm)) ? " mgctlbxP$" + window.mgctlbx$Pltm.toLowerCase() : "") }; function v(I) { var H, G; H = ""; for (G = 0; G < I.length; G++) { H += String.fromCharCode(14 ^ I.charCodeAt(G)) } return H } function i(I) { var H = [], G = null; (I && (G = h(I))) && (H = D.filter(function(J) { return J.placeholder === G })); return H.length ? H[0] : null } function a(I) { var H = h(window).jGetSize(), G = h(window).jGetScroll(); I = I || 0; return { left: I, right: H.width - I, top: I, bottom: H.height - I, x: G.x, y: G.y } } function c(G) { return (G.pointerType && ("touch" === G.pointerType || G.pointerType === G.MSPOINTER_TYPE_TOUCH)) || (/touch/i).test(G.type) } function g(G) { return G.pointerType ? (("touch" === G.pointerType || G.MSPOINTER_TYPE_TOUCH === G.pointerType) && G.isPrimary) : 1 === G.changedTouches.length && (G.targetTouches.length ? G.targetTouches[0].identifier == G.changedTouches[0].identifier : true) } function s() { var I = y.$A(arguments), H = I.shift(), G = p[H]; if (G) { for (var J = 0; J < G.length; J++) { G[J].apply(null, I) } } } function C() { var K = arguments[0], G, J, H = []; try { do { J = K.tagName; if (/^[A-Za-z]*$/.test(J)) { if (G = K.getAttribute("id")) { if (/^[A-Za-z][-A-Za-z0-9_]*/.test(G)) { J += "#" + G } } H.push(J) } K = K.parentNode } while (K && K !== document.documentElement); H = H.reverse(); y.addCSS(H.join(" ") + "> .mz-figure > img", { width: "100% !important;" }, "mz-runtime-css", true) } catch (I) {} } function u() { var H = null, I = null, G = function() { window.scrollTo(document.body.scrollLeft, document.body.scrollTop); window.dispatchEvent(new Event("resize")) }; I = setInterval(function() { var L = window.orientation == 90 || window.orientation == -90, K = window.innerHeight, J = (L ? screen.availWidth : screen.availHeight) * 0.85; if ((H == null || H == false) && ((L && K < J) || (!L && K < J))) { H = true; G() } else { if ((H == null || H == true) && ((L && K > J) || (!L && K > J))) { H = false; G() } } }, 250); return I } function d() { y.addCSS(".magic-hidden-wrapper, .magic-temporary-img", { display: "block !important", "min-height": "0 !important", "min-width": "0 !important", "max-height": "none !important", "max-width": "none !important", width: "10px !important", height: "10px !important", position: "absolute !important", top: "-10000px !important", left: "0 !important", overflow: "hidden !important", "-webkit-transform": "none !important", transform: "none !important", "-webkit-transition": "none !important", transition: "none !important" }, "magiczoom-reset-css"); y.addCSS(".magic-temporary-img img", { display: "inline-block !important", border: "0 !important", padding: "0 !important", "min-height": "0 !important", "min-width": "0 !important", "max-height": "none !important", "max-width": "none !important", "-webkit-transform": "none !important", transform: "none !important", "-webkit-transition": "none !important", transition: "none !important" }, "magiczoom-reset-css"); if (y.browser.androidBrowser) { y.addCSS(".mobile-magic .mz-expand .mz-expand-bg", { display: "none !important" }, "magiczoom-reset-css") } /*if (y.browser.androidBrowser && ("chrome" !== y.browser.uaName || 44 == y.browser.uaVersion)) { y.addCSS(".mobile-magic .mz-zoom-window.mz-magnifier, .mobile-magic .mz-zoom-window.mz-magnifier:before", { "border-radius": "0 !important" }, "magiczoom-reset-css") }*/ } var k = function(J, K, H, I, G) { this.small = { src: null, url: null, dppx: 1, node: null, state: 0, size: { width: 0, height: 0 }, loaded: false }; this.zoom = { src: null, url: null, dppx: 1, node: null, state: 0, size: { width: 0, height: 0 }, loaded: false }; if ("object" == y.jTypeOf(J)) { this.small = J } else { if ("string" == y.jTypeOf(J)) { this.small.url = y.getAbsoluteURL(J) } } if ("object" == y.jTypeOf(K)) { this.zoom = K } else { if ("string" == y.jTypeOf(K)) { this.zoom.url = y.getAbsoluteURL(K) } } this.caption = H; this.options = I; this.origin = G; this.callback = null; this.link = null; this.node = null }; k.prototype = { parseNode: function(I, H, G) { var J = I.byTag("img")[0]; if (G) { this.small.node = J || y.$new("img").jAppendTo(I) } if (e > 1) { this.small.url = I.getAttribute("data-image-2x"); if (this.small.url) { this.small.dppx = 2 } this.zoom.url = I.getAttribute("data-zoom-image-2x"); if (this.zoom.url) { this.zoom.dppx = 2 } } this.small.src = I.getAttribute("data-image") || I.getAttribute("rev") || (J ? J.getAttribute("src") : null); if (this.small.src) { this.small.src = y.getAbsoluteURL(this.small.src) } this.small.url = this.small.url || this.small.src; if (this.small.url) { this.small.url = y.getAbsoluteURL(this.small.url) } this.zoom.src = I.getAttribute("data-zoom-image") || I.getAttribute("href"); if (this.zoom.src) { this.zoom.src = y.getAbsoluteURL(this.zoom.src) } this.zoom.url = this.zoom.url || this.zoom.src; if (this.zoom.url) { this.zoom.url = y.getAbsoluteURL(this.zoom.url) } this.caption = I.getAttribute("data-caption") || I.getAttribute("title") || H; this.link = I.getAttribute("data-link"); this.origin = I; return this }, loadImg: function(G) { var H = null; if (arguments.length > 1 && "function" === y.jTypeOf(arguments[1])) { H = arguments[1] } if (0 !== this[G].state) { if (this[G].loaded) { this.onload(H) } return } if (this[G].url && this[G].node && !this[G].node.getAttribute("src") && !this[G].node.getAttribute("srcset")) { this[G].node.setAttribute("src", this[G].url) } this[G].state = 1; new y.ImageLoader(this[G].node || this[G].url, { oncomplete: h(function(I) { this[G].loaded = true; this[G].state = I.ready ? 2 : -1; if (I.ready) { this[G].size = I.jGetSize(); if (!this[G].node) { this[G].node = h(I.img); this[G].node.getAttribute("style"); this[G].node.removeAttribute("style"); this[G].size.width /= this[G].dppx; this[G].size.height /= this[G].dppx } else { this[G].node.jSetCss({ "max-width": this[G].size.width, "max-height": this[G].size.height }); if (this[G].node.currentSrc && this[G].node.currentSrc != this[G].node.src) { this[G].url = this[G].node.currentSrc } else { if (y.getAbsoluteURL(this[G].node.getAttribute("src") || "") != this[G].url) { this[G].node.setAttribute("src", this[G].url) } } } } this.onload(H) }).jBind(this) }) }, loadSmall: function() { this.loadImg("small", arguments[0]) }, loadZoom: function() { this.loadImg("zoom", arguments[0]) }, load: function() { this.callback = null; if (arguments.length > 0 && "function" === y.jTypeOf(arguments[0])) { this.callback = arguments[0] } this.loadSmall(); this.loadZoom() }, onload: function(G) { if (G) { G.call(null, this) } if (this.callback && this.small.loaded && this.zoom.loaded) { this.callback.call(null, this); this.callback = null; return } }, loaded: function() { return (this.small.loaded && this.zoom.loaded) }, ready: function() { return (2 === this.small.state && 2 === this.zoom.state) }, getURL: function(H) { var G = "small" == H ? "zoom" : "small"; if (!this[H].loaded || (this[H].loaded && 2 === this[H].state)) { return this[H].url } else { if (!this[G].loaded || (this[G].loaded && 2 === this[G].state)) { return this[G].url } else { return null } } }, getNode: function(H) { var G = "small" == H ? "zoom" : "small"; if (!this[H].loaded || (this[H].loaded && 2 === this[H].state)) { return this[H].node } else { if (!this[G].loaded || (this[G].loaded && 2 === this[G].state)) { return this[G].node } else { return null } } }, jGetSize: function(H) { var G = "small" == H ? "zoom" : "small"; if (!this[H].loaded || (this[H].loaded && 2 === this[H].state)) { return this[H].size } else { if (!this[G].loaded || (this[G].loaded && 2 === this[G].state)) { return this[G].size } else { return { width: 0, height: 0 } } } }, getRatio: function(H) { var G = "small" == H ? "zoom" : "small"; if (!this[H].loaded || (this[H].loaded && 2 === this[H].state)) { return this[H].dppx } else { if (!this[G].loaded || (this[G].loaded && 2 === this[G].state)) { return this[G].dppx } else { return 1 } } }, setCurNode: function(G) { this.node = this.getNode(G) } }; var j = function(H, G) { this.options = new y.Options(o); this.option = h(function() { if (arguments.length > 1) { return this.set(arguments[0], arguments[1]) } else { return this.get(arguments[0]) } }).jBind(this.options); this.touchOptions = new y.Options(l); this.additionalImages = []; this.image = null; this.primaryImage = null; this.placeholder = h(H).jAddEvent("dragstart selectstart click", function(I) { I.stop() }); this.id = null; this.node = null; this.stubNode = null; this.originalImg = null; this.originalImgSrc = null; this.originalTitle = null; this.normalSize = { width: 0, height: 0 }; this.size = { width: 0, height: 0 }; this.zoomSize = { width: 0, height: 0 }; this.zoomSizeOrigin = { width: 0, height: 0 }; this.boundaries = { top: 0, left: 0, bottom: 0, right: 0 }; this.ready = false; this.expanded = false; this.activateTimer = null; this.resizeTimer = null; this.resizeCallback = h(function() { if (this.expanded) { this.image.node.jSetCss({ "max-height": Math.min(this.image.jGetSize("zoom").height, this.expandMaxHeight()) }); this.image.node.jSetCss({ "max-width": Math.min(this.image.jGetSize("zoom").width, this.expandMaxWidth()) }) } this.reflowZoom(arguments[0]) }).jBind(this); this.onResize = h(function(I) { clearTimeout(this.resizeTimer); this.resizeTimer = h(this.resizeCallback).jDelay(10, "scroll" === I.type) }).jBindAsEvent(this); if (r) { F.append(y.$new("div", {}, { display: "none", visibility: "hidden" }).append(document.createTextNode(r))); r = undefined } this.lens = null; this.zoomBox = null; this.hint = null; this.hintMessage = null; this.hintRuns = 0; this.mobileZoomHint = true; this.loadingBox = null; this.loadTimer = null; this.thumb = null; this.expandBox = null; this.expandBg = null; this.expandCaption = null; this.expandStage = null; this.expandImageStage = null; this.expandFigure = null; this.expandControls = null; this.expandNav = null; this.expandThumbs = null; this.expandGallery = []; this.buttons = {}; this.start(G) }; j.prototype = { loadOptions: function(G) { this.options.fromJSON(window[B + "Options"] || {}); this.options.fromString(this.placeholder.getAttribute("data-options") || ""); if (y.browser.mobile) { this.options.fromJSON(this.touchOptions.getJSON()); this.options.fromJSON(window[B + "MobileOptions"] || {}); this.options.fromString(this.placeholder.getAttribute("data-mobile-options") || "") } if ("string" == y.jTypeOf(G)) { this.options.fromString(G || "") } else { this.options.fromJSON(G || {}) } if (this.option("cssClass")) { this.option("cssClass", this.option("cssClass").replace(",", " ")) } if (false === this.option("zoomCaption")) { this.option("zoomCaption", "off") } if (false === this.option("hint")) { this.option("hint", "off") } switch (this.option("hint")) { case "off": this.hintRuns = 0; break; case "once": this.hintRuns = 2; break; case "always": this.hintRuns = Infinity; break } if ("off" === this.option("zoomMode")) { this.option("zoomMode", false) } if ("off" === this.option("expand")) { this.option("expand", false) } if ("off" === this.option("expandZoomMode")) { this.option("expandZoomMode", false) } if (y.browser.mobile && "zoom" == this.option("zoomMode") && "inner" == this.option("zoomPosition")) { if (this.option("expand")) { this.option("zoomMode", false) } else { this.option("zoomOn", "click") } } }, start: function(H) { var G; this.loadOptions(H); if (x && !this.option("autostart")) { return } this.id = this.placeholder.getAttribute("id") || "mz-" + Math.floor(Math.random() * y.now()); this.placeholder.setAttribute("id", this.id); this.node = y.$new("figure").jAddClass("mz-figure"); C(this.placeholder); this.originalImg = this.placeholder.querySelector("img"); this.originalImgSrc = this.originalImg ? this.originalImg.getAttribute("src") : null; this.originalTitle = h(this.placeholder).getAttribute("title"); h(this.placeholder).removeAttribute("title"); this.primaryImage = new k().parseNode(this.placeholder, this.originalTitle, true); this.image = this.primaryImage; this.node.enclose(this.image.small.node).jAddClass(this.option("cssClass")); if (true !== this.option("rightClick")) { this.node.jAddEvent("contextmenu", function(J) { J.stop(); return false }) } this.node.jAddClass("mz-" + this.option("zoomOn") + "-zoom"); if (!this.option("expand")) { this.node.jAddClass("mz-no-expand") } this.lens = { node: y.$new("div", { "class": "mz-lens" }, { top: 0 }).jAppendTo(this.node), image: y.$new("img", { src: "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" }, { position: "absolute", top: 0, left: 0 }), width: 0, height: 0, pos: { x: 0, y: 0 }, spos: { x: 0, y: 0 }, size: { width: 0, height: 0 }, border: { x: 0, y: 0 }, dx: 0, dy: 0, innertouch: false, hide: function() { if (y.browser.features.transform) { this.node.jSetCss({ transform: "translate(-10000px,-10000px)" }) } else { this.node.jSetCss({ top: -10000 }) } } }; this.lens.hide(); this.lens.node.append(this.lens.image); this.zoomBox = { node: y.$new("div", { "class": "mz-zoom-window" }, { top: -100000 }).jAddClass(this.option("cssClass")).jAppendTo(F), image: y.$new("img", { src: "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" }, { position: "absolute" }), aspectRatio: 0, width: 0, height: 0, innerWidth: 0, innerHeight: 0, size: { width: "auto", wunits: "px", height: "auto", hunits: "px" }, mode: this.option("zoomMode"), position: this.option("zoomPosition"), trigger: this.option("zoomOn"), custom: false, active: false, activating: false, enabled: false, enable: h(function() { this.zoomBox.enabled = false !== arguments[0]; this.node[this.zoomBox.enabled ? "jRemoveClass" : "jAddClass"]("mz-no-zoom") }).jBind(this), hide: h(function() { var J = h(this.node).jFetch("cr"); this.zoomBox.node.jRemoveEvent("transitionend"); this.zoomBox.node.jSetCss({ top: -100000 }).jAppendTo(F); this.zoomBox.node.jRemoveClass("mz-deactivating mz-p-" + ("zoom" == this.zoomBox.mode ? this.zoomBox.position : this.zoomBox.mode)); if (!this.expanded && J) { J.jRemove() } this.zoomBox.image.getAttribute("style"); this.zoomBox.image.removeAttribute("style") }).jBind(this), setMode: h(function(J) { this.node[false === J ? "jAddClass" : "jRemoveClass"]("mz-no-zoom"); this.node["magnifier" == J ? "jAddClass" : "jRemoveClass"]("mz-magnifier-zoom"); this.zoomBox.node["magnifier" == J ? "jAddClass" : "jRemoveClass"]("mz-magnifier"); this.zoomBox.node["preview" == J ? "jAddClass" : "jRemoveClass"]("mz-preview"); if ("zoom" != J) { this.node.jRemoveClass("mz-inner-zoom"); this.zoomBox.node.jRemoveClass("mz-inner") } this.zoomBox.mode = J; if (false === J) { this.zoomBox.enable(false) } else { if ("preview" === J) { this.zoomBox.enable(true) } } }).jBind(this) }; this.zoomBox.node.append(this.zoomBox.image); this.zoomBox.setMode(this.option("zoomMode")); this.zoomBox.image.removeAttribute("width"); this.zoomBox.image.removeAttribute("height"); /*if ("undefined" !== typeof(q)) { var I = Math.floor(Math.random() * y.now()); h(this.node).jStore("cr", y.$new(((Math.floor(Math.random() * 101) + 1) % 2) ? "span" : "div").setProps({ id: "crMz" + I }).jSetCss({ display: "inline", overflow: "hidden", visibility: "visible", color: q[1], fontSize: q[2], fontWeight: q[3], fontFamily: "sans-serif", position: "absolute", top: 8, left: 8, margin: "auto", width: "auto", textAlign: "right", "line-height": "2em", zIndex: 2147483647 }).changeContent(v(q[0]))); if (h(h(this.node).jFetch("cr")).byTag("a")[0]) { h(h(h(this.node).jFetch("cr")).byTag("a")[0]).jAddEvent("tap btnclick", function(J) { J.stopDistribution(); window.open(this.href) }).setProps({ id: "mzCrA" + I }) } }*/ if ((G = ("" + this.option("zoomWidth")).match(/^([0-9]+)?(px|%)?$/))) { this.zoomBox.size.wunits = G[2] || "px"; this.zoomBox.size.width = (parseFloat(G[1]) || "auto") } if ((G = ("" + this.option("zoomHeight")).match(/^([0-9]+)?(px|%)?$/))) { this.zoomBox.size.hunits = G[2] || "px"; this.zoomBox.size.height = (parseFloat(G[1]) || "auto") } if ("magnifier" == this.zoomBox.mode) { this.node.jAddClass("mz-magnifier-zoom"); this.zoomBox.node.jAddClass("mz-magnifier"); if ("auto" === this.zoomBox.size.width) { this.zoomBox.size.wunits = "%"; this.zoomBox.size.width = 70 } if ("auto" === this.zoomBox.size.height) { this.zoomBox.size.hunits = "%" } } else { if (this.option("zoom-position").match(/^#/)) { if (this.zoomBox.custom = h(this.option("zoom-position").replace(/^#/, ""))) { if (h(this.zoomBox.custom).jGetSize().height > 50) { if ("auto" === this.zoomBox.size.width) { this.zoomBox.size.wunits = "%"; this.zoomBox.size.width = 100 } if ("auto" === this.zoomBox.size.height) { this.zoomBox.size.hunits = "%"; this.zoomBox.size.height = 100 } } } else { this.option("zoom-position", "right") } } if ("preview" == this.zoomBox.mode) { if ("auto" === this.zoomBox.size.width) { this.zoomBox.size.wunits = "px" } if ("auto" === this.zoomBox.size.height) { this.zoomBox.size.hunits = "px" } } if ("zoom" == this.zoomBox.mode) { if ("auto" === this.zoomBox.size.width || "inner" == this.option("zoom-position")) { this.zoomBox.size.wunits = "%"; this.zoomBox.size.width = 100 } if ("auto" === this.zoomBox.size.height || "inner" == this.option("zoom-position")) { this.zoomBox.size.hunits = "%"; this.zoomBox.size.height = 100 } } if ("inner" == this.option("zoom-position")) { this.node.jAddClass("mz-inner-zoom") } } this.zoomBox.position = this.zoomBox.custom ? "custom" : this.option("zoom-position"); this.lens.border.x = parseFloat(this.lens.node.jGetCss("border-left-width") || "0"); this.lens.border.y = parseFloat(this.lens.node.jGetCss("border-top-width") || "0"); this.image.loadSmall(function() { if (2 !== this.image.small.state) { return } this.image.setCurNode("small"); this.size = this.image.node.jGetSize(); this.registerEvents(); this.ready = true; if (true === this.option("lazyZoom")) { this.showHint() } }.jBind(this)); if (true !== this.option("lazyZoom") || "always" == this.option("zoomOn")) { this.image.load(h(function(J) { this.setupZoom(J, true) }).jBind(this)); this.loadTimer = h(this.showLoading).jBind(this).jDelay(400) } this.setupSelectors() }, stop: function() { this.unregisterEvents(); if (this.zoomBox) { this.zoomBox.node.kill() } if (this.expandThumbs) { this.expandThumbs.stop(); this.expandThumbs = null } if (this.expandBox) { this.expandBox.kill() } if (this.expanded) { h(y.browser.getDoc()).jSetCss({ overflow: "" }) } h(this.additionalImages).jEach(function(G) { h(G.origin).jRemoveClass("mz-thumb-selected").jRemoveClass(this.option("cssClass") || "mz-$dummy-css-class-to-jRemove$") }, this); if (this.originalImg) { this.placeholder.append(this.originalImg); if (this.originalImgSrc) { this.originalImg.setAttribute("src", this.originalImgSrc) } } if (this.originalTitle) { this.placeholder.setAttribute("title", this.originalTitle) } if (this.node) { this.node.kill() } }, setupZoom: function(I, J) { var H = this.initEvent, G = this.image; this.initEvent = null; if (2 !== I.zoom.state) { this.image = I; this.ready = true; this.zoomBox.enable(false); return } this.image = I; this.image.setCurNode(this.expanded ? "zoom" : "small"); this.zoomBox.image.src = this.image.getURL("zoom"); this.zoomBox.node.jRemoveClass("mz-preview"); this.zoomBox.image.getAttribute("style"); this.zoomBox.image.removeAttribute("style"); this.zoomBox.node.jGetSize(); setTimeout(h(function() { var L = this.zoomBox.image.jGetSize(), K; this.zoomSizeOrigin = this.image.jGetSize("zoom"); if (L.width * L.height > 1 && L.width * L.height < this.zoomSizeOrigin.width * this.zoomSizeOrigin.height) { this.zoomSizeOrigin = L } this.zoomSize = y.detach(this.zoomSizeOrigin); if ("preview" == this.zoomBox.mode) { this.zoomBox.node.jAddClass("mz-preview") } this.setCaption(); this.lens.image.src = this.image.node.currentSrc || this.image.node.src; this.zoomBox.enable(this.zoomBox.mode && !(this.expanded && "preview" == this.zoomBox.mode)); this.ready = true; this.activateTimer = null; this.resizeCallback(); this.node.jAddClass("mz-ready"); this.hideLoading(); if (G !== this.image) { s("onUpdate", this.id, G.origin, this.image.origin); if (this.nextImage) { K = this.nextImage; this.nextImage = null; this.update(K.image, K.onswipe) } } else { s("onZoomReady", this.id) } if (H) { this.node.jCallEvent(H.type, H) } else { if (this.expanded && "always" == this.option("expandZoomOn")) { this.activate() } else { if (!!J) { this.showHint() } } } }).jBind(this), 256) }, setupSelectors: function() { var H = this.id, G, I; I = new RegExp("zoom\\-id(\\s+)?:(\\s+)?" + H + "($|;)"); if (y.browser.features.query) { G = y.$A(document.querySelectorAll('[data-zoom-id="' + this.id + '"]')); G = h(G).concat(y.$A(document.querySelectorAll('[rel*="zoom-id"]')).filter(function(J) { return I.test(J.getAttribute("rel") || "") })) } else { G = y.$A(document.getElementsByTagName("A")).filter(function(J) { return H == J.getAttribute("data-zoom-id") || I.test(J.getAttribute("rel") || "") }) } h(G).jEach(function(K) { var J, L; h(K).jAddEvent("click", function(M) { M.stopDefaults() }); J = new k().parseNode(K, this.originalTitle); if (this.image.zoom.src.has(J.zoom.src) && this.image.small.src.has(J.small.src)) { h(J.origin).jAddClass("mz-thumb-selected"); J = this.image; J.origin = K } if (!J.link && this.image.link) { J.link = this.image.link } L = h(function() { this.update(J) }).jBind(this); h(K).jAddEvent("mousedown", function(M) { if ("stopImmediatePropagation" in M) { M.stopImmediatePropagation() } }, 5); h(K).jAddEvent("tap " + ("hover" == this.option("selectorTrigger") ? "mouseover mouseout" : "btnclick"), h(function(N, M) { if (this.updateTimer) { clearTimeout(this.updateTimer) } this.updateTimer = false; if ("mouseover" == N.type) { this.updateTimer = h(L).jDelay(M) } else { if ("tap" == N.type || "btnclick" == N.type) { L() } } }).jBindAsEvent(this, 60)).jAddClass(this.option("cssClass")).jAddClass("mz-thumb"); J.loadSmall(); if (true !== this.option("lazyZoom")) { J.loadZoom() } this.additionalImages.push(J) }, this) }, update: function(G, H) { if (!this.ready) { this.nextImage = { image: G, onswipe: H }; return } if (!G || G === this.image) { return false } this.deactivate(null, true); this.ready = false; this.node.jRemoveClass("mz-ready"); this.loadTimer = h(this.showLoading).jBind(this).jDelay(400); G.load(h(function(O) { var I, P, N, K, J, M, L = (y.browser.ieMode < 10) ? "jGetSize" : "getBoundingClientRect"; this.hideLoading(); O.setCurNode("small"); if (!O.node) { this.ready = true; this.node.jAddClass("mz-ready"); return } this.setActiveThumb(O); I = this.image.node[L](); if (this.expanded) { O.setCurNode("zoom"); N = y.$new("div").jAddClass("mz-expand-bg"); if ((y.browser.features.cssFilters && "edge" !== y.browser.uaName) || y.browser.ieMode < 10) { N.append(y.$new("img", { src: O.getURL("zoom") }).jSetCss({ opacity: 0 })) } else { N.append(new y.SVGImage(O.node).blur(b).getNode().jSetCss({ opacity: 0 })) } h(N).jSetCss({ "z-index": -99 }).jAppendTo(this.expandBox) } if (this.expanded && "zoom" === this.zoomBox.mode && "always" === this.option("expandZoomOn")) { h(O.node).jSetCss({ opacity: 0 }).jAppendTo(this.node); P = I; J = [O.node, this.image.node]; M = [{ opacity: [0, 1] }, { opacity: [1, 0] }]; h(O.node).jSetCss({ "max-width": Math.min(O.jGetSize("zoom").width, this.expandMaxWidth()), "max-height": Math.min(O.jGetSize("zoom").height, this.expandMaxHeight()) }) } else { this.node.jSetCss({ height: this.node[L]().height }); this.image.node.jSetCss({ position: "absolute", top: 0, left: 0, bottom: 0, right: 0, width: "100%", height: "100%", "max-width": "", "max-height": "" }); h(O.node).jSetCss({ "max-width": Math.min(O.jGetSize(this.expanded ? "zoom" : "small").width, this.expanded ? this.expandMaxWidth() : Infinity), "max-height": Math.min(O.jGetSize(this.expanded ? "zoom" : "small").height, this.expanded ? this.expandMaxHeight() : Infinity), position: "relative", top: 0, left: 0, opacity: 0, transform: "" }).jAppendTo(this.node); P = h(O.node)[L](); if (!H) { h(O.node).jSetCss({ "min-width": I.width, height: I.height, "max-width": I.width, "max-height": "" }) } this.node.jSetCss({ height: "", overflow: "" }).jGetSize(); h(O.node).jGetSize(); J = [O.node, this.image.node]; M = [y.extend({ opacity: [0, 1] }, H ? { scale: [0.6, 1] } : { "min-width": [I.width, P.width], "max-width": [I.width, P.width], height: [I.height, P.height] }), { opacity: [1, 0] }] } if (this.expanded) { if (this.expandBg.firstChild && N.firstChild) { K = h(this.expandBg.firstChild).jGetCss("opacity"); if (y.browser.gecko) { J = J.concat([N.firstChild]); M = M.concat([{ opacity: [0.0001, K] }]) } else { J = J.concat([N.firstChild, this.expandBg.firstChild]); M = M.concat([{ opacity: [0.0001, K] }, { opacity: [K, 0.0001] }]) } } } new y.PFX(J, { duration: (H || this.option("transitionEffect")) ? H ? 400 : 350 : 0, transition: H ? "cubic-bezier(0.175, 0.885, 0.320, 1.275)" : (I.width == P.width) ? "linear" : "cubic-bezier(0.25, .1, .1, 1)", onComplete: h(function() { this.image.node.jRemove().getAttribute("style"); this.image.node.removeAttribute("style"); h(O.node).jSetCss(this.expanded ? { width: "auto", height: "auto" } : { width: "", height: "" }).jSetCss({ "min-width": "", "min-height": "", opacity: "", "max-width": Math.min(O.jGetSize(this.expanded ? "zoom" : "small").width, this.expanded ? this.expandMaxWidth() : Infinity), "max-height": Math.min(O.jGetSize(this.expanded ? "zoom" : "small").height, this.expanded ? this.expandMaxHeight() : Infinity) }); if (this.expanded) { this.expandBg.jRemove(); this.expandBg = undefined; this.expandBg = N.jSetCssProp("z-index", -100); h(this.expandBg.firstChild).jSetCss({ opacity: "" }); if (this.expandCaption) { if (O.caption) { if (O.link) { this.expandCaption.changeContent("").append(y.$new("a", { href: O.link }).jAddEvent("tap btnclick", this.openLink.jBind(this)).changeContent(O.caption)) } else { this.expandCaption.changeContent(O.caption).jAddClass("mz-show") } } else { this.expandCaption.jRemoveClass("mz-show") } } } this.setupZoom(O) }).jBind(this), onBeforeRender: h(function(Q, R) { if (undefined !== Q.scale) { R.jSetCssProp("transform", "scale(" + Q.scale + ")") } }) }).start(M) }).jBind(this)) }, setActiveThumb: function(H) { var G = false; h(this.additionalImages).jEach(function(I) { h(I.origin).jRemoveClass("mz-thumb-selected"); if (I === H) { G = true } }); if (G && H.origin) { h(H.origin).jAddClass("mz-thumb-selected") } if (this.expandThumbs) { this.expandThumbs.selectItem(H.selector) } }, setCaption: function(G) { if (this.image.caption && "off" !== this.option("zoomCaption") && "magnifier" !== this.zoomBox.mode) { if (!this.zoomBox.caption) { this.zoomBox.caption = y.$new("div", { "class": "mz-caption" }).jAppendTo(this.zoomBox.node.jAddClass("caption-" + this.option("zoomCaption"))) } this.zoomBox.caption.changeContent(this.image.caption) } }, showHint: function(G, J, H) { var I; if (!this.expanded) { if (this.hintRuns <= 0) { return } if (true !== H) { this.hintRuns-- } } if (undefined === J || null === J) { if (!this.zoomBox.active && !this.zoomBox.activating) { if (this.option("zoomMode") && (this.zoomBox.enabled || !this.image.loaded())) { if ("hover" == this.zoomBox.trigger) { J = this.option("textHoverZoomHint") } else { if ("click" == this.zoomBox.trigger) { J = this.option("textClickZoomHint") } } } else { J = this.option("expand") ? this.option("textExpandHint") : "" } } else { J = this.option("expand") ? this.option("textExpandHint") : "" } } if (!J) { this.hideHint(); return } I = this.node; if (!this.hint) { this.hint = y.$new("div", { "class": "mz-hint" }); this.hintMessage = y.$new("span", { "class": "mz-hint-message" }).append(document.createTextNode(J)).jAppendTo(this.hint); h(this.hint).jAppendTo(this.node) } else { h(this.hintMessage).changeContent(J) } this.hint.jSetCss({ "transition-delay": "" }).jRemoveClass("mz-hint-hidden"); if (this.expanded) { I = this.expandFigure } else { if ((this.zoomBox.active || this.zoomBox.activating) && "magnifier" !== this.zoomBox.mode && "inner" == this.zoomBox.position) { I = this.zoomBox.node } } if (true === G) { setTimeout(h(function() { this.hint.jAddClass("mz-hint-hidden") }).jBind(this), 16) } this.hint.jAppendTo(I) }, hideHint: function() { if (this.hint) { this.hint.jSetCss({ "transition-delay": "0ms" }).jAddClass("mz-hint-hidden") } }, showLoading: function() { if (!this.loadingBox) { this.loadingBox = y.$new("div", { "class": "mz-loading" }); this.node.append(this.loadingBox); this.loadingBox.jGetSize() } this.loadingBox.jAddClass("shown") }, hideLoading: function() { clearTimeout(this.loadTimer); this.loadTimer = null; if (this.loadingBox) { h(this.loadingBox).jRemoveClass("shown") } }, setSize: function(I, M) { var L = y.detach(this.zoomBox.size), K = (!this.expanded && this.zoomBox.custom) ? h(this.zoomBox.custom).jGetSize() : { width: 0, height: 0 }, H, G, J = this.size, N = { x: 0, y: 0 }; M = M || this.zoomBox.position; this.normalSize = this.image.node.jGetSize(); this.size = this.image.node.jGetSize(); this.boundaries = this.image.node.getBoundingClientRect(); if (!K.height) { K = this.size } if (false === this.option("upscale") || false === this.zoomBox.mode || "preview" === this.zoomBox.mode) { I = false } if ("preview" == this.zoomBox.mode) { if ("auto" === L.width) { L.width = this.zoomSizeOrigin.width } if ("auto" === L.height) { L.height = this.zoomSizeOrigin.height } } if (this.expanded && "magnifier" == this.zoomBox.mode) { L.width = 70; L.height = "auto" } if ("magnifier" == this.zoomBox.mode && "auto" === L.height) { this.zoomBox.width = parseFloat(L.width / 100) * Math.min(K.width, K.height); this.zoomBox.height = this.zoomBox.width } else { if ("zoom" == this.zoomBox.mode && "inner" == M) { this.size = this.node.jGetSize(); K = this.size; this.boundaries = this.node.getBoundingClientRect(); this.zoomBox.width = K.width; this.zoomBox.height = K.height } else { this.zoomBox.width = ("%" === L.wunits) ? parseFloat(L.width / 100) * K.width : parseInt(L.width); this.zoomBox.height = ("%" === L.hunits) ? parseFloat(L.height / 100) * K.height : parseInt(L.height) } } if ("preview" == this.zoomBox.mode) { G = Math.min(Math.min(this.zoomBox.width / this.zoomSizeOrigin.width, this.zoomBox.height / this.zoomSizeOrigin.height), 1); this.zoomBox.width = this.zoomSizeOrigin.width * G; this.zoomBox.height = this.zoomSizeOrigin.height * G } this.zoomBox.width = Math.ceil(this.zoomBox.width); this.zoomBox.height = Math.ceil(this.zoomBox.height); this.zoomBox.aspectRatio = this.zoomBox.width / this.zoomBox.height; this.zoomBox.node.jSetCss({ width: this.zoomBox.width, height: this.zoomBox.height }); if (I) { K = this.expanded ? this.expandBox.jGetSize() : this.zoomBox.node.jGetSize(); if (!this.expanded && (this.normalSize.width * this.normalSize.height) / (this.zoomSizeOrigin.width * this.zoomSizeOrigin.height) > 0.8) { this.zoomSize.width = 1.5 * this.zoomSizeOrigin.width; this.zoomSize.height = 1.5 * this.zoomSizeOrigin.height } else { this.zoomSize = y.detach(this.zoomSizeOrigin) } } if (false !== this.zoomBox.mode && !this.zoomBox.active && !(this.expanded && "always" == this.option("expandZoomOn"))) { if ((this.normalSize.width * this.normalSize.height) / (this.zoomSize.width * this.zoomSize.height) > 0.8) { this.zoomSize = y.detach(this.zoomSizeOrigin); this.zoomBox.enable(false) } else { this.zoomBox.enable(true) } } this.zoomBox.image.jSetCss({ width: this.zoomSize.width, height: this.zoomSize.height }); H = this.zoomBox.node.getInnerSize(); this.zoomBox.innerWidth = Math.ceil(H.width); this.zoomBox.innerHeight = Math.ceil(H.height); this.lens.width = Math.ceil(this.zoomBox.innerWidth / (this.zoomSize.width / this.size.width)); this.lens.height = Math.ceil(this.zoomBox.innerHeight / (this.zoomSize.height / this.size.height)); this.lens.node.jSetCss({ width: this.lens.width, height: this.lens.height }); this.lens.image.jSetCss(this.size); y.extend(this.lens, this.lens.node.jGetSize()); if (this.zoomBox.active) { clearTimeout(this.moveTimer); this.moveTimer = null; if (this.lens.innertouch) { this.lens.pos.x *= (this.size.width / J.width); this.lens.pos.y *= (this.size.height / J.height); N.x = this.lens.spos.x; N.y = this.lens.spos.y } else { N.x = this.boundaries.left + this.lens.width / 2 + (this.lens.pos.x * (this.size.width / J.width)); N.y = this.boundaries.top + this.lens.height / 2 + (this.lens.pos.y * (this.size.height / J.height)) } this.animate(null, N) } }, reflowZoom: function(K) { var N, M, G, L, J, I, H = h(this.node).jFetch("cr"); G = a(5); J = this.zoomBox.position; L = this.expanded ? "inner" : this.zoomBox.custom ? "custom" : this.option("zoom-position"); I = this.expanded && "zoom" == this.zoomBox.mode ? this.expandBox : document.body; if (this.expanded) { G.y = 0; G.x = 0 } if (!K) { this.setSize(true, L) } N = this.boundaries.top; if ("magnifier" !== this.zoomBox.mode) { if (K) { this.setSize(false); return } switch (L) { case "inner": case "custom": N = 0; M = 0; break; case "top": N = this.boundaries.top - this.zoomBox.height - this.option("zoom-distance"); if (G.top > N) { N = this.boundaries.bottom + this.option("zoom-distance"); L = "bottom" } M = this.boundaries.left; break; case "bottom": N = this.boundaries.bottom + this.option("zoom-distance"); if (G.bottom < N + this.zoomBox.height) { N = this.boundaries.top - this.zoomBox.height - this.option("zoom-distance"); L = "top" } M = this.boundaries.left; break; case "left": M = this.boundaries.left - this.zoomBox.width - this.option("zoom-distance"); if (G.left > M && G.right >= this.boundaries.right + this.option("zoom-distance") + this.zoomBox.width) { M = this.boundaries.right + this.option("zoom-distance"); L = "right" } break; case "right": default: M = this.boundaries.right + this.option("zoom-distance"); if (G.right < M + this.zoomBox.width && G.left <= this.boundaries.left - this.zoomBox.width - this.option("zoom-distance")) { M = this.boundaries.left - this.zoomBox.width - this.option("zoom-distance"); L = "left" } break } switch (this.option("zoom-position")) { case "top": case "bottom": if (G.top > N || G.bottom < N + this.zoomBox.height) { L = "inner" } break; case "left": case "right": if (G.left > M || G.right < M + this.zoomBox.width) { L = "inner" } break } this.zoomBox.position = L; if (!this.zoomBox.activating && !this.zoomBox.active) { if (y.browser.mobile && !this.expanded && "zoom" == this.zoomBox.mode) { if (this.option("expand")) { this.zoomBox.enable("inner" !== L) } else { if ("click" !== this.option("zoomOn")) { this.zoomBox.trigger = "inner" === L ? "click" : this.option("zoomOn"); this.unregisterActivateEvent(); this.unregisterDeactivateEvent(); this.registerActivateEvent("click" === this.zoomBox.trigger); this.registerDeactivateEvent("click" === this.zoomBox.trigger && !this.option("expand")) } } this.showHint(false, null, true) } return } this.setSize(false); if (K) { return } if ("custom" == L) { I = this.zoomBox.custom; G.y = 0; G.x = 0 } if ("inner" == L) { if ("preview" !== this.zoomBox.mode) { this.zoomBox.node.jAddClass("mz-inner"); this.node.jAddClass("mz-inner-zoom") } this.lens.hide(); N = this.boundaries.top + G.y; M = this.boundaries.left + G.x; if (!this.expanded && y.browser.ieMode && y.browser.ieMode < 11) { N = 0; M = 0; I = this.node } } else { N += G.y; M += G.x; this.node.jRemoveClass("mz-inner-zoom"); this.zoomBox.node.jRemoveClass("mz-inner") } this.zoomBox.node.jSetCss({ top: N, left: M }) } else { this.setSize(false); I = this.node } this.zoomBox.node[this.expanded ? "jAddClass" : "jRemoveClass"]("mz-expanded"); if (!this.expanded && H) { H.jAppendTo("zoom" == this.zoomBox.mode && "inner" == L ? this.zoomBox.node : this.node, ((Math.floor(Math.random() * 101) + 1) % 2) ? "top" : "bottom") } this.zoomBox.node.jAppendTo(I) }, changeZoomLevel: function(M) { var I, G, K, J, L = false, H = M.isMouse ? 5 : 3 / 54; h(M).stop(); H = (100 + H * Math.abs(M.deltaY)) / 100; if (M.deltaY < 0) { H = 1 / H } if ("magnifier" == this.zoomBox.mode) { G = Math.max(100, Math.round(this.zoomBox.width * H)); G = Math.min(G, this.size.width * 0.9); K = G / this.zoomBox.aspectRatio; this.zoomBox.width = Math.ceil(G); this.zoomBox.height = Math.ceil(K); this.zoomBox.node.jSetCss({ width: this.zoomBox.width, height: this.zoomBox.height }); I = this.zoomBox.node.getInnerSize(); this.zoomBox.innerWidth = Math.ceil(I.width); this.zoomBox.innerHeight = Math.ceil(I.height); L = true } else { if (!this.expanded && "zoom" == this.zoomBox.mode) { G = Math.max(50, Math.round(this.lens.width * H)); G = Math.min(G, this.size.width * 0.9); K = G / this.zoomBox.aspectRatio; this.zoomSize.width = Math.ceil((this.zoomBox.innerWidth / G) * this.size.width); this.zoomSize.height = Math.ceil((this.zoomBox.innerHeight / K) * this.size.height); this.zoomBox.image.jSetCss({ width: this.zoomSize.width, height: this.zoomSize.height }) } else { return } } J = h(window).jGetScroll(); this.lens.width = Math.ceil(this.zoomBox.innerWidth / (this.zoomSize.width / this.size.width)); this.lens.height = Math.ceil(this.zoomBox.innerHeight / (this.zoomSize.height / this.size.height)); this.lens.node.jSetCss({ width: this.lens.width, height: this.lens.height }); y.extend(this.lens, this.lens.node.jGetSize()); if (this.zoomBox.active) { clearTimeout(this.moveTimer); this.moveTimer = null; if (L) { this.moveTimer = true } this.animate(null, { x: M.x - J.x, y: M.y - J.y }); if (L) { this.moveTimer = null } } }, registerActivateEvent: function(I) { var H, G = I ? "dbltap btnclick" : "touchstart" + (!y.browser.mobile ? (window.navigator.pointerEnabled ? " pointermove" : window.navigator.msPointerEnabled ? " MSPointerMove" : " mousemove") : ""), J = this.node.jFetch("mz:handlers:activate:fn", (!I) ? h(function(K) { H = (y.browser.ieMode < 9) ? y.extend({}, K) : K; if (!this.activateTimer) { clearTimeout(this.activateTimer); this.activateTimer = setTimeout(h(function() { this.activate(H) }).jBind(this), 120) } }).jBindAsEvent(this) : h(this.activate).jBindAsEvent(this)); this.node.jStore("mz:handlers:activate:event", G).jAddEvent(G, J, 10) }, unregisterActivateEvent: function(H) { var G = this.node.jFetch("mz:handlers:activate:event"), I = this.node.jFetch("mz:handlers:activate:fn"); this.node.jRemoveEvent(G, I); this.node.jDel("mz:handlers:activate:fn") }, registerDeactivateEvent: function(H) { var G = H ? "dbltap btnclick" : "touchend" + (!y.browser.mobile ? (window.navigator.pointerEnabled ? " pointerout" : window.navigator.msPointerEnabled ? " MSPointerOut" : " mouseout") : ""), I = this.node.jFetch("mz:handlers:deactivate:fn", h(function(J) { if (c(J) && !g(J)) { return } if (this.zoomBox.node !== J.getRelated() && !(("inner" == this.zoomBox.position || "magnifier" == this.zoomBox.mode) && this.zoomBox.node.hasChild(J.getRelated())) && !this.node.hasChild(J.getRelated())) { this.deactivate(J) } }).jBindAsEvent(this)); this.node.jStore("mz:handlers:deactivate:event", G).jAddEvent(G, I, 20) }, unregisterDeactivateEvent: function() { var G = this.node.jFetch("mz:handlers:deactivate:event"), H = this.node.jFetch("mz:handlers:deactivate:fn"); this.node.jRemoveEvent(G, H); this.node.jDel("mz:handlers:deactivate:fn") }, registerEvents: function() { this.moveBind = this.move.jBind(this); this.node.jAddEvent(["touchstart", window.navigator.pointerEnabled ? "pointerdown" : "MSPointerDown"], h(function(G) { if ((y.browser.androidBrowser || "android" === y.browser.platform && y.browser.gecko) && this.option("zoomMode") && "click" !== this.option("zoomOn") && "touchstart" === G.type) { G.stopDefaults(); if (y.browser.gecko) { G.stopDistribution() } } if (!this.zoomBox.active) { return } if ("inner" === this.zoomBox.position) { this.lens.spos = G.getClientXY() } }).jBindAsEvent(this), 10); this.node.jAddEvent(["touchend", window.navigator.pointerEnabled ? "pointerup" : "MSPointerUp"], h(function(G) { if (c(G) && g(G)) { this.lens.touchmovement = false } }).jBindAsEvent(this), 10); this.node.jAddEvent("touchmove " + ("android" === y.browser.platform ? "" : window.navigator.pointerEnabled ? "pointermove" : window.navigator.msPointerEnabled ? "MSPointerMove" : "mousemove"), h(this.animate).jBindAsEvent(this)); if (this.option("zoomMode")) { this.registerActivateEvent("click" === this.option("zoomOn")); this.registerDeactivateEvent("click" === this.option("zoomOn") && !this.option("expand")) } this.node.jAddEvent("mousedown", function(G) { G.stopDistribution() }, 10).jAddEvent("btnclick", h(function(G) { this.node.jRaiseEvent("MouseEvent", "click"); if (this.expanded) { this.expandBox.jCallEvent("btnclick", G) } }).jBind(this), 15); if (this.option("expand")) { this.node.jAddEvent("tap btnclick", h(this.expand).jBindAsEvent(this), 15) } else { this.node.jAddEvent("tap btnclick", h(this.openLink).jBindAsEvent(this), 15) } if (this.additionalImages.length > 1) { this.swipe() } if (!y.browser.mobile && this.option("variableZoom")) { this.node.jAddEvent("mousescroll", this.changeZoomLevel.jBindAsEvent(this)) } h(window).jAddEvent(y.browser.mobile ? "resize" : "resize scroll", this.onResize) }, unregisterEvents: function() { if (this.node) { this.node.jRemoveEvent("mousescroll") } h(window).jRemoveEvent("resize scroll", this.onResize); h(this.additionalImages).jEach(function(G) { h(G.origin).jClearEvents() }) }, activate: function(M) { var N, L, J, K, G, H = 0, I = 0; if (!this.ready || !this.zoomBox.enabled || this.zoomBox.active || this.zoomBox.activating) { if (!this.image.loaded()) { if (M) { this.initEvent = y.extend({}, M); M.stopQueue() } this.image.load(this.setupZoom.jBind(this)); if (!this.loadTimer) { this.loadTimer = h(this.showLoading).jBind(this).jDelay(400) } } return } if (M && "pointermove" == M.type && "touch" == M.pointerType) { return } if (!this.option("zoomMode") && this.option("expand") && !this.expanded) { this.zoomBox.active = true; return } this.zoomBox.activating = true; if (this.expanded && "zoom" == this.zoomBox.mode) { K = this.image.node.jGetRect(); this.expandStage.jAddClass("mz-zoom-in"); G = this.expandFigure.jGetRect(); I = ((K.left + K.right) / 2 - (G.left + G.right) / 2); H = ((K.top + K.bottom) / 2 - (G.top + G.bottom) / 2) } this.zoomBox.image.jRemoveEvent("transitionend"); this.zoomBox.node.jRemoveClass("mz-deactivating").jRemoveEvent("transitionend"); this.zoomBox.node.jAddClass("mz-activating"); this.node.jAddClass("mz-activating"); this.reflowZoom(); L = ("zoom" == this.zoomBox.mode) ? this.zoomBox.position : this.zoomBox.mode; if (y.browser.features.transition && !(this.expanded && "always" == this.option("expandZoomOn"))) { if ("inner" == L) { J = this.image.node.jGetSize(); this.zoomBox.image.jSetCss({ transform: "translate3d(0," + H + "px, 0) scale(" + J.width / this.zoomSize.width + ", " + J.height / this.zoomSize.height + ")" }).jGetSize(); this.zoomBox.image.jAddEvent("transitionend", h(function() { this.zoomBox.image.jRemoveEvent("transitionend"); this.zoomBox.node.jRemoveClass("mz-activating mz-p-" + L); this.zoomBox.activating = false; this.zoomBox.active = true }).jBind(this)); this.zoomBox.node.jAddClass("mz-p-" + L).jGetSize(); if (!y.browser.mobile && y.browser.chrome && ("chrome" === y.browser.uaName || "opera" === y.browser.uaName)) { this.zoomBox.activating = false; this.zoomBox.active = true } } else { this.zoomBox.node.jAddEvent("transitionend", h(function() { this.zoomBox.node.jRemoveEvent("transitionend"); this.zoomBox.node.jRemoveClass("mz-activating mz-p-" + L) }).jBind(this)); this.zoomBox.node.jAddClass("mz-p-" + L).jGetSize(); this.zoomBox.node.jRemoveClass("mz-p-" + L); this.zoomBox.activating = false; this.zoomBox.active = true } } else { this.zoomBox.node.jRemoveClass("mz-activating"); this.zoomBox.activating = false; this.zoomBox.active = true } if (!this.expanded) { this.showHint(true) } if (M) { M.stop().stopQueue(); N = M.getClientXY(); if ("magnifier" == this.zoomBox.mode && (/tap/i).test(M.type)) { N.y -= this.zoomBox.height / 2 + 10 } if ("inner" == L && ((/tap/i).test(M.type) || c(M))) { this.lens.pos = { x: 0, y: 0 }; N.x = -(N.x - this.boundaries.left - this.size.width / 2) * (this.zoomSize.width / this.size.width); N.y = -(N.y - this.boundaries.top - this.size.height / 2) * (this.zoomSize.height / this.size.height) } } else { N = { x: this.boundaries.left + (this.boundaries.right - this.boundaries.left) / 2, y: this.boundaries.top + (this.boundaries.bottom - this.boundaries.top) / 2 }; if (y.browser.mobile && this.expanded && "always" === this.option("expandZoomOn")) { this.lens.innertouch = true; this.lens.pos = { x: 0, y: 0 }; N.x = -(N.x - this.boundaries.left - this.size.width / 2) * (this.zoomSize.width / this.size.width); N.y = -(N.y - this.boundaries.top - this.size.height / 2) * (this.zoomSize.height / this.size.height) } } this.node.jRemoveClass("mz-activating").jAddClass("mz-active"); N.x += -I; N.y += -H; this.lens.spos = { x: 0, y: 0 }; this.lens.dx = 0; this.lens.dy = 0; this.animate(M, N, true); s("onZoomIn", this.id) }, deactivate: function(I, N) { var L, J, G, H, K = 0, M = 0, O = this.zoomBox.active; this.initEvent = null; if (!this.ready) { return } if (I && "pointerout" == I.type && "touch" == I.pointerType) { return } clearTimeout(this.moveTimer); this.moveTimer = null; clearTimeout(this.activateTimer); this.activateTimer = null; this.zoomBox.activating = false; this.zoomBox.active = false; if (true !== N && !this.expanded) { if (O) { if (y.browser.mobile && !this.expanded && "zoom" == this.zoomBox.mode) { this.reflowZoom() } else { this.showHint() } } } if (!this.zoomBox.enabled) { return } if (I) { I.stop() } this.zoomBox.image.jRemoveEvent("transitionend"); this.zoomBox.node.jRemoveClass("mz-activating").jRemoveEvent("transitionend"); if (this.expanded) { H = this.expandFigure.jGetRect(); if ("always" !== this.option("expandZoomOn")) { this.expandStage.jRemoveClass("mz-zoom-in") } this.image.node.jSetCss({ "max-height": this.expandMaxHeight() }); G = this.image.node.jGetRect(); M = ((G.left + G.right) / 2 - (H.left + H.right) / 2); K = ((G.top + G.bottom) / 2 - (H.top + H.bottom) / 2) } L = ("zoom" == this.zoomBox.mode) ? this.zoomBox.position : this.zoomBox.mode; if (y.browser.features.transition && I && !(this.expanded && "always" == this.option("expandZoomOn"))) { if ("inner" == L) { this.zoomBox.image.jAddEvent("transitionend", h(function() { this.zoomBox.image.jRemoveEvent("transitionend"); this.node.jRemoveClass("mz-active"); setTimeout(h(function() { this.zoomBox.hide() }).jBind(this), 32) }).jBind(this)); J = this.image.node.jGetSize(); this.zoomBox.node.jAddClass("mz-deactivating mz-p-" + L).jGetSize(); this.zoomBox.image.jSetCss({ transform: "translate3d(0," + K + "px,0) scale(" + J.width / this.zoomSize.width + ", " + J.height / this.zoomSize.height + ")" }) } else { this.zoomBox.node.jAddEvent("transitionend", h(function() { this.zoomBox.hide(); this.node.jRemoveClass("mz-active") }).jBind(this)); this.zoomBox.node.jGetCss("opacity"); this.zoomBox.node.jAddClass("mz-deactivating mz-p-" + L); this.node.jRemoveClass("mz-active") } } else { this.zoomBox.hide(); this.node.jRemoveClass("mz-active") } this.lens.dx = 0; this.lens.dy = 0; this.lens.spos = { x: 0, y: 0 }; this.lens.hide(); if (O) { s("onZoomOut", this.id) } }, animate: function(Q, P, O) { var I = P, K, J, M = 0, H, L = 0, G, R, N = false; if (this.initEvent && !this.image.loaded()) { this.initEvent = Q } if (!this.zoomBox.active && !O) { return } if (Q) { h(Q).stopDefaults().stopDistribution(); if (c(Q) && !g(Q)) { return } N = (/tap/i).test(Q.type) || c(Q); if (N && !this.lens.touchmovement) { this.lens.touchmovement = N } if (!I) { I = Q.getClientXY() } } if ("preview" == this.zoomBox.mode) { return } if ("zoom" == this.zoomBox.mode && "inner" === this.zoomBox.position && (Q && N || !Q && this.lens.innertouch)) { this.lens.innertouch = true; K = this.lens.pos.x + (I.x - this.lens.spos.x); J = this.lens.pos.y + (I.y - this.lens.spos.y); this.lens.spos = I; M = Math.min(0, this.zoomBox.innerWidth - this.zoomSize.width) / 2; H = -M; L = Math.min(0, this.zoomBox.innerHeight - this.zoomSize.height) / 2; G = -L } else { this.lens.innertouch = false; if ("magnifier" == this.zoomBox.mode) { I.y = Math.max(this.boundaries.top, Math.min(I.y, this.boundaries.bottom)); I.x = Math.max(this.boundaries.left, Math.min(I.x, this.boundaries.right)) } K = I.x - this.boundaries.left; J = I.y - this.boundaries.top; H = this.size.width - this.lens.width; G = this.size.height - this.lens.height; K -= this.lens.width / 2; J -= this.lens.height / 2 } if ("magnifier" !== this.zoomBox.mode) { K = Math.max(M, Math.min(K, H)); J = Math.max(L, Math.min(J, G)) } this.lens.pos.x = K = Math.round(K); this.lens.pos.y = J = Math.round(J); if ("zoom" == this.zoomBox.mode && "inner" != this.zoomBox.position) { if (y.browser.features.transform) { this.lens.node.jSetCss({ transform: "translate(" + this.lens.pos.x + "px," + this.lens.pos.y + "px)" }); this.lens.image.jSetCss({ transform: "translate(" + -(this.lens.pos.x + this.lens.border.x) + "px, " + -(this.lens.pos.y + this.lens.border.y) + "px)" }) } else { this.lens.node.jSetCss({ top: this.lens.pos.y, left: this.lens.pos.x }); this.lens.image.jSetCss({ top: -(this.lens.pos.y + this.lens.border.y), left: -(this.lens.pos.x + this.lens.border.x) }) } } if ("magnifier" == this.zoomBox.mode) { if (this.lens.touchmovement && !(Q && "dbltap" == Q.type)) { I.y -= this.zoomBox.height / 2 + 10 } this.zoomBox.node.jSetCss({ top: I.y - this.boundaries.top - this.zoomBox.height / 2, left: I.x - this.boundaries.left - this.zoomBox.width / 2 }) } if (!this.moveTimer) { this.lens.dx = 0; this.lens.dy = 0; this.move(1) } }, move: function(I) { var H, G; if (!isFinite(I)) { if (this.lens.innertouch) { I = this.lens.touchmovement ? 0.4 : 0.16 } else { I = this.option("smoothing") ? 0.2 : this.lens.touchmovement ? 0.4 : 0.8 } } H = ((this.lens.pos.x - this.lens.dx) * I); G = ((this.lens.pos.y - this.lens.dy) * I); this.lens.dx += H; this.lens.dy += G; if (!this.moveTimer || Math.abs(H) > 0.000001 || Math.abs(G) > 0.000001) { this.zoomBox.image.jSetCss(y.browser.features.transform ? { transform: f + (this.lens.innertouch ? this.lens.dx : -(this.lens.dx * (this.zoomSize.width / this.size.width) - Math.max(0, this.zoomSize.width - this.zoomBox.innerWidth) / 2)) + "px," + (this.lens.innertouch ? this.lens.dy : -(this.lens.dy * (this.zoomSize.height / this.size.height) - Math.max(0, this.zoomSize.height - this.zoomBox.innerHeight) / 2)) + "px" + A + " scale(1)" } : { left: -(this.lens.dx * (this.zoomSize.width / this.size.width) + Math.min(0, this.zoomSize.width - this.zoomBox.innerWidth) / 2), top: -(this.lens.dy * (this.zoomSize.height / this.size.height) + Math.min(0, this.zoomSize.height - this.zoomBox.innerHeight) / 2) }) } if ("magnifier" == this.zoomBox.mode) { return } this.moveTimer = setTimeout(this.moveBind, 16) }, swipe: function() { var S, I, N = 30, K = 201, P, Q = "", H = {}, G, M, R = 0, T = { transition: y.browser.cssTransform + String.fromCharCode(32) + "300ms cubic-bezier(.18,.35,.58,1)" }, J, O, L = h(function(U) { if (!this.ready || this.zoomBox.active) { return } if (U.state == "dragstart") { clearTimeout(this.activateTimer); this.activateTimer = null; R = 0; H = { x: U.x, y: U.y, ts: U.timeStamp }; S = this.size.width; I = S / 2; this.image.node.jRemoveEvent("transitionend"); this.image.node.jSetCssProp("transition", ""); this.image.node.jSetCssProp("transform", "translate3d(0, 0, 0)"); O = null } else { G = (U.x - H.x); M = { x: 0, y: 0, z: 0 }; if (null === O) { O = (Math.abs(U.x - H.x) < Math.abs(U.y - H.y)) } if (O) { return } U.stop(); if ("dragend" == U.state) { R = 0; J = null; P = U.timeStamp - H.ts; if (Math.abs(G) > I || (P < K && Math.abs(G) > N)) { if ((Q = (G > 0) ? "backward" : (G <= 0) ? "forward" : "")) { if (Q == "backward") { J = this.getPrev(); R += S * 10 } else { J = this.getNext(); R -= S * 10 } } } M.x = R; M.deg = -90 * (M.x / S); this.image.node.jAddEvent("transitionend", h(function(V) { this.image.node.jRemoveEvent("transitionend"); this.image.node.jSetCssProp("transition", ""); if (J) { this.image.node.jSetCss({ transform: "translate3d(" + M.x + "px, 0px, 0px)" }); this.update(J, true) } }).jBind(this)); this.image.node.jSetCss(T); this.image.node.jSetCss({ "transition-duration": M.x ? "100ms" : "300ms", opacity: 1 - 0.7 * Math.abs(M.x / S), transform: "translate3d(" + M.x + "px, 0px, 0px)" }); G = 0; return } M.x = G; M.z = -50 * Math.abs(M.x / I); M.deg = -60 * (M.x / I); this.image.node.jSetCss({ opacity: 1 - 0.7 * Math.abs(M.x / I), transform: "translate3d(" + M.x + "px, 0px, " + M.z + "px)" }) } }).jBind(this); this.node.jAddEvent("touchdrag", L) }, openLink: function() { if (this.image.link) { window.open(this.image.link, "_self") } }, getNext: function() { var G = (this.expanded ? this.expandGallery : this.additionalImages).filter(function(J) { return (-1 !== J.small.state || -1 !== J.zoom.state) }), H = G.length, I = h(G).indexOf(this.image) + 1; return (1 >= H) ? null : G[(I >= H) ? 0 : I] }, getPrev: function() { var G = (this.expanded ? this.expandGallery : this.additionalImages).filter(function(J) { return (-1 !== J.small.state || -1 !== J.zoom.state) }), H = G.length, I = h(G).indexOf(this.image) - 1; return (1 >= H) ? null : G[(I < 0) ? H - 1 : I] }, imageByURL: function(H, I) { var G = this.additionalImages.filter(function(J) { return ((J.zoom.src.has(H) || J.zoom.url.has(H)) && (J.small.src.has(I) || J.small.url.has(I))) }) || []; return G[0] || ((I && H && "string" === y.jTypeOf(I) && "string" === y.jTypeOf(H)) ? new k(I, H) : null) }, imageByOrigin: function(H) { var G = this.additionalImages.filter(function(I) { return (I.origin === H) }) || []; return G[0] }, imageByIndex: function(G) { return this.additionalImages[G] } }; t = { version: "v5.1.10 DEMO", start: function(J, H) { var I = null, G = []; y.$A((J ? [h(J)] : y.$A(document.byClass("MagicZoom")).concat(y.$A(document.byClass("MagicZoomPlus"))))).jEach((function(K) { if (h(K)) { if (!i(K)) { I = new j(K, H); if (x && !I.option("autostart")) { I.stop(); I = null } else { D.push(I); G.push(I) } } } }).jBind(this)); return J ? G[0] : G }, stop: function(J) { var H, I, G; if (J) { (I = i(J)) && (I = D.splice(D.indexOf(I), 1)) && I[0].stop() && (delete I[0]); return } while (H = D.length) { I = D.splice(H - 1, 1); I[0].stop(); delete I[0] } }, refresh: function(G) { this.stop(G); return this.start(G) }, update: function(L, K, J, H) { var I = i(L), G; if (I) { G = "element" === y.jTypeOf(K) ? I.imageByOrigin(K) : I.imageByURL(K, J); if (G) { I.update(G) } } }, switchTo: function(J, I) { var H = i(J), G; if (H) { switch (y.jTypeOf(I)) { case "element": G = H.imageByOrigin(I); break; case "number": G = H.imageByIndex(I); break; default: } if (G) { H.update(G) } } }, prev: function(H) { var G; (G = i(H)) && G.update(G.getPrev()) }, next: function(H) { var G; (G = i(H)) && G.update(G.getNext()) }, zoomIn: function(H) { var G; (G = i(H)) && G.activate() }, zoomOut: function(H) { var G; (G = i(H)) && G.deactivate() }, registerCallback: function(G, H) { if (!p[G]) { p[G] = [] } if ("function" == y.jTypeOf(H)) { p[G].push(H) } }, running: function(G) { return !!i(G) } }; h(document).jAddEvent("domready", function() { var H = window[B + "Options"] || {}; r = r(); d(); F = y.$new("div", { "class": "magic-hidden-wrapper" }).jAppendTo(document.body); E = (y.browser.mobile && window.matchMedia && window.matchMedia("(max-device-width: 767px), (max-device-height: 767px)").matches); if (y.browser.mobile) { y.extend(o, l) } for (var G = 0; G < z.length; G++) { if (H[z[G]] && y.$F !== H[z[G]]) { t.registerCallback(z[G], H[z[G]]) } } t.start(); x = false }); window.MagicZoomPlus = window.MagicZoomPlus || {}; return t })();