(function (window, document, $, undefined){
"use strict";
var H=$("html"),
W=$(window),
D=$(document),
F=$.fancybox=function (){
F.open.apply(this, arguments);
},
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(orig, dim){
var value=parseInt(orig, 10)||0;
if(dim&&isPercentage(orig)){
value=F.getViewport()[ dim ] / 100 * value;
}
return Math.ceil(value);
},
getValue=function(value, dim){
return getScalar(value, dim) + 'px';
};
$.extend(F, {
version: '2.1.5',
defaults: {
padding:15,
margin:20,
width:800,
height:600,
minWidth:100,
minHeight:100,
maxWidth:9999,
maxHeight:9999,
pixelRatio: 1,
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',
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:true,
index:0,
type:null,
href:null,
content:null,
title:null,
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>'
},
openEffect:'fade', // 'elastic', 'fade' or 'none'
openSpeed:250,
openEasing:'swing',
openOpacity:true,
openMethod:'zoomIn',
closeEffect:'fade', // 'elastic', 'fade' or 'none'
closeSpeed:250,
closeEasing:'swing',
closeOpacity:true,
closeMethod:'zoomOut',
nextEffect:'elastic', // 'elastic', 'fade' or 'none'
nextSpeed:250,
nextEasing:'swing',
nextMethod:'changeIn',
prevEffect:'elastic', // 'elastic', 'fade' or 'none'
prevSpeed:250,
prevEasing:'swing',
prevMethod:'changeOut',
helpers:{
overlay:true,
title:true
},
onCancel:$.noop,
beforeLoad:$.noop,
afterLoad:$.noop,
beforeShow:$.noop,
afterShow:$.noop,
beforeChange:$.noop,
beforeClose:$.noop,
afterClose:$.noop
},
group:{},
opts:{},
previous:null,
coming:null,
current:null,
isActive:false,
isOpen:false,
isOpened:false,
wrap:null,
skin:null,
outer:null,
inner:null,
player:{
timer:null,
isActive:false
},
ajaxLoad:null,
imgPreload:null,
transitions:{},
helpers:{},
open: function (group, opts){
if(!group){
return;
}
if(!$.isPlainObject(opts)){
opts={};}
if(false===F.close(true)){
return;
}
if(!$.isArray(group)){
group=isQuery(group) ? $(group).get():[group];
}
$.each(group, function(i, element){
var obj={},
href,
title,
content,
type,
rez,
hrefParts,
selector;
if($.type(element)==="object"){
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(true, obj, element.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)){
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;
}}
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);
}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[ i ]=obj;
});
F.opts=$.extend(true, {}, F.defaults, opts);
if(opts.keys!==undefined){
F.opts.keys=opts.keys ? $.extend({}, F.defaults.keys, opts.keys):false;
}
F.group=group;
return F._start(F.opts.index);
},
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(true, true).trigger('onReset').remove();
}
F.coming=null;
if(!F.current){
F._afterZoomOut(coming);
}},
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(true, true).removeClass('fancybox-opened');
F.transitions[ F.current.closeMethod ]();
}},
play: function(action){
var clear=function (){
clearTimeout(F.player.timer);
},
set=function (){
clear();
if(F.current&&F.player.isActive){
F.player.timer=setTimeout(F.next, F.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();
}},
next: function(direction){
var current=F.current;
if(current){
if(!isString(direction)){
direction=current.direction.next;
}
F.jumpto(current.index + 1, direction, 'next');
}},
prev: function(direction){
var current=F.current;
if(current){
if(!isString(direction)){
direction=current.direction.prev;
}
F.jumpto(current.index - 1, direction, 'prev');
}},
jumpto: function(index, direction, router){
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.group[ index ]!==undefined){
F.cancel();
F._start(index);
}},
reposition: function (e, onlyAbsolute){
var current=F.current,
wrap=current ? current.wrap:null,
pos;
if(wrap){
pos=F._getPosition(onlyAbsolute);
if(e&&e.type==='scroll'){
delete pos.position;
wrap.stop(true, true).animate(pos, 200);
}else{
wrap.css(pos);
current.pos=$.extend({}, current.dim, pos);
}}
},
update: function (e){
var type=(e&&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 ? 0:300));
},
toggle: function(action){
if(F.isOpen){
F.current.fitToView=$.type(action)==="boolean" ? action:!F.current.fitToView;
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 el, viewport;
F.hideLoading();
el=$('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body');
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.h * 0.5) + viewport.y,
left:(viewport.w * 0.5) + viewport.x
});
}},
getViewport: function (){
var locked=(F.current&&F.current.locked)||false,
rez={
x: W.scrollLeft(),
y: W.scrollTop()
};
if(locked){
rez.w=locked[0].clientWidth;
rez.h=locked[0].clientHeight;
}else{
rez.w=isTouch&&window.innerWidth  ? window.innerWidth:W.width();
rez.h=isTouch&&window.innerHeight ? window.innerHeight:W.height();
}
return rez;
},
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;
}
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;
if(code===27&&F.coming){
return false;
}
if(!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!e.metaKey&&!(target&&(target.type||$(target).is('[contenteditable]')))){
$.each(keys, function(i, val){
if(current.group.length > 1&&val[ code ]!==undefined){
F[ i ](val[ code ]);
e.preventDefault();
return false;
}
if($.inArray(code, val) > -1){
F[ i ] ();
e.preventDefault();
return false;
}});
}});
}
if($.fn.mousewheel&&current.mouseWheel){
F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY){
var target=e.target||null,
parent=$(target),
canScroll=false;
while (parent.length){
if(canScroll||parent.is('.fancybox-skin')||parent.is('.fancybox-wrap')){
break;
}
canScroll=isScrollable(parent[0]);
parent=$(parent).parent();
}
if(delta!==0&&!canScroll){
if(F.group.length > 1&&!current.canShrink){
if(deltaY > 0||deltaX > 0){
F.prev(deltaY > 0 ? 'down':'left');
}else if(deltaY < 0||deltaX < 0){
F.next(deltaY < 0 ? 'up':'right');
}
e.preventDefault();
}}
});
}},
trigger: function (event, o){
var ret, obj=o||F.coming||F.current;
if(!obj){
return;
}
if($.isFunction(obj[event])){
ret=obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
}
if(ret===false){
return false;
}
if(obj.helpers){
$.each(obj.helpers, function (helper, opts){
if(opts&&F.helpers[helper]&&$.isFunction(F.helpers[helper][event])){
F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), 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=getScalar(index);
obj=F.group[ index ]||null;
if(!obj){
return false;
}
coming=$.extend(true, {}, F.opts, obj);
margin=coming.margin;
padding=coming.padding;
if($.type(margin)==='number'){
coming.margin=[margin, margin, margin, margin];
}
if($.type(padding)==='number'){
coming.padding=[padding, padding, padding, padding];
}
if(coming.modal){
$.extend(true, coming, {
closeBtn:false,
closeClick:false,
nextClick:false,
arrows:false,
mouseWheel:false,
keys:null,
helpers: {
overlay:{
closeClick:false
}}
});
}
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;
F.coming=coming;
if(false===F.trigger('beforeLoad')){
F.coming=null;
return;
}
type=coming.type;
href=coming.href;
if(!type){
F.coming=null;
if(F.current&&F.router&&F.router!=='jumpto'){
F.current.index=index;
return F[ F.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';
}
coming.wrap=$(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile':'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo(coming.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(i, v){
coming.skin.css('padding' + v, getValue(coming.padding[ i ]));
});
F.trigger('onReady');
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 (){
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, {
url: coming.href,
error: function (jqXHR, textStatus){
if(F.coming&&textStatus!=='abort'){
F._error('ajax', jqXHR);
}else{
F.hideLoading();
}},
success: function (data, textStatus){
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);
$(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);
if(!isTouch){
$(this).bind('load.fb', F.update);
}
$(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();
F._afterLoad();
});
}
coming.content=iframe.appendTo(coming.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.preload, len - 1):0,
item,
i;
for (i=1; i <=cnt; i +=1){
item=group[ (current.index + i) % 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', coming, previous)){
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>').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='<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(name, val){
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.append(content);
}
F.trigger('beforeShow');
current.inner.css('overflow', scrolling==='yes' ? 'scroll':(scrolling==='no' ? 'hidden':scrolling));
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;
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());
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');
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;
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);
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));
}
if(current.fitToView){
inner.width(width).height(height);
wrap.width(width + wPadding);
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();
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' ]();
}});
}
if(current.closeBtn){
$(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e){
e.preventDefault();
F.close();
});
}
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');
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);
}});
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);
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';
}}
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();
}});
}};
F.helpers.overlay={
defaults:{
closeClick:true,
speedOut:200,
showEarly:true,
css:{},
locked:!isTouch,
fixed:true
},
overlay:null,
fixed:false,
el:$('html'),
create:function(opts){
opts=$.extend({}, this.defaults, opts);
if(this.overlay){
this.close();
}
this.overlay=$('<div class="fancybox-overlay"></div>').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
});
},
update:function (){
var width='100%', offsetWidth;
this.overlay.width(width).height('100%');
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());
},
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){
if(this.overlay&&!F.coming){
this.overlay.fadeOut(opts.speedOut, $.proxy(this.close, this));
}}
};
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=$('<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.width(title.width());
}
title.wrapInner('<span class="child"></span>');
F.current.margin[2] +=Math.abs(getScalar(title.css('margin-bottom')));
break;
}
title[ (opts.position==='top' ? 'prependTo':'appendTo') ](target);
}};
$.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;
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;
};
D.ready(function(){
var w1, w2;
if($.scrollbarWidth===undefined){
$.scrollbarWidth=function(){
var parent=$('<div style="width:50px;height:50px;overflow:auto"><div/></div>').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=$('<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')
});
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");
});
}(window, document, jQuery));