diff --git a/ajax/libs/fancybox/2.1.5/blank.gif b/ajax/libs/fancybox/2.1.5/blank.gif
new file mode 100644
index 000000000..35d42e808
Binary files /dev/null and b/ajax/libs/fancybox/2.1.5/blank.gif differ
diff --git a/ajax/libs/fancybox/2.1.5/fancybox_loading.gif b/ajax/libs/fancybox/2.1.5/fancybox_loading.gif
new file mode 100644
index 000000000..a03a40c09
Binary files /dev/null and b/ajax/libs/fancybox/2.1.5/fancybox_loading.gif differ
diff --git a/ajax/libs/fancybox/2.1.5/fancybox_loading@2x.gif b/ajax/libs/fancybox/2.1.5/fancybox_loading@2x.gif
new file mode 100644
index 000000000..9205aeb09
Binary files /dev/null and b/ajax/libs/fancybox/2.1.5/fancybox_loading@2x.gif differ
diff --git a/ajax/libs/fancybox/2.1.5/fancybox_overlay.png b/ajax/libs/fancybox/2.1.5/fancybox_overlay.png
new file mode 100644
index 000000000..a4391396a
Binary files /dev/null and b/ajax/libs/fancybox/2.1.5/fancybox_overlay.png differ
diff --git a/ajax/libs/fancybox/2.1.5/fancybox_sprite.png b/ajax/libs/fancybox/2.1.5/fancybox_sprite.png
new file mode 100644
index 000000000..fd8d5ca56
Binary files /dev/null and b/ajax/libs/fancybox/2.1.5/fancybox_sprite.png differ
diff --git a/ajax/libs/fancybox/2.1.5/fancybox_sprite@2x.png b/ajax/libs/fancybox/2.1.5/fancybox_sprite@2x.png
new file mode 100644
index 000000000..d0e4779f4
Binary files /dev/null and b/ajax/libs/fancybox/2.1.5/fancybox_sprite@2x.png differ
diff --git a/ajax/libs/fancybox/2.1.5/helpers/fancybox_buttons.png b/ajax/libs/fancybox/2.1.5/helpers/fancybox_buttons.png
new file mode 100644
index 000000000..078720727
Binary files /dev/null and b/ajax/libs/fancybox/2.1.5/helpers/fancybox_buttons.png differ
diff --git a/ajax/libs/fancybox/2.1.5/helpers/jquery.fancybox-buttons.css b/ajax/libs/fancybox/2.1.5/helpers/jquery.fancybox-buttons.css
new file mode 100644
index 000000000..a26273af2
--- /dev/null
+++ b/ajax/libs/fancybox/2.1.5/helpers/jquery.fancybox-buttons.css
@@ -0,0 +1,97 @@
+#fancybox-buttons {
+ position: fixed;
+ left: 0;
+ width: 100%;
+ z-index: 8050;
+}
+
+#fancybox-buttons.top {
+ top: 10px;
+}
+
+#fancybox-buttons.bottom {
+ bottom: 10px;
+}
+
+#fancybox-buttons ul {
+ display: block;
+ width: 166px;
+ height: 30px;
+ margin: 0 auto;
+ padding: 0;
+ list-style: none;
+ border: 1px solid #111;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+ -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+ box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+ background: rgb(50,50,50);
+ background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51)));
+ background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+ background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+ background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+ background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 );
+}
+
+#fancybox-buttons ul li {
+ float: left;
+ margin: 0;
+ padding: 0;
+}
+
+#fancybox-buttons a {
+ display: block;
+ width: 30px;
+ height: 30px;
+ text-indent: -9999px;
+ background-color: transparent;
+ background-image: url('fancybox_buttons.png');
+ background-repeat: no-repeat;
+ outline: none;
+ opacity: 0.8;
+}
+
+#fancybox-buttons a:hover {
+ opacity: 1;
+}
+
+#fancybox-buttons a.btnPrev {
+ background-position: 5px 0;
+}
+
+#fancybox-buttons a.btnNext {
+ background-position: -33px 0;
+ border-right: 1px solid #3e3e3e;
+}
+
+#fancybox-buttons a.btnPlay {
+ background-position: 0 -30px;
+}
+
+#fancybox-buttons a.btnPlayOn {
+ background-position: -30px -30px;
+}
+
+#fancybox-buttons a.btnToggle {
+ background-position: 3px -60px;
+ border-left: 1px solid #111;
+ border-right: 1px solid #3e3e3e;
+ width: 35px
+}
+
+#fancybox-buttons a.btnToggleOn {
+ background-position: -27px -60px;
+}
+
+#fancybox-buttons a.btnClose {
+ border-left: 1px solid #111;
+ width: 35px;
+ background-position: -56px 0px;
+}
+
+#fancybox-buttons a.btnDisabled {
+ opacity : 0.4;
+ cursor: default;
+}
\ No newline at end of file
diff --git a/ajax/libs/fancybox/2.1.5/helpers/jquery.fancybox-buttons.js b/ajax/libs/fancybox/2.1.5/helpers/jquery.fancybox-buttons.js
new file mode 100644
index 000000000..fd8b95566
--- /dev/null
+++ b/ajax/libs/fancybox/2.1.5/helpers/jquery.fancybox-buttons.js
@@ -0,0 +1,122 @@
+ /*!
+ * Buttons helper for fancyBox
+ * version: 1.0.5 (Mon, 15 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * buttons: {
+ * position : 'top'
+ * }
+ * }
+ * });
+ *
+ */
+(function ($) {
+ //Shortcut for fancyBox object
+ var F = $.fancybox;
+
+ //Add helper object
+ F.helpers.buttons = {
+ defaults : {
+ skipSingle : false, // disables if gallery contains single image
+ position : 'top', // 'top' or 'bottom'
+ tpl : '
The requested content cannot be loaded. Please try again later.
',
+ closeBtn : '').html(content).find(current.selector);
+
+ } else if (isQuery(content)) {
+ if (!content.data(placeholder)) {
+ content.data(placeholder, $('
').insertAfter( content ).hide() );
+ }
+
+ content = content.show().detach();
+
+ current.wrap.bind('onReset', function () {
+ if ($(this).find(content).length) {
+ content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);
+ }
+ });
+ }
+ break;
+
+ case 'image':
+ content = current.tpl.image.replace('{href}', href);
+ break;
+
+ case 'swf':
+ content = '
';
+ embed = '';
+
+ $.each(current.swf, function(name, val) {
+ content += ' ';
+ embed += ' ' + name + '="' + val + '"';
+ });
+
+ content += '';
+ break;
+ }
+
+ if (!(isQuery(content) && content.parent().is(current.inner))) {
+ current.inner.append( content );
+ }
+
+ // Give a chance for helpers or callbacks to update elements
+ F.trigger('beforeShow');
+
+ // Set scrolling before calculating dimensions
+ current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));
+
+ // Set initial dimensions and start position
+ F._setDimension();
+
+ F.reposition();
+
+ F.isOpen = false;
+ F.coming = null;
+
+ F.bindEvents();
+
+ if (!F.isOpened) {
+ $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();
+
+ } else if (previous.prevMethod) {
+ F.transitions[ previous.prevMethod ]();
+ }
+
+ F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();
+
+ F._preloadImages();
+ },
+
+ _setDimension: function () {
+ var viewport = F.getViewport(),
+ steps = 0,
+ canShrink = false,
+ canExpand = false,
+ wrap = F.wrap,
+ skin = F.skin,
+ inner = F.inner,
+ current = F.current,
+ width = current.width,
+ height = current.height,
+ minWidth = current.minWidth,
+ minHeight = current.minHeight,
+ maxWidth = current.maxWidth,
+ maxHeight = current.maxHeight,
+ scrolling = current.scrolling,
+ scrollOut = current.scrollOutside ? current.scrollbarWidth : 0,
+ margin = current.margin,
+ wMargin = getScalar(margin[1] + margin[3]),
+ hMargin = getScalar(margin[0] + margin[2]),
+ wPadding,
+ hPadding,
+ wSpace,
+ hSpace,
+ origWidth,
+ origHeight,
+ origMaxWidth,
+ origMaxHeight,
+ ratio,
+ width_,
+ height_,
+ maxWidth_,
+ maxHeight_,
+ iframe,
+ body;
+
+ // Reset dimensions so we could re-check actual size
+ wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');
+
+ wPadding = getScalar(skin.outerWidth(true) - skin.width());
+ hPadding = getScalar(skin.outerHeight(true) - skin.height());
+
+ // Any space between content and viewport (margin, padding, border, title)
+ wSpace = wMargin + wPadding;
+ hSpace = hMargin + hPadding;
+
+ origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width;
+ origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;
+
+ if (current.type === 'iframe') {
+ iframe = current.content;
+
+ if (current.autoHeight && iframe.data('ready') === 1) {
+ try {
+ if (iframe[0].contentWindow.document.location) {
+ inner.width( origWidth ).height(9999);
+
+ body = iframe.contents().find('body');
+
+ if (scrollOut) {
+ body.css('overflow-x', 'hidden');
+ }
+
+ origHeight = body.outerHeight(true);
+ }
+
+ } catch (e) {}
+ }
+
+ } else if (current.autoWidth || current.autoHeight) {
+ inner.addClass( 'fancybox-tmp' );
+
+ // Set width or height in case we need to calculate only one dimension
+ if (!current.autoWidth) {
+ inner.width( origWidth );
+ }
+
+ if (!current.autoHeight) {
+ inner.height( origHeight );
+ }
+
+ if (current.autoWidth) {
+ origWidth = inner.width();
+ }
+
+ if (current.autoHeight) {
+ origHeight = inner.height();
+ }
+
+ inner.removeClass( 'fancybox-tmp' );
+ }
+
+ width = getScalar( origWidth );
+ height = getScalar( origHeight );
+
+ ratio = origWidth / origHeight;
+
+ // Calculations for the content
+ minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);
+ maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);
+
+ minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);
+ maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);
+
+ // These will be used to determine if wrap can fit in the viewport
+ origMaxWidth = maxWidth;
+ origMaxHeight = maxHeight;
+
+ if (current.fitToView) {
+ maxWidth = Math.min(viewport.w - wSpace, maxWidth);
+ maxHeight = Math.min(viewport.h - hSpace, maxHeight);
+ }
+
+ maxWidth_ = viewport.w - wMargin;
+ maxHeight_ = viewport.h - hMargin;
+
+ if (current.aspectRatio) {
+ if (width > maxWidth) {
+ width = maxWidth;
+ height = getScalar(width / ratio);
+ }
+
+ if (height > maxHeight) {
+ height = maxHeight;
+ width = getScalar(height * ratio);
+ }
+
+ if (width < minWidth) {
+ width = minWidth;
+ height = getScalar(width / ratio);
+ }
+
+ if (height < minHeight) {
+ height = minHeight;
+ width = getScalar(height * ratio);
+ }
+
+ } else {
+ width = Math.max(minWidth, Math.min(width, maxWidth));
+
+ if (current.autoHeight && current.type !== 'iframe') {
+ inner.width( width );
+
+ height = inner.height();
+ }
+
+ height = Math.max(minHeight, Math.min(height, maxHeight));
+ }
+
+ // Try to fit inside viewport (including the title)
+ if (current.fitToView) {
+ inner.width( width ).height( height );
+
+ wrap.width( width + wPadding );
+
+ // Real wrap dimensions
+ width_ = wrap.width();
+ height_ = wrap.height();
+
+ if (current.aspectRatio) {
+ while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {
+ if (steps++ > 19) {
+ break;
+ }
+
+ height = Math.max(minHeight, Math.min(maxHeight, height - 10));
+ width = getScalar(height * ratio);
+
+ if (width < minWidth) {
+ width = minWidth;
+ height = getScalar(width / ratio);
+ }
+
+ if (width > maxWidth) {
+ width = maxWidth;
+ height = getScalar(width / ratio);
+ }
+
+ inner.width( width ).height( height );
+
+ wrap.width( width + wPadding );
+
+ width_ = wrap.width();
+ height_ = wrap.height();
+ }
+
+ } else {
+ width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_)));
+ height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));
+ }
+ }
+
+ if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {
+ width += scrollOut;
+ }
+
+ inner.width( width ).height( height );
+
+ wrap.width( width + wPadding );
+
+ width_ = wrap.width();
+ height_ = wrap.height();
+
+ canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;
+ canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));
+
+ $.extend(current, {
+ dim : {
+ width : getValue( width_ ),
+ height : getValue( height_ )
+ },
+ origWidth : origWidth,
+ origHeight : origHeight,
+ canShrink : canShrink,
+ canExpand : canExpand,
+ wPadding : wPadding,
+ hPadding : hPadding,
+ wrapSpace : height_ - skin.outerHeight(true),
+ skinSpace : skin.height() - height
+ });
+
+ if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {
+ inner.height('auto');
+ }
+ },
+
+ _getPosition: function (onlyAbsolute) {
+ var current = F.current,
+ viewport = F.getViewport(),
+ margin = current.margin,
+ width = F.wrap.width() + margin[1] + margin[3],
+ height = F.wrap.height() + margin[0] + margin[2],
+ rez = {
+ position: 'absolute',
+ top : margin[0],
+ left : margin[3]
+ };
+
+ if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {
+ rez.position = 'fixed';
+
+ } else if (!current.locked) {
+ rez.top += viewport.y;
+ rez.left += viewport.x;
+ }
+
+ rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio)));
+ rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio)));
+
+ return rez;
+ },
+
+ _afterZoomIn: function () {
+ var current = F.current;
+
+ if (!current) {
+ return;
+ }
+
+ F.isOpen = F.isOpened = true;
+
+ F.wrap.css('overflow', 'visible').addClass('fancybox-opened');
+
+ F.update();
+
+ // Assign a click event
+ if ( current.closeClick || (current.nextClick && F.group.length > 1) ) {
+ F.inner.css('cursor', 'pointer').bind('click.fb', function(e) {
+ if (!$(e.target).is('a') && !$(e.target).parent().is('a')) {
+ e.preventDefault();
+
+ F[ current.closeClick ? 'close' : 'next' ]();
+ }
+ });
+ }
+
+ // Create a close button
+ if (current.closeBtn) {
+ $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {
+ e.preventDefault();
+
+ F.close();
+ });
+ }
+
+ // Create navigation arrows
+ if (current.arrows && F.group.length > 1) {
+ if (current.loop || current.index > 0) {
+ $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);
+ }
+
+ if (current.loop || current.index < F.group.length - 1) {
+ $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);
+ }
+ }
+
+ F.trigger('afterShow');
+
+ // Stop the slideshow if this is the last item
+ if (!current.loop && current.index === current.group.length - 1) {
+ F.play( false );
+
+ } else if (F.opts.autoPlay && !F.player.isActive) {
+ F.opts.autoPlay = false;
+
+ F.play();
+ }
+ },
+
+ _afterZoomOut: function ( obj ) {
+ obj = obj || F.current;
+
+ $('.fancybox-wrap').trigger('onReset').remove();
+
+ $.extend(F, {
+ group : {},
+ opts : {},
+ router : false,
+ current : null,
+ isActive : false,
+ isOpened : false,
+ isOpen : false,
+ isClosing : false,
+ wrap : null,
+ skin : null,
+ outer : null,
+ inner : null
+ });
+
+ F.trigger('afterClose', obj);
+ }
+ });
+
+ /*
+ * Default transitions
+ */
+
+ F.transitions = {
+ getOrigPosition: function () {
+ var current = F.current,
+ element = current.element,
+ orig = current.orig,
+ pos = {},
+ width = 50,
+ height = 50,
+ hPadding = current.hPadding,
+ wPadding = current.wPadding,
+ viewport = F.getViewport();
+
+ if (!orig && current.isDom && element.is(':visible')) {
+ orig = element.find('img:first');
+
+ if (!orig.length) {
+ orig = element;
+ }
+ }
+
+ if (isQuery(orig)) {
+ pos = orig.offset();
+
+ if (orig.is('img')) {
+ width = orig.outerWidth();
+ height = orig.outerHeight();
+ }
+
+ } else {
+ pos.top = viewport.y + (viewport.h - height) * current.topRatio;
+ pos.left = viewport.x + (viewport.w - width) * current.leftRatio;
+ }
+
+ if (F.wrap.css('position') === 'fixed' || current.locked) {
+ pos.top -= viewport.y;
+ pos.left -= viewport.x;
+ }
+
+ pos = {
+ top : getValue(pos.top - hPadding * current.topRatio),
+ left : getValue(pos.left - wPadding * current.leftRatio),
+ width : getValue(width + wPadding),
+ height : getValue(height + hPadding)
+ };
+
+ return pos;
+ },
+
+ step: function (now, fx) {
+ var ratio,
+ padding,
+ value,
+ prop = fx.prop,
+ current = F.current,
+ wrapSpace = current.wrapSpace,
+ skinSpace = current.skinSpace;
+
+ if (prop === 'width' || prop === 'height') {
+ ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);
+
+ if (F.isClosing) {
+ ratio = 1 - ratio;
+ }
+
+ padding = prop === 'width' ? current.wPadding : current.hPadding;
+ value = now - padding;
+
+ F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) );
+ F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );
+ }
+ },
+
+ zoomIn: function () {
+ var current = F.current,
+ startPos = current.pos,
+ effect = current.openEffect,
+ elastic = effect === 'elastic',
+ endPos = $.extend({opacity : 1}, startPos);
+
+ // Remove "position" property that breaks older IE
+ delete endPos.position;
+
+ if (elastic) {
+ startPos = this.getOrigPosition();
+
+ if (current.openOpacity) {
+ startPos.opacity = 0.1;
+ }
+
+ } else if (effect === 'fade') {
+ startPos.opacity = 0.1;
+ }
+
+ F.wrap.css(startPos).animate(endPos, {
+ duration : effect === 'none' ? 0 : current.openSpeed,
+ easing : current.openEasing,
+ step : elastic ? this.step : null,
+ complete : F._afterZoomIn
+ });
+ },
+
+ zoomOut: function () {
+ var current = F.current,
+ effect = current.closeEffect,
+ elastic = effect === 'elastic',
+ endPos = {opacity : 0.1};
+
+ if (elastic) {
+ endPos = this.getOrigPosition();
+
+ if (current.closeOpacity) {
+ endPos.opacity = 0.1;
+ }
+ }
+
+ F.wrap.animate(endPos, {
+ duration : effect === 'none' ? 0 : current.closeSpeed,
+ easing : current.closeEasing,
+ step : elastic ? this.step : null,
+ complete : F._afterZoomOut
+ });
+ },
+
+ changeIn: function () {
+ var current = F.current,
+ effect = current.nextEffect,
+ startPos = current.pos,
+ endPos = { opacity : 1 },
+ direction = F.direction,
+ distance = 200,
+ field;
+
+ startPos.opacity = 0.1;
+
+ if (effect === 'elastic') {
+ field = direction === 'down' || direction === 'up' ? 'top' : 'left';
+
+ if (direction === 'down' || direction === 'right') {
+ startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);
+ endPos[ field ] = '+=' + distance + 'px';
+
+ } else {
+ startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);
+ endPos[ field ] = '-=' + distance + 'px';
+ }
+ }
+
+ // Workaround for http://bugs.jquery.com/ticket/12273
+ if (effect === 'none') {
+ F._afterZoomIn();
+
+ } else {
+ F.wrap.css(startPos).animate(endPos, {
+ duration : current.nextSpeed,
+ easing : current.nextEasing,
+ complete : F._afterZoomIn
+ });
+ }
+ },
+
+ changeOut: function () {
+ var previous = F.previous,
+ effect = previous.prevEffect,
+ endPos = { opacity : 0.1 },
+ direction = F.direction,
+ distance = 200;
+
+ if (effect === 'elastic') {
+ endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';
+ }
+
+ previous.wrap.animate(endPos, {
+ duration : effect === 'none' ? 0 : previous.prevSpeed,
+ easing : previous.prevEasing,
+ complete : function () {
+ $(this).trigger('onReset').remove();
+ }
+ });
+ }
+ };
+
+ /*
+ * Overlay helper
+ */
+
+ F.helpers.overlay = {
+ defaults : {
+ closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay
+ speedOut : 200, // duration of fadeOut animation
+ showEarly : true, // indicates if should be opened immediately or wait until the content is ready
+ css : {}, // custom CSS properties
+ locked : !isTouch, // if true, the content will be locked into overlay
+ fixed : true // if false, the overlay CSS position property will not be set to "fixed"
+ },
+
+ overlay : null, // current handle
+ fixed : false, // indicates if the overlay has position "fixed"
+ el : $('html'), // element that contains "the lock"
+
+ // Public methods
+ create : function(opts) {
+ opts = $.extend({}, this.defaults, opts);
+
+ if (this.overlay) {
+ this.close();
+ }
+
+ this.overlay = $('
').appendTo( F.coming ? F.coming.parent : opts.parent );
+ this.fixed = false;
+
+ if (opts.fixed && F.defaults.fixed) {
+ this.overlay.addClass('fancybox-overlay-fixed');
+
+ this.fixed = true;
+ }
+ },
+
+ open : function(opts) {
+ var that = this;
+
+ opts = $.extend({}, this.defaults, opts);
+
+ if (this.overlay) {
+ this.overlay.unbind('.overlay').width('auto').height('auto');
+
+ } else {
+ this.create(opts);
+ }
+
+ if (!this.fixed) {
+ W.bind('resize.overlay', $.proxy( this.update, this) );
+
+ this.update();
+ }
+
+ if (opts.closeClick) {
+ this.overlay.bind('click.overlay', function(e) {
+ if ($(e.target).hasClass('fancybox-overlay')) {
+ if (F.isActive) {
+ F.close();
+ } else {
+ that.close();
+ }
+
+ return false;
+ }
+ });
+ }
+
+ this.overlay.css( opts.css ).show();
+ },
+
+ close : function() {
+ var scrollV, scrollH;
+
+ W.unbind('resize.overlay');
+
+ if (this.el.hasClass('fancybox-lock')) {
+ $('.fancybox-margin').removeClass('fancybox-margin');
+
+ scrollV = W.scrollTop();
+ scrollH = W.scrollLeft();
+
+ this.el.removeClass('fancybox-lock');
+
+ W.scrollTop( scrollV ).scrollLeft( scrollH );
+ }
+
+ $('.fancybox-overlay').remove().hide();
+
+ $.extend(this, {
+ overlay : null,
+ fixed : false
+ });
+ },
+
+ // Private, callbacks
+
+ update : function () {
+ var width = '100%', offsetWidth;
+
+ // Reset width/height so it will not mess
+ this.overlay.width(width).height('100%');
+
+ // jQuery does not return reliable result for IE
+ if (IE) {
+ offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
+
+ if (D.width() > offsetWidth) {
+ width = D.width();
+ }
+
+ } else if (D.width() > W.width()) {
+ width = D.width();
+ }
+
+ this.overlay.width(width).height(D.height());
+ },
+
+ // This is where we can manipulate DOM, because later it would cause iframes to reload
+ onReady : function (opts, obj) {
+ var overlay = this.overlay;
+
+ $('.fancybox-overlay').stop(true, true);
+
+ if (!overlay) {
+ this.create(opts);
+ }
+
+ if (opts.locked && this.fixed && obj.fixed) {
+ if (!overlay) {
+ this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false;
+ }
+
+ obj.locked = this.overlay.append( obj.wrap );
+ obj.fixed = false;
+ }
+
+ if (opts.showEarly === true) {
+ this.beforeShow.apply(this, arguments);
+ }
+ },
+
+ beforeShow : function(opts, obj) {
+ var scrollV, scrollH;
+
+ if (obj.locked) {
+ if (this.margin !== false) {
+ $('*').filter(function(){
+ return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") );
+ }).addClass('fancybox-margin');
+
+ this.el.addClass('fancybox-margin');
+ }
+
+ scrollV = W.scrollTop();
+ scrollH = W.scrollLeft();
+
+ this.el.addClass('fancybox-lock');
+
+ W.scrollTop( scrollV ).scrollLeft( scrollH );
+ }
+
+ this.open(opts);
+ },
+
+ onUpdate : function() {
+ if (!this.fixed) {
+ this.update();
+ }
+ },
+
+ afterClose: function (opts) {
+ // Remove overlay if exists and fancyBox is not opening
+ // (e.g., it is not being open using afterClose callback)
+ //if (this.overlay && !F.isActive) {
+ if (this.overlay && !F.coming) {
+ this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));
+ }
+ }
+ };
+
+ /*
+ * Title helper
+ */
+
+ F.helpers.title = {
+ defaults : {
+ type : 'float', // 'float', 'inside', 'outside' or 'over',
+ position : 'bottom' // 'top' or 'bottom'
+ },
+
+ beforeShow: function (opts) {
+ var current = F.current,
+ text = current.title,
+ type = opts.type,
+ title,
+ target;
+
+ if ($.isFunction(text)) {
+ text = text.call(current.element, current);
+ }
+
+ if (!isString(text) || $.trim(text) === '') {
+ return;
+ }
+
+ title = $('
' + text + '
');
+
+ switch (type) {
+ case 'inside':
+ target = F.skin;
+ break;
+
+ case 'outside':
+ target = F.wrap;
+ break;
+
+ case 'over':
+ target = F.inner;
+ break;
+
+ default: // 'float'
+ target = F.skin;
+
+ title.appendTo('body');
+
+ if (IE) {
+ title.width( title.width() );
+ }
+
+ title.wrapInner('
');
+
+ //Increase bottom margin so this title will also fit into viewport
+ F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );
+ break;
+ }
+
+ title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target);
+ }
+ };
+
+ // jQuery plugin initialization
+ $.fn.fancybox = function (options) {
+ var index,
+ that = $(this),
+ selector = this.selector || '',
+ run = function(e) {
+ var what = $(this).blur(), idx = index, relType, relVal;
+
+ if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {
+ relType = options.groupAttr || 'data-fancybox-group';
+ relVal = what.attr(relType);
+
+ if (!relVal) {
+ relType = 'rel';
+ relVal = what.get(0)[ relType ];
+ }
+
+ if (relVal && relVal !== '' && relVal !== 'nofollow') {
+ what = selector.length ? $(selector) : that;
+ what = what.filter('[' + relType + '="' + relVal + '"]');
+ idx = what.index(this);
+ }
+
+ options.index = idx;
+
+ // Stop an event from bubbling if everything is fine
+ if (F.open(what, options) !== false) {
+ e.preventDefault();
+ }
+ }
+ };
+
+ options = options || {};
+ index = options.index || 0;
+
+ if (!selector || options.live === false) {
+ that.unbind('click.fb-start').bind('click.fb-start', run);
+
+ } else {
+ D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run);
+ }
+
+ this.filter('[data-fancybox-start=1]').trigger('click');
+
+ return this;
+ };
+
+ // Tests that need a body at doc ready
+ D.ready(function() {
+ var w1, w2;
+
+ if ( $.scrollbarWidth === undefined ) {
+ // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
+ $.scrollbarWidth = function() {
+ var parent = $('
').appendTo('body'),
+ child = parent.children(),
+ width = child.innerWidth() - child.height( 99 ).innerWidth();
+
+ parent.remove();
+
+ return width;
+ };
+ }
+
+ if ( $.support.fixedPosition === undefined ) {
+ $.support.fixedPosition = (function() {
+ var elem = $('
').appendTo('body'),
+ fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );
+
+ elem.remove();
+
+ return fixed;
+ }());
+ }
+
+ $.extend(F.defaults, {
+ scrollbarWidth : $.scrollbarWidth(),
+ fixed : $.support.fixedPosition,
+ parent : $('body')
+ });
+
+ //Get real width of page scroll-bar
+ w1 = $(window).width();
+
+ H.addClass('fancybox-lock-test');
+
+ w2 = $(window).width();
+
+ H.removeClass('fancybox-lock-test');
+
+ $("").appendTo("head");
+ });
+
+}(window, document, jQuery));
\ No newline at end of file
diff --git a/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.css b/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.css
new file mode 100644
index 000000000..d184e0353
--- /dev/null
+++ b/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.css
@@ -0,0 +1 @@
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */.fancybox-wrap,.fancybox-skin,.fancybox-outer,.fancybox-inner,.fancybox-image,.fancybox-wrap iframe,.fancybox-wrap object,.fancybox-nav,.fancybox-nav span,.fancybox-tmp{padding:0;margin:0;border:0;outline:0;vertical-align:top}.fancybox-wrap{position:absolute;top:0;left:0;z-index:8020}.fancybox-skin{position:relative;background:#f9f9f9;color:#444;text-shadow:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.fancybox-opened{z-index:8030}.fancybox-opened .fancybox-skin{-webkit-box-shadow:0 10px 25px rgba(0,0,0,.5);-moz-box-shadow:0 10px 25px rgba(0,0,0,.5);box-shadow:0 10px 25px rgba(0,0,0,.5)}.fancybox-outer,.fancybox-inner{position:relative}.fancybox-inner{overflow:hidden}.fancybox-type-iframe .fancybox-inner{-webkit-overflow-scrolling:touch}.fancybox-error{color:#444;font:14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;margin:0;padding:15px;white-space:nowrap}.fancybox-image,.fancybox-iframe{display:block;width:100%;height:100%}.fancybox-image{max-width:100%;max-height:100%}#fancybox-loading,.fancybox-close,.fancybox-prev span,.fancybox-next span{background-image:url(fancybox_sprite.png)}#fancybox-loading{position:fixed;top:50%;left:50%;margin-top:-22px;margin-left:-22px;background-position:0 -108px;opacity:.8;cursor:pointer;z-index:8060}#fancybox-loading div{width:44px;height:44px;background:url(fancybox_loading.gif) center center no-repeat}.fancybox-close{position:absolute;top:-18px;right:-18px;width:36px;height:36px;cursor:pointer;z-index:8040}.fancybox-nav{position:absolute;top:0;width:40%;height:100%;cursor:pointer;text-decoration:none;background:transparent url(blank.gif);-webkit-tap-highlight-color:rgba(0,0,0,0);z-index:8040}.fancybox-prev{left:0}.fancybox-next{right:0}.fancybox-nav span{position:absolute;top:50%;width:36px;height:34px;margin-top:-18px;cursor:pointer;z-index:8040;visibility:hidden}.fancybox-prev span{left:10px;background-position:0 -36px}.fancybox-next span{right:10px;background-position:0 -72px}.fancybox-nav:hover span{visibility:visible}.fancybox-tmp{position:absolute;top:-99999px;left:-99999px;visibility:hidden;max-width:99999px;max-height:99999px;overflow:visible!important}.fancybox-lock{overflow:hidden!important;width:auto}.fancybox-lock body{overflow:hidden!important}.fancybox-lock-test{overflow-y:hidden!important}.fancybox-overlay{position:absolute;top:0;left:0;overflow:hidden;display:none;z-index:8010;background:url(fancybox_overlay.png)}.fancybox-overlay-fixed{position:fixed;bottom:0;right:0}.fancybox-lock .fancybox-overlay{overflow:auto;overflow-y:scroll}.fancybox-title{visibility:hidden;font:400 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;position:relative;text-shadow:none;z-index:8050}.fancybox-opened .fancybox-title{visibility:visible}.fancybox-title-float-wrap{position:absolute;bottom:0;right:50%;margin-bottom:-35px;z-index:8050;text-align:center}.fancybox-title-float-wrap .child{display:inline-block;margin-right:-100%;padding:2px 20px;background:transparent;background:rgba(0,0,0,.8);-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;text-shadow:0 1px 2px #222;color:#FFF;font-weight:700;line-height:24px;white-space:nowrap}.fancybox-title-outside-wrap{position:relative;margin-top:10px;color:#fff}.fancybox-title-inside-wrap{padding-top:10px}.fancybox-title-over-wrap{position:absolute;bottom:0;left:0;color:#fff;padding:10px;background:#000;background:rgba(0,0,0,.8)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){#fancybox-loading,.fancybox-close,.fancybox-prev span,.fancybox-next span{background-image:url(fancybox_sprite@2x.png);background-size:44px 152px}#fancybox-loading div{background-image:url(fancybox_loading@2x.gif);background-size:24px 24px}}
\ No newline at end of file
diff --git a/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js b/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js
new file mode 100644
index 000000000..af10661ab
--- /dev/null
+++ b/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.js
@@ -0,0 +1 @@
+!function(e,t,i,n){"use strict";var a=i("html"),s=i(e),o=i(t),r=i.fancybox=function(){r.open.apply(this,arguments)},l=navigator.userAgent.match(/msie/i),c=null,d=t.createTouch!==n,h=function(e){return e&&e.hasOwnProperty&&e instanceof i},p=function(e){return e&&"string"===i.type(e)},u=function(e){return p(e)&&e.indexOf("%")>0},f=function(e){return e&&!(e.style.overflow&&"hidden"===e.style.overflow)&&(e.clientWidth&&e.scrollWidth>e.clientWidth||e.clientHeight&&e.scrollHeight>e.clientHeight)},g=function(e,t){var i=parseInt(e,10)||0;return t&&u(e)&&(i=r.getViewport()[t]/100*i),Math.ceil(i)},m=function(e,t){return g(e,t)+"px"};i.extend(r,{version:"2.1.5",defaults:{padding:15,margin:20,width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,pixelRatio:1,autoSize:!0,autoHeight:!1,autoWidth:!1,autoResize:!0,autoCenter:!d,fitToView:!0,aspectRatio:!1,topRatio:.5,leftRatio:.5,scrolling:"auto",wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3e3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},iframe:{scrolling:"auto",preload:!0},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"},keys:{next:{13:"left",34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:!0,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'
',image:'
',iframe:'
",error:'
The requested content cannot be loaded. Please try again later.
',closeBtn:'
',next:'
',prev:'
'},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:i.noop,beforeLoad:i.noop,afterLoad:i.noop,beforeShow:i.noop,afterShow:i.noop,beforeChange:i.noop,beforeClose:i.noop,afterClose:i.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1,isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(e,t){return e&&(i.isPlainObject(t)||(t={}),!1!==r.close(!0))?(i.isArray(e)||(e=h(e)?i(e).get():[e]),i.each(e,function(a,s){var o,l,c,d,u,f,g,m={};"object"===i.type(s)&&(s.nodeType&&(s=i(s)),h(s)?(m={href:s.data("fancybox-href")||s.attr("href"),title:s.data("fancybox-title")||s.attr("title"),isDom:!0,element:s},i.metadata&&i.extend(!0,m,s.metadata())):m=s),o=t.href||m.href||(p(s)?s:null),l=t.title!==n?t.title:m.title||"",c=t.content||m.content,d=c?"html":t.type||m.type,!d&&m.isDom&&(d=s.data("fancybox-type"),d||(u=s.prop("class").match(/fancybox\.(\w+)/),d=u?u[1]:null)),p(o)&&(d||(r.isImage(o)?d="image":r.isSWF(o)?d="swf":"#"===o.charAt(0)?d="inline":p(s)&&(d="html",c=s)),"ajax"===d&&(f=o.split(/\s+/,2),o=f.shift(),g=f.shift())),c||("inline"===d?o?c=i(p(o)?o.replace(/.*(?=#[^\s]+$)/,""):o):m.isDom&&(c=s):"html"===d?c=o:d||o||!m.isDom||(d="inline",c=s)),i.extend(m,{href:o,type:d,content:c,title:l,selector:g}),e[a]=m}),r.opts=i.extend(!0,{},r.defaults,t),t.keys!==n&&(r.opts.keys=t.keys?i.extend({},r.defaults.keys,t.keys):!1),r.group=e,r._start(r.opts.index)):void 0},cancel:function(){var e=r.coming;e&&!1!==r.trigger("onCancel")&&(r.hideLoading(),r.ajaxLoad&&r.ajaxLoad.abort(),r.ajaxLoad=null,r.imgPreload&&(r.imgPreload.onload=r.imgPreload.onerror=null),e.wrap&&e.wrap.stop(!0,!0).trigger("onReset").remove(),r.coming=null,r.current||r._afterZoomOut(e))},close:function(e){r.cancel(),!1!==r.trigger("beforeClose")&&(r.unbindEvents(),r.isActive&&(r.isOpen&&e!==!0?(r.isOpen=r.isOpened=!1,r.isClosing=!0,i(".fancybox-item, .fancybox-nav").remove(),r.wrap.stop(!0,!0).removeClass("fancybox-opened"),r.transitions[r.current.closeMethod]()):(i(".fancybox-wrap").stop(!0).trigger("onReset").remove(),r._afterZoomOut())))},play:function(e){var t=function(){clearTimeout(r.player.timer)},i=function(){t(),r.current&&r.player.isActive&&(r.player.timer=setTimeout(r.next,r.current.playSpeed))},n=function(){t(),o.unbind(".player"),r.player.isActive=!1,r.trigger("onPlayEnd")},a=function(){r.current&&(r.current.loop||r.current.index
=a.index?"next":"prev"],r.router=i||"jumpto",a.loop&&(0>e&&(e=a.group.length+e%a.group.length),e%=a.group.length),a.group[e]!==n&&(r.cancel(),r._start(e)))},reposition:function(e,t){var n,a=r.current,s=a?a.wrap:null;s&&(n=r._getPosition(t),e&&"scroll"===e.type?(delete n.position,s.stop(!0,!0).animate(n,200)):(s.css(n),a.pos=i.extend({},a.dim,n)))},update:function(e){var t=e&&e.type,i=!t||"orientationchange"===t;i&&(clearTimeout(c),c=null),r.isOpen&&!c&&(c=setTimeout(function(){var n=r.current;n&&!r.isClosing&&(r.wrap.removeClass("fancybox-tmp"),(i||"load"===t||"resize"===t&&n.autoResize)&&r._setDimension(),"scroll"===t&&n.canShrink||r.reposition(e),r.trigger("onUpdate"),c=null)},i&&!d?0:300))},toggle:function(e){r.isOpen&&(r.current.fitToView="boolean"===i.type(e)?e:!r.current.fitToView,d&&(r.wrap.removeAttr("style").addClass("fancybox-tmp"),r.trigger("onUpdate")),r.update())},hideLoading:function(){o.unbind(".loading"),i("#fancybox-loading").remove()},showLoading:function(){var e,t;r.hideLoading(),e=i('').click(r.cancel).appendTo("body"),o.bind("keydown.loading",function(e){27===(e.which||e.keyCode)&&(e.preventDefault(),r.cancel())}),r.defaults.fixed||(t=r.getViewport(),e.css({position:"absolute",top:.5*t.h+t.y,left:.5*t.w+t.x}))},getViewport:function(){var t=r.current&&r.current.locked||!1,i={x:s.scrollLeft(),y:s.scrollTop()};return t?(i.w=t[0].clientWidth,i.h=t[0].clientHeight):(i.w=d&&e.innerWidth?e.innerWidth:s.width(),i.h=d&&e.innerHeight?e.innerHeight:s.height()),i},unbindEvents:function(){r.wrap&&h(r.wrap)&&r.wrap.unbind(".fb"),o.unbind(".fb"),s.unbind(".fb")},bindEvents:function(){var e,t=r.current;t&&(s.bind("orientationchange.fb"+(d?"":" resize.fb")+(t.autoCenter&&!t.locked?" scroll.fb":""),r.update),e=t.keys,e&&o.bind("keydown.fb",function(a){var s=a.which||a.keyCode,o=a.target||a.srcElement;return 27===s&&r.coming?!1:(a.ctrlKey||a.altKey||a.shiftKey||a.metaKey||o&&(o.type||i(o).is("[contenteditable]"))||i.each(e,function(e,o){return t.group.length>1&&o[s]!==n?(r[e](o[s]),a.preventDefault(),!1):i.inArray(s,o)>-1?(r[e](),a.preventDefault(),!1):void 0}),void 0)}),i.fn.mousewheel&&t.mouseWheel&&r.wrap.bind("mousewheel.fb",function(e,n,a,s){for(var o=e.target||null,l=i(o),c=!1;l.length&&!(c||l.is(".fancybox-skin")||l.is(".fancybox-wrap"));)c=f(l[0]),l=i(l).parent();0===n||c||r.group.length>1&&!t.canShrink&&(s>0||a>0?r.prev(s>0?"down":"left"):(0>s||0>a)&&r.next(0>s?"up":"right"),e.preventDefault())}))},trigger:function(e,t){var n,a=t||r.coming||r.current;if(a){if(i.isFunction(a[e])&&(n=a[e].apply(a,Array.prototype.slice.call(arguments,1))),n===!1)return!1;a.helpers&&i.each(a.helpers,function(t,n){n&&r.helpers[t]&&i.isFunction(r.helpers[t][e])&&r.helpers[t][e](i.extend(!0,{},r.helpers[t].defaults,n),a)}),o.trigger(e)}},isImage:function(e){return p(e)&&e.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(e){return p(e)&&e.match(/\.(swf)((\?|#).*)?$/i)},_start:function(e){var t,n,a,s,o,l={};if(e=g(e),t=r.group[e]||null,!t)return!1;if(l=i.extend(!0,{},r.opts,t),s=l.margin,o=l.padding,"number"===i.type(s)&&(l.margin=[s,s,s,s]),"number"===i.type(o)&&(l.padding=[o,o,o,o]),l.modal&&i.extend(!0,l,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}}),l.autoSize&&(l.autoWidth=l.autoHeight=!0),"auto"===l.width&&(l.autoWidth=!0),"auto"===l.height&&(l.autoHeight=!0),l.group=r.group,l.index=e,r.coming=l,!1===r.trigger("beforeLoad"))return r.coming=null,void 0;if(a=l.type,n=l.href,!a)return r.coming=null,r.current&&r.router&&"jumpto"!==r.router?(r.current.index=e,r[r.router](r.direction)):!1;if(r.isActive=!0,("image"===a||"swf"===a)&&(l.autoHeight=l.autoWidth=!1,l.scrolling="visible"),"image"===a&&(l.aspectRatio=!0),"iframe"===a&&d&&(l.scrolling="scroll"),l.wrap=i(l.tpl.wrap).addClass("fancybox-"+(d?"mobile":"desktop")+" fancybox-type-"+a+" fancybox-tmp "+l.wrapCSS).appendTo(l.parent||"body"),i.extend(l,{skin:i(".fancybox-skin",l.wrap),outer:i(".fancybox-outer",l.wrap),inner:i(".fancybox-inner",l.wrap)}),i.each(["Top","Right","Bottom","Left"],function(e,t){l.skin.css("padding"+t,m(l.padding[e]))}),r.trigger("onReady"),"inline"===a||"html"===a){if(!l.content||!l.content.length)return r._error("content")}else if(!n)return r._error("href");"image"===a?r._loadImage():"ajax"===a?r._loadAjax():"iframe"===a?r._loadIframe():r._afterLoad()},_error:function(e){i.extend(r.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:e,content:r.coming.tpl.error}),r._afterLoad()},_loadImage:function(){var e=r.imgPreload=new Image;e.onload=function(){this.onload=this.onerror=null,r.coming.width=this.width/r.opts.pixelRatio,r.coming.height=this.height/r.opts.pixelRatio,r._afterLoad()},e.onerror=function(){this.onload=this.onerror=null,r._error("image")},e.src=r.coming.href,e.complete!==!0&&r.showLoading()},_loadAjax:function(){var e=r.coming;r.showLoading(),r.ajaxLoad=i.ajax(i.extend({},e.ajax,{url:e.href,error:function(e,t){r.coming&&"abort"!==t?r._error("ajax",e):r.hideLoading()},success:function(t,i){"success"===i&&(e.content=t,r._afterLoad())}}))},_loadIframe:function(){var e=r.coming,t=i(e.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",d?"auto":e.iframe.scrolling).attr("src",e.href);i(e.wrap).bind("onReset",function(){try{i(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(e){}}),e.iframe.preload&&(r.showLoading(),t.one("load",function(){i(this).data("ready",1),d||i(this).bind("load.fb",r.update),i(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show(),r._afterLoad()})),e.content=t.appendTo(e.inner),e.iframe.preload||r._afterLoad()},_preloadImages:function(){var e,t,i=r.group,n=r.current,a=i.length,s=n.preload?Math.min(n.preload,a-1):0;for(t=1;s>=t;t+=1)e=i[(n.index+t)%a],"image"===e.type&&e.href&&((new Image).src=e.href)},_afterLoad:function(){var e,t,n,a,s,o,l=r.coming,c=r.current,d="fancybox-placeholder";if(r.hideLoading(),l&&r.isActive!==!1){if(!1===r.trigger("afterLoad",l,c))return l.wrap.stop(!0).trigger("onReset").remove(),r.coming=null,void 0;switch(c&&(r.trigger("beforeChange",c),c.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove()),r.unbindEvents(),e=l,t=l.content,n=l.type,a=l.scrolling,i.extend(r,{wrap:e.wrap,skin:e.skin,outer:e.outer,inner:e.inner,current:e,previous:c}),s=e.href,n){case"inline":case"ajax":case"html":e.selector?t=i("").html(t).find(e.selector):h(t)&&(t.data(d)||t.data(d,i('
').insertAfter(t).hide()),t=t.show().detach(),e.wrap.bind("onReset",function(){i(this).find(t).length&&t.hide().replaceAll(t.data(d)).data(d,!1)}));break;case"image":t=e.tpl.image.replace("{href}",s);break;case"swf":t='
',o="",i.each(e.swf,function(e,i){t+=' ',o+=" "+e+'="'+i+'"'}),t+='"}h(t)&&t.parent().is(e.inner)||e.inner.append(t),r.trigger("beforeShow"),e.inner.css("overflow","yes"===a?"scroll":"no"===a?"hidden":a),r._setDimension(),r.reposition(),r.isOpen=!1,r.coming=null,r.bindEvents(),r.isOpened?c.prevMethod&&r.transitions[c.prevMethod]():i(".fancybox-wrap").not(e.wrap).stop(!0).trigger("onReset").remove(),r.transitions[r.isOpened?e.nextMethod:e.openMethod](),r._preloadImages()}},_setDimension:function(){var e,t,n,a,s,o,l,c,d,h,p,f,v,w,b,y=r.getViewport(),x=0,_=!1,k=!1,j=r.wrap,C=r.skin,I=r.inner,T=r.current,S=T.width,W=T.height,H=T.minWidth,L=T.minHeight,D=T.maxWidth,A=T.maxHeight,P=T.scrolling,B=T.scrollOutside?T.scrollbarWidth:0,M=T.margin,R=g(M[1]+M[3]),O=g(M[0]+M[2]);if(j.add(C).add(I).width("auto").height("auto").removeClass("fancybox-tmp"),e=g(C.outerWidth(!0)-C.width()),t=g(C.outerHeight(!0)-C.height()),n=R+e,a=O+t,s=u(S)?(y.w-n)*g(S)/100:S,o=u(W)?(y.h-a)*g(W)/100:W,"iframe"===T.type){if(w=T.content,T.autoHeight&&1===w.data("ready"))try{w[0].contentWindow.document.location&&(I.width(s).height(9999),b=w.contents().find("body"),B&&b.css("overflow-x","hidden"),o=b.outerHeight(!0))}catch(E){}}else(T.autoWidth||T.autoHeight)&&(I.addClass("fancybox-tmp"),T.autoWidth||I.width(s),T.autoHeight||I.height(o),T.autoWidth&&(s=I.width()),T.autoHeight&&(o=I.height()),I.removeClass("fancybox-tmp"));if(S=g(s),W=g(o),d=s/o,H=g(u(H)?g(H,"w")-n:H),D=g(u(D)?g(D,"w")-n:D),L=g(u(L)?g(L,"h")-a:L),A=g(u(A)?g(A,"h")-a:A),l=D,c=A,T.fitToView&&(D=Math.min(y.w-n,D),A=Math.min(y.h-a,A)),f=y.w-R,v=y.h-O,T.aspectRatio?(S>D&&(S=D,W=g(S/d)),W>A&&(W=A,S=g(W*d)),H>S&&(S=H,W=g(S/d)),L>W&&(W=L,S=g(W*d))):(S=Math.max(H,Math.min(S,D)),T.autoHeight&&"iframe"!==T.type&&(I.width(S),W=I.height()),W=Math.max(L,Math.min(W,A))),T.fitToView)if(I.width(S).height(W),j.width(S+e),h=j.width(),p=j.height(),T.aspectRatio)for(;(h>f||p>v)&&S>H&&W>L&&!(x++>19);)W=Math.max(L,Math.min(A,W-10)),S=g(W*d),H>S&&(S=H,W=g(S/d)),S>D&&(S=D,W=g(S/d)),I.width(S).height(W),j.width(S+e),h=j.width(),p=j.height();else S=Math.max(H,Math.min(S,S-(h-f))),W=Math.max(L,Math.min(W,W-(p-v)));B&&"auto"===P&&o>W&&f>S+e+B&&(S+=B),I.width(S).height(W),j.width(S+e),h=j.width(),p=j.height(),_=(h>f||p>v)&&S>H&&W>L,k=T.aspectRatio?l>S&&c>W&&s>S&&o>W:(l>S||c>W)&&(s>S||o>W),i.extend(T,{dim:{width:m(h),height:m(p)},origWidth:s,origHeight:o,canShrink:_,canExpand:k,wPadding:e,hPadding:t,wrapSpace:p-C.outerHeight(!0),skinSpace:C.height()-W}),!w&&T.autoHeight&&W>L&&A>W&&!k&&I.height("auto")},_getPosition:function(e){var t=r.current,i=r.getViewport(),n=t.margin,a=r.wrap.width()+n[1]+n[3],s=r.wrap.height()+n[0]+n[2],o={position:"absolute",top:n[0],left:n[3]};return t.autoCenter&&t.fixed&&!e&&s<=i.h&&a<=i.w?o.position="fixed":t.locked||(o.top+=i.y,o.left+=i.x),o.top=m(Math.max(o.top,o.top+(i.h-s)*t.topRatio)),o.left=m(Math.max(o.left,o.left+(i.w-a)*t.leftRatio)),o},_afterZoomIn:function(){var e=r.current;e&&(r.isOpen=r.isOpened=!0,r.wrap.css("overflow","visible").addClass("fancybox-opened"),r.update(),(e.closeClick||e.nextClick&&r.group.length>1)&&r.inner.css("cursor","pointer").bind("click.fb",function(t){i(t.target).is("a")||i(t.target).parent().is("a")||(t.preventDefault(),r[e.closeClick?"close":"next"]())}),e.closeBtn&&i(e.tpl.closeBtn).appendTo(r.skin).bind("click.fb",function(e){e.preventDefault(),r.close()}),e.arrows&&r.group.length>1&&((e.loop||e.index>0)&&i(e.tpl.prev).appendTo(r.outer).bind("click.fb",r.prev),(e.loop||e.index
').appendTo(r.coming?r.coming.parent:e.parent),this.fixed=!1,e.fixed&&r.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(e){var t=this;e=i.extend({},this.defaults,e),this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(e),this.fixed||(s.bind("resize.overlay",i.proxy(this.update,this)),this.update()),e.closeClick&&this.overlay.bind("click.overlay",function(e){return i(e.target).hasClass("fancybox-overlay")?(r.isActive?r.close():t.close(),!1):void 0}),this.overlay.css(e.css).show()},close:function(){var e,t;s.unbind("resize.overlay"),this.el.hasClass("fancybox-lock")&&(i(".fancybox-margin").removeClass("fancybox-margin"),e=s.scrollTop(),t=s.scrollLeft(),this.el.removeClass("fancybox-lock"),s.scrollTop(e).scrollLeft(t)),i(".fancybox-overlay").remove().hide(),i.extend(this,{overlay:null,fixed:!1})},update:function(){var e,i="100%";this.overlay.width(i).height("100%"),l?(e=Math.max(t.documentElement.offsetWidth,t.body.offsetWidth),o.width()>e&&(i=o.width())):o.width()>s.width()&&(i=o.width()),this.overlay.width(i).height(o.height())},onReady:function(e,t){var n=this.overlay;i(".fancybox-overlay").stop(!0,!0),n||this.create(e),e.locked&&this.fixed&&t.fixed&&(n||(this.margin=o.height()>s.height()?i("html").css("margin-right").replace("px",""):!1),t.locked=this.overlay.append(t.wrap),t.fixed=!1),e.showEarly===!0&&this.beforeShow.apply(this,arguments)},beforeShow:function(e,t){var n,a;t.locked&&(this.margin!==!1&&(i("*").filter(function(){return"fixed"===i(this).css("position")&&!i(this).hasClass("fancybox-overlay")&&!i(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),n=s.scrollTop(),a=s.scrollLeft(),this.el.addClass("fancybox-lock"),s.scrollTop(n).scrollLeft(a)),this.open(e)},onUpdate:function(){this.fixed||this.update()},afterClose:function(e){this.overlay&&!r.coming&&this.overlay.fadeOut(e.speedOut,i.proxy(this.close,this))}},r.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(e){var t,n,a=r.current,s=a.title,o=e.type;if(i.isFunction(s)&&(s=s.call(a.element,a)),p(s)&&""!==i.trim(s)){switch(t=i(''+s+"
"),o){case"inside":n=r.skin;break;case"outside":n=r.wrap;break;case"over":n=r.inner;break;default:n=r.skin,t.appendTo("body"),l&&t.width(t.width()),t.wrapInner(' '),r.current.margin[2]+=Math.abs(g(t.css("margin-bottom")))}t["top"===e.position?"prependTo":"appendTo"](n)}}},i.fn.fancybox=function(e){var t,n=i(this),a=this.selector||"",s=function(s){var o,l,c=i(this).blur(),d=t;s.ctrlKey||s.altKey||s.shiftKey||s.metaKey||c.is(".fancybox-wrap")||(o=e.groupAttr||"data-fancybox-group",l=c.attr(o),l||(o="rel",l=c.get(0)[o]),l&&""!==l&&"nofollow"!==l&&(c=a.length?i(a):n,c=c.filter("["+o+'="'+l+'"]'),d=c.index(this)),e.index=d,r.open(c,e)!==!1&&s.preventDefault())};return e=e||{},t=e.index||0,a&&e.live!==!1?o.undelegate(a,"click.fb-start").delegate(a+":not('.fancybox-item, .fancybox-nav')","click.fb-start",s):n.unbind("click.fb-start").bind("click.fb-start",s),this.filter("[data-fancybox-start=1]").trigger("click"),this},o.ready(function(){var t,s;i.scrollbarWidth===n&&(i.scrollbarWidth=function(){var e=i('').appendTo("body"),t=e.children(),n=t.innerWidth()-t.height(99).innerWidth();return e.remove(),n}),i.support.fixedPosition===n&&(i.support.fixedPosition=function(){var e=i('
').appendTo("body"),t=20===e[0].offsetTop||15===e[0].offsetTop;return e.remove(),t}()),i.extend(r.defaults,{scrollbarWidth:i.scrollbarWidth(),fixed:i.support.fixedPosition,parent:i("body")}),t=i(e).width(),a.addClass("fancybox-lock-test"),s=i(e).width(),a.removeClass("fancybox-lock-test"),i("").appendTo("head")})}(window,document,jQuery);
\ No newline at end of file
diff --git a/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js b/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js
new file mode 100644
index 000000000..73f757843
--- /dev/null
+++ b/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js
@@ -0,0 +1,46 @@
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
+(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0 ',image:'The requested content cannot be loaded. Please try again later.
',closeBtn:'