/* Zepto v1.0rc1 - polyfill zepto event detect fx ajax form touch - zeptojs.com/license */ (function (a) { String.prototype.trim === a && (String.prototype.trim = function () { return this.replace(/^\s+/, "").replace(/\s+$/, "") }), Array.prototype.reduce === a && (Array.prototype.reduce = function (b) { if (this === void 0 || this === null) throw new TypeError; var c = Object(this), d = c.length >>> 0, e = 0, f; if (typeof b != "function") throw new TypeError; if (d == 0 && arguments.length == 1) throw new TypeError; if (arguments.length >= 2) f = arguments[1]; else do { if (e in c) { f = c[e++]; break } if (++e >= d) throw new TypeError } while (!0); while (e < d) e in c && (f = b.call(a, f, c[e], e, c)), e++; return f }) })(); var Zepto = function () { function A(a) { return v.call(a) == "[object Function]" } function B(a) { return a instanceof Object } function C(b) { var c, d; if (v.call(b) !== "[object Object]") return !1; d = A(b.constructor) && b.constructor.prototype; if (!d || !hasOwnProperty.call(d, "isPrototypeOf")) return !1; for (c in b); return c === a || hasOwnProperty.call(b, c) } function D(a) { return a instanceof Array } function E(a) { return typeof a.length == "number" } function F(b) { return b.filter(function (b) { return b !== a && b !== null }) } function G(a) { return a.length > 0 ? [].concat.apply([], a) : a } function H(a) { return a.replace(/::/g, "/").replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").replace(/([a-z\d])([A-Z])/g, "$1_$2").replace(/_/g, "-").toLowerCase() } function I(a) { return a in i ? i[a] : i[a] = new RegExp("(^|\\s)" + a + "(\\s|$)") } function J(a, b) { return typeof b == "number" && !k[H(a)] ? b + "px" : b } function K(a) { var b, c; return h[a] || (b = g.createElement(a), g.body.appendChild(b), c = j(b, "").getPropertyValue("display"), b.parentNode.removeChild(b), c == "none" && (c = "block"), h[a] = c), h[a] } function L(b, d) { return d === a ? c(b) : c(b).filter(d) } function M(a, b, c, d) { return A(b) ? b.call(a, c, d) : b } function N(a, b, d) { var e = a % 2 ? b : b.parentNode; e ? e.insertBefore(d, a ? a == 1 ? e.firstChild : a == 2 ? b : null : b.nextSibling) : c(d).remove() } function O(a, b) { b(a); for (var c in a.childNodes) O(a.childNodes[c], b) } var a, b, c, d, e = [], f = e.slice, g = window.document, h = {}, i = {}, j = g.defaultView.getComputedStyle, k = { "column-count": 1, columns: 1, "font-weight": 1, "line-height": 1, opacity: 1, "z-index": 1, zoom: 1 }, l = /^\s*<(\w+|!)[^>]*>/, m = [1, 3, 8, 9, 11], n = ["after", "prepend", "before", "append"], o = g.createElement("table"), p = g.createElement("tr"), q = { tr: g.createElement("tbody"), tbody: o, thead: o, tfoot: o, td: p, th: p, "*": g.createElement("div") }, r = /complete|loaded|interactive/, s = /^\.([\w-]+)$/, t = /^#([\w-]+)$/, u = /^[\w-]+$/, v = {}.toString, w = {}, x, y, z = g.createElement("div"); return w.matches = function (a, b) { if (!a || a.nodeType !== 1) return !1; var c = a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.matchesSelector; if (c) return c.call(a, b); var d, e = a.parentNode, f = !e; return f && (e = z).appendChild(a), d = ~w.qsa(e, b).indexOf(a), f && z.removeChild(a), d }, x = function (a) { return a.replace(/-+(.)?/g, function (a, b) { return b ? b.toUpperCase() : "" }) }, y = function (a) { return a.filter(function (b, c) { return a.indexOf(b) == c }) }, w.fragment = function (b, d) { d === a && (d = l.test(b) && RegExp.$1), d in q || (d = "*"); var e = q[d]; return e.innerHTML = "" + b, c.each(f.call(e.childNodes), function () { e.removeChild(this) }) }, w.Z = function (a, b) { return a = a || [], a.__proto__ = arguments.callee.prototype, a.selector = b || "", a }, w.isZ = function (a) { return a instanceof w.Z }, w.init = function (b, d) { if (!b) return w.Z(); if (A(b)) return c(g).ready(b); if (w.isZ(b)) return b; var e; if (D(b)) e = F(b); else if (C(b)) e = [c.extend({}, b)], b = null; else if (m.indexOf(b.nodeType) >= 0 || b === window) e = [b], b = null; else if (l.test(b)) e = w.fragment(b.trim(), RegExp.$1), b = null; else { if (d !== a) return c(d).find(b); e = w.qsa(g, b) } return w.Z(e, b) }, c = function (a, b) { return w.init(a, b) }, c.extend = function (c) { return f.call(arguments, 1).forEach(function (d) { for (b in d) d[b] !== a && (c[b] = d[b]) }), c }, w.qsa = function (a, b) { var c; return a === g && t.test(b) ? (c = a.getElementById(RegExp.$1)) ? [c] : e : a.nodeType !== 1 && a.nodeType !== 9 ? e : f.call(s.test(b) ? a.getElementsByClassName(RegExp.$1) : u.test(b) ? a.getElementsByTagName(b) : a.querySelectorAll(b)) }, c.isFunction = A, c.isObject = B, c.isArray = D, c.isPlainObject = C, c.inArray = function (a, b, c) { return e.indexOf.call(b, a, c) }, c.trim = function (a) { return a.trim() }, c.uuid = 0, c.map = function (a, b) { var c, d = [], e, f; if (E(a)) for (e = 0; e < a.length; e++) c = b(a[e], e), c != null && d.push(c); else for (f in a) c = b(a[f], f), c != null && d.push(c); return G(d) }, c.each = function (a, b) { var c, d; if (E(a)) { for (c = 0; c < a.length; c++) if (b.call(a[c], c, a[c]) === !1) return a } else for (d in a) if (b.call(a[d], d, a[d]) === !1) return a; return a }, c.fn = { forEach: e.forEach, reduce: e.reduce, push: e.push, indexOf: e.indexOf, concat: e.concat, map: function (a) { return c.map(this, function (b, c) { return a.call(b, c, b) }) }, slice: function () { return c(f.apply(this, arguments)) }, ready: function (a) { return r.test(g.readyState) ? a(c) : g.addEventListener("DOMContentLoaded", function () { a(c) }, !1), this }, get: function (b) { return b === a ? f.call(this) : this[b] }, toArray: function () { return this.get() }, size: function () { return this.length }, remove: function () { return this.each(function () { this.parentNode != null && this.parentNode.removeChild(this) }) }, each: function (a) { return this.forEach(function (b, c) { a.call(b, c, b) }), this }, filter: function (a) { return c([].filter.call(this, function (b) { return w.matches(b, a) })) }, add: function (a, b) { return c(y(this.concat(c(a, b)))) }, is: function (a) { return this.length > 0 && w.matches(this[0], a) }, not: function (b) { var d = []; if (A(b) && b.call !== a) this.each(function (a) { b.call(this, a) || d.push(this) }); else { var e = typeof b == "string" ? this.filter(b) : E(b) && A(b.item) ? f.call(b) : c(b); this.forEach(function (a) { e.indexOf(a) < 0 && d.push(a) }) } return c(d) }, eq: function (a) { return a === -1 ? this.slice(a) : this.slice(a, +a + 1) }, first: function () { var a = this[0]; return a && !B(a) ? a : c(a) }, last: function () { var a = this[this.length - 1]; return a && !B(a) ? a : c(a) }, find: function (a) { var b; return this.length == 1 ? b = w.qsa(this[0], a) : b = this.map(function () { return w.qsa(this, a) }), c(b) }, closest: function (a, b) { var d = this[0]; while (d && !w.matches(d, a)) d = d !== b && d !== g && d.parentNode; return c(d) }, parents: function (a) { var b = [], d = this; while (d.length > 0) d = c.map(d, function (a) { if ((a = a.parentNode) && a !== g && b.indexOf(a) < 0) return b.push(a), a }); return L(b, a) }, parent: function (a) { return L(y(this.pluck("parentNode")), a) }, children: function (a) { return L(this.map(function () { return f.call(this.children) }), a) }, siblings: function (a) { return L(this.map(function (a, b) { return f.call(b.parentNode.children).filter(function (a) { return a !== b }) }), a) }, empty: function () { return this.each(function () { this.innerHTML = "" }) }, pluck: function (a) { return this.map(function () { return this[a] }) }, show: function () { return this.each(function () { this.style.display == "none" && (this.style.display = null), j(this, "").getPropertyValue("display") == "none" && (this.style.display = K(this.nodeName)) }) }, replaceWith: function (a) { return this.before(a).remove() }, wrap: function (a) { return this.each(function () { c(this).wrapAll(c(a)[0].cloneNode(!1)) }) }, wrapAll: function (a) { return this[0] && (c(this[0]).before(a = c(a)), a.append(this)), this }, unwrap: function () { return this.parent().each(function () { c(this).replaceWith(c(this).children()) }), this }, clone: function () { return c(this.map(function () { return this.cloneNode(!0) })) }, hide: function () { return this.css("display", "none") }, toggle: function (b) { return (b === a ? this.css("display") == "none" : b) ? this.show() : this.hide() }, prev: function () { return c(this.pluck("previousElementSibling")) }, next: function () { return c(this.pluck("nextElementSibling")) }, html: function (b) { return b === a ? this.length > 0 ? this[0].innerHTML : null : this.each(function (a) { var d = this.innerHTML; c(this).empty().append(M(this, b, a, d)) }) }, text: function (b) { return b === a ? this.length > 0 ? this[0].textContent : null : this.each(function () { this.textContent = b }) }, attr: function (c, d) { var e; return typeof c == "string" && d === a ? this.length == 0 || this[0].nodeType !== 1 ? a : c == "value" && this[0].nodeName == "INPUT" ? this.val() : !(e = this[0].getAttribute(c)) && c in this[0] ? this[0][c] : e : this.each(function (a) { if (this.nodeType !== 1) return; if (B(c)) for (b in c) this.setAttribute(b, c[b]); else this.setAttribute(c, M(this, d, a, this.getAttribute(c))) }) }, removeAttr: function (a) { return this.each(function () { this.nodeType === 1 && this.removeAttribute(a) }) }, prop: function (b, c) { return c === a ? this[0] ? this[0][b] : a : this.each(function (a) { this[b] = M(this, c, a, this[b]) }) }, data: function (b, c) { var d = this.attr("data-" + H(b), c); return d !== null ? d : a }, val: function (b) { return b === a ? this.length > 0 ? this[0].value : a : this.each(function (a) { this.value = M(this, b, a, this.value) }) }, offset: function () { if (this.length == 0) return null; var a = this[0].getBoundingClientRect(); return { left: a.left + window.pageXOffset, top: a.top + window.pageYOffset, width: a.width, height: a.height } }, css: function (c, d) { if (d === a && typeof c == "string") return this.length == 0 ? a : this[0].style[x(c)] || j(this[0], "").getPropertyValue(c); var e = ""; for (b in c) typeof c[b] == "string" && c[b] == "" ? this.each(function () { this.style.removeProperty(H(b)) }) : e += H(b) + ":" + J(b, c[b]) + ";"; return typeof c == "string" && (d == "" ? this.each(function () { this.style.removeProperty(H(c)) }) : e = H(c) + ":" + J(c, d)), this.each(function () { this.style.cssText += ";" + e }) }, index: function (a) { return a ? this.indexOf(c(a)[0]) : this.parent().children().indexOf(this[0]) }, hasClass: function (a) { return this.length < 1 ? !1 : I(a).test(this[0].className) }, addClass: function (a) { return this.each(function (b) { d = []; var e = this.className, f = M(this, a, b, e); f.split(/\s+/g).forEach(function (a) { c(this).hasClass(a) || d.push(a) }, this), d.length && (this.className += (e ? " " : "") + d.join(" ")) }) }, removeClass: function (b) { return this.each(function (c) { if (b === a) return this.className = ""; d = this.className, M(this, b, c, d).split(/\s+/g).forEach(function (a) { d = d.replace(I(a), " ") }), this.className = d.trim() }) }, toggleClass: function (b, d) { return this.each(function (e) { var f = M(this, b, e, this.className); (d === a ? !c(this).hasClass(f) : d) ? c(this).addClass(f) : c(this).removeClass(f) }) } }, ["width", "height"].forEach(function (b) { c.fn[b] = function (d) { var e, f = b.replace(/./, function (a) { return a[0].toUpperCase() }); return d === a ? this[0] == window ? window["inner" + f] : this[0] == g ? g.documentElement["offset" + f] : (e = this.offset()) && e[b] : this.each(function (a) { var e = c(this); e.css(b, M(this, d, a, e[b]())) }) } }), n.forEach(function (a, b) { c.fn[a] = function () { var a = c.map(arguments, function (a) { return B(a) ? a : w.fragment(a) }); if (a.length < 1) return this; var d = this.length, e = d > 1, f = b < 2; return this.each(function (c, g) { for (var h = 0; h < a.length; h++) { var i = a[f ? a.length - h - 1 : h]; O(i, function (a) { a.nodeName != null && a.nodeName.toUpperCase() === "SCRIPT" && (!a.type || a.type === "text/javascript") && window.eval.call(window, a.innerHTML) }), e && c < d - 1 && (i = i.cloneNode(!0)), N(b, g, i) } }) }, c.fn[b % 2 ? a + "To" : "insert" + (b ? "Before" : "After")] = function (b) { return c(b)[a](this), this } }), w.Z.prototype = c.fn, w.camelize = x, w.uniq = y, c.zepto = w, c }(); window.Zepto = Zepto, "$" in window || (window.$ = Zepto), function (a) { function f(a) { return a._zid || (a._zid = d++) } function g(a, b, d, e) { b = h(b); if (b.ns) var g = i(b.ns); return (c[f(a)] || []).filter(function (a) { return a && (!b.e || a.e == b.e) && (!b.ns || g.test(a.ns)) && (!d || f(a.fn) === f(d)) && (!e || a.sel == e) }) } function h(a) { var b = ("" + a).split("."); return { e: b[0], ns: b.slice(1).sort().join(" ") } } function i(a) { return new RegExp("(?:^| )" + a.replace(" ", " .* ?") + "(?: |$)") } function j(b, c, d) { a.isObject(b) ? a.each(b, d) : b.split(/\s/).forEach(function (a) { d(a, c) }) } function k(b, d, e, g, i, k) { k = !!k; var l = f(b), m = c[l] || (c[l] = []); j(d, e, function (c, d) { var e = i && i(d, c), f = e || d, j = function (a) { var c = f.apply(b, [a].concat(a.data)); return c === !1 && a.preventDefault(), c }, l = a.extend(h(c), { fn: d, proxy: j, sel: g, del: e, i: m.length }); m.push(l), b.addEventListener(l.e, j, k) }) } function l(a, b, d, e) { var h = f(a); j(b || "", d, function (b, d) { g(a, b, d, e).forEach(function (b) { delete c[h][b.i], a.removeEventListener(b.e, b.proxy, !1) }) }) } function p(b) { var c = a.extend({ originalEvent: b }, b); return a.each(o, function (a, d) { c[a] = function () { return this[d] = m, b[a].apply(b, arguments) }, c[d] = n }), c } function q(a) { if (!("defaultPrevented" in a)) { a.defaultPrevented = !1; var b = a.preventDefault; a.preventDefault = function () { this.defaultPrevented = !0, b.call(this) } } } var b = a.zepto.qsa, c = {}, d = 1, e = {}; e.click = e.mousedown = e.mouseup = e.mousemove = "MouseEvents", a.event = { add: k, remove: l }, a.proxy = function (b, c) { if (a.isFunction(b)) { var d = function () { return b.apply(c, arguments) }; return d._zid = f(b), d } if (typeof c == "string") return a.proxy(b[c], b); throw new TypeError("expected function") }, a.fn.bind = function (a, b) { return this.each(function () { k(this, a, b) }) }, a.fn.unbind = function (a, b) { return this.each(function () { l(this, a, b) }) }, a.fn.one = function (a, b) { return this.each(function (c, d) { k(this, a, b, null, function (a, b) { return function () { var c = a.apply(d, arguments); return l(d, b, a), c } }) }) }; var m = function () { return !0 }, n = function () { return !1 }, o = { preventDefault: "isDefaultPrevented", stopImmediatePropagation: "isImmediatePropagationStopped", stopPropagation: "isPropagationStopped" }; a.fn.delegate = function (b, c, d) { var e = !1; if (c == "blur" || c == "focus") a.iswebkit ? c = c == "blur" ? "focusout" : c == "focus" ? "focusin" : c : e = !0; return this.each(function (f, g) { k(g, c, d, b, function (c) { return function (d) { var e, f = a(d.target).closest(b, g).get(0); if (f) return e = a.extend(p(d), { currentTarget: f, liveFired: g }), c.apply(f, [e].concat([].slice.call(arguments, 1))) } }, e) }) }, a.fn.undelegate = function (a, b, c) { return this.each(function () { l(this, b, c, a) }) }, a.fn.live = function (b, c) { return a(document.body).delegate(this.selector, b, c), this }, a.fn.die = function (b, c) { return a(document.body).undelegate(this.selector, b, c), this }, a.fn.on = function (b, c, d) { return c == undefined || a.isFunction(c) ? this.bind(b, c) : this.delegate(c, b, d) }, a.fn.off = function (b, c, d) { return c == undefined || a.isFunction(c) ? this.unbind(b, c) : this.undelegate(c, b, d) }, a.fn.trigger = function (b, c) { return typeof b == "string" && (b = a.Event(b)), q(b), b.data = c, this.each(function () { "dispatchEvent" in this && this.dispatchEvent(b) }) }, a.fn.triggerHandler = function (b, c) { var d, e; return this.each(function (f, h) { d = p(typeof b == "string" ? a.Event(b) : b), d.data = c, d.target = h, a.each(g(h, b.type || b), function (a, b) { e = b.proxy(d); if (d.isImmediatePropagationStopped()) return !1 }) }), e }, "focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout change select keydown keypress keyup error".split(" ").forEach(function (b) { a.fn[b] = function (a) { return this.bind(b, a) } }), ["focus", "blur"].forEach(function (b) { a.fn[b] = function (a) { if (a) this.bind(b, a); else if (this.length) try { this.get(0)[b]() } catch (c) { } return this } }), a.Event = function (a, b) { var c = document.createEvent(e[a] || "Events"), d = !0; if (b) for (var f in b) f == "bubbles" ? d = !!b[f] : c[f] = b[f]; return c.initEvent(a, d, !0, null, null, null, null, null, null, null, null, null, null, null, null), c } }(Zepto), function (a) { function b(a) { var b = this.os = {}, c = this.browser = {}, d = a.match(/WebKit\/([\d.]+)/), e = a.match(/(Android)\s+([\d.]+)/), f = a.match(/(iPad).*OS\s([\d_]+)/), g = !f && a.match(/(iPhone\sOS)\s([\d_]+)/), h = a.match(/(webOS|hpwOS)[\s\/]([\d.]+)/), i = h && a.match(/TouchPad/), j = a.match(/Kindle\/([\d.]+)/), k = a.match(/Silk\/([\d._]+)/), l = a.match(/(BlackBerry).*Version\/([\d.]+)/); if (c.webkit = !!d) c.version = d[1]; e && (b.android = !0, b.version = e[2]), g && (b.ios = b.iphone = !0, b.version = g[2].replace(/_/g, ".")), f && (b.ios = b.ipad = !0, b.version = f[2].replace(/_/g, ".")), h && (b.webos = !0, b.version = h[2]), i && (b.touchpad = !0), l && (b.blackberry = !0, b.version = l[2]), j && (b.kindle = !0, b.version = j[1]), k && (c.silk = !0, c.version = k[1]), !k && b.android && a.match(/Kindle Fire/) && (c.silk = !0) } b.call(a, navigator.userAgent), a.__detect = b }(Zepto), function (a, b) { function l(a) { return a.toLowerCase() } function m(a) { return d ? d + a : l(a) } var c = "", d, e, f, g = { Webkit: "webkit", Moz: "", O: "o", ms: "MS" }, h = window.document, i = h.createElement("div"), j = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i, k = {}; a.each(g, function (a, e) { if (i.style[a + "TransitionProperty"] !== b) return c = "-" + l(a) + "-", d = e, !1 }), k[c + "transition-property"] = k[c + "transition-duration"] = k[c + "transition-timing-function"] = k[c + "animation-name"] = k[c + "animation-duration"] = "", a.fx = { off: d === b && i.style.transitionProperty === b, cssPrefix: c, transitionEnd: m("TransitionEnd"), animationEnd: m("AnimationEnd") }, a.fn.animate = function (b, c, d, e) { return a.isObject(c) && (d = c.easing, e = c.complete, c = c.duration), c && (c /= 1e3), this.anim(b, c, d, e) }, a.fn.anim = function (d, e, f, g) { var h, i = {}, l, m = this, n, o = a.fx.transitionEnd; e === b && (e = .4), a.fx.off && (e = 0); if (typeof d == "string") i[c + "animation-name"] = d, i[c + "animation-duration"] = e + "s", o = a.fx.animationEnd; else { for (l in d) j.test(l) ? (h || (h = []), h.push(l + "(" + d[l] + ")")) : i[l] = d[l]; h && (i[c + "transform"] = h.join(" ")), !a.fx.off && typeof d == "object" && (i[c + "transition-property"] = Object.keys(d).join(", "), i[c + "transition-duration"] = e + "s", i[c + "transition-timing-function"] = f || "linear") } return n = function (b) { if (typeof b != "undefined") { if (b.target !== b.currentTarget) return; a(b.target).unbind(o, arguments.callee) } a(this).css(k), g && g.call(this) }, e > 0 && this.bind(o, n), setTimeout(function () { m.css(i), e <= 0 && setTimeout(function () { m.each(function () { n.call(this) }) }, 0) }, 0), this }, i = null }(Zepto), function ($) { function triggerAndReturn(a, b, c) { var d = $.Event(b); return $(a).trigger(d, c), !d.defaultPrevented } function triggerGlobal(a, b, c, d) { if (a.global) return triggerAndReturn(b || document, c, d) } function ajaxStart(a) { a.global && $.active++ === 0 && triggerGlobal(a, null, "ajaxStart") } function ajaxStop(a) { a.global && !--$.active && triggerGlobal(a, null, "ajaxStop") } function ajaxBeforeSend(a, b) { var c = b.context; if (b.beforeSend.call(c, a, b) === !1 || triggerGlobal(b, c, "ajaxBeforeSend", [a, b]) === !1) return !1; triggerGlobal(b, c, "ajaxSend", [a, b]) } function ajaxSuccess(a, b, c) { var d = c.context, e = "success"; c.success.call(d, a, e, b), triggerGlobal(c, d, "ajaxSuccess", [b, c, a]), ajaxComplete(e, b, c) } function ajaxError(a, b, c, d) { var e = d.context; d.error.call(e, c, b, a), triggerGlobal(d, e, "ajaxError", [c, d, a]), ajaxComplete(b, c, d) } function ajaxComplete(a, b, c) { var d = c.context; c.complete.call(d, b, a), triggerGlobal(c, d, "ajaxComplete", [b, c]), ajaxStop(c) } function empty() { } function mimeToDataType(a) { return a && (a == htmlType ? "html" : a == jsonType ? "json" : scriptTypeRE.test(a) ? "script" : xmlTypeRE.test(a) && "xml") || "text" } function appendQuery(a, b) { return (a + "&" + b).replace(/[&?]{1,2}/, "?") } function serializeData(a) { isObject(a.data) && (a.data = $.param(a.data)), a.data && (!a.type || a.type.toUpperCase() == "GET") && (a.url = appendQuery(a.url, a.data)) } function serialize(a, b, c, d) { var e = $.isArray(b); $.each(b, function (b, f) { d && (b = c ? d : d + "[" + (e ? "" : b) + "]"), !d && e ? a.add(f.name, f.value) : (c ? $.isArray(f) : isObject(f)) ? serialize(a, f, c, b) : a.add(b, f) }) } var jsonpID = 0, isObject = $.isObject, document = window.document, key, name, rscript = /)<[^<]*)*<\/script>/gi, scriptTypeRE = /^(?:text|application)\/javascript/i, xmlTypeRE = /^(?:text|application)\/xml/i, jsonType = "application/json", htmlType = "text/html", blankRE = /^\s*$/; $.active = 0, $.ajaxJSONP = function (a) { var b = "jsonp" + ++jsonpID, c = document.createElement("script"), d = function () { $(c).remove(), b in window && (window[b] = empty), ajaxComplete("abort", e, a) }, e = { abort: d }, f; return a.error && (c.onerror = function () { e.abort(), a.error() }), window[b] = function (d) { clearTimeout(f), $(c).remove(), delete window[b], ajaxSuccess(d, e, a) }, serializeData(a), c.src = a.url.replace(/=\?/, "=" + b), $("head").append(c), a.timeout > 0 && (f = setTimeout(function () { e.abort(), ajaxComplete("timeout", e, a) }, a.timeout)), e }, $.ajaxSettings = { type: "GET", beforeSend: empty, success: empty, error: empty, complete: empty, context: null, global: !0, xhr: function () { return new window.XMLHttpRequest }, accepts: { script: "text/javascript, application/javascript", json: jsonType, xml: "application/xml, text/xml", html: htmlType, text: "text/plain" }, crossDomain: !1, timeout: 0 }, $.ajax = function (options) { var settings = $.extend({}, options || {}); for (key in $.ajaxSettings) settings[key] === undefined && (settings[key] = $.ajaxSettings[key]); ajaxStart(settings), settings.crossDomain || (settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) && RegExp.$2 != window.location.host); var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url); if (dataType == "jsonp" || hasPlaceholder) return hasPlaceholder || (settings.url = appendQuery(settings.url, "callback=?")), $.ajaxJSONP(settings); settings.url || (settings.url = window.location.toString()), serializeData(settings); var mime = settings.accepts[dataType], baseHeaders = {}, protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol, xhr = $.ajaxSettings.xhr(), abortTimeout; settings.crossDomain || (baseHeaders["X-Requested-With"] = "XMLHttpRequest"), mime && (baseHeaders.Accept = mime, mime.indexOf(",") > -1 && (mime = mime.split(",", 2)[0]), xhr.overrideMimeType && xhr.overrideMimeType(mime)); if (settings.contentType || settings.data && settings.type.toUpperCase() != "GET") baseHeaders["Content-Type"] = settings.contentType || "application/x-www-form-urlencoded"; settings.headers = $.extend(baseHeaders, settings.headers || {}), xhr.onreadystatechange = function () { if (xhr.readyState == 4) { clearTimeout(abortTimeout); var result, error = !1; if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304 || xhr.status == 0 && protocol == "file:") { dataType = dataType || mimeToDataType(xhr.getResponseHeader("content-type")), result = xhr.responseText; try { dataType == "script" ? (1, eval)(result) : dataType == "xml" ? result = xhr.responseXML : dataType == "json" && (result = blankRE.test(result) ? null : JSON.parse(result)) } catch (e) { error = e } error ? ajaxError(error, "parsererror", xhr, settings) : ajaxSuccess(result, xhr, settings) } else ajaxError(null, "error", xhr, settings) } }; var async = "async" in settings ? settings.async : !0; xhr.open(settings.type, settings.url, async); for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name]); return ajaxBeforeSend(xhr, settings) === !1 ? (xhr.abort(), !1) : (settings.timeout > 0 && (abortTimeout = setTimeout(function () { xhr.onreadystatechange = empty, xhr.abort(), ajaxError(null, "timeout", xhr, settings) }, settings.timeout)), xhr.send(settings.data ? settings.data : null), xhr) }, $.get = function (a, b) { return $.ajax({ url: a, success: b }) }, $.post = function (a, b, c, d) { return $.isFunction(b) && (d = d || c, c = b, b = null), $.ajax({ type: "POST", url: a, data: b, success: c, dataType: d }) }, $.getJSON = function (a, b) { return $.ajax({ url: a, success: b, dataType: "json" }) }, $.fn.load = function (a, b) { if (!this.length) return this; var c = this, d = a.split(/\s/), e; return d.length > 1 && (a = d[0], e = d[1]), $.get(a, function (a) { c.html(e ? $(document.createElement("div")).html(a.replace(rscript, "")).find(e).html() : a), b && b.call(c) }), this }; var escape = encodeURIComponent; $.param = function (a, b) { var c = []; return c.add = function (a, b) { this.push(escape(a) + "=" + escape(b)) }, serialize(c, a, b), c.join("&").replace("%20", "+") } }(Zepto), function (a) { a.fn.serializeArray = function () { var b = [], c; return a(Array.prototype.slice.call(this.get(0).elements)).each(function () { c = a(this); var d = c.attr("type"); this.nodeName.toLowerCase() != "fieldset" && !this.disabled && d != "submit" && d != "reset" && d != "button" && (d != "radio" && d != "checkbox" || this.checked) && b.push({ name: c.attr("name"), value: c.val() }) }), b }, a.fn.serialize = function () { var a = []; return this.serializeArray().forEach(function (b) { a.push(encodeURIComponent(b.name) + "=" + encodeURIComponent(b.value)) }), a.join("&") }, a.fn.submit = function (b) { if (b) this.bind("submit", b); else if (this.length) { var c = a.Event("submit"); this.eq(0).trigger(c), c.defaultPrevented || this.get(0).submit() } return this } }(Zepto), function (a) { function d(a) { return "tagName" in a ? a : a.parentNode } function e(a, b, c, d) { var e = Math.abs(a - b), f = Math.abs(c - d); return e >= f ? a - b > 0 ? "Left" : "Right" : c - d > 0 ? "Up" : "Down" } function h() { g = null, b.last && (b.el.trigger("longTap"), b = {}) } function i() { g && clearTimeout(g), g = null } var b = {}, c, f = 750, g; a(document).ready(function () { var j, k; a(document.body).bind("touchstart", function (e) { j = Date.now(), k = j - (b.last || j), b.el = a(d(e.touches[0].target)), c && clearTimeout(c), b.x1 = e.touches[0].pageX, b.y1 = e.touches[0].pageY, k > 0 && k <= 250 && (b.isDoubleTap = !0), b.last = j, g = setTimeout(h, f) }).bind("touchmove", function (a) { i(), b.x2 = a.touches[0].pageX, b.y2 = a.touches[0].pageY }).bind("touchend", function (a) { i(), b.isDoubleTap ? (b.el.trigger("doubleTap"), b = {}) : b.x2 && Math.abs(b.x1 - b.x2) > 30 || b.y2 && Math.abs(b.y1 - b.y2) > 30 ? (b.el.trigger("swipe") && b.el.trigger("swipe" + e(b.x1, b.x2, b.y1, b.y2)), b = {}) : "last" in b && (b.el.trigger("tap"), c = setTimeout(function () { c = null, b.el.trigger("singleTap"), b = {} }, 250)) }).bind("touchcancel", function () { c && clearTimeout(c), g && clearTimeout(g), g = c = null, b = {} }) }), ["swipe", "swipeLeft", "swipeRight", "swipeUp", "swipeDown", "doubleTap", "tap", "singleTap", "longTap"].forEach(function (b) { a.fn[b] = function (a) { return this.bind(b, a) } }) }(Zepto); var BinaryFile = function (a, b, c) { var d = a, e = b || 0, f = 0; this.getRawData = function () { return d }, "string" == typeof a ? (f = c || d.length, this.getByteAt = function (a) { return 255 & d.charCodeAt(a + e) }, this.getBytesAt = function (a, b) { for (var c = [], f = 0; b > f; f++) c[f] = 255 & d.charCodeAt(a + f + e); return c }) : "unknown" == typeof a && (f = c || IEBinary_getLength(d), this.getByteAt = function (a) { return IEBinary_getByteAt(d, a + e) }, this.getBytesAt = function (a, b) { return new VBArray(IEBinary_getBytesAt(d, a + e, b)).toArray() }), this.getLength = function () { return f }, this.getSByteAt = function (a) { var b = this.getByteAt(a); return b > 127 ? b - 256 : b }, this.getShortAt = function (a, b) { var c = b ? (this.getByteAt(a) << 8) + this.getByteAt(a + 1) : (this.getByteAt(a + 1) << 8) + this.getByteAt(a); return 0 > c && (c += 65536), c }, this.getSShortAt = function (a, b) { var c = this.getShortAt(a, b); return c > 32767 ? c - 65536 : c }, this.getLongAt = function (a, b) { var c = this.getByteAt(a), d = this.getByteAt(a + 1), e = this.getByteAt(a + 2), f = this.getByteAt(a + 3), g = b ? (((c << 8) + d << 8) + e << 8) + f : (((f << 8) + e << 8) + d << 8) + c; return 0 > g && (g += 4294967296), g }, this.getSLongAt = function (a, b) { var c = this.getLongAt(a, b); return c > 2147483647 ? c - 4294967296 : c }, this.getStringAt = function (a, b) { for (var c = [], d = this.getBytesAt(a, b), e = 0; b > e; e++) c[e] = String.fromCharCode(d[e]); return c.join("") }, this.getCharAt = function (a) { return String.fromCharCode(this.getByteAt(a)) }, this.toBase64 = function () { return window.btoa(d) }, this.fromBase64 = function (a) { d = window.atob(a) } }, BinaryAjax = function () { function a() { var a = null; return window.ActiveXObject ? a = new ActiveXObject("Microsoft.XMLHTTP") : window.XMLHttpRequest && (a = new XMLHttpRequest), a } function b(b, c, d) { var e = a(); e ? (c && ("undefined" != typeof e.onload ? e.onload = function () { "200" == e.status ? c(this) : d && d(), e = null } : e.onreadystatechange = function () { 4 == e.readyState && ("200" == e.status ? c(this) : d && d(), e = null) }), e.open("HEAD", b, !0), e.send(null)) : d && d() } function c(b, c, d, e, f, g) { var h = a(); if (h) { var i = 0; e && !f && (i = e[0]); var j = 0; e && (j = e[1] - e[0] + 1), c && ("undefined" != typeof h.onload ? h.onload = function () { "200" == h.status || "206" == h.status || "0" == h.status ? (h.binaryResponse = new BinaryFile(h.responseText, i, j), h.fileSize = g || h.getResponseHeader("Content-Length"), c(h)) : d && d(), h = null } : h.onreadystatechange = function () { if (4 == h.readyState) { if ("200" == h.status || "206" == h.status || "0" == h.status) { var a = { status: h.status, binaryResponse: new BinaryFile("unknown" == typeof h.responseBody ? h.responseBody : h.responseText, i, j), fileSize: g || h.getResponseHeader("Content-Length") }; c(a) } else d && d(); h = null } }), h.open("GET", b, !0), h.overrideMimeType && h.overrideMimeType("text/plain; charset=x-user-defined"), e && f && h.setRequestHeader("Range", "bytes=" + e[0] + "-" + e[1]), h.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 1970 00:00:00 GMT"), h.send(null) } else d && d() } return function (a, d, e, f) { f ? b(a, function (b) { var i, j, g = parseInt(b.getResponseHeader("Content-Length"), 10), h = b.getResponseHeader("Accept-Ranges"); i = f[0], f[0] < 0 && (i += g), j = i + f[1] - 1, c(a, d, e, [i, j], "bytes" == h, g) }) : c(a, d, e) } }(); document.write("\r\n"); var EXIF = function () { function g(a) { return !!a.exifdata } function h(a, b) { BinaryAjax(a.src, function (c) { var d = i(c.binaryResponse); a.exifdata = d || {}, b && b.call(a) }) } function i(b) { if (255 != b.getByteAt(0) || 216 != b.getByteAt(1)) return !1; for (var e, c = 2, d = b.getLength() ; d > c;) { if (255 != b.getByteAt(c)) return a && console.log("Not a valid marker at offset " + c + ", found: " + b.getByteAt(c)), !1; if (e = b.getByteAt(c + 1), 22400 == e) return a && console.log("Found 0xFFE1 marker"), l(b, c + 4, b.getShortAt(c + 2, !0) - 2); if (225 == e) return a && console.log("Found 0xFFE1 marker"), l(b, c + 4, b.getShortAt(c + 2, !0) - 2); c += 2 + b.getShortAt(c + 2, !0) } } function j(b, c, d, e, f) { var i, j, l, g = b.getShortAt(d, f), h = {}; for (l = 0; g > l; l++) i = d + 12 * l + 2, j = e[b.getShortAt(i, f)], !j && a && console.log("Unknown tag: " + b.getShortAt(i, f)), h[j] = k(b, i, c, d, f); return h } function k(a, b, c, d, e) { var i, j, k, l, m, n, f = a.getShortAt(b + 2, e), g = a.getLongAt(b + 4, e), h = a.getLongAt(b + 8, e) + c; switch (f) { case 1: case 7: if (1 == g) return a.getByteAt(b + 8, e); for (i = g > 4 ? h : b + 8, j = [], l = 0; g > l; l++) j[l] = a.getByteAt(i + l); return j; case 2: return i = g > 4 ? h : b + 8, a.getStringAt(i, g - 1); case 3: if (1 == g) return a.getShortAt(b + 8, e); for (i = g > 2 ? h : b + 8, j = [], l = 0; g > l; l++) j[l] = a.getShortAt(i + 2 * l, e); return j; case 4: if (1 == g) return a.getLongAt(b + 8, e); j = []; for (var l = 0; g > l; l++) j[l] = a.getLongAt(h + 4 * l, e); return j; case 5: if (1 == g) return m = a.getLongAt(h, e), n = a.getLongAt(h + 4, e), k = new Number(m / n), k.numerator = m, k.denominator = n, k; for (j = [], l = 0; g > l; l++) m = a.getLongAt(h + 8 * l, e), n = a.getLongAt(h + 4 + 8 * l, e), j[l] = new Number(m / n), j[l].numerator = m, j[l].denominator = n; return j; case 9: if (1 == g) return a.getSLongAt(b + 8, e); for (j = [], l = 0; g > l; l++) j[l] = a.getSLongAt(h + 4 * l, e); return j; case 10: if (1 == g) return a.getSLongAt(h, e) / a.getSLongAt(h + 4, e); for (j = [], l = 0; g > l; l++) j[l] = a.getSLongAt(h + 8 * l, e) / a.getSLongAt(h + 4 + 8 * l, e); return j } } function l(f, g) { if ("Exif" != f.getStringAt(g, 4)) return a && console.log("Not valid EXIF data! " + f.getStringAt(g, 4)), !1; var h, i, k, l, m, n = g + 6; if (18761 == f.getShortAt(n)) h = !1; else { if (19789 != f.getShortAt(n)) return a && console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"), !1; h = !0 } if (42 != f.getShortAt(n + 2, h)) return a && console.log("Not valid TIFF data! (no 0x002A)"), !1; if (8 != f.getLongAt(n + 4, h)) return a && console.log("Not valid TIFF data! (First offset not 8)", f.getShortAt(n + 4, h)), !1; if (i = j(f, n, n + 8, c, h), i.ExifIFDPointer) { l = j(f, n, n + i.ExifIFDPointer, b, h); for (k in l) { switch (k) { case "LightSource": case "Flash": case "MeteringMode": case "ExposureProgram": case "SensingMethod": case "SceneCaptureType": case "SceneType": case "CustomRendered": case "WhiteBalance": case "GainControl": case "Contrast": case "Saturation": case "Sharpness": case "SubjectDistanceRange": case "FileSource": l[k] = e[k][l[k]]; break; case "ExifVersion": case "FlashpixVersion": l[k] = String.fromCharCode(l[k][0], l[k][1], l[k][2], l[k][3]); break; case "ComponentsConfiguration": l[k] = e.Components[l[k][0]] + e.Components[l[k][1]] + e.Components[l[k][2]] + e.Components[l[k][3]] } i[k] = l[k] } } if (i.GPSInfoIFDPointer) { m = j(f, n, n + i.GPSInfoIFDPointer, d, h); for (k in m) { switch (k) { case "GPSVersionID": m[k] = m[k][0] + "." + m[k][1] + "." + m[k][2] + "." + m[k][3] } i[k] = m[k] } } return i } function m(a, b) { return a.complete ? (g(a) ? b && b.call(a) : h(a, b), !0) : !1 } function n(a, b) { return g(a) ? a.exifdata[b] : void 0 } function o(a) { if (!g(a)) return {}; var b, c = a.exifdata, d = {}; for (b in c) c.hasOwnProperty(b) && (d[b] = c[b]); return d } function p(a) { if (!g(a)) return ""; var b, c = a.exifdata, d = ""; for (b in c) c.hasOwnProperty(b) && (d += "object" == typeof c[b] ? c[b] instanceof Number ? b + " : " + c[b] + " [" + c[b].numerator + "/" + c[b].denominator + "]\r\n" : b + " : [" + c[b].length + " values]\r\n" : b + " : " + c[b] + "\r\n"); return d } function q(a) { return i(a) } var a = !1, b = { 36864: "ExifVersion", 40960: "FlashpixVersion", 40961: "ColorSpace", 40962: "PixelXDimension", 40963: "PixelYDimension", 37121: "ComponentsConfiguration", 37122: "CompressedBitsPerPixel", 37500: "MakerNote", 37510: "UserComment", 40964: "RelatedSoundFile", 36867: "DateTimeOriginal", 36868: "DateTimeDigitized", 37520: "SubsecTime", 37521: "SubsecTimeOriginal", 37522: "SubsecTimeDigitized", 33434: "ExposureTime", 33437: "FNumber", 34850: "ExposureProgram", 34852: "SpectralSensitivity", 34855: "ISOSpeedRatings", 34856: "OECF", 37377: "ShutterSpeedValue", 37378: "ApertureValue", 37379: "BrightnessValue", 37380: "ExposureBias", 37381: "MaxApertureValue", 37382: "SubjectDistance", 37383: "MeteringMode", 37384: "LightSource", 37385: "Flash", 37396: "SubjectArea", 37386: "FocalLength", 41483: "FlashEnergy", 41484: "SpatialFrequencyResponse", 41486: "FocalPlaneXResolution", 41487: "FocalPlaneYResolution", 41488: "FocalPlaneResolutionUnit", 41492: "SubjectLocation", 41493: "ExposureIndex", 41495: "SensingMethod", 41728: "FileSource", 41729: "SceneType", 41730: "CFAPattern", 41985: "CustomRendered", 41986: "ExposureMode", 41987: "WhiteBalance", 41988: "DigitalZoomRation", 41989: "FocalLengthIn35mmFilm", 41990: "SceneCaptureType", 41991: "GainControl", 41992: "Contrast", 41993: "Saturation", 41994: "Sharpness", 41995: "DeviceSettingDescription", 41996: "SubjectDistanceRange", 40965: "InteroperabilityIFDPointer", 42016: "ImageUniqueID" }, c = { 256: "ImageWidth", 257: "ImageHeight", 34665: "ExifIFDPointer", 34853: "GPSInfoIFDPointer", 40965: "InteroperabilityIFDPointer", 258: "BitsPerSample", 259: "Compression", 262: "PhotometricInterpretation", 274: "Orientation", 277: "SamplesPerPixel", 284: "PlanarConfiguration", 530: "YCbCrSubSampling", 531: "YCbCrPositioning", 282: "XResolution", 283: "YResolution", 296: "ResolutionUnit", 273: "StripOffsets", 278: "RowsPerStrip", 279: "StripByteCounts", 513: "JPEGInterchangeFormat", 514: "JPEGInterchangeFormatLength", 301: "TransferFunction", 318: "WhitePoint", 319: "PrimaryChromaticities", 529: "YCbCrCoefficients", 532: "ReferenceBlackWhite", 306: "DateTime", 270: "ImageDescription", 271: "Make", 272: "Model", 305: "Software", 315: "Artist", 33432: "Copyright" }, d = { 0: "GPSVersionID", 1: "GPSLatitudeRef", 2: "GPSLatitude", 3: "GPSLongitudeRef", 4: "GPSLongitude", 5: "GPSAltitudeRef", 6: "GPSAltitude", 7: "GPSTimeStamp", 8: "GPSSatellites", 9: "GPSStatus", 10: "GPSMeasureMode", 11: "GPSDOP", 12: "GPSSpeedRef", 13: "GPSSpeed", 14: "GPSTrackRef", 15: "GPSTrack", 16: "GPSImgDirectionRef", 17: "GPSImgDirection", 18: "GPSMapDatum", 19: "GPSDestLatitudeRef", 20: "GPSDestLatitude", 21: "GPSDestLongitudeRef", 22: "GPSDestLongitude", 23: "GPSDestBearingRef", 24: "GPSDestBearing", 25: "GPSDestDistanceRef", 26: "GPSDestDistance", 27: "GPSProcessingMethod", 28: "GPSAreaInformation", 29: "GPSDateStamp", 30: "GPSDifferential" }, e = { ExposureProgram: { 0: "Not defined", 1: "Manual", 2: "Normal program", 3: "Aperture priority", 4: "Shutter priority", 5: "Creative program", 6: "Action program", 7: "Portrait mode", 8: "Landscape mode" }, MeteringMode: { 0: "Unknown", 1: "Average", 2: "CenterWeightedAverage", 3: "Spot", 4: "MultiSpot", 5: "Pattern", 6: "Partial", 255: "Other" }, LightSource: { 0: "Unknown", 1: "Daylight", 2: "Fluorescent", 3: "Tungsten (incandescent light)", 4: "Flash", 9: "Fine weather", 10: "Cloudy weather", 11: "Shade", 12: "Daylight fluorescent (D 5700 - 7100K)", 13: "Day white fluorescent (N 4600 - 5400K)", 14: "Cool white fluorescent (W 3900 - 4500K)", 15: "White fluorescent (WW 3200 - 3700K)", 17: "Standard light A", 18: "Standard light B", 19: "Standard light C", 20: "D55", 21: "D65", 22: "D75", 23: "D50", 24: "ISO studio tungsten", 255: "Other" }, Flash: { 0: "Flash did not fire", 1: "Flash fired", 5: "Strobe return light not detected", 7: "Strobe return light detected", 9: "Flash fired, compulsory flash mode", 13: "Flash fired, compulsory flash mode, return light not detected", 15: "Flash fired, compulsory flash mode, return light detected", 16: "Flash did not fire, compulsory flash mode", 24: "Flash did not fire, auto mode", 25: "Flash fired, auto mode", 29: "Flash fired, auto mode, return light not detected", 31: "Flash fired, auto mode, return light detected", 32: "No flash function", 65: "Flash fired, red-eye reduction mode", 69: "Flash fired, red-eye reduction mode, return light not detected", 71: "Flash fired, red-eye reduction mode, return light detected", 73: "Flash fired, compulsory flash mode, red-eye reduction mode", 77: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", 79: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", 89: "Flash fired, auto mode, red-eye reduction mode", 93: "Flash fired, auto mode, return light not detected, red-eye reduction mode", 95: "Flash fired, auto mode, return light detected, red-eye reduction mode" }, SensingMethod: { 1: "Not defined", 2: "One-chip color area sensor", 3: "Two-chip color area sensor", 4: "Three-chip color area sensor", 5: "Color sequential area sensor", 7: "Trilinear sensor", 8: "Color sequential linear sensor" }, SceneCaptureType: { 0: "Standard", 1: "Landscape", 2: "Portrait", 3: "Night scene" }, SceneType: { 1: "Directly photographed" }, CustomRendered: { 0: "Normal process", 1: "Custom process" }, WhiteBalance: { 0: "Auto white balance", 1: "Manual white balance" }, GainControl: { 0: "None", 1: "Low gain up", 2: "High gain up", 3: "Low gain down", 4: "High gain down" }, Contrast: { 0: "Normal", 1: "Soft", 2: "Hard" }, Saturation: { 0: "Normal", 1: "Low saturation", 2: "High saturation" }, Sharpness: { 0: "Normal", 1: "Soft", 2: "Hard" }, SubjectDistanceRange: { 0: "Unknown", 1: "Macro", 2: "Close view", 3: "Distant view" }, FileSource: { 3: "DSC" }, Components: { 0: "", 1: "Y", 2: "Cb", 3: "Cr", 4: "R", 5: "G", 6: "B" } }; return { readFromBinaryFile: q, pretty: p, getTag: n, getAllTags: o, getData: m, Tags: b, TiffTags: c, GPSTags: d, StringValues: e } }(); !function (a) { function e(a, e) { this.file = a, this.options = c.extend({}, d, e), this._defaults = d, this._name = b, this.init() } var b = "canvasResize", c = { newsize: function (a, b, c, d, e) { var f = e ? "h" : ""; if (c && a > c || d && b > d) { var g = a / b; (g >= 1 || 0 === d) && c && !e ? (a = c, b = c / g >> 0) : e && c / d >= g ? (a = c, b = c / g >> 0, f = "w") : (a = d * g >> 0, b = d) } return { width: a, height: b, cropped: f } }, dataURLtoBlob: function (a) { for (var b = a.split(",")[0].split(":")[1].split(";")[0], c = atob(a.split(",")[1]), d = new ArrayBuffer(c.length), e = new Uint8Array(d), f = 0; f < c.length; f++) e[f] = c.charCodeAt(f); var g = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; return g ? (g = new (window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder), g.append(d), g.getBlob(b)) : g = new Blob([d], { type: b }) }, detectSubsampling: function (a) { var b = a.width, c = a.height; if (b * c > 1048576) { var d = document.createElement("canvas"); d.width = d.height = 1; var e = d.getContext("2d"); return e.drawImage(a, -b + 1, 0), 0 === e.getImageData(0, 0, 1, 1).data[3] } return !1 }, rotate: function (a, b) { var c = { 1: { 90: 6, 180: 3, 270: 8 }, 2: { 90: 7, 180: 4, 270: 5 }, 3: { 90: 8, 180: 1, 270: 6 }, 4: { 90: 5, 180: 2, 270: 7 }, 5: { 90: 2, 180: 7, 270: 4 }, 6: { 90: 3, 180: 8, 270: 1 }, 7: { 90: 4, 180: 5, 270: 2 }, 8: { 90: 1, 180: 6, 270: 3 } }; return c[a][b] ? c[a][b] : a }, transformCoordinate: function (a, b, c, d) { switch (d) { case 5: case 6: case 7: case 8: a.width = c, a.height = b; break; default: a.width = b, a.height = c } var e = a.getContext("2d"); switch (d) { case 1: break; case 2: e.translate(b, 0), e.scale(-1, 1); break; case 3: e.translate(b, c), e.rotate(Math.PI); break; case 4: e.translate(0, c), e.scale(1, -1); break; case 5: e.rotate(.5 * Math.PI), e.scale(1, -1); break; case 6: e.rotate(.5 * Math.PI), e.translate(0, -c); break; case 7: e.rotate(.5 * Math.PI), e.translate(b, -c), e.scale(-1, 1); break; case 8: e.rotate(-.5 * Math.PI), e.translate(-b, 0) } }, detectVerticalSquash: function (a, b, c) { var d = document.createElement("canvas"); d.width = 1, d.height = c; var e = d.getContext("2d"); e.drawImage(a, 0, 0); for (var f = e.getImageData(0, 0, 1, c).data, g = 0, h = c, i = c; i > g;) { var j = f[4 * (i - 1) + 3]; 0 === j ? h = i : g = i, i = h + g >> 1 } var k = i / c; return 0 === k ? 1 : k }, callback: function (a) { return a }, extend: function () { var a = arguments[0] || {}, b = 1, d = arguments.length, e = !1; a.constructor === Boolean && (e = a, a = arguments[1] || {}), 1 === d && (a = this, b = 0); for (var f; d > b; b++) if (null !== (f = arguments[b])) for (var g in f) a !== f[g] && (e && "object" == typeof f[g] && a[g] ? c.extend(a[g], f[g]) : void 0 !== f[g] && (a[g] = f[g])); return a } }, d = { width: 300, height: 0, crop: !1, quality: 80, rotate: 0, callback: c.callback }; e.prototype = { init: function () { var a = this, b = this.file, d = new FileReader; d.onloadend = function (d) { var e = d.target.result, f = atob(e.split(",")[1]), g = new BinaryFile(f, 0, f.length), h = EXIF.readFromBinaryFile(g), i = new Image; i.onload = function () { var e = h.Orientation || 1; e = c.rotate(e, a.options.rotate); var f = e >= 5 && 8 >= e ? c.newsize(i.height, i.width, a.options.width, a.options.height, a.options.crop) : c.newsize(i.width, i.height, a.options.width, a.options.height, a.options.crop), g = i.width, j = i.height, k = f.width, l = f.height, m = document.createElement("canvas"), n = m.getContext("2d"); n.save(), c.transformCoordinate(m, k, l, e), c.detectSubsampling(i) && (g /= 2, j /= 2); var o = 1024, p = document.createElement("canvas"); p.width = p.height = o; for (var q = p.getContext("2d"), r = c.detectVerticalSquash(i, g, j), s = 0; j > s;) { for (var t = s + o > j ? j - s : o, u = 0; g > u;) { var v = u + o > g ? g - u : o; q.clearRect(0, 0, o, o), q.drawImage(i, -u, -s); var w = Math.floor(u * k / g), x = Math.ceil(v * k / g), y = Math.floor(s * l / j / r), z = Math.ceil(t * l / j / r); n.drawImage(p, 0, 0, v, t, w, y, x, z), u += o } s += o } n.restore(), p = q = null; var A = document.createElement("canvas"); A.width = "h" === f.cropped ? l : k, A.height = "w" === f.cropped ? k : l; var B = "h" === f.cropped ? .5 * (l - k) : 0, C = "w" === f.cropped ? .5 * (k - l) : 0; if (newctx = A.getContext("2d"), newctx.drawImage(m, B, C, k, l), console.log(b, b.type), "image/png" === b.type) var D = A.toDataURL(b.type); else var D = A.toDataURL("image/jpeg", .01 * a.options.quality); a.options.callback(D, A.width, A.height) }, i.src = e }, d.readAsDataURL(b) } }, a[b] = function (a, b) { return "string" == typeof a ? c[a](b) : (new e(a, b), void 0) } }(window);