﻿jQuery.fn.crossSlide = function(i, e) { function y(n) { for (var h = 1; h < arguments.length; h++) n = n.replace(RegExp("\\{" + (h - 1) + "}", "g"), arguments[h]); return n } function j() { arguments[0] = "crossSlide: " + arguments[0]; throw y.apply(null, arguments); } var o = this, z = this.width(), A = this.height(); (function(n) { function h(g, k) { k.onload = function() { r++; e[g].width = k.width; e[g].height = k.height; r == e.length && n() }; k.src = e[g].src; g + 1 < e.length && h(g + 1, new Image) } var r = 0; h(0, new Image) })(function() { function n(a) { var d = 1; a = a.replace(/^\s*|\s*$/g, "").split(/\s+/); if (a.length > 3) throw Error(); if (a[0] == "center") if (a.length == 1) a = ["center", "center"]; else if (a.length == 2 && a[1].match(/^[\d.]+x$/i)) a = ["center", "center", a[1]]; if (a.length == 3) d = parseFloat(a[2].match(/^([\d.]+)x$/i)[1]); var b = a[0] + " " + a[1]; if (b == "left top" || b == "top left") return { xrel: 0, yrel: 0, zoom: d }; if (b == "left center" || b == "center left") return { xrel: 0, yrel: 0.5, zoom: d }; if (b == "left bottom" || b == "bottom left") return { xrel: 0, yrel: 1, zoom: d }; if (b == "center top" || b == "top center") return { xrel: 0.5, yrel: 0, zoom: d }; if (b == "center center") return { xrel: 0.5, yrel: 0.5, zoom: d }; if (b == "center bottom" || b == "bottom center") return { xrel: 0.5, yrel: 1, zoom: d }; if (b == "right top" || b == "top right") return { xrel: 1, yrel: 0, zoom: d }; if (b == "right center" || b == "center right") return { xrel: 1, yrel: 0.5, zoom: d }; if (b == "right bottom" || b == "bottom right") return { xrel: 1, yrel: 1, zoom: d }; return { xrel: parseInt(a[0].match(/^(\d+)%$/)[1]) / 100, yrel: parseInt(a[1].match(/^(\d+)%$/)[1]) / 100, zoom: d} } function h(a, d) { switch (d) { case 1: var b = 0; break; case 2: b = g / (a.time_ms + 2 * g); break; case 3: b = 1 - g / (a.time_ms + 2 * g); break; case 4: b = 1; break } return { left: Math.round(a.from.left + b * (a.to.left - a.from.left)), top: Math.round(a.from.top + b * (a.to.top - a.from.top)), width: Math.round(a.from.width + b * (a.to.width - a.from.width)), height: Math.round(a.from.height + b * (a.to.height - a.from.height))} } function r(a, d) { if (a % 2 == 0) if (k) { var b = a / 2, f = (b - 1 + e.length) % e.length; l.eq(b); var B = l.eq(f); f = function() { B.css("visibility", "hidden"); setTimeout(d, k) } } else { b = a / 2; f = (b - 1 + e.length) % e.length; var E = l.eq(b); B = l.eq(f); var F = e[b].time_ms, G = h(e[b], 3); f = function() { B.css("visibility", "hidden"); E.animate(G, F, "linear", d) } } else if (k) { f = Math.floor(a / 2); b = Math.ceil(a / 2) % e.length; var C = l.eq(f), s = l.eq(b), p = {}, q = { visibility: "visible" }, t = {}; if (b > f) { q.opacity = 0; t.opacity = 1 } else p.opacity = 0; f = function() { s.css(q); p.opacity != undefined ? C.animate(p, g, "linear", d) : s.animate(t, g, "linear", d) } } else { f = Math.floor(a / 2); b = Math.ceil(a / 2) % e.length; C = l.eq(f); s = l.eq(b); p = h(e[f], 4); q = h(e[b], 1); t = h(e[b], 2); if (b > f) { q.opacity = 0; t.opacity = 1 } else p.opacity = 0; q.visibility = "visible"; f = function() { C.animate(p, g, "linear"); s.css(q); s.animate(t, g, "linear", d) } } if (i.loop && a == e.length * 2 - 2) { var H = f; f = function() { --I && H() } } return a > 0 ? r(a - 1, f) : f } i.fade || j("missing fade parameter."); i.speed && i.sleep && j("you cannot set both speed and sleep at the same time."); var g = Math.round(i.fade * 1E3); if (i.sleep) var k = Math.round(i.sleep * 1E3); if (i.speed) var v = i.speed / 1E3, w = Math.round(g * v); o.empty().css({ overflow: "hidden", padding: 0 }); /^(absolute|relative|fixed)$/.test(o.css("position")) || o.css({ position: "relative" }); if (!o.width() || !o.height()) j("container element does not have its own width and height"); i.shuffle && e.sort(function() { return Math.random() - 0.5 }); for (var m = 0; m < e.length; ++m) { var c = e[m]; c.src || j("missing src parameter in picture {0}.", m + 1); if (v) { switch (c.dir) { case "up": c.from = { xrel: 0.5, yrel: 0, zoom: 1 }; c.to = { xrel: 0.5, yrel: 1, zoom: 1 }; var u = c.height - A - 2 * w; break; case "down": c.from = { xrel: 0.5, yrel: 1, zoom: 1 }; c.to = { xrel: 0.5, yrel: 0, zoom: 1 }; u = c.height - A - 2 * w; break; case "left": c.from = { xrel: 0, yrel: 0.5, zoom: 1 }; c.to = { xrel: 1, yrel: 0.5, zoom: 1 }; u = c.width - z - 2 * w; break; case "right": c.from = { xrel: 1, yrel: 0.5, zoom: 1 }; c.to = { xrel: 0, yrel: 0.5, zoom: 1 }; u = c.width - z - 2 * w; break; default: j('missing or malformed "dir" parameter in picture {0}.', m + 1) } u <= 0 && j("picture number {0} is too short for the desired fade duration.", m + 1); c.time_ms = Math.round(u / v) } else if (!k) { if (!c.from || !c.to || !c.time) j("missing either speed/sleep option, or from/to/time params in picture {0}.", m + 1); try { c.from = n(c.from) } catch (J) { j('malformed "from" parameter in picture {0}.', m + 1) } try { c.to = n(c.to) } catch (K) { j('malformed "to" parameter in picture {0}.', m + 1) } c.time || j('missing "time" parameter in picture {0}.', m + 1); c.time_ms = Math.round(c.time * 1E3) } c.from && jQuery.each([c.from, c.to], function(a, d) { d.width = Math.round(c.width * d.zoom); d.height = Math.round(c.height * d.zoom); d.left = Math.round((z - d.width) * d.xrel); d.top = Math.round((A - d.height) * d.yrel) }); var x; x = c.href ? jQuery(y('<a href="{0}"><img src="{1}"/></a>', c.href, c.src)) : jQuery(y('<img src="{0}"/>', c.src)); c.onclick && x.click(c.onclick); c.alt && x.find("img").attr("alt", c.alt); x.appendTo(o) } v = undefined; var l = o.find("img").css({ position: "absolute", visibility: "hidden", top: 0, left: 0, border: 0 }); l.eq(0).css({ visibility: "visible" }); k || l.eq(0).css(h(e[0], 2)); var I = i.loop, D = r(e.length * 2 - 1, function() { return D() }); D() }); return o };
