/** * Seadragon Ajax 0.8.9 (build 64702 on 2011-01-28) * Copyright (c) Microsoft Corporation. All rights reserved. * For more information, visit: http://seadragon.com/ajax/ */ (function(h, r, g, N) { var l = "100%", p = 10, w = "absolute", u = "relative", o = "hidden", L = " while executing ", f = "function", D = "mousewheel", k = "px", C = "inline-block", F = "span", j = "0px", B = "none", s = "div", H = "fixed", J = "undefined", z = ",", n = "number", d = "", I = "string", b = null, a = true, t = .5, c = false; if (!h.Seadragon) h.Seadragon = {}; var v = h.Seadragon, i = v.Config; (function() { if (i) return; i = v.Config = { debugMode: c, animationTime: 1.5, blendTime: t, alwaysBlend: c, autoHideControls: a, constrainDuringPan: a, immediateRender: c, logarithmicZoom: a, wrapHorizontal: c, wrapVertical: c, wrapOverlays: c, transformOverlays: c, minZoomDimension: b, minZoomImageRatio: .8, maxZoomPixelRatio: 2, visibilityRatio: .8, springStiffness: 5, imageLoaderLimit: 2, clickTimeThreshold: 200, clickDistThreshold: 5, zoomPerClick: 2, zoomPerScroll: g.pow(2, 1 / 3), zoomPerSecond: 2, proxyUrl: b, imagePath: "img/" } })(); var x = v.Strings; (function() { var a = "Hmm, this doesn't appear to be a valid Deep Zoom Image."; if (x) return; x = v.Strings = { Errors: { Failure: "Sorry, but Seadragon Ajax can't run on your browser!\nPlease try using IE 8 or Firefox 3.\n", Dzc: "Sorry, we don't support Deep Zoom Collections!", Dzi: a, Xml: a, Empty: "You asked us to open nothing, so we did just that.", ImageFormat: "Sorry, we don't support {0}-based Deep Zoom Images.", Security: "It looks like a security restriction stopped us from loading this Deep Zoom Image.", Status: "This space unintentionally left blank ({0} {1}).", Unknown: "Whoops, something inexplicably went wrong. Sorry!" }, Messages: { Loading: "Loading..." }, Tooltips: { FullPage: "Toggle full page", Home: "Go home", ZoomIn: "Zoom in (you can also use your mouse's scroll wheel)", ZoomOut: "Zoom out (you can also use your mouse's scroll wheel)" } }; x.getString = function(f) { for (var c = f.split("."), a = x, b = 0; b < c.length; b++) a = a[c[b]] || {}; if (typeof a != I) a = d; var e = arguments; return a.replace(/\{\d+\}/g, function(b) { var a = parseInt(b.match(/\d+/)) + 1; return a < e.length ? e[a] : d }) }; x.setString = function(e, d) { for (var c = e.split("."), b = x, a = 0; a < c.length - 1; a++) { if (!b[c[a]]) b[c[a]] = {}; b = b[c[a]] } b[c[a]] = d } })(); var q = function() { this.log = function(c, d) { var a = h.console || {}, b = i.debugMode; if (b && a.log) a.log(c); else b && d && alert(c) }; this.error = function(b, d) { var c = h.console || {}, a = i.debugMode; if (a && c.error) c.error(b); else a && alert(b); if (a) throw d || new Error(b) }; this.fail = function(a) { alert(x.getString("Errors.Failure")); throw new Error(a) } }; q = v.Debug = new q; var U = v.Profiler = function() { var d = this, o = d, f = c, e = 0, h = b, l = b, j = Infinity, g = 0, i = 0, n = Infinity, k = 0, m = 0; d.getAvgUpdateTime = function() { return g }; d.getMinUpdateTime = function() { return j }; d.getMaxUpdateTime = function() { return i }; d.getAvgIdleTime = function() { return k }; d.getMinIdleTime = function() { return n }; d.getMaxIdleTime = function() { return m }; d.isMidUpdate = function() { return f }; d.getNumUpdates = function() { return e }; d.beginUpdate = function() { f && o.endUpdate(); f = a; h = (new Date) .getTime(); if (e < 1) return; var b = h - l; k = (k * (e - 1) + b) / e; if (b < n) n = b; if (b > m) m = b }; d.endUpdate = function() { if (!f) return; l = (new Date) .getTime(); f = c; var a = l - h; e++; g = (g * (e - 1) + a) / e; if (a < j) j = a; if (a > i) i = a }; d.clearProfile = function() { f = c; e = 0; h = b; l = b; j = Infinity; g = 0; i = 0; n = Infinity; k = 0; m = 0 } }, m = v.Point; (function() { if (m) return; m = v.Point = function(a, b) { this.x = typeof a == n ? a : 0; this.y = typeof b == n ? b : 0 }; var a = m.prototype; a.plus = function(a) { return new m(this.x + a.x, this.y + a.y) }; a.minus = function(a) { return new m(this.x - a.x, this.y - a.y) }; a.times = function(a) { return new m(this.x * a, this.y * a) }; a.divide = function(a) { return new m(this.x / a, this.y / a) }; a.negate = function() { return new m(-this.x, - this.y) }; a.distanceTo = function(a) { return g.sqrt(g.pow(this.x - a.x, 2) + g.pow(this.y - a.y, 2)) }; a.apply = function(a) { return new m(a(this.x), a(this.y)) }; a.equals = function(a) { return a instanceof m && this.x === a.x && this.y === a.y }; a.toString = function() { return "(" + this.x + z + this.y + ")" } })(); var y = v.Rect; (function() { if (y) return; y = v.Rect = function(d, e, c, b) { var a = this; a.x = typeof d == n ? d : 0; a.y = typeof e == n ? e : 0; a.width = typeof c == n ? c : 0; a.height = typeof b == n ? b : 0 }; var a = y.prototype; a.getAspectRatio = function() { return this.width / this.height }; a.getTopLeft = function() { return new m(this.x, this.y) }; a.getBottomRight = function() { var a = this; return new m(a.x + a.width, a.y + a.height) }; a.getCenter = function() { var a = this; return new m(a.x + a.width / 2, a.y + a.height / 2) }; a.getSize = function() { return new m(this.width, this.height) }; a.equals = function(a) { var b = this; return a instanceof y && b.x === a.x && b.y === a.y && b.width === a.width && b.height === a.height }; a.toString = function() { var a = this; return "[" + a.x + z + a.y + z + a.width + "x" + a.height + "]" } })(); var Q = v.Spring = function(j) { var c = this, d = typeof j == n ? j : 0, e = d, b = d, a = (new Date) .getTime(), h = a, f = a; function k(b) { var a = i.springStiffness; return (1 - g.exp(-b * a)) / (1 - g.exp(-a)) } c.getCurrent = function() { return d }; c.getTarget = function() { return b }; c.resetTo = function(c) { b = c; f = a; e = b; h = f }; c.springTo = function(c) { e = d; h = a; b = c; f = h + 1e3 * i.animationTime }; c.shiftBy = function(a) { e += a; b += a }; c.update = function() { a = (new Date) .getTime(); d = a >= f ? b : e + (b - e) * k((a - h) / (f - h)) } }, A = v.Browser = { UNKNOWN: 0, IE: 1, FIREFOX: 2, SAFARI: 3, CHROME: 4, OPERA: 5 }, e = function() { var t = "DOMMouseScroll", l = this, o = l, x = ["Msxml2.XMLHTTP", "Msxml3.XMLHTTP", "Microsoft.XMLHTTP"], z = { bmp: c, jpeg: a, jpg: a, png: a, tif: c, wdp: c }, u = A.UNKNOWN, p = 0, v = c, y = {}; (function() { var d = navigator.appName, o = navigator.appVersion, a = navigator.userAgent; if (d == "Microsoft Internet Explorer" && !! h.attachEvent && !! h.ActiveXObject) { var i = a.indexOf("MSIE"); u = A.IE; p = parseFloat(a.substring(i + 5, a.indexOf(";", i))); var j = r.documentMode; if (typeof j !== J) p = j } else if (d == "Netscape" && !! h.addEventListener) { var g = a.indexOf("Firefox"), b = a.indexOf("Safari"), l = a.indexOf("Chrome"); if (g >= 0) { u = A.FIREFOX; p = parseFloat(a.substring(g + 8)) } else if (b >= 0) { var n = a.substring(0, b) .lastIndexOf("/"); u = l >= 0 ? A.CHROME : A.SAFARI; p = parseFloat(a.substring(n + 1, b)) } } else if (d == "Opera" && !! h.opera && !! h.attachEvent) { u = A.OPERA; p = parseFloat(o) } for (var m = h.location.search.substring(1), k = m.split("&"), f = 0; f < k.length; f++) { var c = k[f], e = c.indexOf("="); if (e > 0) y[c.substring(0, e)] = decodeURIComponent(c.substring(e + 1)) } v = u == A.IE && p < 9 || u == A.CHROME && p < 2 })(); function w(a, b) { if (b && a != r.body) return r.body; else return a.offsetParent } l.getBrowser = function() { return u }; l.getBrowserVersion = function() { return p }; l.getElement = function(a) { if (typeof a == I) a = r.getElementById(a); return a }; l.getElementPosition = function(a) { var a = o.getElement(a), b = new m, c = o.getElementStyle(a) .position == H, d = w(a, c); while (d) { b.x += a.offsetLeft; b.y += a.offsetTop; if (c) b = b.plus(o.getPageScroll()); a = d; c = o.getElementStyle(a) .position == H; d = w(a, c) } return b }; l.getElementSize = function(a) { var a = o.getElement(a); return new m(a.clientWidth, a.clientHeight) }; l.getElementStyle = function(a) { var a = o.getElement(a); if (a.currentStyle) return a.currentStyle; else if (h.getComputedStyle) return h.getComputedStyle(a, d); else q.fail("Unknown element style, no known technique.") }; l.getEvent = function(a) { return a ? a : h.event }; l.getMousePosition = function(a) { var a = o.getEvent(a), b = new m; if (a.type == t && u == A.FIREFOX && p < 3) { b.x = a.screenX; b.y = a.screenY } else if (typeof a.pageX == n) { b.x = a.pageX; b.y = a.pageY } else if (typeof a.clientX == n) { b.x = a.clientX + r.body.scrollLeft + r.documentElement.scrollLeft; b.y = a.clientY + r.body.scrollTop + r.documentElement.scrollTop } else q.fail("Unknown event mouse position, no known technique."); return b }; l.getMouseScroll = function(b) { var b = o.getEvent(b), a = 0; if (typeof b.wheelDelta == n) a = b.wheelDelta; else if (typeof b.detail == n) a = b.detail * -1; else q.fail("Unknown event mouse scroll, no known technique."); return a ? a / g.abs(a) : 0 }; l.getPageScroll = function() { var a = new m, b = r.documentElement || {}, c = r.body || {}; if (typeof h.pageXOffset == n) { a.x = h.pageXOffset; a.y = h.pageYOffset } else if (c.scrollLeft || c.scrollTop) { a.x = c.scrollLeft; a.y = c.scrollTop } else if (b.scrollLeft || b.scrollTop) { a.x = b.scrollLeft; a.y = b.scrollTop } return a }; l.getWindowSize = function() { var a = new m, b = r.documentElement || {}, c = r.body || {}; if (typeof h.innerWidth == n) { a.x = h.innerWidth; a.y = h.innerHeight } else if (b.clientWidth || b.clientHeight) { a.x = b.clientWidth; a.y = b.clientHeight } else if (c.clientWidth || c.clientHeight) { a.x = c.clientWidth; a.y = c.clientHeight } else q.fail("Unknown window size, no known technique."); return a }; l.imageFormatSupported = function(a) { var a = a ? a : d; return !!z[a.toLowerCase()] }; l.makeCenteredNode = function(h) { var b = "border:none; margin:0px; padding:0px;", h = e.getElement(h), c = o.makeNeutralElement(s), a = []; a.push('
'); a.push('
'); a.push('
'); c.innerHTML = a.join(d); c = c.firstChild; var g = c, f = c.getElementsByTagName(s); while (f.length > 0) { g = f[0]; f = g.getElementsByTagName(s) } g.appendChild(h); return c }; l.makeNeutralElement = function(c) { var b = r.createElement(c), a = b.style; a.background = "transparent none"; a.border = B; a.margin = j; a.padding = j; a.position = "static"; return b }; l.makeTransparentImage = function(d) { var c = o.makeNeutralElement("img"), a = b; if (u == A.IE && p < 7) { a = o.makeNeutralElement(F); a.style.display = C; c.onload = function() { a.style.width = a.style.width || c.width + k; a.style.height = a.style.height || c.height + k; c.onload = b; c = b }; c.src = d; a.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + d + "', sizingMethod='scale')" } else { a = c; a.src = d } return a }; l.setElementOpacity = function(b, a, f) { var b = o.getElement(b); if (f && v) a = g.round(a); if (a < 1) b.style.opacity = a; else b.style.opacity = d; var c = b.style.filter || d; b.style.filter = c.replace(/[\s]*alpha\(.*?\)[\s]*/g, d); if (a >= 1) return; var e = g.round(100 * a), h = " alpha(opacity=" + e + ") "; b.style.filter += h }; l.addEvent = function(a, c, d, b) { var a = o.getElement(a); if (a.addEventListener) { c == D && a.addEventListener(t, d, b); a.addEventListener(c, d, b) } else if (a.attachEvent) { a.attachEvent("on" + c, d); b && a.setCapture && a.setCapture() } else q.fail("Unable to attach event handler, no known technique.") }; l.removeEvent = function(a, c, d, b) { var a = o.getElement(a); if (a.removeEventListener) { c == D && a.removeEventListener(t, d, b); a.removeEventListener(c, d, b) } else if (a.detachEvent) { a.detachEvent("on" + c, d); b && a.releaseCapture && a.releaseCapture() } else q.fail("Unable to detach event handler, no known technique.") }; l.cancelEvent = function(b) { var b = o.getEvent(b); b.preventDefault && b.preventDefault(); b.cancel = a; b.returnValue = c }; l.stopEvent = function(b) { var b = o.getEvent(b); b.stopPropagation && b.stopPropagation(); b.cancelBubble = a }; l.createCallback = function(d, c) { for (var b = [], a = 2; a < arguments.length; a++) b.push(arguments[a]); return function() { for (var e = b.concat([]), a = 0; a < arguments.length; a++) e.push(arguments[a]); return c.apply(d, e) } }; l.getUrlParameter = function(c) { var a = y[c]; return a ? a : b }; l.makeAjaxRequest = function(j, d) { var c = typeof d == f, a = b; if (c) var l = d, d = function() { h.setTimeout(e.createCallback(b, l, a), 1) }; if (h.ActiveXObject) for (var k = 0; k < x.length; k++) try { a = new ActiveXObject(x[k]); break } catch (g) { continue } else if (h.XMLHttpRequest) a = new XMLHttpRequest; !a && q.fail("Browser doesn't support XMLHttpRequest."); if (i.proxyUrl) j = i.proxyUrl + j; if (c) a.onreadystatechange = function() { if (a.readyState == 4) { a.onreadystatechange = new Function; d() } }; try { a.open("GET", j, c); a.send(b) } catch (g) { q.log(g.name + " while making AJAX request: " + g.message); a.onreadystatechange = b; a = b; c && d() } return c ? b : a }; l.parseXml = function(e) { var d = b; if (h.ActiveXObject) try { d = new ActiveXObject("Microsoft.XMLDOM"); d.async = c; d.loadXML(e) } catch (a) { q.log(a.name + " while parsing XML (ActiveX): " + a.message) } else if (h.DOMParser) try { var f = new DOMParser; d = f.parseFromString(e, "text/xml") } catch (a) { q.log(a.name + " while parsing XML (DOMParser): " + a.message) } else q.fail("Browser doesn't support XML DOM."); return d } }; e = v.Utils = new e; var M = v.MouseTracker; (function() { var d = "mouseup", j = "mousedown"; if (M) return; var l = e.getBrowser() == A.IE && e.getBrowserVersion() < 9, o = c, t = c, s = {}, m = []; function p(a) { return e.getMousePosition(a) } function k(b, d) { var c = e.getMousePosition(b), a = e.getElementPosition(d); return c.minus(a) } function n(b, a) { var d = r.body; while (a && b != a && d != a) try { a = a.parentNode } catch (e) { return c } return b == a } function u() { o = a } function w() { o = c }(function() { if (l) { e.addEvent(r, j, u, c); e.addEvent(r, d, w, c) } else { e.addEvent(h, j, u, a); e.addEvent(h, d, w, a) } })(); M = v.MouseTracker = function(u) { var w = "mousemove", z = "mouseout", y = "mouseover", x = this, v = x, H = b, M = g.random(), u = e.getElement(u), F = c, A = c, C = c, E = c, G = b, O = b, N = b; x.target = u; x.enterHandler = b; x.exitHandler = b; x.pressHandler = b; x.releaseHandler = b; x.clickHandler = b; x.dragHandler = b; x.scrollHandler = b; function X() { if (!F) { e.addEvent(u, y, K, c); e.addEvent(u, z, L, c); e.addEvent(u, j, U, c); e.addEvent(u, d, B, c); e.addEvent(u, D, R, c); e.addEvent(u, "click", T, c); F = a; s[M] = H } } function Z() { if (F) { e.removeEvent(u, y, K, c); e.removeEvent(u, z, L, c); e.removeEvent(u, j, U, c); e.removeEvent(u, d, B, c); e.removeEvent(u, D, R, c); e.removeEvent(u, "click", T, c); I(); F = c; delete s[M] } } function Y() { if (!A) { if (l) { e.removeEvent(u, d, B, c); e.addEvent(u, d, V, a); e.addEvent(u, w, Q, a) } else { e.addEvent(h, d, P, a); e.addEvent(h, w, J, a) } A = a } } function I() { if (A) { if (l) { e.removeEvent(u, w, Q, a); e.removeEvent(u, d, V, a); e.addEvent(u, d, B, c) } else { e.removeEvent(h, w, J, a); e.removeEvent(h, d, P, a) } A = c } } function S(c, d) { var b = s; for (var a in b) b.hasOwnProperty(a) && M != a && b[a][c](d) } function ab() { return E } function K(b) { var b = e.getEvent(b); l && A && !n(b.srcElement, u) && S("onMouseOver", b); var g = b.target ? b.target : b.srcElement, d = b.relatedTarget ? b.relatedTarget : b.fromElement; if (!n(u, g) || n(u, d)) return; E = a; if (typeof v.enterHandler == f) try { v.enterHandler(v, k(b, u), C, o) } catch (c) { q.error(c.name + " while executing enter handler: " + c.message, c) } } function L(a) { var a = e.getEvent(a); l && A && !n(a.srcElement, u) && S("onMouseOut", a); var d = a.target ? a.target : a.srcElement, g = a.relatedTarget ? a.relatedTarget : a.toElement; if (!n(u, d) || n(u, g)) return; E = c; if (typeof v.exitHandler == f) try { v.exitHandler(v, k(a, u), C, o) } catch (b) { q.error(b.name + " while executing exit handler: " + b.message, b) } } function U(b) { var b = e.getEvent(b); if (b.button == 2) return; C = a; G = p(b); N = G; O = (new Date) .getTime(); if (typeof v.pressHandler == f) try { v.pressHandler(v, k(b, u)) } catch (c) { q.error(c.name + " while executing press handler: " + c.message, c) }(v.pressHandler || v.dragHandler) && e.cancelEvent(b); if (!l || !t) { Y(); t = a; m = [H] } else l && m.push(H) } function B(a) { var a = e.getEvent(a), g = C, d = E; if (a.button == 2) return; C = c; if (typeof v.releaseHandler == f) try { v.releaseHandler(v, k(a, u), g, d) } catch (b) { q.error(b.name + " while executing release handler: " + b.message, b) } g && d && W(a) } function V(a) { var a = e.getEvent(a); if (a.button == 2) return; for (var b = 0; b < m.length; b++) { var d = m[b]; !d.hasMouse() && d.onMouseUp(a) } I(); t = c; a.srcElement.fireEvent("on" + a.type, r.createEventObject(a)); e.stopEvent(a) } function P(a) { !E && B(a); I() } function T(a) { v.clickHandler && e.cancelEvent(a) } function W(a) { var a = e.getEvent(a); if (a.button == 2) return; var h = (new Date) .getTime() - O, d = p(a), c = N.distanceTo(d), g = h <= i.clickTimeThreshold && c <= i.clickDistThreshold; if (typeof v.clickHandler == f) try { v.clickHandler(v, k(a, u), g, a.shiftKey) } catch (b) { q.error(b.name + " while executing click handler: " + b.message, b) } } function J(a) { var a = e.getEvent(a), c = p(a), d = c.minus(G); G = c; if (typeof v.dragHandler == f) { try { v.dragHandler(v, k(a, u), d, a.shiftKey) } catch (b) { q.error(b.name + " while executing drag handler: " + b.message, b) } e.cancelEvent(a) } } function Q(b) { for (var a = 0; a < m.length; a++) m[a].onMouseMove(b); e.stopEvent(b) } function R(a) { var a = e.getEvent(a), c = e.getMouseScroll(a); if (typeof v.scrollHandler == f) { if (c) try { v.scrollHandler(v, k(a, u), c, a.shiftKey) } catch (b) { q.error(b.name + " while executing scroll handler: " + b.message, b) } e.cancelEvent(a) } }(function() { H = { hasMouse: ab, onMouseOver: K, onMouseOut: L, onMouseUp: B, onMouseMove: J } })(); x.isTracking = function() { return F }; x.setTracking = function(a) { if (a) X(); else Z() } } })(); var W = v.EventManager = function() { var b = this, a = {}; b.addListener = function(b, c) { if (typeof c != f) return; if (!a[b]) a[b] = []; a[b].push(c) }; b.removeListener = function(e, d) { var b = a[e]; if (typeof d != f) return; else if (!b) return; for (var c = 0; c < b.length; c++) if (d == b[c]) { b.splice(c, 1); return } }; b.clearListeners = function(b) { if (a[b]) delete a[b] }; b.trigger = function(e) { var d = a[e], f = []; if (!d) return; for (var b = 1; b < arguments.length; b++) f.push(arguments[b]); for (var b = 0; b < d.length; b++) try { d[b].apply(h, f) } catch (c) { q.error(c.name + L + e + " handler: " + c.message, c) } } }, S; (function() { var d = 15000; function g(i, j) { var e = b, f = b; function g(a) { e.onload = b; e.onabort = b; e.onerror = b; f && h.clearTimeout(f); h.setTimeout(function() { j(i, a ? e : b) }, 1) } this.start = function() { e = new Image; var j = function() { g(a) }, b = function() { g(c) }, k = function() { q.log("Image timed out: " + i); g(c) }; e.onload = j; e.onabort = b; e.onerror = b; f = h.setTimeout(k, d); e.src = i } } S = v.ImageLoader = function() { var d = 0; function h(b, e, c) { d--; if (typeof b == f) try { b(c) } catch (a) { q.error(a.name + L + e + " callback: " + a.message, a) } } this.loadImage = function(l, f) { if (d >= i.imageLoaderLimit) return c; var j = e.createCallback(b, h, f), k = new g(l, j); d++; k.start(); return a } } })(); var O, R; (function() { var i = { REST: 0, GROUP: 1, HOVER: 2, DOWN: 3 }; O = v.Button = function(W, V, S, T, U, y, q, v, x, z) { var l = e.makeNeutralElement(F), k = i.GROUP, m = new M(l), H = e.makeTransparentImage(V), r = e.makeTransparentImage(S), s = e.makeTransparentImage(T), t = e.makeTransparentImage(U), y = typeof y == f ? y : b, q = typeof q == f ? q : b, v = typeof v == f ? v : b, x = typeof x == f ? x : b, z = typeof z == f ? z : b, G = 0, P = 2e3, D = b, B = c; this.elmt = l; function E() { h.setTimeout(R, 20) } function R() { if (B) { var c = (new Date) .getTime(), d = c - D, b = 1 - d / P; b = g.min(1, b); b = g.max(0, b); e.setElementOpacity(r, b, a); b > 0 && E() } } function N() { B = a; D = (new Date) .getTime() + G; h.setTimeout(E, G) } function Q() { B = c; e.setElementOpacity(r, 1, a) } function p(a) { if (a >= i.GROUP && k == i.REST) { Q(); k = i.GROUP } if (a >= i.HOVER && k == i.GROUP) { s.style.visibility = d; k = i.HOVER } if (a >= i.DOWN && k == i.HOVER) { t.style.visibility = d; k = i.DOWN } } function n(a) { if (a <= i.HOVER && k == i.DOWN) { t.style.visibility = o; k = i.HOVER } if (a <= i.GROUP && k == i.HOVER) { s.style.visibility = o; k = i.GROUP } if (a <= i.REST && k == i.GROUP) { N(); k = i.REST } } function K(d, c, a, b) { if (a) { p(i.DOWN); x && x() } else !b && p(i.HOVER) } function O(d, c, a) { n(i.GROUP); a && z && z() } function L() { p(i.DOWN); y && y() } function I(d, c, a, b) { if (a && b) { n(i.HOVER); q && q() } else if (a) n(i.GROUP); else p(i.HOVER) } function J(c, b, a) { v && a && v() } this.notifyGroupEnter = function() { p(i.GROUP) }; this.notifyGroupExit = function() { n(i.REST) }; (function() { l.style.display = C; l.style.position = u; l.title = W; l.appendChild(H); l.appendChild(r); l.appendChild(s); l.appendChild(t); var g = H.style, f = r.style, b = s.style, c = t.style; f.position = b.position = c.position = w; f.top = b.top = c.top = j; f.left = b.left = c.left = j; b.visibility = c.visibility = o; if (e.getBrowser() == A.FIREFOX && e.getBrowserVersion() < 3) f.top = b.top = c.top = d; m.enterHandler = K; m.exitHandler = O; m.pressHandler = L; m.releaseHandler = I; m.clickHandler = J; m.setTracking(a); n(i.REST) })() }; R = v.ButtonGroup = function(b) { var d = e.makeNeutralElement(F), b = b.concat([]), c = new M(d); this.elmt = d; function f() { for (var a = 0; a < b.length; a++) b[a].notifyGroupEnter() } function g(f, e, c) { if (!c) for (var a = 0; a < b.length; a++) b[a].notifyGroupExit() } function h(f, e, d, c) { if (!c) for (var a = 0; a < b.length; a++) b[a].notifyGroupExit() } this.emulateEnter = function() { f() }; this.emulateExit = function() { g() }; (function() { d.style.display = C; for (var e = 0; e < b.length; e++) d.appendChild(b[e].elmt); c.enterHandler = f; c.exitHandler = g; c.releaseHandler = h; c.setTracking(a) })() } })(); var T = v.TileSource = function(d, c, i, e, h, f) { var b = this, a = b, j = c / d; b.width = d; b.height = c; b.aspectRatio = d / c; b.dimensions = new m(d, c); b.minLevel = h ? h : 0; b.maxLevel = f ? f : g.ceil(g.log(g.max(d, c)) / g.log(2)); b.tileSize = i ? i : 0; b.tileOverlap = e ? e : 0; b.getLevelScale = function(b) { return 1 / (1 << a.maxLevel - b) }; b.getNumTiles = function(e) { var b = a.getLevelScale(e), f = g.ceil(b * d / a.tileSize), h = g.ceil(b * c / a.tileSize); return new m(f, h) }; b.getPixelRatio = function(c) { var b = a.dimensions.times(a.getLevelScale(c)), d = 1 / b.x, e = 1 / b.y; return new m(d, e) }; b.getTileAtPoint = function(h, d) { var b = a.dimensions.times(a.getLevelScale(h)), c = d.times(b.x), e, f; if (d.x >= 0 && d.x <= 1) e = g.floor(c.x / a.tileSize); else e = g.ceil(b.x / a.tileSize) * g.floor(c.x / b.x) + g.floor((b.x + c.x % b.x) % b.x / a.tileSize); if (d.y >= 0 && d.y <= j) f = g.floor(c.y / a.tileSize); else f = g.ceil(b.y / a.tileSize) * g.floor(c.y / b.y) + g.floor((b.y + c.y % b.y) % b.y / a.tileSize); return new m(e, f) }; b.getTileBounds = function(k, f, h) { var c = a.dimensions.times(a.getLevelScale(k)), i = f === 0 ? 0 : a.tileSize * f - a.tileOverlap, j = h === 0 ? 0 : a.tileSize * h - a.tileOverlap, d = a.tileSize + (f === 0 ? 1 : 2) * a.tileOverlap, e = a.tileSize + (h === 0 ? 1 : 2) * a.tileOverlap; d = g.min(d, c.x - i); e = g.min(e, c.y - j); var b = 1 / c.x; return new y(i * b, j * b, d * b, e * b) }; b.getTileUrl = function() { throw new Error("Method not implemented.") }; b.tileExists = function(b, d, e) { var c = a.getNumTiles(b); return b >= a.minLevel && b <= a.maxLevel && d >= 0 && e >= 0 && d < c.x && e < c.y } }, P = v.DisplayRect = function(e, f, d, c, b, a) { y.apply(this, arguments); this.minLevel = b; this.maxLevel = a }; P.prototype = new y; var K = v.DziTileSource = function(m, l, e, j, k, i, f) { var b = this; T.apply(b, [m, l, e, j]); var n = b, h = {}; b.fileFormat = i; b.tileFormat = i; b.displayRects = f; (function() { if (!f) return; for (var c = f.length - 1; c >= 0; c--) for (var b = f[c], a = b.minLevel; a <= b.maxLevel; a++) { if (!h[a]) h[a] = []; h[a].push(b) } })(); b.getTileUrl = function(a, b, c) { return [k, a, "/", b, "_", c, ".", i].join(d) }; b.tileExists = function(d, p, q) { var f = h[d]; if (!f || !f.length) return a; for (var i = n.getLevelScale(d), o = f.length - 1; o >= 0; o--) { var b = f[o]; if (d < b.minLevel || d > b.maxLevel) continue; var j = b.x * i, k = b.y * i, l = j + b.width * i, m = k + b.height * i; j = g.floor(j / e); k = g.floor(k / e); l = g.ceil(l / e); m = g.ceil(m / e); if (j <= p && p < l && k <= q && q < m) return a } return c } }; K.prototype = new T; (function() { var c = "Errors.Empty"; function a(a) { Error.apply(this, arguments); this.message = a } a.prototype = new Error; function i(b) { if (!(b instanceof a)) { q.error(b.name + " while creating DZI from XML: " + b.message); b = new a(x.getString("Errors.Unknown")) } return b } function d(d) { var a = d.split("/"), b = a[a.length - 1], c = b.lastIndexOf("."); if (c > -1) a[a.length - 1] = b.slice(0, c); return a.join("/") + "_files/" } function j(c, i) { if (!c) throw new a(x.getString("Errors.Security")); else if (c.status !== 200 && c.status !== 0) { var f = c.status, h = f == 404 ? "Not Found" : c.statusText; throw new a(x.getString("Errors.Status", f, h)) } var d = b; if (c.responseXML && c.responseXML.documentElement) d = c.responseXML; else if (c.responseText) d = e.parseXml(c.responseText); return g(d, i) } function g(d, g) { var b = "Errors.Dzi"; if (!d || !d.documentElement) throw new a(x.getString("Errors.Xml")); var e = d.documentElement, c = e.tagName; if (c == "Image") try { return l(e, g) } catch (f) { var h = x.getString(b); throw f instanceof a ? f : new a(h) } else if (c == "Collection") throw new a(x.getString("Errors.Dzc")); else if (c == "Error") return k(e); throw new a(x.getString(b)) } function l(b, m) { var f = b.getAttribute("Format"); if (!e.imageFormatSupported(f)) throw new a(x.getString("Errors.ImageFormat", f.toUpperCase())); for (var j = b.getElementsByTagName("Size")[0], h = b.getElementsByTagName("DisplayRect"), o = parseInt(j.getAttribute("Width"), p), n = parseInt(j.getAttribute("Height"), p), l = parseInt(b.getAttribute("TileSize")), k = parseInt(b.getAttribute("Overlap")), i = [], g = 0; g < h.length; g++) { var d = h[g], c = d.getElementsByTagName("Rect")[0]; i.push(new P(parseInt(c.getAttribute("X"), p), parseInt(c.getAttribute("Y"), p), parseInt(c.getAttribute("Width"), p), parseInt(c.getAttribute("Height"), p), parseInt(d.getAttribute("MinLevel"), p), parseInt(d.getAttribute("MaxLevel"), p))) } return new K(o, n, l, k, m, f, i) } function k(c) { var b = c.getElementsByTagName("Message")[0], d = b.firstChild.nodeValue; throw new a(d) } K.getTilesUrl = d; K.createFromJson = function(q, o) { var r = typeof o == f, m, k, g = q; if (!g || !g.url && !g.tilesUrl) k = new a(x.getString(c)); else try { var l = g.displayRects; if (l && l.length) for (var n = 0, s = l.length; n < s; n++) { var j = l[n]; l[n] = new P(j.x || j[0], j.y || j[1], j.width || j[2], j.height || j[3], j.minLevel || j[4], j.maxLevel || j[5]) } m = new K(g.width, g.height, g.tileSize, g.tileOverlap, g.tilesUrl || d(g.url), g.tileFormat, g.displayRects); m.xmlUrl = g.url } catch (p) { k = i(p) } if (r) h.setTimeout(e.createCallback(b, o, m, k && k.message), 1); else if (k) throw k; else return m }; K.createFromXml = function(l, m, n) { var p = typeof n == f, k = b; if (!l) { k = x.getString(c); if (p) { h.setTimeout(function() { n(b, k) }, 1); return b } throw new a(k) } var q = d(l); function o(d, e) { try { var c = d(e, q); c.xmlUrl = l; return c } catch (a) { if (p) { k = i(a) .message; return b } else throw i(a) } } if (p) { if (m) h.setTimeout(function() { var a = o(g, e.parseXml(m)); n(a, k) }, 1); else e.makeAjaxRequest(l, function(b) { var a = o(j, b); n(a, k) }); return b } if (m) return o(g, e.parseXml(m)); else return o(j, e.makeAjaxRequest(l)) } })(); var X = v.Viewport = function(e, n) { var d = this, c = d, e = new m(e.x, e.y), s = n.x / n.y, o = n.y / n.x, h = new Q(0), j = new Q(0), l = new Q(i.logarithmicZoom ? 0 : 1), f = b, k = new y(0, 0, 1, o), q = k.getCenter(), A = g.LN2; function z() { c.goHome(a); c.update() } function u(a) { return g.log(a) / A } function w(a) { return g.pow(2, a) } function r(c, b, a) { return g.min(g.max(c, b), a) } function x(b, a) { var d = b.x, f = b.y, c = r(d, a.x, a.x + a.width), e = r(f, a.y, a.y + a.height); return d === c && f === e ? b : new m(c, e) } function p(h) { var k = c.getZoom(h), g = 1 / k, j = g / c.getAspectRatio(), f = i.visibilityRatio, d = (f - t) * g, e = (f - t) * j, a = 1 - 2 * d, b = o - 2 * e; if (a < 0) { d += t * a; a = 0 } if (b < 0) { e += t * b; b = 0 } return new v.Rect(d, e, a, b) } d.getHomeBounds = function() { var b = c.getAspectRatio(), a = new y(k.x, k.y, k.width, k.height); if (s >= b) { a.height = k.width / b; a.y = q.y - a.height / 2 } else { a.width = k.height * b; a.x = q.x - a.width / 2 } return a }; d.getHomeCenter = function() { return q }; d.getHomeZoom = function() { var a = s / c.getAspectRatio(); return a >= 1 ? 1 : a }; d.getMinCenter = function(a) { return p(a) .getTopLeft() }; d.getMaxCenter = function(a) { return p(a) .getBottomRight() }; d.getMinZoom = function() { var a = c.getHomeZoom(); if (i.minZoomDimension) var b = n.x <= n.y ? i.minZoomDimension / e.x : i.minZoomDimension / (e.x * o); else var b = i.minZoomImageRatio * a; return g.min(b, a) }; d.getMaxZoom = function() { var a = n.x * i.maxZoomPixelRatio / e.x; return g.max(a, c.getHomeZoom()) }; d.getAspectRatio = function() { return e.x / e.y }; d.getContainerSize = function() { return new m(e.x, e.y) }; d.getBounds = function(b) { var d = c.getCenter(b), a = 1 / c.getZoom(b), e = a / c.getAspectRatio(); return new y(d.x - a / 2, d.y - e / 2, a, e) }; d.getCenter = function(r) { var b = new m(h.getCurrent(), j.getCurrent()), g = new m(h.getTarget(), j.getTarget()); if (r) return b; else if (!f) return g; var l = c.getZoom(), d = 1 / l, k = d / c.getAspectRatio(), i = new y(b.x - d / 2, b.y - k / 2, d, k), q = c.pixelFromPoint(f, a), p = f.minus(i.getTopLeft()) .times(e.x / i.width), n = p.minus(q), o = n.divide(e.x * l); return g.plus(o) }; d.getZoom = function(b) { var a; if (b) { a = l.getCurrent(); return i.logarithmicZoom ? w(a) : a } else { a = l.getTarget(); return i.logarithmicZoom ? w(a) : a } }; d.applyConstraints = function(g) { var h = c.getZoom(), d = r(h, c.getMinZoom(), c.getMaxZoom()); h != d && c.zoomTo(d, f, g); var b = c.getCenter(), a = x(b, p()); if (i.wrapHorizontal) a.x = b.x; if (i.wrapVertical) a.y = b.y; if (!b.equals(a)) { var e = 1 / d, j = e / c.getAspectRatio(); c.fitBounds(new y(a.x - t * e, a.y - t * j, e, j), g) } }; d.ensureVisible = function(a) { c.applyConstraints(a) }; d.fitBounds = function(f, j) { var h = c.getAspectRatio(), i = f.getCenter(), d = new y(f.x, f.y, f.width, f.height); if (d.getAspectRatio() >= h) { d.height = f.width / h; d.y = i.y - d.height / 2 } else { d.width = f.height * h; d.x = i.x - d.width / 2 } c.panTo(c.getCenter(a), a); c.zoomTo(c.getZoom(a), b, a); var g = c.getBounds(), m = c.getZoom(), k = 1 / d.width; if (k == m || d.width == g.width) { c.panTo(i, j); return } var l = g.getTopLeft() .times(e.x / g.width) .minus(d.getTopLeft() .times(e.x / d.width)) .divide(e.x / g.width - e.x / d.width); c.zoomTo(k, l, j) }; d.goHome = function(b) { var a = c.getCenter(); if (i.wrapHorizontal) { a.x = (1 + a.x % 1) % 1; h.resetTo(a.x); h.update() } if (i.wrapVertical) { a.y = (o + a.y % o) % o; j.resetTo(a.y); j.update() } c.fitBounds(k, b) }; d.panBy = function(b, a) { c.panTo(c.getCenter() .plus(b), a) }; d.panTo = function(b, q) { if (q) { h.resetTo(b.x); j.resetTo(b.y); return } if (!f) { h.springTo(b.x); j.springTo(b.y); return } var l = c.getZoom(), d = 1 / l, k = d / c.getAspectRatio(), i = new y(h.getCurrent() - d / 2, j.getCurrent() - k / 2, d, k), p = c.pixelFromPoint(f, a), o = f.minus(i.getTopLeft()) .times(e.x / i.width), m = o.minus(p), n = m.divide(e.x * l), g = b.minus(n); h.springTo(g.x); j.springTo(g.y) }; d.zoomBy = function(d, b, a) { c.zoomTo(c.getZoom() * d, b, a) }; d.zoomTo = function(a, c, d) { if (d) l.resetTo(i.logarithmicZoom ? u(a) : a); else l.springTo(i.logarithmicZoom ? u(a) : a); f = c instanceof m ? c : b }; d.resize = function(d, h) { var f = c.getBounds(), b = f, g = d.x / e.x; e = new m(d.x, d.y); if (h) { b.width = f.width * g; b.height = b.width / c.getAspectRatio() } c.fitBounds(b, a) }; d.update = function() { var m = h.getCurrent(), n = j.getCurrent(), e = l.getCurrent(); if (f) var k = c.pixelFromPoint(f, a); l.update(); if (f && l.getCurrent() != e) { var i = c.pixelFromPoint(f, a), g = i.minus(k), d = c.deltaPointsFromPixels(g, a); h.shiftBy(d.x); j.shiftBy(d.y) } else f = b; h.update(); j.update(); return h.getCurrent() != m || j.getCurrent() != n || l.getCurrent() != e }; d.deltaPixelsFromPoints = function(a, b) { return a.times(e.x * c.getZoom(b)) }; d.deltaPointsFromPixels = function(a, b) { return a.divide(e.x * c.getZoom(b)) }; d.pixelFromPoint = function(d, b) { var a = c.getBounds(b); return d.minus(a.getTopLeft()) .times(e.x / a.width) }; d.pointFromPixel = function(d, b) { var a = c.getBounds(b); return d.divide(e.x / a.width) .plus(a.getTopLeft()) }; z() }, V, E; (function() { var n = "progid:DXImageTransform.Microsoft.Matrix(", j = " when it's not yet loaded.", h = "Attempting to draw tile ", W = 100, G = t, u = e.getBrowser(), P = e.getBrowserVersion(), bb = navigator.userAgent, R = !! r.createElement("canvas") .getContext, T = r.documentElement || {}, H = T.style || {}, C = c, K = ["msTransform", "WebkitTransform", "MozTransform"], f, B; while (f = K.shift()) if (typeof H[f] !== J) { C = a; B = /webkit/i.test(f); break } var X = "-webkit-transform", L = "WebkitTransition", Z = typeof H[L] !== J, O = "progid:DXImageTransform.Microsoft.Matrix", Y = new RegExp(O + "\\(.*?\\)", "g"), ab = function() { try { return u == A.IE && !! r.documentElement.filters } catch (a) { return c } }(), Q = u == A.SAFARI && P < 4 || u == A.CHROME, p = R && !Q, F = !p && C, I = c, M = typeof r.documentMode !== J ? "bicubic" : "nearest-neighbor"; function o(f, h, i, d, e, g) { var a = this; a.level = f; a.x = h; a.y = i; a.bounds = d; a.exists = e; a.url = g; a.elmt = b; a.image = b; a.loaded = c; a.loading = c; a.style = b; a.position = b; a.size = b; a.blendStart = b; a.opacity = b; a.distance = b; a.visibility = b; a.beingDrawn = c; a.lastDrawnTime = 0; a.lastTouchTime = 0 } o.prototype.toString = function() { return this.level + "/" + this.x + "_" + this.y }; o.prototype.drawHTML = function(l) { var a = this; if (!a.loaded) { q.error(h + a.toString() + j); return } if (!a.elmt) { a.elmt = e.makeNeutralElement("img"); a.elmt.src = a.url; a.style = a.elmt.style; a.style.position = w; a.style.msInterpolationMode = M; if (F) a.style[f + "Origin"] = "0px 0px" } var m = a.elmt, r = a.image, c = a.style, b = a.position, i = a.size; m.parentNode != l && l.appendChild(m); if (F) c[f] = ["matrix(", (i.x / r.width) .toFixed(8), ",0,0,", (i.y / r.height) .toFixed(8), z, b.x.toFixed(8), B ? z : "px,", b.y.toFixed(8), B ? ")" : "px)"].join(d); else if (I) { var p = l.clientWidth, o = l.clientHeight; c.width = p + k; c.height = o + k; c.filter = [n, "M11=", (i.x / p) .toFixed(8), ",M22=", (i.y / o) .toFixed(8), ",Dx=", b.x.toFixed(8), ",Dy=", b.y.toFixed(8), ")"].join(d) } else { b = b.apply(g.floor); i = i.apply(g.ceil); c.left = b.x + k; c.top = b.y + k; c.width = i.x + k; c.height = i.y + k } e.setElementOpacity(m, a.opacity) }; o.prototype.drawCanvas = function(c) { var a = this; if (!a.loaded) { q.error(h + a.toString() + j); return } var b = a.position, d = a.size; c.globalAlpha = a.opacity; c.drawImage(a.image, b.x, b.y, d.x, d.y) }; o.prototype.unload = function() { var a = this; a.elmt && a.elmt.parentNode && a.elmt.parentNode.removeChild(a.elmt); a.elmt = b; a.image = b; a.loaded = c; a.loading = c }; E = v.OverlayPlacement = { CENTER: 0, TOP_LEFT: 1, TOP: 2, TOP_RIGHT: 3, RIGHT: 4, BOTTOM_RIGHT: 5, BOTTOM: 6, BOTTOM_LEFT: 7, LEFT: 8 }; function D(a) { switch (a) { case E.TOP_LEFT: return function() {}; case E.TOP: return function(a, b) { a.x -= b.x / 2 }; case E.TOP_RIGHT: return function(a, b) { a.x -= b.x }; case E.RIGHT: return function(a, b) { a.x -= b.x; a.y -= b.y / 2 }; case E.BOTTOM_RIGHT: return function(a, b) { a.x -= b.x; a.y -= b.y }; case E.BOTTOM: return function(a, b) { a.x -= b.x / 2; a.y -= b.y }; case E.BOTTOM_LEFT: return function(a, b) { a.y -= b.y }; case E.LEFT: return function(a, b) { a.y -= b.y / 2 }; case E.CENTER: default: return function(a, b) { a.x -= b.x / 2; a.y -= b.y / 2 } } } function x(c, a, d) { var b = this; b.elmt = c; b.scales = a instanceof y; b.bounds = new y(a.x, a.y, a.width, a.height); b.adjust = D(a instanceof m ? d : E.TOP_LEFT); b.position = new m(a.x, a.y); b.size = new m(a.width, a.height); b.style = c.style; b.naturalSize = new m(c.clientWidth, c.clientHeight) } x.prototype.destroy = function() { var b = this.elmt, a = this.style; b.parentNode && b.parentNode.removeChild(b); a.top = d; a.left = d; a.position = d; if (this.scales) { a.width = d; a.height = d } }; x.prototype.drawHTML = function(m) { var h = this, c = h.elmt, a = h.style, o = h.scales, j = h.naturalSize; if (c.parentNode != m) { m.appendChild(c); a.position = w; j.x = c.clientWidth; j.y = c.clientHeight } var e = h.position, b = h.size; if (!o) { b.x = j.x = j.x || c.clientWidth; b.y = j.y = j.y || c.clientHeight } h.adjust(e, b); if (i.transformOverlays && C) { a[f + "Origin"] = "0px 0px"; a[f] = ["translate(", e.x.toFixed(8), "px,", e.y.toFixed(8), "px)"].join(d); if (o) { if (!c.clientWidth) a.width = l; if (!c.clientHeight) a.height = l; a[f] += [" scale(", (b.x / c.clientWidth) .toFixed(8), z, (b.y / c.clientHeight) .toFixed(8), ")"].join(d) } } else if (i.transformOverlays && I) { var q = m.clientWidth, p = m.clientHeight; a.width = q + k; a.height = p + k; a.filter = [n, "M11=", (b.x / q) .toFixed(8), ",M22=", (b.y / p) .toFixed(8), ",Dx=", e.x.toFixed(8), ",Dy=", e.y.toFixed(8), ")"].join(d) } else { e = e.apply(g.floor); b = b.apply(g.ceil); a.left = e.x + k; a.top = e.y + k; if (o) { a.width = b.x + k; a.height = b.y + k } } }; x.prototype.update = function(a, b) { this.scales = a instanceof y; this.bounds = new y(a.x, a.y, a.width, a.height); this.adjust = D(a instanceof m ? b : E.TOP_LEFT) }; V = v.Drawer = function(f, C, ib) { var h = this, B = e.getElement(ib), z = e.makeNeutralElement(p ? "canvas" : s), gb = p ? z.getContext("2d") : b, T = new S, J = new U, eb = f.minLevel, db = f.maxLevel, fb = f.tileSize, X = f.tileOverlap, H = f.height / f.width, F = {}, D = {}, r = {}, v = [], k = {}, n = [], bb = [], K = 0, L = 0, I = c, j = a; h.elmt = B; h.profiler = J; (function() { z.style.width = l; z.style.height = l; z.style.position = w; B.style.textAlign = "left"; B.appendChild(z) })(); function R(a) { if (!F[a]) F[a] = f.getNumTiles(a); return F[a] } function M(a) { if (!D[a]) D[a] = f.getPixelRatio(a); return D[a] } function hb(a, b, c, l, d, e) { if (!r[a]) r[a] = {}; if (!r[a][b]) r[a][b] = {}; if (!r[a][b][c]) { var g = (d + b % d) % d, h = (e + c % e) % e, i = f.getTileBounds(a, g, h), k = f.tileExists(a, g, h), m = f.getTileUrl(a, g, h); i.x += 1 * (b - g) / d; i.y += H * (c - h) / e; r[a][b][c] = new o(a, b, c, i, k, m) } var j = r[a][b][c]; j.lastTouchTime = l; return j } function cb(a, c) { a.loading = T.loadImage(a.url, e.createCallback(b, Z, a, c)) } function Z(d, s, n) { d.loading = c; if (I) { q.error("Tile load callback in middle of drawing routine."); return } else if (!n) { q.log("Tile " + d + " failed to load: " + d.url); d.exists = c; return } else if (s < L) { q.log("Ignoring tile " + d + " loaded before reset: " + d.url); return } d.loaded = a; d.image = n; var k = v.length; if (v.length >= W) { for (var r = g.ceil(g.log(fb) / g.log(2)), e = b, i = -1, h = v.length - 1; h >= 0; h--) { var f = v[h]; if (f.level <= r || f.beingDrawn) continue; else if (!e) { e = f; i = h; continue } var m = f.lastTouchTime, l = e.lastTouchTime, p = f.level, o = e.level; if (m < l || m == l && p > o) { e = f; i = h } } if (e && i >= 0) { e.unload(); k = i } } v[k] = d; j = a } function Y() { r = {}; v = [] } function y(b, d, g) { if (!k[b]) return c; if (d === N || g === N) { var f = k[b]; for (var h in f) if (f.hasOwnProperty(h)) { var e = f[h]; for (var i in e) if (e.hasOwnProperty(i) && !e[i]) return c } return a } return k[b][d] === N || k[b][d][g] === N || k[b][d][g] === a } function ab(a, b, c) { if (b === N || c === N) return y(a + 1); else return y(a + 1, 2 * b, 2 * c) && y(a + 1, 2 * b, 2 * c + 1) && y(a + 1, 2 * b + 1, 2 * c) && y(a + 1, 2 * b + 1, 2 * c + 1) } function V(a, b, d, c) { if (!k[a]) { q.error("Setting coverage for a tile before its level's coverage has been reset: " + a); return } if (!k[a][b]) k[a][b] = {}; k[a][b][d] = c } function O(a) { k[a] = {} } function P(b, a) { if (!b) return a; if (a.visibility > b.visibility) return a; else if (a.visibility == b.visibility) if (a.distance < b.distance) return a; return b } function E(b) { for (var a = n.length - 1; a >= 0; a--) if (n[a].elmt == b) return a; return -1 } function Q() { j = c; var Q = z, Fb = gb, gc = B, xb = p, D = bb; while (D.length > 0) { var e = D.pop(); e.beingDrawn = c } var ub = C.getContainerSize(), sb = ub.x, rb = ub.y; if (xb) { Q.width = sb; Q.height = rb; Fb.clearRect(0, 0, sb, rb) } else Q.innerHTML = d; var qb = C.getBounds(a), s = qb.getTopLeft(), r = qb.getBottomRight(); if (!i.wrapHorizontal && (r.x < 0 || s.x > 1)) return; else if (!i.wrapVertical && (r.y < 0 || s.y > H)) return; var Rb = R, F = M, cc = hb, Yb = ab, I = V, Ob = O, Kb = y, Sb = X, Nb = K, bc = u === A.CHROME, ec = g.abs, hc = g.ceil, jb = g.floor, T = g.log, lb = g.max, k = g.min, q = C.deltaPixelsFromPoints, E = C.pixelFromPoint, pb = f.getTileAtPoint, Tb = i.alwaysBlend, U = 1e3 * i.blendTime, Lb = i.immediateRender, Y = i.minZoomDimension, fc = i.minImageRatio, W = i.wrapHorizontal, Z = i.wrapVertical, vb = i.wrapOverlays; if (!W) { s.x = lb(s.x, 0); r.x = k(r.x, 1) } if (!Z) { s.y = lb(s.y, 0); r.y = k(r.y, H) } var S = b, L = c, v = (new Date) .getTime(), mb = C.getCenter(), Ib = E(mb), Xb = q(F(0), c) .x, nb = Lb ? 1 : Xb; Y = Y || 64; var J = lb(eb, jb(T(Y) / T(2))), Wb = q(F(0), a) .x, tb = k(db, jb(T(Wb / G) / T(2))); J = k(J, tb); for (var h = tb; h >= J; h--) { var zb = c, ob = q(F(h), a) .x; if (!L && ob >= G || h == J) { zb = a; L = a } else if (!L) continue; Ob(h); var Pb = k(1, (ob - t) / t), Jb = q(F(h), c) .x, Mb = nb / ec(nb - Jb), Hb = pb(h, s), w = pb(h, r), Eb = Rb(h), Ab = Eb.x, Bb = Eb.y; if (!W) w.x = k(w.x, Ab - 1); if (!Z) w.y = k(w.y, Bb - 1); for (var l = Hb.x; l <= w.x; l++) for (var o = Hb.y; o <= w.y; o++) { var e = cc(h, l, o, v, Ab, Bb), fb = zb; I(h, l, o, c); if (!e.exists) continue; if (L && !fb) if (Yb(h, l, o)) I(h, l, o, a); else fb = a; if (!fb) continue; var Db = e.bounds.getTopLeft(), wb = e.bounds.getSize(), Zb = E(Db, a), kb = q(wb, a); if (!Sb) kb = kb.plus(new m(1, 1)); var ac = E(Db, c), dc = q(wb, c), Vb = ac.plus(dc.divide(2)), Qb = Ib.distanceTo(Vb); e.position = Zb; e.size = kb; e.distance = Qb; e.visibility = Mb; if (e.loaded) { if (!e.blendStart) e.blendStart = v; var yb = v - e.blendStart, ib = U === 0 ? 1 : k(1, yb / U); if (Tb) ib *= Pb; e.opacity = ib; D.push(e); if (ib >= 1) { I(h, l, o, a); bc && e.lastDrawnTime !== Nb && I(h, l, o, c) } else if (yb < U) j = a; e.lastDrawnTime = v } else if (!e.loading) S = P(S, e) } if (Kb(h)) break } for (var x = D.length - 1; x >= 0; x--) { var e = D[x]; if (xb) e.drawCanvas(Fb); else e.drawHTML(Q); e.beingDrawn = a } for (var Ub = n.length, x = 0; x < Ub; x++) { var N = n[x], Gb = N.bounds, Cb = Gb.getTopLeft(); if (vb && W) Cb.x += jb(mb.x); if (vb && Z); N.position = E(Cb, a); N.size = q(Gb.getSize(), a); N.drawHTML(B) } if (S) { cb(S, v); j = a } K = v } h.addOverlay = function(b, d, c) { var b = e.getElement(b); if (E(b) >= 0) return; n.push(new x(b, d, c)); j = a }; h.updateOverlay = function(b, f, d) { var b = e.getElement(b), c = E(b); if (c >= 0) { n[c].update(f, d); j = a } }; h.removeOverlay = function(c) { var c = e.getElement(c), b = E(c); if (b >= 0) { n[b].destroy(); n.splice(b, 1); j = a } }; h.clearOverlays = function() { while (n.length > 0) { n.pop() .destroy(); j = a } }; h.needsUpdate = function() { return j }; h.numTilesLoaded = function() { return v.length }; h.reset = function() { Y(); L = (new Date) .getTime(); j = a }; h.update = function() { J.beginUpdate(); I = a; Q(); I = c; J.endUpdate() }; h.idle = function() {} } })(); var Y, G; (function() { var L = "----seadragon----", Q = e.getBrowser(); G = v.ControlAnchor = { NONE: 0, TOP_LEFT: 1, TOP_RIGHT: 2, BOTTOM_RIGHT: 3, BOTTOM_LEFT: 4 }; function P(c, b, a) { if (b == G.TOP_RIGHT || b == G.BOTTOM_RIGHT) a.insertBefore(c, a.firstChild); else a.appendChild(c) } function f(f, c, d) { var b = this, a = e.makeNeutralElement(F); b.elmt = f; b.anchor = c; b.container = d; b.wrapper = a; a.style.display = C; a.appendChild(f); if (c == G.NONE) a.style.width = a.style.height = l; P(a, c, d) } f.prototype.destroy = function() { var a = this; a.wrapper.removeChild(a.elmt); a.container.removeChild(a.wrapper) }; f.prototype.isVisible = function() { return this.wrapper.style.display != B }; f.prototype.setVisible = function(a) { this.wrapper.style.display = a ? C : B }; f.prototype.setOpacity = function(b) { if (this.elmt[L] && Q == A.IE) e.setElementOpacity(this.elmt, b, a); else e.setElementOpacity(this.wrapper, b, a) }; var k = "fullpage", E = "home", t = "zoomin", n = "zoomout", J = "_rest.png", y = "_grouphover.png", z = "_hover.png", D = "_pressed.png"; function N(d) { var j = b, f = c, q = b, l = b; function H() { d.viewport && d.viewport.goHome() } function w() { d.setFullPage(!d.isFullPage()); j.emulateExit(); d.viewport && d.viewport.applyConstraints() } function s() { l = (new Date) .getTime(); q = i.zoomPerSecond; f = a; o() } function r() { l = (new Date) .getTime(); q = 1 / i.zoomPerSecond; f = a; o() } function m() { f = c } function o() { h.setTimeout(F, p) } function F() { if (f && d.viewport) { var a = (new Date) .getTime(), c = a - l, b = g.pow(q, c / 1e3); d.viewport.zoomBy(b); d.viewport.applyConstraints(); l = a; o() } } function v() { if (d.viewport) { f = c; d.viewport.zoomBy(i.zoomPerClick / 1); d.viewport.applyConstraints() } } function u() { if (d.viewport) { f = c; d.viewport.zoomBy(1 / i.zoomPerClick); d.viewport.applyConstraints() } } function B() { j.emulateEnter(); j.emulateExit() } function e(b, a) { return i.imagePath + b + a } var I = new O(x.getString("Tooltips.ZoomIn"), e(t, J), e(t, y), e(t, z), e(t, D), s, m, v, s, m), C = new O(x.getString("Tooltips.ZoomOut"), e(n, J), e(n, y), e(n, z), e(n, D), r, m, u, r, m), G = new O(x.getString("Tooltips.Home"), e(E, J), e(E, y), e(E, z), e(E, D), b, H, b, b, b), A = new O(x.getString("Tooltips.FullPage"), e(k, J), e(k, y), e(k, z), e(k, D), b, w, b, b, b); j = new R([I, C, G, A]); j.elmt[L] = a; d.addEventListener("open", B); return j.elmt } Y = v.Viewer = function(v) { var n = this, t = n, P = e.getElement(v), v = e.makeNeutralElement(s), E = e.makeNeutralElement(s), eb = e.makeNeutralElement(s), fb = e.makeNeutralElement(s), db = e.makeNeutralElement(s), cb = e.makeNeutralElement(s), A = b, J = b, k = b, O = b, z = new W, D = new M(E), S = new M(v), y = [], ab = a, ib = b, L = b, kb = 1e3, Ab = 2e3, ib = b, ab = c, yb = r.body.style.width, wb = r.body.style.height, tb = r.body.style.overflow, ub = r.documentElement.style.overflow, bb = new m(1, 1), C = b, R = 0, nb = 0, qb = b, ob = b, F = c, T = c, Y = c; n.container = P; n.elmt = v; n.source = b; n.drawer = b; n.viewport = b; n.profiler = b; n.tracker = D; function Jb() { var c = E.style, b = v.style, g = eb.style, i = fb.style, f = db.style, e = cb.style; b.width = l; b.height = l; b.position = u; b.left = j; b.top = j; b.textAlign = "left"; c.width = l; c.height = l; c.overflow = o; c.position = w; c.top = j; c.left = j; g.position = i.position = f.position = e.position = w; g.top = i.top = j; g.left = e.left = j; i.right = f.right = j; e.bottom = f.bottom = j; D.clickHandler = Fb; D.pressHandler = Gb; D.dragHandler = Hb; D.releaseHandler = Db; D.scrollHandler = Eb; D.setTracking(a); L = N(t); L.style.marginRight = "4px"; L.style.marginBottom = "4px"; t.addControl(L, G.BOTTOM_RIGHT); S.enterHandler = lb; S.exitHandler = pb; S.releaseHandler = Bb; S.setTracking(a); h.setTimeout(Q, 1); v.appendChild(E); v.appendChild(eb); v.appendChild(fb); v.appendChild(db); v.appendChild(cb); P.innerHTML = d; P.appendChild(v) } function Z(f) { var a = "normal", c = r.createTextNode(f); E.innerHTML = d; E.appendChild(e.makeCenteredNode(c)); var b = c.parentNode.style; b.fontFamily = "verdana"; b.fontSize = "13px"; b.fontSizeAdjust = B; b.fontStyle = a; b.fontStretch = a; b.fontVariant = a; b.fontWeight = a; b.lineHeight = "1em"; b.textAlign = "center"; b.textDecoration = B } function vb() { A && zb(); R = (new Date) .getTime(); h.setTimeout(function() { R > nb && Z(x.getString("Messages.Loading")) }, 2e3); return R } function gb(g, b, f) { nb = (new Date) .getTime(); if (g < R) { q.log("Ignoring out-of-date open."); z.trigger("ignore", t); return } else if (!b) { Z(f); z.trigger("error", t); return } E.innerHTML = d; C = e.getElementSize(v); if (C.x === 0 || C.y === 0) { h.setTimeout(function() { gb(g, b, f) }, p); return } A = b; k = new X(C, A.dimensions); J = new V(A, k, E); O = new U; t.source = A; t.viewport = k; t.drawer = J; t.profiler = O; F = c; T = a; rb(Ib); z.trigger("open", t) } function zb() { t.source = A = b; t.viewport = k = b; t.drawer = J = b; t.profiler = O = b; E.innerHTML = d } function rb(c, a) { if (F) return h.setTimeout(c, 1); var b = (new Date) .getTime(), a = a ? a : b, d = a + 1e3 / 60, e = g.max(1, d - b); return h.setTimeout(c, e) } function xb() { if (!A) return; O.beginUpdate(); var b = e.getElementSize(v); if (!b.equals(C) && b.x > 0 && b.y > 0) { k.resize(b, a); C = b; z.trigger("resize", t) } var d = k.update(); if (!F && d) { z.trigger("animationstart", t); hb() } if (d) { J.update(); z.trigger("animation", t) } else if (T || J.needsUpdate()) { J.update(); T = c } else J.idle(); if (F && !d) { z.trigger("animationfinish", t); !Y && Q() } F = d; O.endUpdate() } function Ib() { if (!A) return; var a = (new Date) .getTime(); xb(); rb(arguments.callee, a) } function mb(b) { for (var a = y.length - 1; a >= 0; a--) if (y[a].elmt == b) return a; return -1 } function jb() { h.setTimeout(Cb, 20) } function Cb() { if (ab) { var c = (new Date) .getTime(), d = c - ib, a = 1 - d / Ab; a = g.min(1, a); a = g.max(0, a); for (var b = y.length - 1; b >= 0; b--) y[b].setOpacity(a); a > 0 && jb() } } function hb() { ab = c; for (var a = y.length - 1; a >= 0; a--) y[a].setOpacity(1) } function Q() { if (!i.autoHideControls) return; ab = a; ib = (new Date) .getTime() + kb; h.setTimeout(jb, kb) } function lb() { Y = a; hb() } function pb(e, d, a) { if (!a) { Y = c; !F && Q() } } function Bb(e, d, b, a) { if (!a) { Y = c; !F && Q() } } function Fb(g, c, e, f) { if (k && e) { var b = i.zoomPerClick, d = f ? 1 / b : b; k.zoomBy(d, k.pointFromPixel(c, a)); k.applyConstraints() } } function Gb(b, a) { if (k) { qb = a; ob = k.getCenter() } } function Hb(f, d, e) { if (k) if (i.constrainDuringPan) { var b = d.minus(qb), c = k.deltaPointsFromPixels(b.negate(), a); k.panTo(ob.plus(c)); k.applyConstraints() } else k.panBy(k.deltaPointsFromPixels(e.negate(), a)) } function Db(d, c, a) { a && k && k.applyConstraints() } function Eb(e, b, d) { if (k) { var c = g.pow(i.zoomPerScroll, d); k.zoomBy(c, k.pointFromPixel(b, a)); k.applyConstraints() } } function sb(a) { a = e.getEvent(a); a.keyCode === 27 && t.setFullPage(c) } n.isOpen = function() { return !!A }; n.openDzi = function(a, f) { var d = vb(), c = e.createCallback(b, gb, d); switch (typeof a) { case I: K.createFromXml(a, f, c); break; default: K.createFromJson(a, c) } }; n.openTileSource = function(b) { var a = vb(); h.setTimeout(function() { gb(a, b) }, 1) }; n.close = function() { if (!A) return; zb() }; n.addControl = function(a, d) { var a = e.getElement(a); if (mb(a) >= 0) return; var c = b; switch (d) { case G.TOP_RIGHT: c = fb; a.style.position = u; break; case G.BOTTOM_RIGHT: c = db; a.style.position = u; break; case G.BOTTOM_LEFT: c = cb; a.style.position = u; break; case G.TOP_LEFT: c = eb; a.style.position = u; break; case G.NONE: default: c = v; a.style.position = w } y.push(new f(a, d, c)) }; n.removeControl = function(b) { var b = e.getElement(b), a = mb(b); if (a >= 0) { y[a].destroy(); y.splice(a, 1) } }; n.clearControls = function() { while (y.length > 0) y.pop() .destroy() }; n.getNavControl = function() { return L }; n.isDashboardEnabled = function() { for (var b = y.length - 1; b >= 0; b--) if (y[b].isVisible()) return a; return c }; n.isFullPage = function() { return v.parentNode == r.body }; n.isMouseNavEnabled = function() { return D.isTracking() }; n.isVisible = function() { return v.style.visibility != o }; n.setDashboardEnabled = function(b) { for (var a = y.length - 1; a >= 0; a--) y[a].setVisible(b) }; n.setFullPage = function(j) { if (j == t.isFullPage()) return; var q = r.body, c = q.style, i = r.documentElement.style, f = v.style, h = E.style; if (j) { tb = c.overflow; ub = i.overflow; c.overflow = o; i.overflow = o; yb = c.width; wb = c.height; c.width = l; c.height = l; h.backgroundColor = "black"; h.color = "white"; f.position = H; f.zIndex = "99999999"; q.appendChild(v); C = e.getWindowSize(); e.addEvent(r, "keydown", sb); lb() } else { c.overflow = tb; i.overflow = ub; c.width = yb; c.height = wb; h.backgroundColor = d; h.color = d; f.position = u; f.zIndex = d; P.appendChild(v); C = e.getElementSize(P); e.removeEvent(r, "keydown", sb); pb() } if (k) { var p = k.getBounds(); k.resize(C); var n = k.getBounds(); if (j) bb = new m(n.width / p.width, n.height / p.height); else { k.update(); k.zoomBy(g.max(bb.x, bb.y), b, a) } T = a; z.trigger("resize", t); xb() } }; n.setMouseNavEnabled = function(a) { D.setTracking(a) }; n.setVisible = function(a) { v.style.visibility = a ? d : o }; n.showMessage = function(a, b) { if (!b) { Z(a); return } h.setTimeout(function() { !t.isOpen() && Z(a) }, b) }; n.addEventListener = function(a, b) { z.addListener(a, b) }; n.removeEventListener = function(a, b) { z.removeListener(a, b) }; Jb() } })(); i.imagePath = "http://seadragon.com/ajax/0.8/img/"; (function(a, d) { var b = ["To the developer:", "Please host a local copy of Seadragon Ajax from this point onwards; Seadragon.com has been retired and may be taken offline.", "You can grab a zip of the relevant files (seadragon-min.js, button imagery, etc.) at: http://seadragon.com/ajax/0.8/seadragon-min.zip", "You can learn more and follow future development at: http://gallery.expression.microsoft.com/SeadragonAjax/", "We apologize for the inconvenience and thank you for your support."].join("\n\n"), c = d.hostname; if (a && a.warn) a.warn(b); else if (a && a.log) a.log(b); else if (!c || c.toLowerCase() === "localhost") { alert(b); alert("Don't worry, that alert was only shown because this page is running locally and the console object wasn't available in this browser.") } })(h.console, location) })(window, document, Math);