2 * FancyBox - jQuery Plugin
3 * Simple and fancy lightbox alternative
5 * Examples and documentation at: http://fancybox.net
7 * Copyright (c) 2008 - 2010 Janis Skarnelis
8 * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
10 * Version: 1.3.4 (11/11/2010)
11 * Requires: jQuery v1.3+
13 * Dual licensed under the MIT and GPL licenses:
14 * http://www.opensource.org/licenses/mit-license.php
15 * http://www.gnu.org/licenses/gpl.html
18 ;(function(b
){var m
,t
,u
,f
,D
,j
,E
,n
,z
,A
,q
=0,e
={},o
=[],p
=0,d
={},l
=[],G
=null,v
=new Image
,J
=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W
=/[^\.]\.(swf)\s*$/i,K
,L
=1,y
=0,s
="",r
,i
,h
=false,B
=b
.extend(b("<div/>")[0],{prop
:0}),M
=b
.browser
.msie
&&b
.browser
.version
<7&&!window
.XMLHttpRequest
,N=function(){t
.hide();v
.onerror
=v
.onload
=null;G
&&G
.abort();m
.empty()},O=function(){if(false===e
.onError(o
,q
,e
)){t
.hide();h
=false}else{e
.titleShow
=false;e
.width
="auto";e
.height
="auto";m
.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>');
19 F()}},I=function(){var a
=o
[q
],c
,g
,k
,C
,P
,w
;N();e
=b
.extend({},b
.fn
.fancybox
.defaults
,typeof b(a
).data("fancybox")=="undefined"?e
:b(a
).data("fancybox"));w
=e
.onStart(o
,q
,e
);if(w
===false)h
=false;else{if(typeof w
=="object")e
=b
.extend(e
,w
);k
=e
.title
||(a
.nodeName
?b(a
).attr("title"):a
.title
)||"";if(a
.nodeName
&&!e
.orig
)e
.orig
=b(a
).children("img:first").length
?b(a
).children("img:first"):b(a
);if(k
===""&&e
.orig
&&e
.titleFromAlt
)k
=e
.orig
.attr("alt");c
=e
.href
||(a
.nodeName
?b(a
).attr("href"):a
.href
)||null;if(/^(?:javascript)/i.test(c
)||
20 c
=="#")c
=null;if(e
.type
){g
=e
.type
;if(!c
)c
=e
.content
}else if(e
.content
)g
="html";else if(c
)g
=c
.match(J
)?"image":c
.match(W
)?"swf":b(a
).hasClass("iframe")?"iframe":c
.indexOf("#")===0?"inline":"ajax";if(g
){if(g
=="inline"){a
=c
.substr(c
.indexOf("#"));g
=b(a
).length
>0?"inline":"ajax"}e
.type
=g
;e
.href
=c
;e
.title
=k
;if(e
.autoDimensions
)if(e
.type
=="html"||e
.type
=="inline"||e
.type
=="ajax"){e
.width
="auto";e
.height
="auto"}else e
.autoDimensions
=false;if(e
.modal
){e
.overlayShow
=true;e
.hideOnOverlayClick
=false;e
.hideOnContentClick
=
21 false;e
.enableEscapeButton
=false;e
.showCloseButton
=false}e
.padding
=parseInt(e
.padding
,10);e
.margin
=parseInt(e
.margin
,10);m
.css("padding",e
.padding
+e
.margin
);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j
.children())});switch(g
){case "html":m
.html(e
.content
);F();break;case "inline":if(b(a
).parent().is("#fancybox-content")===true){h
=false;break}b('<div class="fancybox-inline-tmp" />').hide().insertBefore(b(a
)).bind("fancybox-cleanup",function(){b(this).replaceWith(j
.children())}).bind("fancybox-cancel",
22 function(){b(this).replaceWith(m
.children())});b(a
).appendTo(m
);F();break;case "image":h
=false;b
.fancybox
.showActivity();v
=new Image
;v
.onerror=function(){O()};v
.onload=function(){h
=true;v
.onerror
=v
.onload
=null;e
.width
=v
.width
;e
.height
=v
.height
;b("<img />").attr({id
:"fancybox-img",src
:v
.src
,alt
:e
.title
}).appendTo(m
);Q()};v
.src
=c
;break;case "swf":e
.scrolling
="no";C
='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+e
.width
+'" height="'+e
.height
+'"><param name="movie" value="'+c
+
23 '"></param>';P
="";b
.each(e
.swf
,function(x
,H
){C
+='<param name="'+x
+'" value="'+H
+'"></param>';P
+=" "+x
+'="'+H
+'"'});C
+='<embed src="'+c
+'" type="application/x-shockwave-flash" width="'+e
.width
+'" height="'+e
.height
+'"'+P
+"></embed></object>";m
.html(C
);F();break;case "ajax":h
=false;b
.fancybox
.showActivity();e
.ajax
.win
=e
.ajax
.success
;G
=b
.ajax(b
.extend({},e
.ajax
,{url
:c
,data
:e
.ajax
.data
||{},error:function(x
){x
.status
>0&&O()},success:function(x
,H
,R
){if((typeof R
=="object"?R
:G
).status
==200){if(typeof e
.ajax
.win
==
24 "function"){w
=e
.ajax
.win(c
,x
,H
,R
);if(w
===false){t
.hide();return}else if(typeof w
=="string"||typeof w
=="object")x
=w
}m
.html(x
);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a
=e
.width
,c
=e
.height
;a
=a
.toString().indexOf("%")>-1?parseInt((b(window
).width()-e
.margin
*2)*parseFloat(a
)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c
=="auto"?"auto":c
+"px";m
.wrapInner('<div style="width:'+a
+";height:"+c
+
25 ";overflow: "+(e
.scrolling
=="auto"?"auto":e
.scrolling
=="yes"?"scroll":"hidden")+';position:relative;"></div>');e
.width
=m
.width();e
.height
=m
.height();Q()},Q=function(){var a
,c
;t
.hide();if(f
.is(":visible")&&false===d
.onCleanup(l
,p
,d
)){b
.event
.trigger("fancybox-cancel");h
=false}else{h
=true;b(j
.add(u
)).unbind();b(window
).unbind("resize.fb scroll.fb");b(document
).unbind("keydown.fb");f
.is(":visible")&&d
.titlePosition
!=="outside"&&f
.css("height",f
.height());l
=o
;p
=q
;d
=e
;if(d
.overlayShow
){u
.css({"background-color":d
.overlayColor
,
26 opacity
:d
.overlayOpacity
,cursor
:d
.hideOnOverlayClick
?"pointer":"auto",height
:b(document
).height()});if(!u
.is(":visible")){M
&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style
.visibility
!=="hidden"}).css({visibility
:"hidden"}).one("fancybox-cleanup",function(){this.style
.visibility
="inherit"});u
.show()}}else u
.hide();i
=X();s
=d
.title
||"";y
=0;n
.empty().removeAttr("style").removeClass();if(d
.titleShow
!==false){if(b
.isFunction(d
.titleFormat
))a
=d
.titleFormat(s
,l
,p
,d
);else a
=s
&&s
.length
?
27 d
.titlePosition
=="float"?'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+s
+'</td><td id="fancybox-title-float-right"></td></tr></table>':'<div id="fancybox-title-'+d
.titlePosition
+'">'+s
+"</div>":false;s
=a
;if(!(!s
||s
==="")){n
.addClass("fancybox-title-"+d
.titlePosition
).html(s
).appendTo("body").show();switch(d
.titlePosition
){case "inside":n
.css({width
:i
.width
-d
.padding
*2,marginLeft
:d
.padding
,marginRight
:d
.padding
});
28 y
=n
.outerHeight(true);n
.appendTo(D
);i
.height
+=y
;break;case "over":n
.css({marginLeft
:d
.padding
,width
:i
.width
-d
.padding
*2,bottom
:d
.padding
}).appendTo(D
);break;case "float":n
.css("left",parseInt((n
.width()-i
.width
-40)/2,10)*-1).appendTo(f
);break;default:n
.css({width
:i
.width
-d
.padding
*2,paddingLeft
:d
.padding
,paddingRight
:d
.padding
}).appendTo(f
)}}}n
.hide();if(f
.is(":visible")){b(E
.add(z
).add(A
)).hide();a
=f
.position();r
={top
:a
.top
,left
:a
.left
,width
:f
.width(),height
:f
.height()};c
=r
.width
==i
.width
&&r
.height
==
29 i
.height
;j
.fadeTo(d
.changeFade
,0.3,function(){var g=function(){j
.html(m
.contents()).fadeTo(d
.changeFade
,1,S
)};b
.event
.trigger("fancybox-change");j
.empty().removeAttr("filter").css({"border-width":d
.padding
,width
:i
.width
-d
.padding
*2,height
:e
.autoDimensions
?"auto":i
.height
-y
-d
.padding
*2});if(c
)g();else{B
.prop
=0;b(B
).animate({prop
:1},{duration
:d
.changeSpeed
,easing
:d
.easingChange
,step
:T
,complete
:g
})}})}else{f
.removeAttr("style");j
.css("border-width",d
.padding
);if(d
.transitionIn
=="elastic"){r
=V();j
.html(m
.contents());
30 f
.show();if(d
.opacity
)i
.opacity
=0;B
.prop
=0;b(B
).animate({prop
:1},{duration
:d
.speedIn
,easing
:d
.easingIn
,step
:T
,complete
:S
})}else{d
.titlePosition
=="inside"&&y
>0&&n
.show();j
.css({width
:i
.width
-d
.padding
*2,height
:e
.autoDimensions
?"auto":i
.height
-y
-d
.padding
*2}).html(m
.contents());f
.css(i
).fadeIn(d
.transitionIn
=="none"?0:d
.speedIn
,S
)}}}},Y=function(){if(d
.enableEscapeButton
||d
.enableKeyboardNav
)b(document
).bind("keydown.fb",function(a
){if(a
.keyCode
==27&&d
.enableEscapeButton
){a
.preventDefault();b
.fancybox
.close()}else if((a
.keyCode
==
31 37||a
.keyCode
==39)&&d
.enableKeyboardNav
&&a
.target
.tagName
!=="INPUT"&&a
.target
.tagName
!=="TEXTAREA"&&a
.target
.tagName
!=="SELECT"){a
.preventDefault();b
.fancybox
[a
.keyCode
==37?"prev":"next"]()}});if(d
.showNavArrows
){if(d
.cyclic
&&l
.length
>1||p
!==0)z
.show();if(d
.cyclic
&&l
.length
>1||p
!=l
.length
-1)A
.show()}else{z
.hide();A
.hide()}},S=function(){if(!b
.support
.opacity
){j
.get(0).style
.removeAttribute("filter");f
.get(0).style
.removeAttribute("filter")}e
.autoDimensions
&&j
.css("height","auto");f
.css("height","auto");
32 s
&&s
.length
&&n
.show();d
.showCloseButton
&&E
.show();Y();d
.hideOnContentClick
&&j
.bind("click",b
.fancybox
.close
);d
.hideOnOverlayClick
&&u
.bind("click",b
.fancybox
.close
);b(window
).bind("resize.fb",b
.fancybox
.resize
);d
.centerOnScroll
&&b(window
).bind("scroll.fb",b
.fancybox
.center
);if(d
.type
=="iframe")b('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date
).getTime()+'" frameborder="0" hspace="0" '+(b
.browser
.msie
?'allowtransparency="true""':"")+' scrolling="'+e
.scrolling
+'" src="'+d
.href
+'"></iframe>').appendTo(j
);
33 f
.show();h
=false;b
.fancybox
.center();d
.onComplete(l
,p
,d
);var a
,c
;if(l
.length
-1>p
){a
=l
[p
+1].href
;if(typeof a
!=="undefined"&&a
.match(J
)){c
=new Image
;c
.src
=a
}}if(p
>0){a
=l
[p
-1].href
;if(typeof a
!=="undefined"&&a
.match(J
)){c
=new Image
;c
.src
=a
}}},T=function(a
){var c
={width
:parseInt(r
.width
+(i
.width
-r
.width
)*a
,10),height
:parseInt(r
.height
+(i
.height
-r
.height
)*a
,10),top
:parseInt(r
.top
+(i
.top
-r
.top
)*a
,10),left
:parseInt(r
.left
+(i
.left
-r
.left
)*a
,10)};if(typeof i
.opacity
!=="undefined")c
.opacity
=a
<0.5?0.5:a
;f
.css(c
);
34 j
.css({width
:c
.width
-d
.padding
*2,height
:c
.height
-y
*a
-d
.padding
*2})},U=function(){return[b(window
).width()-d
.margin
*2,b(window
).height()-d
.margin
*2,b(document
).scrollLeft()+d
.margin
,b(document
).scrollTop()+d
.margin
]},X=function(){var a
=U(),c
={},g
=d
.autoScale
,k
=d
.padding
*2;c
.width
=d
.width
.toString().indexOf("%")>-1?parseInt(a
[0]*parseFloat(d
.width
)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d
.height
+k
;if(g
&&(c
.width
>a
[0]||c
.height
>a
[1]))if(e
.type
==
35 "image"||e
.type
=="swf"){g
=d
.width
/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k
,10)}if(c
.height
>a
[1]){c
.height
=a
[1];c
.width
=parseInt((c
.height
-k
)*g
+k
,10)}}else{c
.width
=Math
.min(c
.width
,a
[0]);c
.height
=Math
.min(c
.height
,a
[1])}c
.
36 =parseInt(Math
.max(a
[3]-20,a
[3]+(a
[1]-c
.height
-40)*0.5),10);c
.left
=parseInt(Math
.max(a
[2]-20,a
[2]+(a
[0]-c
.width
-40)*0.5),10);return c
},V=function(){var a
=e
.orig
?b(e
.orig
):false,c
={};if(a
&&a
.length
){c
=a
.offset();c
.top
+=parseInt(a
.css("paddingTop"),
37 10)||0;c
.left
+=parseInt(a
.css("paddingLeft"),10)||0;c
.top
+=parseInt(a
.css("border-top-width"),10)||0;c
.left
+=parseInt(a
.css("border-left-width"),10)||0;c
.width
=a
.width();c
.height
=a
.height();c
={width
:c
.width
+d
.padding
*2,height
:c
.height
+d
.padding
*2,top
:c
.top
-d
.padding
-20,left
:c
.left
-d
.padding
-20}}else{a
=U();c
={width
:d
.padding
*2,height
:d
.padding
*2,top
:parseInt(a
[3]+a
[1]*0.5,10),left
:parseInt(a
[2]+a
[0]*0.5,10)}}return c
},Z=function(){if(t
.is(":visible")){b("div",t
).css("top",L
*-40+"px");L
=(L
+1)%12}else clearInterval(K
)};
38 b
.fn
.fancybox=function(a
){if(!b(this).length
)return this;b(this).data("fancybox",b
.extend({},a
,b
.metadata
?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c
){c
.preventDefault();if(!h
){h
=true;b(this).blur();o
=[];q
=0;c
=b(this).attr("rel")||"";if(!c
||c
==""||c
==="nofollow")o
.push(this);else{o
=b("a[rel="+c
+"], area[rel="+c
+"]");q
=o
.index(this)}I()}});return this};b
.fancybox=function(a
,c
){var g
;if(!h
){h
=true;g
=typeof c
!=="undefined"?c
:{};o
=[];q
=parseInt(g
.index
,10)||0;if(b
.isArray(a
)){for(var k
=
39 0,C
=a
.length
;k
<C
;k
++)if(typeof a
[k
]=="object")b(a
[k
]).data("fancybox",b
.extend({},g
,a
[k
]));else a
[k
]=b({}).data("fancybox",b
.extend({content
:a
[k
]},g
));o
=jQuery
.merge(o
,a
)}else{if(typeof a
=="object")b(a
).data("fancybox",b
.extend({},g
,a
));else a
=b({}).data("fancybox",b
.extend({content
:a
},g
));o
.push(a
)}if(q
>o
.length
||q
<0)q
=0;I()}};b
.fancybox
.showActivity=function(){clearInterval(K
);t
.show();K
=setInterval(Z
,66)};b
.fancybox
.hideActivity=function(){t
.hide()};b
.fancybox
.next=function(){return b
.fancybox
.pos(p
+
40 1)};b
.fancybox
.prev=function(){return b
.fancybox
.pos(p
-1)};b
.fancybox
.pos=function(a
){if(!h
){a
=parseInt(a
);o
=l
;if(a
>-1&&a
<l
.length
){q
=a
;I()}else if(d
.cyclic
&&l
.length
>1){q
=a
>=l
.length
?0:l
.length
-1;I()}}};b
.fancybox
.cancel=function(){if(!h
){h
=true;b
.event
.trigger("fancybox-cancel");N();e
.onCancel(o
,q
,e
);h
=false}};b
.fancybox
.close=function(){function a(){u
.fadeOut("fast");n
.empty().hide();f
.hide();b
.event
.trigger("fancybox-cleanup");j
.empty();d
.onClosed(l
,p
,d
);l
=e
=[];p
=q
=0;d
=e
={};h
=false}if(!(h
||f
.is(":hidden"))){h
=
41 true;if(d
&&false===d
.onCleanup(l
,p
,d
))h
=false;else{N();b(E
.add(z
).add(A
)).hide();b(j
.add(u
)).unbind();b(window
).unbind("resize.fb scroll.fb");b(document
).unbind("keydown.fb");j
.find("iframe").attr("src",M
&&/^https/i.test(window
.location
.href
||"")?"javascript:void(false)":"about:blank");d
.titlePosition
!=="inside"&&n
.empty();f
.stop();if(d
.transitionOut
=="elastic"){r
=V();var c
=f
.position();i
={top
:c
.top
,left
:c
.left
,width
:f
.width(),height
:f
.height()};if(d
.opacity
)i
.opacity
=1;n
.empty().hide();B
.prop
=1;
42 b(B
).animate({prop
:0},{duration
:d
.speedOut
,easing
:d
.easingOut
,step
:T
,complete
:a
})}else f
.fadeOut(d
.transitionOut
=="none"?0:d
.speedOut
,a
)}}};b
.fancybox
.resize=function(){u
.is(":visible")&&u
.css("height",b(document
).height());b
.fancybox
.center(true)};b
.fancybox
.center=function(a
){var c
,g
;if(!h
){g
=a
===true?1:0;c
=U();!g
&&(f
.width()>c
[0]||f
.height()>c
[1])||f
.stop().animate({top
:parseInt(Math
.max(c
[3]-20,c
[3]+(c
[1]-j
.height()-100)*0.5-d
.padding
)),left
:parseInt(Math
.max(c
[2]-20,c
[2]+(c
[0]-j
.width()-40)*0.5-
43 d
.padding
))},typeof a
=="number"?a
:200)}};b
.fancybox
.init=function(){if(!b("#fancybox-wrap").length
){b("body").append(m
=b('<div id="fancybox-tmp"></div>'),t
=b('<div id="fancybox-loading"><div></div></div>'),u
=b('<div id="fancybox-overlay"></div>'),f
=b('<div id="fancybox-wrap"></div>'));D
=b('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(f
);
44 D
.append(j
=b('<div id="fancybox-content"></div>'),E
=b('<a id="fancybox-close"></a>'),n
=b('<div id="fancybox-title"></div>'),z
=b('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),A
=b('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));E
.click(b
.fancybox
.close
);t
.click(b
.fancybox
.cancel
);z
.click(function(a
){a
.preventDefault();b
.fancybox
.prev()});A
.click(function(a
){a
.preventDefault();b
.fancybox
.next()});
45 b
.fn
.mousewheel
&&f
.bind("mousewheel.fb",function(a
,c
){if(h
)a
.preventDefault();else if(b(a
.target
).get(0).clientHeight
==0||b(a
.target
).get(0).scrollHeight
===b(a
.target
).get(0).clientHeight
){a
.preventDefault();b
.fancybox
[c
>0?"prev":"next"]()}});b
.support
.opacity
||f
.addClass("fancybox-ie");if(M
){t
.addClass("fancybox-ie6");f
.addClass("fancybox-ie6");b('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window
.location
.href
||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(D
)}}};
46 b
.fn
.fancybox
.defaults
={padding
:10,margin
:40,opacity
:false,modal
:false,cyclic
:false,scrolling
:"auto",width
:560,height
:340,autoScale
:true,autoDimensions
:true,centerOnScroll
:false,ajax
:{},swf
:{wmode
:"transparent"},hideOnOverlayClick
:true,hideOnContentClick
:false,overlayShow
:true,overlayOpacity
:0.7,overlayColor
:"#777",titleShow
:true,titlePosition
:"float",titleFormat
:null,titleFromAlt
:false,transitionIn
:"fade",transitionOut
:"fade",speedIn
:300,speedOut
:300,changeSpeed
:300,changeFade
:"fast",easingIn
:"swing",
47 easingOut
:"swing",showCloseButton
:true,showNavArrows
:true,enableEscapeButton
:true,enableKeyboardNav
:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document
).ready(function(){b
.fancybox
.init()})})(jQuery
);