Вход Регистрация
Файл: Source/assets/fancybox/source/jquery.fancybox.js
Строк: 1873
<?php
/*!
 * fancyBox - jQuery Plugin
 * version: 2.1.5 (Fri, 14 Jun 2013)
 * @requires jQuery v1.6 or later
 *
 * Examples at http://fancyapps.com/fancybox/
 * License: www.fancyapps.com/fancybox/#license
 *
 * Copyright 2012 Janis Skarnelis - janis@fancyapps.com
 *
 */

(function (windowdocument, $, undefined) {
    
"use strict";

    var 
= $("html"),
        
= $(window),
        
= $(document),
        
= $.fancybox = function () {
            
F.open.applythisarguments );
        },
        
IE =  navigator.userAgent.match(/msie/i),
        
didUpdate    null,
        
isTouch        document.createTouch !== undefined,

        
isQuery    = function(obj) {
            return 
obj && obj.hasOwnProperty && obj instanceof $;
        },
        
isString = function(str) {
            return 
str && $.type(str) === "string";
        },
        
isPercentage = function(str) {
            return 
isString(str) && str.indexOf('%') > 0;
        },
        
isScrollable = function(el) {
            return (
el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth el.clientWidth) || (el.clientHeight && el.scrollHeight el.clientHeight)));
        },
        
getScalar = function(origdim) {
            var 
value parseInt(orig10) || 0;

            if (
dim && isPercentage(orig)) {
                
value F.getViewport()[ dim ] / 100 value;
            }

            return 
Math.ceil(value);
        },
        
getValue = function(valuedim) {
            return 
getScalar(valuedim) + 'px';
        };

    $.
extend(F, {
        
// The current version of fancyBox
        
version'2.1.5',

        
defaults: {
            
padding 15,
            
margin  20,

            
width     800,
            
height    600,
            
minWidth  100,
            
minHeight 100,
            
maxWidth  9999,
            
maxHeight 9999,
            
pixelRatio1// Set to 2 for retina display support

            
autoSize   true,
            
autoHeight false,
            
autoWidth  false,

            
autoResize  true,
            
autoCenter  : !isTouch,
            
fitToView   true,
            
aspectRatio false,
            
topRatio    0.5,
            
leftRatio   0.5,

            
scrolling 'auto'// 'auto', 'yes' or 'no'
            
wrapCSS   '',

            
arrows     true,
            
closeBtn   true,
            
closeClick false,
            
nextClick  false,
            
mouseWheel true,
            
autoPlay   false,
            
playSpeed  3000,
            
preload    3,
            
modal      false,
            
loop       true,

            
ajax  : {
                
dataType 'html',
                
headers  : { 'X-fancyBox'true }
            },
            
iframe : {
                
scrolling 'auto',
                
preload   true
            
},
            
swf : {
                
wmode'transparent',
                
allowfullscreen   'true',
                
allowscriptaccess 'always'
            
},

            
keys  : {
                
next : {
                    
13 'left'// enter
                    
34 'up',   // page down
                    
39 'left'// right arrow
                    
40 'up'    // down arrow
                
},
                
prev : {
                    
8  'right',  // backspace
                    
33 'down',   // page up
                    
37 'right',  // left arrow
                    
38 'down'    // up arrow
                
},
                
close  : [27], // escape key
                
play   : [32], // space - start/stop slideshow
                
toggle : [70]  // letter "f" - toggle fullscreen
            
},

            
direction : {
                
next 'left',
                
prev 'right'
            
},

            
scrollOutside  true,

            
// Override some properties
            
index   0,
            
type    null,
            
href    null,
            
content null,
            
title   null,

            
// HTML templates
            
tpl: {
                
wrap     '<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',
                
image    '<img class="fancybox-image" src="{href}" alt="" />',
                
iframe   '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ' allowtransparency="true"' '') + '></iframe>',
                
error    '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',
                
closeBtn '<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',
                
next     '<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',
                
prev     '<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'
            
},

            
// Properties for each animation type
            // Opening fancyBox
            
openEffect  'fade'// 'elastic', 'fade' or 'none'
            
openSpeed   250,
            
openEasing  'swing',
            
openOpacity true,
            
openMethod  'zoomIn',

            
// Closing fancyBox
            
closeEffect  'fade'// 'elastic', 'fade' or 'none'
            
closeSpeed   250,
            
closeEasing  'swing',
            
closeOpacity true,
            
closeMethod  'zoomOut',

            
// Changing next gallery item
            
nextEffect 'elastic'// 'elastic', 'fade' or 'none'
            
nextSpeed  250,
            
nextEasing 'swing',
            
nextMethod 'changeIn',

            
// Changing previous gallery item
            
prevEffect 'elastic'// 'elastic', 'fade' or 'none'
            
prevSpeed  250,
            
prevEasing 'swing',
            
prevMethod 'changeOut',

            
// Enable default helpers
            
helpers : {
                
overlay true,
                
title   true
            
},

            
// Callbacks
            
onCancel     : $.noop// If canceling
            
beforeLoad   : $.noop// Before loading
            
afterLoad    : $.noop// After loading
            
beforeShow   : $.noop// Before changing in current item
            
afterShow    : $.noop// After opening
            
beforeChange : $.noop// Before changing gallery item
            
beforeClose  : $.noop// Before closing
            
afterClose   : $.noop  // After closing
        
},

        
//Current state
        
group    : {}, // Selected group
        
opts     : {}, // Group options
        
previous null,  // Previous element
        
coming   null,  // Element being loaded
        
current  null,  // Currently loaded element
        
isActive false// Is activated
        
isOpen   false// Is currently open
        
isOpened false// Have been fully opened at least once

        
wrap  null,
        
skin  null,
        
outer null,
        
inner null,

        
player : {
            
timer    null,
            
isActive false
        
},

        
// Loaders
        
ajaxLoad   null,
        
imgPreload null,

        
// Some collections
        
transitions : {},
        
helpers     : {},

        
/*
         *    Static methods
         */

        
open: function (groupopts) {
            if (!
group) {
                return;
            }

            if (!$.
isPlainObject(opts)) {
                
opts = {};
            }

            
// Close if already active
            
if (false === F.close(true)) {
                return;
            }

            
// Normalize group
            
if (!$.isArray(group)) {
                
group isQuery(group) ? $(group).get() : [group];
            }

            
// Recheck if the type of each element is `object` and set content type (image, ajax, etc)
            
$.each(group, function(ielement) {
                var 
obj = {},
                    
href,
                    
title,
                    
content,
                    
type,
                    
rez,
                    
hrefParts,
                    
selector;

                if ($.
type(element) === "object") {
                    
// Check if is DOM element
                    
if (element.nodeType) {
                        
element = $(element);
                    }

                    if (
isQuery(element)) {
                        
obj = {
                            
href    element.data('fancybox-href') || element.attr('href'),
                            
title   element.data('fancybox-title') || element.attr('title'),
                            
isDom   true,
                            
element element
                        
};

                        if ($.
metadata) {
                            $.
extend(trueobjelement.metadata());
                        }

                    } else {
                        
obj element;
                    }
                }

                
href  opts.href  || obj.href || (isString(element) ? element null);
                
title opts.title !== undefined opts.title obj.title || '';

                
content opts.content || obj.content;
                
type    content 'html' : (opts.type  || obj.type);

                if (!
type && obj.isDom) {
                    
type element.data('fancybox-type');

                    if (!
type) {
                        
rez  element.prop('class').match(/fancybox.(w+)/);
                        
type rez rez[1] : null;
                    }
                }

                if (
isString(href)) {
                    
// Try to guess the content type
                    
if (!type) {
                        if (
F.isImage(href)) {
                            
type 'image';

                        } else if (
F.isSWF(href)) {
                            
type 'swf';

                        } else if (
href.charAt(0) === '#') {
                            
type 'inline';

                        } else if (
isString(element)) {
                            
type    'html';
                            
content element;
                        }
                    }

                    
// Split url into two pieces with source url and content selector, e.g,
                    // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id"
                    
if (type === 'ajax') {
                        
hrefParts href.split(/s+/, 2);
                        
href      hrefParts.shift();
                        
selector  hrefParts.shift();
                    }
                }

                if (!
content) {
                    if (
type === 'inline') {
                        if (
href) {
                            
content = $( isString(href) ? href.replace(/.*(?=#[^s]+$)/, '') : href ); //strip for ie7

                        
} else if (obj.isDom) {
                            
content element;
                        }

                    } else if (
type === 'html') {
                        
content href;

                    } else if (!
type && !href && obj.isDom) {
                        
type    'inline';
                        
content element;
                    }
                }

                $.
extend(obj, {
                    
href     href,
                    
type     type,
                    
content  content,
                    
title    title,
                    
selector selector
                
});

                
group] = obj;
            });

            
// Extend the defaults
            
F.opts = $.extend(true, {}, F.defaultsopts);

            
// All options are merged recursive except keys
            
if (opts.keys !== undefined) {
                
F.opts.keys opts.keys ? $.extend({}, F.defaults.keysopts.keys) : false;
            }

            
F.group group;

            return 
F._start(F.opts.index);
        },

        
// Cancel image loading or abort ajax request
        
cancel: function () {
            var 
coming F.coming;

            if (!
coming || false === F.trigger('onCancel')) {
                return;
            }

            
F.hideLoading();

            if (
F.ajaxLoad) {
                
F.ajaxLoad.abort();
            }

            
F.ajaxLoad null;

            if (
F.imgPreload) {
                
F.imgPreload.onload F.imgPreload.onerror null;
            }

            if (
coming.wrap) {
                
coming.wrap.stop(truetrue).trigger('onReset').remove();
            }

            
F.coming null;

            
// If the first item has been canceled, then clear everything
            
if (!F.current) {
                
F._afterZoomOutcoming );
            }
        },

        
// Start closing animation if is open; remove immediately if opening/closing
        
close: function (event) {
            
F.cancel();

            if (
false === F.trigger('beforeClose')) {
                return;
            }

            
F.unbindEvents();

            if (!
F.isActive) {
                return;
            }

            if (!
F.isOpen || event === true) {
                $(
'.fancybox-wrap').stop(true).trigger('onReset').remove();

                
F._afterZoomOut();

            } else {
                
F.isOpen F.isOpened false;
                
F.isClosing true;

                $(
'.fancybox-item, .fancybox-nav').remove();

                
F.wrap.stop(truetrue).removeClass('fancybox-opened');

                
F.transitionsF.current.closeMethod ]();
            }
        },

        
// Manage slideshow:
        //   $.fancybox.play(); - toggle slideshow
        //   $.fancybox.play( true ); - start
        //   $.fancybox.play( false ); - stop
        
play: function ( action ) {
            var 
clear = function () {
                    
clearTimeout(F.player.timer);
                },
                
set = function () {
                    
clear();

                    if (
F.current && F.player.isActive) {
                        
F.player.timer setTimeout(F.nextF.current.playSpeed);
                    }
                },
                
stop = function () {
                    
clear();

                    
D.unbind('.player');

                    
F.player.isActive false;

                    
F.trigger('onPlayEnd');
                },
                
start = function () {
                    if (
F.current && (F.current.loop || F.current.index F.group.length 1)) {
                        
F.player.isActive true;

                        
D.bind({
                            
'onCancel.player beforeClose.player' stop,
                            
'onUpdate.player'   set,
                            
'beforeLoad.player' clear
                        
});

                        
set();

                        
F.trigger('onPlayStart');
                    }
                };

            if (
action === true || (!F.player.isActive && action !== false)) {
                
start();
            } else {
                
stop();
            }
        },

        
// Navigate to next gallery item
        
next: function ( direction ) {
            var 
current F.current;

            if (
current) {
                if (!
isString(direction)) {
                    
direction current.direction.next;
                }

                
F.jumpto(current.index 1direction'next');
            }
        },

        
// Navigate to previous gallery item
        
prev: function ( direction ) {
            var 
current F.current;

            if (
current) {
                if (!
isString(direction)) {
                    
direction current.direction.prev;
                }

                
F.jumpto(current.index 1direction'prev');
            }
        },

        
// Navigate to gallery item by index
        
jumpto: function ( indexdirectionrouter ) {
            var 
current F.current;

            if (!
current) {
                return;
            }

            
index getScalar(index);

            
F.direction direction || current.direction[ (index >= current.index 'next' 'prev') ];
            
F.router    router || 'jumpto';

            if (
current.loop) {
                if (
index 0) {
                    
index current.group.length + (index current.group.length);
                }

                
index index current.group.length;
            }

            if (
current.groupindex ] !== undefined) {
                
F.cancel();

                
F._start(index);
            }
        },

        
// Center inside viewport and toggle position type to fixed or absolute if needed
        
reposition: function (eonlyAbsolute) {
            var 
current F.current,
                
wrap    current current.wrap null,
                
pos;

            if (
wrap) {
                
pos F._getPosition(onlyAbsolute);

                if (
&& e.type === 'scroll') {
                    
delete pos.position;

                    
wrap.stop(truetrue).animate(pos200);

                } else {
                    
wrap.css(pos);

                    
current.pos = $.extend({}, current.dimpos);
                }
            }
        },

        
update: function (e) {
            var 
type = (&& e.type),
                
anyway = !type || type === 'orientationchange';

            if (
anyway) {
                
clearTimeout(didUpdate);

                
didUpdate null;
            }

            if (!
F.isOpen || didUpdate) {
                return;
            }

            
didUpdate setTimeout(function() {
                var 
current F.current;

                if (!
current || F.isClosing) {
                    return;
                }

                
F.wrap.removeClass('fancybox-tmp');

                if (
anyway || type === 'load' || (type === 'resize' && current.autoResize)) {
                    
F._setDimension();
                }

                if (!(
type === 'scroll' && current.canShrink)) {
                    
F.reposition(e);
                }

                
F.trigger('onUpdate');

                
didUpdate null;

            }, (
anyway && !isTouch 300));
        },

        
// Shrink content to fit inside viewport or restore if resized
        
toggle: function ( action ) {
            if (
F.isOpen) {
                
F.current.fitToView = $.type(action) === "boolean" action : !F.current.fitToView;

                
// Help browser to restore document dimensions
                
if (isTouch) {
                    
F.wrap.removeAttr('style').addClass('fancybox-tmp');

                    
F.trigger('onUpdate');
                }

                
F.update();
            }
        },

        
hideLoading: function () {
            
D.unbind('.loading');

            $(
'#fancybox-loading').remove();
        },

        
showLoading: function () {
            var 
elviewport;

            
F.hideLoading();

            
el = $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body');

            
// If user will press the escape-button, the request will be canceled
            
D.bind('keydown.loading', function(e) {
                if ((
e.which || e.keyCode) === 27) {
                    
e.preventDefault();

                    
F.cancel();
                }
            });

            if (!
F.defaults.fixed) {
                
viewport F.getViewport();

                
el.css({
                    
position 'absolute',
                    
top  : (viewport.0.5) + viewport.y,
                    
left : (viewport.0.5) + viewport.x
                
});
            }
        },

        
getViewport: function () {
            var 
locked = (F.current && F.current.locked) || false,
                
rez    = {
                    
xW.scrollLeft(),
                    
yW.scrollTop()
                };

            if (
locked) {
                
rez.locked[0].clientWidth;
                
rez.locked[0].clientHeight;

            } else {
                
// See http://bugs.jquery.com/ticket/6724
                
rez.isTouch && window.innerWidth  window.innerWidth  W.width();
                
rez.isTouch && window.innerHeight window.innerHeight W.height();
            }

            return 
rez;
        },

        
// Unbind the keyboard / clicking actions
        
unbindEvents: function () {
            if (
F.wrap && isQuery(F.wrap)) {
                
F.wrap.unbind('.fb');
            }

            
D.unbind('.fb');
            
W.unbind('.fb');
        },

        
bindEvents: function () {
            var 
current F.current,
                
keys;

            if (!
current) {
                return;
            }

            
// Changing document height on iOS devices triggers a 'resize' event,
            // that can change document height... repeating infinitely
            
W.bind('orientationchange.fb' + (isTouch '' ' resize.fb') + (current.autoCenter && !current.locked ' scroll.fb' ''), F.update);

            
keys current.keys;

            if (
keys) {
                
D.bind('keydown.fb', function (e) {
                    var 
code   e.which || e.keyCode,
                        
target e.target || e.srcElement;

                    
// Skip esc key if loading, because showLoading will cancel preloading
                    
if (code === 27 && F.coming) {
                        return 
false;
                    }

                    
// Ignore key combinations and key events within form elements
                    
if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {
                        $.
each(keys, function(ival) {
                            if (
current.group.length && valcode ] !== undefined) {
                                
F]( valcode ] );

                                
e.preventDefault();
                                return 
false;
                            }

                            if ($.
inArray(codeval) > -1) {
                                
F] ();

                                
e.preventDefault();
                                return 
false;
                            }
                        });
                    }
                });
            }

            if ($.fn.
mousewheel && current.mouseWheel) {
                
F.wrap.bind('mousewheel.fb', function (edeltadeltaXdeltaY) {
                    var 
target e.target || null,
                        
parent = $(target),
                        
canScroll false;

                    while (
parent.length) {
                        if (
canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {
                            break;
                        }

                        
canScroll isScrollableparent[0] );
                        
parent    = $(parent).parent();
                    }

                    if (
delta !== && !canScroll) {
                        if (
F.group.length && !current.canShrink) {
                            if (
deltaY || deltaX 0) {
                                
F.prevdeltaY 'down' 'left' );

                            } else if (
deltaY || deltaX 0) {
                                
F.nextdeltaY 'up' 'right' );
                            }

                            
e.preventDefault();
                        }
                    }
                });
            }
        },

        
trigger: function (evento) {
            var 
retobj || F.coming || F.current;

            if (!
obj) {
                return;
            }

            if ($.
isFunctionobj[event] )) {
                
ret obj[event].apply(obj, Array.prototype.slice.call(arguments1));
            }

            if (
ret === false) {
                return 
false;
            }

            if (
obj.helpers) {
                $.
each(obj.helpers, function (helperopts) {
                    if (
opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {
                        
F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaultsopts), obj);
                    }
                });
            }

            
D.trigger(event);
        },

        
isImage: function (str) {
            return 
isString(str) && str.match(/(^data:image/.*,)|(.(jp(e|g|eg)|gif|png|bmp|webp|svg)((?|#).*)?$)/i);
        
},

        
isSWF: function (str) {
            return 
isString(str) && str.match(/.(swf)((?|#).*)?$/i);
        
},

        
_start: function (index) {
            var 
coming = {},
                
obj,
                
href,
                
type,
                
margin,
                
padding;

            
index getScalarindex );
            
obj   F.groupindex ] || null;

            if (!
obj) {
                return 
false;
            }

            
coming = $.extend(true, {}, F.optsobj);

            
// Convert margin and padding properties to array - top, right, bottom, left
            
margin  coming.margin;
            
padding coming.padding;

            if ($.
type(margin) === 'number') {
                
coming.margin = [marginmarginmarginmargin];
            }

            if ($.
type(padding) === 'number') {
                
coming.padding = [paddingpaddingpaddingpadding];
            }

            
// 'modal' propery is just a shortcut
            
if (coming.modal) {
                $.
extend(truecoming, {
                    
closeBtn   false,
                    
closeClick false,
                    
nextClick  false,
                    
arrows     false,
                    
mouseWheel false,
                    
keys       null,
                    
helpers: {
                        
overlay : {
                            
closeClick false
                        
}
                    }
                });
            }

            
// 'autoSize' property is a shortcut, too
            
if (coming.autoSize) {
                
coming.autoWidth coming.autoHeight true;
            }

            if (
coming.width === 'auto') {
                
coming.autoWidth true;
            }

            if (
coming.height === 'auto') {
                
coming.autoHeight true;
            }

            
/*
             * Add reference to the group, so it`s possible to access from callbacks, example:
             * afterLoad : function() {
             *     this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
             * }
             */

            
coming.group  F.group;
            
coming.index  index;

            
// Give a chance for callback or helpers to update coming item (type, title, etc)
            
F.coming coming;

            if (
false === F.trigger('beforeLoad')) {
                
F.coming null;

                return;
            }

            
type coming.type;
            
href coming.href;

            if (!
type) {
                
F.coming null;

                
//If we can not determine content type then drop silently or display next/prev item if looping through gallery
                
if (F.current && F.router && F.router !== 'jumpto') {
                    
F.current.index index;

                    return 
FF.router ]( F.direction );
                }

                return 
false;
            }

            
F.isActive true;

            if (
type === 'image' || type === 'swf') {
                
coming.autoHeight coming.autoWidth false;
                
coming.scrolling  'visible';
            }

            if (
type === 'image') {
                
coming.aspectRatio true;
            }

            if (
type === 'iframe' && isTouch) {
                
coming.scrolling 'scroll';
            }

            
// Build the neccessary markup
            
coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch 'mobile' 'desktop') + ' fancybox-type-' type ' fancybox-tmp ' coming.wrapCSS).appendTocoming.parent || 'body' );

            $.
extend(coming, {
                
skin  : $('.fancybox-skin',  coming.wrap),
                
outer : $('.fancybox-outer'coming.wrap),
                
inner : $('.fancybox-inner'coming.wrap)
            });

            $.
each(["Top""Right""Bottom""Left"], function(iv) {
                
coming.skin.css('padding' vgetValue(coming.padding]));
            });

            
F.trigger('onReady');

            
// Check before try to load; 'inline' and 'html' types need content, others - href
            
if (type === 'inline' || type === 'html') {
                if (!
coming.content || !coming.content.length) {
                    return 
F._error'content' );
                }

            } else if (!
href) {
                return 
F._error'href' );
            }

            if (
type === 'image') {
                
F._loadImage();

            } else if (
type === 'ajax') {
                
F._loadAjax();

            } else if (
type === 'iframe') {
                
F._loadIframe();

            } else {
                
F._afterLoad();
            }
        },

        
_error: function ( type ) {
            $.
extend(F.coming, {
                
type       'html',
                
autoWidth  true,
                
autoHeight true,
                
minWidth   0,
                
minHeight  0,
                
scrolling  'no',
                
hasError   type,
                
content    F.coming.tpl.error
            
});

            
F._afterLoad();
        },

        
_loadImage: function () {
            
// Reset preload image so it is later possible to check "complete" property
            
var img F.imgPreload = new Image();

            
img.onload = function () {
                
this.onload this.onerror null;

                
F.coming.width  this.width F.opts.pixelRatio;
                
F.coming.height this.height F.opts.pixelRatio;

                
F._afterLoad();
            };

            
img.onerror = function () {
                
this.onload this.onerror null;

                
F._error'image' );
            };

            
img.src F.coming.href;

            if (
img.complete !== true) {
                
F.showLoading();
            }
        },

        
_loadAjax: function () {
            var 
coming F.coming;

            
F.showLoading();

            
F.ajaxLoad = $.ajax($.extend({}, coming.ajax, {
                
urlcoming.href,
                
error: function (jqXHRtextStatus) {
                    if (
F.coming && textStatus !== 'abort') {
                        
F._error'ajax'jqXHR );

                    } else {
                        
F.hideLoading();
                    }
                },
                
success: function (datatextStatus) {
                    if (
textStatus === 'success') {
                        
coming.content data;

                        
F._afterLoad();
                    }
                }
            }));
        },

        
_loadIframe: function() {
            var 
coming F.coming,
                
iframe = $(coming.tpl.iframe.replace(/{rnd}/g, new Date().getTime()))
                    .
attr('scrolling'isTouch 'auto' coming.iframe.scrolling)
                    .
attr('src'coming.href);

            
// This helps IE
            
$(coming.wrap).bind('onReset', function () {
                try {
                    $(
this).find('iframe').hide().attr('src''//about:blank').end().empty();
                } catch (
e) {}
            });

            if (
coming.iframe.preload) {
                
F.showLoading();

                
iframe.one('load', function() {
                    $(
this).data('ready'1);

                    
// iOS will lose scrolling if we resize
                    
if (!isTouch) {
                        $(
this).bind('load.fb'F.update);
                    }

                    
// Without this trick:
                    //   - iframe won't scroll on iOS devices
                    //   - IE7 sometimes displays empty iframe
                    
$(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();

                    
F._afterLoad();
                });
            }

            
coming.content iframe.appendTocoming.inner );

            if (!
coming.iframe.preload) {
                
F._afterLoad();
            }
        },

        
_preloadImages: function() {
            var 
group   F.group,
                
current F.current,
                
len     group.length,
                
cnt     current.preload Math.min(current.preloadlen 1) : 0,
                
item,
                
i;

            for (
1<= cnt+= 1) {
                
item group[ (current.index ) % len ];

                if (
item.type === 'image' && item.href) {
                    new 
Image().src item.href;
                }
            }
        },

        
_afterLoad: function () {
            var 
coming   F.coming,
                
previous F.current,
                
placeholder 'fancybox-placeholder',
                
current,
                
content,
                
type,
                
scrolling,
                
href,
                
embed;

            
F.hideLoading();

            if (!
coming || F.isActive === false) {
                return;
            }

            if (
false === F.trigger('afterLoad'comingprevious)) {
                
coming.wrap.stop(true).trigger('onReset').remove();

                
F.coming null;

                return;
            }

            if (
previous) {
                
F.trigger('beforeChange'previous);

                
previous.wrap.stop(true).removeClass('fancybox-opened')
                    .
find('.fancybox-item, .fancybox-nav')
                    .
remove();
            }

            
F.unbindEvents();

            
current   coming;
            
content   coming.content;
            
type      coming.type;
            
scrolling coming.scrolling;

            $.
extend(F, {
                
wrap  current.wrap,
                
skin  current.skin,
                
outer current.outer,
                
inner current.inner,
                
current  current,
                
previous previous
            
});

            
href current.href;

            switch (
type) {
                case 
'inline':
                case 
'ajax':
                case 
'html':
                    if (
current.selector) {
                        
content = $('<div>').html(content).find(current.selector);

                    } else if (
isQuery(content)) {
                        if (!
content.data(placeholder)) {
                            
content.data(placeholder, $('<div class="' placeholder '"></div>').insertAftercontent ).hide() );
                        }

                        
content content.show().detach();

                        
current.wrap.bind('onReset', function () {
                            if ($(
this).find(content).length) {
                                
content.hide().replaceAllcontent.data(placeholder) ).data(placeholderfalse);
                            }
                        });
                    }
                break;

                case 
'image':
                    
content current.tpl.image.replace('{href}'href);
                break;

                case 
'swf':
                    
content '<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="' href '"></param>';
                    
embed   '';

                    $.
each(current.swf, function(nameval) {
                        
content += '<param name="' name '" value="' val '"></param>';
                        
embed   += ' ' name '="' val '"';
                    });

                    
content += '<embed src="' href '" type="application/x-shockwave-flash" width="100%" height="100%"' embed '></embed></object>';
                break;
            }

            if (!(
isQuery(content) && content.parent().is(current.inner))) {
                
current.inner.appendcontent );
            }

            
// 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').notcurrent.wrap ).stop(true).trigger('onReset').remove();

            } else if (
previous.prevMethod) {
                
F.transitionsprevious.prevMethod ]();
            }

            
F.transitionsF.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.wSpace) * getScalar(width)  / 100 width;
            
origHeight isPercentage(height) ? (viewport.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.widthorigWidth ).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.widthorigWidth );
                }

                if (!
current.autoHeight) {
                    
inner.heightorigHeight );
                }

                if (
current.autoWidth) {
                    
origWidth inner.width();
                }

                if (
current.autoHeight) {
                    
origHeight inner.height();
                }

                
inner.removeClass'fancybox-tmp' );
            }

            
width  getScalarorigWidth );
            
height getScalarorigHeight );

            
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.wSpacemaxWidth);
                
maxHeight Math.min(viewport.hSpacemaxHeight);
            }

            
maxWidth_  viewport.wMargin;
            
maxHeight_ viewport.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(minWidthMath.min(widthmaxWidth));

                if (
current.autoHeight && current.type !== 'iframe') {
                    
inner.widthwidth );

                    
height inner.height();
                }

                
height Math.max(minHeightMath.min(heightmaxHeight));
            }

            
// Try to fit inside viewport (including the title)
            
if (current.fitToView) {
                
inner.widthwidth ).heightheight );

                
wrap.widthwidth 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(minHeightMath.min(maxHeightheight 10));
                        
width  getScalar(height ratio);

                        if (
width minWidth) {
                            
width  minWidth;
                            
height getScalar(width ratio);
                        }

                        if (
width maxWidth) {
                            
width  maxWidth;
                            
height getScalar(width ratio);
                        }

                        
inner.widthwidth ).heightheight );

                        
wrap.widthwidth wPadding );

                        
width_  wrap.width();
                        
height_ wrap.height();
                    }

                } else {
                    
width  Math.max(minWidth,  Math.min(width,  width  - (width_  maxWidth_)));
                    
height Math.max(minHeightMath.min(heightheight - (height_ maxHeight_)));
                }
            }

            if (
scrollOut && scrolling === 'auto' && height origHeight && (width wPadding scrollOut) < maxWidth_) {
                
width += scrollOut;
            }

            
inner.widthwidth ).heightheight );

            
wrap.widthwidth 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    getValuewidth_ ),
                    
height    getValueheight_ )
                },
                
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.&& 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.height) * current.topRatio)));
            
rez.left getValue(Math.max(rez.leftrez.left + ((viewport.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();

                        
Fcurrent.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.playfalse );

            } 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.+ (viewport.height) * current.topRatio;
                
pos.left viewport.+ (viewport.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 (nowfx) {
            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 : (now fx.start) / (fx.end fx.start);

                if (
F.isClosing) {
                    
ratio ratio;
                }

                
padding prop === 'width' current.wPadding current.hPadding;
                
value   now padding;

                
F.skinprop ](  getScalarprop === 'width' ?  value value - (wrapSpace ratio) ) );
                
F.innerprop ]( getScalarprop === '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' 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' 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 },
                
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') {
                    
startPosfield ] = getValue(getScalar(startPosfield ]) - distance);
                    
endPosfield ]   = '+=' distance 'px';

                } else {
                    
startPosfield ] = getValue(getScalar(startPosfield ]) + distance);
                    
endPosfield ]   = '-=' 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') {
                
endPosdirection === 'down' || direction === 'up' 'top' 'left' ] = ( direction === 'up' || direction === 'left' '-' '+' ) + '=' distance 'px';
            }

            
previous.wrap.animate(endPos, {
                
duration effect === 'none' 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.defaultsopts);

            if (
this.overlay) {
                
this.close();
            }

            
this.overlay = $('<div class="fancybox-overlay"></div>').appendToF.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.defaultsopts);

            if (
this.overlay) {
                
this.overlay.unbind('.overlay').width('auto').height('auto');

            } else {
                
this.create(opts);
            }

            if (!
this.fixed) {
                
W.bind('resize.overlay', $.proxythis.updatethis) );

                
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.cssopts.css ).show();
        },

        
close : function() {
            var 
scrollVscrollH;

            
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.scrollTopscrollV ).scrollLeftscrollH );
            }

            $(
'.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.offsetWidthdocument.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 (optsobj) {
            var 
overlay this.overlay;

            $(
'.fancybox-overlay').stop(truetrue);

            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.appendobj.wrap );
                
obj.fixed  false;
            }

            if (
opts.showEarly === true) {
                
this.beforeShow.apply(thisarguments);
            }
        },

        
beforeShow : function(optsobj) {
            var 
scrollVscrollH;

            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.scrollTopscrollV ).scrollLeftscrollH );
            }

            
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, $.proxythis.closethis ));
            }
        }
    };

    
/*
     *    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.elementcurrent);
            }

            if (!
isString(text) || $.trim(text) === '') {
                return;
            }

            
title = $('<div class="fancybox-title fancybox-title-' type '-wrap">' text '</div>');

            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.widthtitle.width() );
                    }

                    
title.wrapInner('<span class="child"></span>');

                    
//Increase bottom margin so this title will also fit into viewport
                    
F.current.margin[2] += Math.absgetScalar(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 indexrelTyperelVal;

                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(whatoptions) !== 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 
w1w2;

        if ( $.
scrollbarWidth === undefined ) {
            
// http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
            
$.scrollbarWidth = function() {
                var 
parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'),
                    
child  parent.children(),
                    
width  child.innerWidth() - child.height99 ).innerWidth();

                
parent.remove();

                return 
width;
            };
        }

        if ( $.
support.fixedPosition === undefined ) {
            $.
support.fixedPosition = (function() {
                var 
elem  = $('<div style="position:fixed;top:20px;"></div>').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');

        $(
"<style type='text/css'>.fancybox-margin{margin-right:" + (w2 w1) + "px;}</style>").appendTo("head");
    });

}(
windowdocumentjQuery));
?>
Онлайн: 1
Реклама