以下是 jQuery可定制TN3相册效果特效代码 的示例演示效果:
部分效果截图:
HTML代码(index.html):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>可定制jQuery技术的TN3相册效果</title>
<style type="text/css">
body {margin:50px 0px; padding:0px; background-color: #000000;color: #ffffff;}
#content {width:620px; margin:0px auto;}
#desc {margin:10px; float:left; font-family: Arial, sans-serif; font-size: 12px;}
</style>
<!-- include CSS always before including js -->
<link type="text/css" rel="stylesheet" href="skins/tn3/tn3.css"></link>
<!-- include jQuery library -->
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<!-- include tn3 plugin -->
<script type="text/javascript" src="js/jquery.tn3lite.min.js"></script>
<!-- initialize the TN3 when the DOM is ready -->
<script type="text/javascript">
$(document).ready(function() {
//Thumbnailer.config.shaderOpacity = 1;
var tn1 = $('.mygallery').tn3({
skinDir:"skins",
imageClick:"fullscreen",
image:{
maxZoom:1.5,
crop:true,
clickEvent:"dblclick",
transitions:[{
type:"blinds"
},{
type:"grid"
},{
type:"grid",
duration:460,
easing:"easeInQuad",
gridX:1,
gridY:8,
// flat, diagonal, circle, random
sort:"random",
sortReverse:false,
diagonalStart:"bl",
// fade, scale
method:"scale",
partDuration:360,
partEasing:"easeOutSine",
partDirection:"left"
}]
}
});
});
</script>
</head>
<body>
<div id="content">
<div class="mygallery">
<div class="tn3 album">
<h4>Fixed Dimensions</h4>
<div class="tn3 description">Images with fixed dimensions</div>
<div class="tn3 thumb">images/35x35/1.jpg</div>
<ol>
<li>
<h4>Hohensalzburg Castle</h4>
<div class="tn3 description">Salzburg, Austria</div>
<a href="images/620x378/1.jpg">
<img src="images/35x35/1.jpg" />
</a>
</li>
<li>
<h4>Isolated sandy cove</h4>
<div class="tn3 description">Zakynthos island, Greece</div>
<a href="images/620x378/2.jpg">
<img src="images/35x35/2.jpg" />
</a>
</li>
<li>
<h4>A view from the Old Town</h4>
<div class="tn3 description">Herceg Novi, Montenegro</div>
<a href="images/620x378/3.jpg">
<img src="images/35x35/3.jpg" />
</a>
</li>
<li>
<h4>Walls of the Old Town</h4>
<div class="tn3 description">Kotor, Montenegro</div>
<a href="images/620x378/4.jpg">
<img src="images/35x35/4.jpg" />
</a>
</li>
<li>
<h4>Boat in the port</h4>
<div class="tn3 description">Sousse, Tunis</div>
<a href="images/620x378/5.jpg">
<img src="images/35x35/5.jpg" />
</a>
</li>
<li>
<h4>Wall of the Jain temple</h4>
<div class="tn3 description">Jaisalmer, India</div>
<a href="images/620x378/6.jpg">
<img src="images/35x35/6.jpg" />
</a>
</li>
<li>
<h4>City park</h4>
<div class="tn3 description">Negotin, Serbia</div>
<a href="images/620x378/7.jpg">
<img src="images/35x35/7.jpg" />
</a>
</li>
<li>
<h4>Taj Mahal mausoleum</h4>
<div class="tn3 description">Agra, India</div>
<a href="images/620x378/8.jpg">
<img src="images/35x35/8.jpg" />
</a>
</li>
<li>
<h4>Zante Port</h4>
<div class="tn3 description">Zakynthos, Greece</div>
<a href="images/620x378/9.jpg">
<img src="images/35x35/9.jpg" />
</a>
</li>
<li>
<h4>Rustovo Monastery</h4>
<div class="tn3 description">Budva, Montenegro</div>
<a href="images/620x378/10.jpg">
<img src="images/35x35/10.jpg" />
</a>
</li>
<li>
<h4>The Mezquita, Cathedral and former Great Mosque</h4>
<div class="tn3 description">Cordoba, Spain</div>
<a href="images/620x378/11.jpg">
<img src="images/35x35/11.jpg" />
</a>
</li>
<li>
<h4>Wine Cellars</h4>
<div class="tn3 description">Rajac, Serbia</div>
<a href="images/620x378/12.jpg">
<img src="images/35x35/12.jpg" />
</a>
</li>
</ol>
</div>
</div>
<div id="desc">
<p>Note that 'blinds' and 'grid' transition types work only if the images are of same size and not scaled. If you choose album with large images and because 'crop' options is turned on, you will see default transition('slide') instead of 'blinds' and 'grid' types.</p>
</div>
</div>
</body>
</html>
JS代码(jquery.tn3lite.min.js):
/*! * tn3 v1.1.0.26 * http://tn3gallery.com/ * * License * http://tn3gallery.com/license * * Date:13 Jul,2011 20:29:07 +0300 */
(function(f){
function e(h){
var j=h.skinDir+"/"+h.skin,l=n[j];
if(l)l.loaded?a.call(this,h,l.html):l.queue.push({
c:this,s:h}
);
else{
n[j]={
loaded:false,queue:[{
c:this,s:h}
]}
;
f.ajax({
url:j+".html",dataType:"text",success:function(m){
var p=n[j];
p.loaded=true;
p.html=m;
for(m=0;
m<p.queue.length;
m++)a.call(p.queue[m].c,p.queue[m].s,p.html)}
,dataFilter:function(m){
return m=m.substring(m.indexOf("<body>")+6,m.lastIndexOf("</body>"))}
,error:function(){
if(h.error){
var m=f.Event("tn3_error");
m.description="tn3 skin load error";
h.error(m)}
}
}
)}
return this}
function a(h,j){
this.each(function(){
for(var l=f(this),m,p,q=j.indexOf("<img src=");
q!=-1;
){
q+=10;
p=j.indexOf('"',q);
m=h.skinDir+"/"+j.substring(q,p);
j=j.substr(0,q)+m+j.substr(p);
q=j.indexOf("<img src=",q)}
l.append(j);
l.data("tn3").init(l,h.fullOnly)}
)}
function c(h){
var j=[],l=h.children(".tn3.album"),m,p;
if(l.length>0)l.each(function(q){
m=f(this);
j[q]={
title:m.find(":header").html()}
;
f.extend(j[q],b(m));
if(p=d(m)){
j[q].imgs=p;
if(!j[q].thumb)j[q].thumb=j[q].imgs[0].thumb}
}
);
else if(p=d(h))j[0]={
imgs:p}
;
return j}
function d(h){
var j=[],l,m,p;
l=h.find("li");
if(l.length>0)l.each(function(q){
m=f(this);
p=m.find(":header");
j[q]={
title:p.html(),img:m.find("a").attr("href"),thumb:m.find("a img").attr("src")}
;
if(!j[q].img)j[q].img=m.find("img").attr("src");
f.extend(j[q],b(m))}
);
else{
l=h.find("img");
l.each(function(q){
m=f(this);
j[q]={
title:m.attr("title"),img:m.attr("src")}
}
)}
if(j.length==0)return null;
return j}
function b(h){
var j={
}
;
h=h.children(".tn3");
var l;
f.each(h,function(){
l=f(this);
j[l.attr("class").substr(4)]=l.html()}
);
return j}
function g(h){
f('a[href^="#tn3-'+h+'"]').click(function(j){
var l=k[h];
j=f(j.currentTarget).attr("href");
j=j.substr(j.indexOf("-",5)+1);
j=j.split("-");
switch(j[0]){
case "next":l.cAlbum!=null&&l.show("next",j[1]=="fs");
break;
case "prev":l.cAlbum!=null&&l.show("prev",j[1]=="fs");
break;
default:l.cAlbum!=parseInt(j[0])?l.showAlbum(parseInt(j[0]),parseInt(j[1]),j[2]=="fs"):l.show(parseInt(j[1]),j[2]=="fs")}
}
)}
function i(){
if(k.length==0){
var h=f(".tn3gallery");
h.length>0&&h.tn3({
}
)}
}
if(/1\.(0|1|2|3|4)\.(0|1)/.test(f.fn.jquery)||/^1.1/.test(f.fn.jquery)||/^1.2/.test(f.fn.jquery)||/^1.3/.test(f.fn.jquery))alert("tn3gallery requires jQuery v1.4.2 or later! You are using v"+f.fn.jquery);
else{
var n={
}
,k=[];
f.fn.tn3=function(h){
f.each(["skin","startWithAlbums","external"],function(l,m){
var p=m.split(".");
if(p.length>1&&h[p[0]])delete h[p[0]][p[1]];
else delete h[m]}
);
h=f.extend(true,{
}
,f.fn.tn3.config,h);
if(h.skin!=null)if(typeof h.skin=="object"){
h.skinDir+="/"+h.skin[0];
if(h.cssID==null)h.cssID=h.skin[0];
h.skin=h.skin[1]}
else h.skinDir+="/"+h.skin;
else{
h.skin="tn3";
h.skinDir+="/tn3";
var j=true}
if(h.cssID==null)h.cssID=h.skin==null?"tn3":h.skin;
this.each(function(){
var l=f(this);
h.fullOnly?l.hide():l.css("visibility","hidden");
var m=h.data?h.data:c(l);
m=k.push(new f.fn.tn3.Gallery(m,h))-1;
l.data("tn3",k[m]);
for(var p=0;
p<f.fn.tn3.plugins.length;
p++)f.fn.tn3.plugins[p].init(l,h);
l.empty();
g(m)}
);
j?a.call(this,h,h.skinDefault):e.call(this,h);
return this}
;
f.fn.tn3.plugins=[];
f.fn.tn3.plugIn=function(h,j){
f.fn.tn3.plugins.push({
id:h,init:j}
)}
;
f.fn.tn3.version="1.1.0.26";
f.fn.tn3.config={
data:null,skin:null,skinDir:"skins",skinDefault:'<div class="tn3-gallery"><div class="tn3-image"><div class="tn3-text-bg"><div class="tn3-image-title"></div><div class="tn3-image-description"></div></div><div class="tn3-next tn3_v tn3_o"></div><div class="tn3-prev tn3_v tn3_o"></div><div class="tn3-preloader tn3_h tn3_v"><img src="preload.gif"/></div><div class="tn3-timer"></div></div><div class="tn3-controls-bg tn3_rh"><div class="tn3-sep1"></div><div class="tn3-sep2"></div><div class="tn3-sep3"></div></div><div class="tn3-thumbs"></div><div class="tn3-fullscreen"></div><div class="tn3-show-albums"></div><div class="tn3-next-page"></div><div class="tn3-prev-page"></div><div class="tn3-play"></div><div class="tn3-count"></div><div class="tn3-albums"><div class="tn3-inalbums"><div class="tn3-album"></div></div><div class="tn3-albums-next"></div><div class="tn3-albums-prev"></div><div class="tn3-albums-close"></div></div></div>',cssID:null}
;
f.fn.tn3.translations={
}
;
f.fn.tn3.translate=function(h,j){
if(j)f.fn.tn3.translations[h]=j;
else{
var l=f.fn.tn3.translations[h];
return l?l:h}
}
;
f(function(){
setTimeout(i,1)}
)}
}
)(jQuery);
(function(f){
f.fn.tn3utils=U={
}
;
U.shuffle=function(e){
var a,c,d=e.length;
if(d)for(;
--d;
){
c=Math.floor(Math.random()*(d+1));
a=e[c];
e[c]=e[d];
e[d]=a}
}
;
f.extend(f.easing,{
def:"easeOutQuad",swing:function(e,a,c,d,b){
return f.easing[f.easing.def](e,a,c,d,b)}
,linear:function(e,a,c,d,b){
return d*a/b+c}
,easeInQuad:function(e,a,c,d,b){
return d*(a/=b)*a+c}
,easeOutQuad:function(e,a,c,d,b){
return-d*(a/=b)*(a-2)+c}
,easeInOutQuad:function(e,a,c,d,b){
if((a/=b/2)<1)return d/2*a*a+c;
return-d/2*(--a*(a-2)-1)+c}
,easeInCubic:function(e,a,c,d,b){
return d*(a/=b)*a*a+c}
,easeOutCubic:function(e,a,c,d,b){
return d*((a=a/b-1)*a*a+1)+c}
,easeInOutCubic:function(e,a,c,d,b){
if((a/=b/2)<1)return d/2*a*a*a+c;
return d/2*((a-=2)*a*a+2)+c}
,easeInQuart:function(e,a,c,d,b){
return d*(a/=b)*a*a*a+c}
,easeOutQuart:function(e,a,c,d,b){
return-d*((a=a/b-1)*a*a*a-1)+c}
,easeInOutQuart:function(e,a,c,d,b){
if((a/=b/2)<1)return d/2*a*a*a*a+c;
return-d/2*((a-=2)*a*a*a-2)+c}
,easeInQuint:function(e,a,c,d,b){
return d*(a/=b)*a*a*a*a+c}
,easeOutQuint:function(e,a,c,d,b){
return d*((a=a/b-1)*a*a*a*a+1)+c}
,easeInOutQuint:function(e,a,c,d,b){
if((a/=b/2)<1)return d/2*a*a*a*a*a+c;
return d/2*((a-=2)*a*a*a*a+2)+c}
,easeInSine:function(e,a,c,d,b){
return-d*Math.cos(a/b*(Math.PI/2))+d+c}
,easeOutSine:function(e,a,c,d,b){
return d*Math.sin(a/b*(Math.PI/2))+c}
,easeInOutSine:function(e,a,c,d,b){
return-d/2*(Math.cos(Math.PI*a/b)-1)+c}
,easeInExpo:function(e,a,c,d,b){
return a==0?c:d*Math.pow(2,10*(a/b-1))+c}
,easeOutExpo:function(e,a,c,d,b){
return a==b?c+d:d*(-Math.pow(2,-10*a/b)+1)+c}
,easeInOutExpo:function(e,a,c,d,b){
if(a==0)return c;
if(a==b)return c+d;
if((a/=b/2)<1)return d/2*Math.pow(2,10*(a-1))+c;
return d/2*(-Math.pow(2,-10*--a)+2)+c}
,easeInCirc:function(e,a,c,d,b){
return-d*(Math.sqrt(1-(a/=b)*a)-1)+c}
,easeOutCirc:function(e,a,c,d,b){
return d*Math.sqrt(1-(a=a/b-1)*a)+c}
,easeInOutCirc:function(e,a,c,d,b){
if((a/=b/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+c;
return d/2*(Math.sqrt(1-(a-=2)*a)+1)+c}
,easeInElastic:function(e,a,c,d,b){
e=1.70158;
var g=0,i=d;
if(a==0)return c;
if((a/=b)==1)return c+d;
g||(g=b*0.3);
if(i<Math.abs(d)){
i=d;
e=g/4}
else e=g/(2*Math.PI)*Math.asin(d/i);
return-(i*Math.pow(2,10*(a-=1))*Math.sin((a*b-e)*2*Math.PI/g))+c}
,easeOutElastic:function(e,a,c,d,b){
e=1.70158;
var g=0,i=d;
if(a==0)return c;
if((a/=b)==1)return c+d;
g||(g=b*0.3);
if(i<Math.abs(d)){
i=d;
e=g/4}
else e=g/(2*Math.PI)*Math.asin(d/i);
return i*Math.pow(2,-10*a)*Math.sin((a*b-e)*2*Math.PI/g)+d+c}
,easeInOutElastic:function(e,a,c,d,b){
e=1.70158;
var g=0,i=d;
if(a==0)return c;
if((a/=b/2)==2)return c+d;
g||(g=b*0.3*1.5);
if(i<Math.abs(d)){
i=d;
e=g/4}
else e=g/(2*Math.PI)*Math.asin(d/i);
if(a<1)return-0.5*i*Math.pow(2,10*(a-=1))*Math.sin((a*b-e)*2*Math.PI/g)+c;
return i*Math.pow(2,-10*(a-=1))*Math.sin((a*b-e)*2*Math.PI/g)*0.5+d+c}
,easeInBack:function(e,a,c,d,b,g){
if(g==undefined)g=1.70158;
return d*(a/=b)*a*((g+1)*a-g)+c}
,easeOutBack:function(e,a,c,d,b,g){
if(g==undefined)g=1.70158;
return d*((a=a/b-1)*a*((g+1)*a+g)+1)+c}
,easeInOutBack:function(e,a,c,d,b,g){
if(g==undefined)g=1.70158;
if((a/=b/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+c;
return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+c}
,easeInBounce:function(e,a,c,d,b){
return d-f.easing.easeOutBounce(e,b-a,0,d,b)+c}
,easeOutBounce:function(e,a,c,d,b){
return(a/=b)<1/2.75?d*7.5625*a*a+c:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+c:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+c:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+c}
,easeInOutBounce:function(e,a,c,d,b){
if(a<b/2)return f.easing.easeInBounce(e,a*2,0,d,b)*0.5+c;
return f.easing.easeOutBounce(e,a*2-b,0,d,b)*0.5+d*0.5+c}
}
)}
)(jQuery);
(function(f){
f.fn.tn3.Gallery=function(a,c){
this.data=a;
this.config=f.extend(true,{
}
,f.fn.tn3.Gallery.config,c);
this.initialized=false;
this.t=f.fn.tn3.translate;
this.loader=new f.fn.tn3.External(c.external,this)}
;
f.fn.tn3.Gallery.config={
cssID:"tn3",active:[],iniAlbum:0,iniImage:0,imageClick:"next",startWithAlbums:false,autoplay:false,delay:7E3,timerMode:"bar",timerSteps:500,timerStepChar:"•
",isFullScreen:false,fullOnly:false,width:null,height:null,mouseWheel:true,image:{
}
,thumbnailer:{
}
}
;
var e;
f.fn.tn3.Gallery.prototype={
config:null,$c:null,$tn3:null,data:null,thumbnailer:null,imager:null,cAlbum:null,timer:null,items:null,initialized:null,n:null,albums:null,loader:null,fso:null,timerSize:null,special:null,areHidden:false,$inImage:null,init:function(a,c){
this.$c=a;
if(!(this.loader.reqs>0||this.data.length==0||c)){
this.trigger("init_start");
this.config.fullOnly&&this.$c.show();
this.$c.css("visibility","visible");
this.$tn3=this.$c.find("."+this.config.cssID+"-gallery");
var d=this.config.initValues={
width:this.$tn3.width(),height:this.$tn3.height()}
;
this.$tn3.css("float","left");
d.wDif=this.$tn3.outerWidth(true)-d.width;
d.hDif=this.$tn3.outerHeight(true)-d.height;
this.replaceMenu("tn3gallery.com","http://tn3gallery.com");
var b=this;
this.timer=new f.fn.tn3.Timer(this.$c,this.config.delay,this.config.timerSteps);
this.$c.bind("timer_end",function(){
b.show("next")}
);
this.special={
rv:[],rh:[],v:[],h:[],o:[]}
;
this.parseLayout();
this.center();
f.each(this.items,function(g,i){
switch(g){
case "next":i.click(function(k){
b.show("next");
k.stopPropagation()}
);
i.attr("title",b.t("Next Image"));
break;
case "prev":i.click(function(k){
b.show("prev");
k.stopPropagation()}
);
i.attr("title",b.t("Previous Image"));
break;
case "next-page":i.click(function(){
b.items.thumbs&&b.thumbnailer.next(true)}
);
i.attr("title",b.t("Next Page"));
break;
case "prev-page":i.click(function(){
b.items.thumbs&&b.thumbnailer.prev(true)}
);
i.attr("title",b.t("Previous Page"));
break;
case "thumbs":b.config.thumbnailer.cssID=b.config.cssID;
b.config.thumbnailer.initValues={
width:i.width(),height:i.height()}
;
b.config.thumbnailer.initValues.vertical=i.width()<=i.height();
i.bind("tn_click",function(k){
b.show(k.n)}
).bind("tn_over",function(){
b.timer.pause(true)}
).bind("tn_out",function(){
b.timer.pause(false)}
).bind("tn_error",function(k){
b.trigger("error",k)}
);
break;
case "image":b.config.image.cssID=b.config.cssID;
b.config.image.initValues={
width:i.width(),height:i.height()}
;
i.bind("img_click",function(k){
switch(b.config.imageClick){
case "next":b.show("next");
break;
case "fullscreen":b.fullscreen();
break;
case "url":if(k=b.data[b.cAlbum].imgs[k.n].url)window.location=k}
}
).bind("img_load_start",function(){
b.items.preloader&&b.items.preloader.show()}
).bind("img_load_end",function(k){
b.n=k.n;
b.items.thumbs&&b.thumbnailer.thumbClick(k.n);
b.items.preloader&&b.items.preloader.hide();
b.items.timer&&b.items.timer.hide();
b.$inImage&&b.$inImage.hide()}
).bind("img_transition",function(){
b.setTextValues(false,"image");
b.$inImage&&b.$inImage.fadeIn(300);
b.items.count&&b.items.count.text(b.n+1+"/"+b.data[b.cAlbum].imgs.length);
b.config.autoplay&&b.timer.start();
b.special.o.length>0&&b.hideElements()}
).bind("img_enter",function(){
b.items.timer&&b.timer.pause(true);
b.special.o.length>0&&b.showElements(300)}
).bind("img_leave",function(){
b.items.timer&&b.timer.pause(false);
b.special.o.length>0&&b.hideElements(300)}
).bind("img_resize",function(k){
if(b.$inImage){
b.$inImage.width(k.w).height(k.h).css("left",k.left).css("top",k.top);
b.center();
b.imager.bindMouseEvents(b.$inImage)}
}
).bind("img_error",function(k){
b.trigger("error",k)}
);
break;
case "preloader":i.hide();
break;
case "timer":var n=i.width()>i.height()?"width":"height";
b.$c.bind("timer_tick",function(k){
if(b.config.timerMode=="char"){
for(var h=b.config.timerStepChar;
--k.tick;
)h+=b.config.timerStepChar;
b.items.timer.html(h)}
else b.items.timer[n](b.timerSize/k.totalTicks*k.tick);
b.trigger(k.type,k)}
).bind("timer_start",function(k){
b.timerSize=b.$inImage[n]();
b.items.timer.fadeIn(300);
b.trigger(k.type,k)}
).bind("timer_end timer_stop",function(){
b.items.timer.hide()}
);
i.hide();
break;
case "play":i.click(function(k){
if(b.timer.runs){
b.timer.stop();
b.config.autoplay=false;
i.removeClass(b.config.cssID+"-play-active");
i.attr("title",b.t("Start Slideshow"))}
else{
b.timer.start();
b.config.autoplay=true;
i.addClass(b.config.cssID+"-play-active");
i.attr("title",b.t("Stop Slideshow"))}
k.stopPropagation()}
);
i.attr("title",b.t("Start Slideshow"));
b.config.autoplay&&i.click();
break;
case "albums":b.albums=new f.fn.tn3.Albums(b.data,i,b.config.cssID);
i.hide();
i.bind("albums_binit",function(k){
b.trigger(k.type,k)}
).bind("albums_click",function(k){
b.showAlbum(k.n);
b.trigger(k.type,k)}
).bind("albums_init",function(k){
b.timer.stop();
b.trigger(k.type,k)}
).bind("albums_error",function(k){
b.trigger("error",k)}
);
break;
case "albums-next":b.albums&&b.albums.setControl("next",i);
i.attr("title",b.t("Next Album Page"));
break;
case "albums-prev":b.albums&&b.albums.setControl("prev",i);
i.attr("title",b.t("Previous Album Page"));
break;
case "albums-close":b.albums&&b.albums.setControl("close",i);
i.attr("title",b.t("Close"));
break;
case "show-albums":i.click(function(k){
b.items.albums&&b.albums.show(0,b.cAlbum);
k.stopPropagation()}
);
i.attr("title",b.t("Album List"));
break;
case "fullscreen":i.click(function(k){
b.fullscreen();
k.stopPropagation()}
);
i.attr("title",b.t("Maximize"))}
}
);
if(this.config.width!==null||this.config.height!==null){
if(this.config.width==null)this.config.width=this.config.initValues.width;
if(this.config.height==null)this.config.height=this.config.initValues.height;
this.resize(this.config.width,this.config.height)}
d=Math.min(this.config.iniAlbum,this.data.length-1);
this.initialized=true;
this.config.startWithAlbums&&this.data.length>1&&this.items.albums?this.albums.show():this.showAlbum(d,this.config.iniImage);
this.config.isFullScreen&&this.onFullResize(f(window).width(),f(window).height());
this.trigger("init")}
}
,parseLayout:function(){
var a=this.items={
}
,c=this.config,d=c.active,b=c.cssID.length+1,g=this,i,n;
this.$c.find("div[class^='"+c.cssID+"-']").each(function(){
i=f(this);
n=i.attr("class").split(" ")[0].substr(b);
if(d.length==0||f.inArray(n,d)!=-1)a[n]=i;
else n!="gallery"&&i.remove();
if(i.parent().hasClass(c.cssID+"-image")){
if(!g.$inImage){
g.$inImage=i.parent().append('<div class="tn3-in-image"></div>').find(":last");
if(f.browser.msie){
var h=f("<div />");
h.css("background-color","#fff").css("opacity",0).css("width","100%").css("height","100%");
h.appendTo(g.$inImage)}
g.$inImage.css("position","absolute").width(a.image.width()).height(a.image.height())}
i.appendTo(g.$inImage)}
this.className.indexOf("tn3_")!=-1&&g.addSpecial(n,this.className)}
);
$cm=this.$c;
f.each(["albums","album","album-next","album-prev","show-albums","timer"],function(h,j){
delete a[j];
$cm.find("."+c.cssID+"-"+j).remove()}
);
var k=f('<div title="Powered by TN3 Gallery"></div>');
k.css("position","absolute").css("background-image","url('"+this.config.skinDir+"/tn3.png')").css("background-position","-258px -7px").css("bottom","14px").css("right","53px").css("cursor","pointer").width(40).height(18);
k.appendTo(this.$c.find("."+c.cssID+"-gallery"));
k.click(function(){
window.location="http://tn3gallery.com"}
).hover(function(){
f(this).css("background-position","-258px -45px")}
,function(){
f(this).css("background-position","-258px -7px")}
)}
,addSpecial:function(a,c){
for(var d=c.split(" "),b,g=0;
g<d.length;
g++){
b=d[g].split("_");
if(b[0]=="tn3"){
this.special[b[1]].push(a);
if(b[1]=="rh"||b[1]=="rb")this.config.initValues[a]={
w:this.items[a].width(),h:this.items[a].height()}
}
}
}
,initHover:function(a,c){
var d=this;
a.hover(function(){
a.addClass(d.config.cssID+"-"+c+"-over")}
,function(){
a.removeClass(d.config.cssID+"-"+c+"-over")}
)}
,setTextValues:function(a,c){
var d,b,g,i=c+"-";
for(g in this.items)if(g.indexOf(i)==0){
d=g.substr(i.length);
if(d!="info"&&d!="prev"&&d!="next"){
b=c=="image"?this.data[this.cAlbum].imgs[this.n]:this.data[this.cAlbum];
if(!(!b||b[d]==undefined)){
b[d]=f.trim(b[d]);
d={
field:d,text:b[d],data:b}
;
this.trigger("set_text",d);
if(a||d.text==undefined||d.text.length==0){
this.items[g].html("");
this.items[g].hide()}
else{
this.items[g].html(d.text);
this.items[g].show()}
}
}
}
}
,show:function(a,c){
this.timer.stop();
this.imager&&this.imager.show(a);
c&&this.fullscreen()}
,setAlbumData:function(a,c){
if(c)this.trigger("error",{
description:c}
);
else{
for(var d=0,b=a.length;
d<b;
d++)this.data.push(a[d]);
this.$c&&this.init(this.$c,this.config.fullOnly)}
}
,setImageData:function(a,c,d){
if(d)this.trigger("error",{
description:d}
);
else{
a={
data:a}
;
this.trigger("image_data",a);
this.data[c].imgs=a.data;
this.cAlbum==c&&this.rebuild(a.data)}
}
,showAlbum:function(a,c,d){
if(this.initialized){
if(a>this.data.length)return;
this.timer.stop();
this.cAlbum=a;
if(this.data[this.cAlbum].imgs===undefined)this.loader?this.loader.getImages(this.data[this.cAlbum].adata,this.cAlbum):this.trigger("error",{
description:"Wrong album id"}
);
else this.rebuild(this.data[this.cAlbum].imgs,c);
this.albums&&this.albums.hide();
this.items.preloader&&this.items.preloader.show()}
else{
this.config.iniAlbum=a;
this.config.iniImage=c;
this.init(this.$c,false)}
d&&this.fullscreen()}
,rebuild:function(a,c){
if(this.items.thumbs)if(this.thumbnailer)this.thumbnailer.rebuild(a);
else this.thumbnailer=new f.fn.tn3.Thumbnailer(this.items.thumbs,a,this.config.thumbnailer);
if(this.items.image)if(this.imager)this.imager.rebuild(a);
else this.imager=new f.fn.tn3.Imager(this.items.image,a,this.config.image);
this.setTextValues(true,"image");
this.setTextValues(false,"album");
this.show(c==null?0:c);
this.trigger("rebuild",{
album:this.cAlbum}
)}
,showElements:function(a){
if(this.areHidden){
var c=this,d;
f.each(this.special.o,function(b,g){
d=c.items[g];
d.show();
if(a&&f.support.opacity){
d.stop(true);
d.css("opacity",0);
d.animate({
opacity:1}
,{
duration:a,queue:false}
)}
}
);
this.areHidden=false}
}
,hideElements:function(a){
if(!this.areHidden){
var c=this,d;
f.each(this.special.o,function(b,g){
d=c.items[g];
if(a&&f.support.opacity){
d.stop(true);
d.animate({
opacity:0}
,{
duration:a,complete:function(){
d.hide()}
,queue:false}
)}
else d.hide()}
);
this.areHidden=true}
}
,setData:function(a){
if(this.items.thumbs)this.thumbnailer.data=a;
if(this.items.imager)this.imager.data=a}
,fullscreen:function(){
if(this.config.isFullScreen){
f(window).unbind("resize",this.onFullResize);
f.tn3unblock();
this.config.width!==null||this.config.height!==null?this.resize(this.config.width,this.config.height):this.resize(this.config.initValues.width,this.config.initValues.height);
if(this.items.fullscreen){
this.items.fullscreen.removeClass(this.config.cssID+"-fullscreen-active");
this.items.fullscreen.attr("title",this.t("Maximize"))}
this.config.fullOnly&&this.$c.hide();
this.config.isFullScreen=false;
this.trigger("fullscreen",{
fullscreen:false}
);
f(document).unbind("keyup",this.onEscape)}
else{
f.tn3block({
message:this.$tn3,cssID:this.config.cssID}
);
f(window).bind("resize",f.proxy(this.onFullResize,this));
this.config.fullOnly&&this.$c.show();
this.config.isFullScreen=true;
if(this.items.fullscreen){
this.items.fullscreen.addClass(this.config.cssID+"-fullscreen-active");
this.items.fullscreen.attr("title",this.t("Minimize"))}
this.onFullResize();
e=this;
this.trigger("fullscreen",{
fullscreen:true}
)}
}
,onEscape:function(a){
a.keyCode==27&&e.fullscreen();
a.keyCode==39&&e.show("next");
a.keyCode==37&&e.show("prev");
a.keyCode==38&&e.items.albums&&e.albums.show(0,e.cAlbum);
a.keyCode==40&&e.albums.hide()}
,onFullResize:function(){
var a=f(window),c=a.width();
a=a.height();
c-=this.config.initValues.wDif;
a-=this.config.initValues.hDif;
this.resize(c,a)}
,resize:function(a,c){
this.$tn3.width(a).height(c);
var d=a-this.config.initValues.width,b=c-this.config.initValues.height,g,i,n=this;
if(this.items.image){
g=this.config.image.initValues.width+d;
i=this.config.image.initValues.height+b;
if(this.imager)this.imager.setSize(g,i);
else{
this.items.image.width(g).height(i);
this.$inImage.width(g).height(i)}
}
if(this.items.thumbs){
g=this.config.thumbnailer.initValues.width+d;
i=this.config.thumbnailer.initValues.height+b;
if(this.thumbnailer)this.thumbnailer.setSize(g,i);
else this.config.thumbnailer.initValues.vertical?this.items.thumbs.height(i):this.items.thumbs.width(g)}
if(this.items.albums){
g=this.albums.initValues.width+d;
i=this.albums.initValues.height+b;
this.albums.changeSize(d,b)}
f.each(this.special.rh,function(k,h){
n.items[h].width(n.config.initValues[h].w+d)}
);
f.each(this.special.rv,function(k,h){
n.items[h].height(n.config.initValues[h].h+b)}
);
this.center()}
,center:function(){
var a,c=this;
f.each(this.special.v,function(d,b){
a=c.items[b];
a.css("top",(a.parent().height()-a.height())/2)}
);
f.each(this.special.h,function(d,b){
a=c.items[b];
a.css("left",(a.parent().width()-a.width())/2)}
)}
,trigger:function(a,c){
var d=f.Event("tn3_"+a),b;
for(b in c)d[b]=c[b];
if(c&&c.type!=undefined)d.type="tn3_"+a;
d.source=this;
this.$c.trigger(d);
this.config[a]&&this.config[a].call(this,d);
for(b in c)c[b]=d[b]}
,initMouseWheel:function(){
var a=this,c=function(d){
a.show((d.detail?-d.detail:d.wheelDelta)>0?"prev":"next");
d.preventDefault()}
;
this.$tn3.bind("mousewheel",c);
this.$tn3.bind("DOMMouseScroll",c)}
,replaceMenu:function(a,c){
var d='<div style="position:absolute;
background-color:#fff;
color:#000;
padding:0px 4px 0px 4px;
z-index:1010;
font-family:sans-serif;
font-size:12px;
">©
<a href="'+c+'">'+a+"</a></div>";
this.$tn3.bind("contextmenu",function(b){
b.preventDefault()}
).bind("mousedown",function(b){
if(b.which==3){
var g=f("body").append(d).find("div:last");
g.css("left",b.pageX).css("top",b.pageY);
g.find("a").mouseup(function(i){
window.location=c;
g.unbind(i)}
);
f("body").mouseup(function(i){
g.remove();
f("body").unbind(i)}
)}
}
)}
}
}
)(jQuery);
(function(f){
f.fn.tn3.Imager=function(e,a,c){
this.$c=e;
this.data=a;
c.crop=false;
this.config=f.extend(true,{
}
,f.fn.tn3.Imager.config,c);
this.init()}
;
f.fn.tn3.Imager.config={
transitions:null,defaultTransition:{
type:"slide"}
,random:false,cssID:"tn3",maxZoom:1.4,crop:false,clickEvent:"click",idleDelay:3E3,dif:0}
;
f.fn.tn3.Imager.prototype={
config:null,$c:false,data:false,cached:null,active:-1,$active:false,$buffer:false,isInTransition:false,ts:null,cDim:null,qid:null,currentlyLoading:null,side:null,$ic:null,$binder:null,infoID:null,lastEnter:false,mouseCoor:{
x:0,y:0}
,mouseIsOver:false,init:function(){
this.$c.css("overflow","hidden");
this.$c.css("position","relative");
this.bindMouseEvents(this.$c);
this.cached=[];
this.ts=new f.fn.tn3.Transitions(this.config.transitions,this.config.defaultTransition,this.config.random,this,"onTransitionEnd")}
,bindMouseEvents:function(e){
this.unbindMouseEvents();
var a=this;
e.hover(function(){
a.mouseIsOver=true;
a.enterLeave("enter");
a.startIdle();
f(document).mousemove(f.proxy(a.onMouseMove,a))}
,function(){
a.mouseIsOver=false;
a.enterLeave("leave");
a.stopIdle();
f(document).unbind("mousemove",a.onMouseMove)}
);
e[this.config.clickEvent](function(c){
a.active==-1||a.isInTransition||c.target.tagName.toUpperCase()!="A"&&a.trigger("click",{
n:a.active}
)}
);
this.$binder=e}
,unbindMouseEvents:function(){
this.$binder&&this.$binder.unbind("mouseenter mouseleave "+this.config.clickEvent);
f(document).unbind("mousemove",this.onMouseMove);
this.stopIdle()}
,startIdle:function(){
this.stopIdle();
var e=this;
if(this.config.idleDelay>0)this.infoID=setTimeout(function(){
e.enterLeave("leave");
e.stopIdle()}
,this.config.idleDelay)}
,onMouseMove:function(e){
this.mouseCoor={
x:e.pageX,y:e.pageY}
;
if(!this.isInTransition){
this.infoID||this.enterLeave("enter");
this.startIdle()}
}
,stopIdle:function(){
clearTimeout(this.infoID);
this.infoID=null}
,enterLeave:function(e){
this.lastEnter!=e&&this.trigger(e);
this.lastEnter=e}
,show:function(e){
if(this.isInTransition)this.qid=e;
else{
this.qid=null;
if(e=="next"){
e=this.active+1<this.data.length?this.active+1:0;
this.side="left"}
else if(e=="prev"){
e=this.active>0?this.active-1:this.data.length-1;
this.side="right"}
else this.side=this.active>e?"right":"left";
this.trigger("load_start",{
n:e}
);
this.$buffer=this.$c.prepend('<div class="'+this.config.cssID+'-image-in" style="position:absolute;
overflow:hidden;
"></div>').find(":first");
if(this.cached[this.currentlyLoading]!=undefined)this.cached[this.currentlyLoading].init=false;
if(this.cached[e]!=undefined)if(this.cached[e].status=="loaded")this.initImage(this.cached[e].loader.$img,e);
else{
this.cached[e].init=true;
this.currentlyLoading=e}
else{
this.cached[e]={
status:"loading",init:true}
;
this.currentlyLoading=e;
this.cached[e].loader=new f.fn.tn3.ImageLoader(this.data[e].img,this,this.onCacheLoad,[e])}
}
}
,onCacheLoad:function(e,a,c){
this.cached[a].status="loaded";
c&&this.trigger("error",{
description:c,n:a}
);
this.cached[a].init&&this.initImage(e,a)}
,initImage:function(e,a){
this.currentlyLoading=null;
this.active=a;
if(!this.cDim)this.cDim={
w:this.$c.width(),h:this.$c.height()}
;
this.$buffer.width(this.cDim.w).height(this.cDim.h);
var c=f('<div class="'+this.config.cssID+'-full-image" style="position:absolute"></div>');
e.appendTo(c);
this.$buffer.append(c);
this.$buffer.data("ic",c);
this.$buffer.data("img",e);
this.resize(this.$buffer);
this.trigger("load_end",{
n:a}
);
if(this.$active!=false){
this.isInTransition=true;
this.unbindMouseEvents();
if(this.mouseIsOver)f(document).mousemove(f.proxy(this.onMouseMove,this));
else this.mouseCoor={
x:0,y:0}
;
this.lastEnter="leave";
this.ts.start(this.$active,this.$buffer,this.side)}
else{
this.$active=this.$buffer;
this.trigger("transition",{
n:this.active}
)}
if(this.cached[a+1]==undefined&&this.data[a+1]!=undefined){
this.cached[a+1]={
status:"loading",init:false}
;
this.cached[a+1].loader=new f.fn.tn3.ImageLoader(this.data[a+1].img,this,this.onCacheLoad,[a+1])}
}
,setSize:function(e,a){
this.isInTransition&&this.ts.stop(this.$active,this.$buffer,this.ts.config);
this.$c.width(e).height(a);
this.cDim={
w:this.$c.width(),h:this.$c.height()}
;
if(this.$active){
this.$active.width(e).height(a);
this.resize(this.$active)}
}
,resize:function(e){
$img=e.data("img");
if($img==undefined)this.trigger("resize",{
w:this.cDim.w,h:this.cDim.h,left:0,top:0}
);
else{
$ic=e.data("ic");
$img.width("").height("");
e.data("scaled",false);
var a=$img.width(),c=$img.height(),d=0,b=0,g={
w:a,h:c,left:0,top:0}
;
if(a!=this.cDim.w||c!=this.cDim.h){
d=this.cDim.w/a;
b=this.cDim.h/c;
d=this.config.crop?Math.max(d,b):Math.min(d,b);
d=Math.min(this.config.maxZoom,d);
a=g.w=Math.round(a*d)-this.config.dif;
c=g.h=Math.round(c*d)-this.config.dif;
if(this.cDim.w>=a)d=g.left=(this.cDim.w-a)/2;
else{
d=-(a-this.cDim.w)*0.5;
g.w=this.cDim.w}
if(this.cDim.h>c)b=g.top=(this.cDim.h-c)/2;
else{
b=-(c-this.cDim.h)*0.5;
g.h=this.cDim.h}
$img.width(a).height(c);
$ic.width(a).height(c);
e.data("scaled",true)}
$ic.css("left",d).css("top",b);
this.bindMouseEvents($ic);
this.trigger("resize",g)}
}
,onTransitionEnd:function(){
this.$active.remove();
this.$active=this.$buffer;
this.isInTransition=false;
this.trigger("transition",{
n:this.active}
);
this.bindMouseEvents(this.$binder);
var e=this.$binder.offset();
this.mouseIsOver=false;
if(this.mouseCoor.x>=e.left&&this.mouseCoor.x<=e.left+this.$binder.width())if(this.mouseCoor.y>=e.top&&this.mouseCoor.y<=e.top+this.$binder.height()){
this.lastEnter="leave";
this.enterLeave("enter");
this.startIdle();
this.mouseIsOver=true;
f(document).mousemove(f.proxy(this.onMouseMove,this))}
this.qid!=null&&this.show(this.qid)}
,trigger:function(e,a){
var c=f.Event("img_"+e),d;
for(d in a)c[d]=a[d];
c.source=this;
this.$c.trigger(c);
this.config[e]&&this.config[e].call(this,c)}
,destroy:function(){
this.isInTransition&&this.ts.stop(this.$active,this.$buffer);
this.$active&&this.$active.remove();
this.$buffer.remove()}
,rebuild:function(e){
this.quid=null;
this.isInTransition&&this.ts.stop(this.$active,this.$buffer);
this.$buffer.remove();
this.cached=[];
this.data=e;
this.loader&&this.loader.cancel()}
}
}
)(jQuery);
(function(f){
f.fn.tn3.Thumbnailer=function(e,a,c){
this.$c=e;
this.data=a;
this.config=f.extend({
}
,f.fn.tn3.Thumbnailer.config,c);
this.init()}
;
f.fn.tn3.Thumbnailer.config={
overMove:true,buffer:20,speed:8,slowdown:50,shaderColor:"#000000",shaderOpacity:0.5,shaderDuration:300,shaderOut:300,useTitle:false,seqLoad:true,align:1,mode:"thumbs",cssID:"tn3"}
;
f.fn.tn3.Thumbnailer.prototype={
config:null,$c:null,$oc:null,$ul:null,data:null,active:-1,listSize:0,containerSize:0,containerPadding:0,noBufSize:0,containerOffset:0,mcoor:"mouseX",edge:"left",size:"width",outerSize:"outerWidth",mouseX:0,mouseY:0,intID:false,pos:0,difference:0,cnt:1,thumbCount:-1,initialized:false,clickWhenReady:-1,loaders:null,lis:null,isVertical:null,marginDif:0,nloaded:0,init:function(){
this.$c.css("position","absolute").css("cursor","progress");
this.lis=[];
this.loaders=[];
this.initialized=false;
this.$oc=f("<div />");
this.$ul=f("<ul />");
this.$oc.appendTo(this.$c);
this.$oc.css("position","absolute").css("overflow","hidden").width(this.$c.width()).height(this.$c.height());
this.$ul.appendTo(this.$oc);
this.$ul.css("position","relative").css("margin","0px").css("padding","0px").css("border-width","0px").css("width","12000px").css("list-style","none");
if(this.isVertical==null){
this.isVertical=this.$c.width()<this.$c.height();
if(this.isVertical=false){
this.mcoor="mouseY";
this.edge="top";
this.size="height";
this.outerSize="outerHeight"}
else{
this.mcoor="mouseX";
this.edge="left";
this.size="width";
this.outerSize="outerWidth"}
this.containerSize=this.$oc[this.size]();
this.noBufSize=this.containerSize-2*this.config.buffer;
this.containerOffset=this.$oc.offset()[this.edge];
this.containerPadding=parseInt(this.$c.css("padding-"+this.edge))}
this.listSize=0;
if(navigator.userAgent.indexOf("MSIE")!=-1)this.config.seqLoad=false;
this.loadNextThumb()}
,loadNextThumb:function(){
this.thumbCount++;
var e=this.$ul.append("<li></li>").find(":last");
if(this.config.mode=="thumbs"){
var a=this.data[this.thumbCount].thumb;
if(a){
this.loaders.push(new f.fn.tn3.ImageLoader(a,this,this.onLoadThumb,[e,this.thumbCount]));
!this.config.seqLoad&&this.thumbCount<this.data.length-1&&this.loadNextThumb();
return}
else this.config.mode="bullets"}
this.config.mode=="numbers"&&e.text(this.thumbCount+1);
this.onLoadThumb(null,e,this.thumbCount)}
,onLoadThumb:function(e,a,c,d){
this.lis[c]={
li:a}
;
a.addClass(this.config.cssID+"-thumb");
a.css("float",this.isVertical?"none":"left");
if(e){
var b=this.lis[c].thumb=a.append(e).find(":last");
this.lis[c].pos=a.position()[this.edge]}
this.config.useTitle&&a.attr("title",this.data[c].title);
if(this.config.mode=="thumbs"){
this.lis[c].shade=a.prepend("<div/>").find(":first");
this.lis[c].shade.css("background-color",this.config.shaderColor).css("width",b.width()).css("height",b.height()).css("position","absolute")}
this.initThumb(c);
a.css("opacity",0);
a.animate({
opacity:1}
,1E3);
this.listSize+=a[this.outerSize](true);
if(!this.initialized){
this.initialized=true;
this.initMouse(true)}
d&&this.trigger("error",{
description:d,n:c}
);
this.trigger("thumbLoad",{
n:c}
);
this.nloaded++;
if(this.nloaded<this.data.length)this.config.seqLoad&&this.loadNextThumb();
else{
if(e)this.loaders=null;
if(!this.config.seqLoad)for(e=0;
e<this.lis.length;
e++)this.lis[e].pos=this.lis[e].li.position()[this.edge];
this.thumbsLoaded()}
if(this.clickWhenReady==c){
this.clickWhenReady=-1;
this.thumbClick(c)}
}
,initThumb:function(e){
var a=this.lis[e];
if(a.li){
a.li.removeClass().addClass(this.config.cssID+"-thumb");
if(a.shade){
a.shade.stop();
a.shade.css("opacity",this.config.shaderOpacity)}
var c=this;
a.li.click(function(){
c.thumbClick(e);
c.trigger("click",{
n:e}
);
return false}
);
this.config.mode!="thumbs"&&a.li.hover(function(){
c.mouseOver(e)}
,function(){
c.mouseOver(-1)}
)}
}
,lastOver:-1,mouseOver:function(e){
if(e!=this.lastOver){
if(this.lastOver!=-1&&this.lastOver!=this.active){
a=this.lis[this.lastOver];
a.li.removeClass(this.config.cssID+"-thumb-over");
if(a.shade){
a.shade.stop();
a.shade.animate({
opacity:this.config.shaderOpacity}
,{
duration:this.config.shaderOut,easing:"easeOutCubic",queue:false}
)}
this.trigger("thumbOut",{
n:e}
)}
this.lastOver=e;
if(!(e==-1&&e==this.active)){
var a=this.lis[e];
a.li.addClass(this.config.cssID+"-thumb-over");
if(a.shade){
a.shade.stop();
a.shade.animate({
opacity:0}
,{
duration:this.config.shaderDuration,easing:"easeOutCubic",queue:false}
)}
this.trigger("thumbOver",{
n:e}
)}
}
}
,next:function(e){
if(e)this.listSize>this.containerSize&&this.move(this.$ul.position()[this.edge]-this.containerSize);
else{
e=this.active+1;
if(this.active==-1||this.active+1==this.data.length)e=0;
this.thumbClick(e)}
}
,prev:function(e){
if(e)this.listSize>this.containerSize&&this.move(this.$ul.position()[this.edge]+this.containerSize);
else{
e=this.active-1;
if(this.active==-1||this.active==0)e=this.data.length-1;
this.thumbClick(e)}
}
,move:function(e){
var a={
}
;
a[this.edge]=Math.min(0,Math.max(e,-(this.listSize-this.containerSize)));
this.$ul.stop();
this.$ul.animate(a,300)}
,thumbClick:function(e){
if(this.active==-1){
if(this.thumbCount<=e){
this.clickWhenReady=e;
return}
}
else if(e==this.active)return;
else this.initThumb(this.active);
if(e=="next")e=this.active+1<this.data.length?this.active+1:0;
else if(e=="prev")e=this.active>0?this.active-1:this.data.length-1;
var a=this.lis[e];
a.li.addClass(this.config.cssID+"-thumb-selected").unbind("click mouseenter mouseleave");
a.shade&&a.shade.animate({
opacity:0}
,this.config.shaderDuration);
this.active=e;
this.centerActive()}
,centerActive:function(e){
if(this.active!=-1){
var a=this.lis[this.active].li,c=this.$ul.position()[this.edge]+a.position()[this.edge],d=a[this.outerSize]()/2;
if(c+d>this.containerSize||c+d<0){
a=10-a.position()[this.edge]+this.containerSize/2-d;
a=Math.min(0,a);
a=Math.max(a,-this.listSize+this.containerSize);
c={
}
;
c[this.edge]=a;
e?this.$ul.css(c):this.$ul.animate(c,200)}
}
}
,thumbsLoaded:function(){
this.$c.css("cursor","auto");
this.$ul.css("width",this.listSize+"px");
this.centerList();
this.trigger("load")}
,centerList:function(e){
if(this.listSize<this.containerSize){
var a={
}
;
a[this.edge]=this.config.align?this.config.align==1?(this.containerSize-this.listSize)/2:this.containerSize-this.listSize:0;
e||this.config.mode!="thumbs"?this.$ul.css(a):this.$ul.animate(a,300)}
else{
this.centerActive(e);
if(this.$ul.position()[this.edge]>0)this.$ul.css(this.edge,0);
else this.$ul.position()[this.edge]+this.listSize<this.containerSize&&this.$ul.css(this.edge,-(this.listSize-this.containerSize))}
}
,initMouse:function(e){
if(this.config.mode=="thumbs"){
e=e?"bind":"unbind";
this.$oc[e]("mouseenter",f.proxy(this.mouseenter,this));
this.$oc[e]("mouseleave",f.proxy(this.mouseleave,this))}
}
,mouseenter:function(){
this.trigger("over");
clearInterval(this.intID);
var e=this;
this.$ul.stop();
this.$c.mousemove(this.mcoor=="mouseX"?function(a){
e.mouseX=a.pageX-e.containerOffset}
:function(a){
e.mouseY=a.pageY-e.containerOffset}
);
this.marginDif=parseInt(this.lis[0].li.css("margin-"+this.edge));
if(isNaN(this.marginDif))this.marginDif=0;
e.intID=this.listSize>this.containerSize&&this.config.overMove?setInterval(function(){
e.slide.call(e)}
,10):setInterval(function(){
e.mouseTrack.call(e)}
,10)}
,mouseleave:function(){
this.trigger("out");
this.$c.unbind("mousemove");
clearInterval(this.intID);
var e=this;
this.intID=setInterval(function(){
e.slideOut.call(e)}
,10);
this.mouseOver(-1)}
,slide:function(){
this.cnt=1;
var e=this[this.mcoor];
if(e<=this.config.buffer)this.pos=0;
else if(e>=this.containerSize-this.config.buffer)this.pos=this.containerSize-this.listSize-1;
else{
var a=this.containerSize*(e-this.config.buffer);
a/=this.noBufSize;
this.pos=a*(1-this.listSize/this.containerSize)}
for(a=this.lis.length-1;
a>-1;
a--){
var c=e-this.prevdx;
if(c>=this.lis[a].pos&&c<this.lis[a].pos+this.lis[a].li.width()){
this.mouseOver(a);
break}
}
e=this.prevdx-this.marginDif;
this.difference=e-this.pos;
e=Math.round(e-this.difference/this.config.speed);
if(this.prevdx!=e){
this.$ul.css(this.edge,e);
this.prevdx=e}
}
,prevdx:0,mouseTrack:function(){
for(var e=this[this.mcoor],a=this.lis.length-1;
a>-1;
a--){
var c=e-this.$ul.position()[this.edge];
if(c>=this.lis[a].pos&&c<this.lis[a].pos+this.lis[a].li.width()){
this.mouseOver(a);
break}
}
}
,slideOut:function(){
if(this.config.slowdown!=0&&this.difference!=0){
var e=this.$ul.position()[this.edge];
this.difference=e-this.pos;
this.$ul.css(this.edge,e-this.difference/(this.config.speed*this.cnt));
this.cnt*=1+4/this.config.slowdown;
if(this.cnt>=40){
this.difference=0;
this.cnt=1}
}
else{
clearInterval(this.intID);
this.intID=null}
}
,trigger:function(e,a){
var c=f.Event("tn_"+e),d;
for(d in a)c[d]=a[d];
c.source=this;
this.$c.trigger(c);
this.config[e]&&this.config[e].call(this,c)}
,destroy:function(){
clearInterval(this.intID);
this.$c.empty()}
,rebuild:function(e){
clearInterval(this.intID);
this.$c.empty();
this.data=e;
this.active=this.thumbCount=-1;
this.nloaded=0;
this.initMouse(false);
this.loaders!==null&&f.each(this.loaders,function(a,c){
c.cancel()}
);
this.init()}
,setSize:function(e,a){
this.isVertical?this.$c.height(a):this.$c.width(e);
this.$oc.width(this.$c.width()).height(this.$c.height());
this.containerSize=this.$oc[this.size]();
this.noBufSize=this.containerSize-2*this.config.buffer;
this.containerOffset=this.$oc.offset()[this.edge];
this.initMouse(true);
this.loaders===null&&this.centerList(true)}
}
}
)(jQuery);
(function(f){
f.fn.tn3.ImageLoader=function(e,a,c,d){
this.$img=f(new Image);
d.unshift(this.$img);
a={
url:e,context:a,callback:c,args:d}
;
this.$img.bind("load",a,this.load);
this.$img.bind("error",a,this.error);
this.$img.attr("src",e)}
;
f.fn.tn3.ImageLoader.prototype={
$img:null,load:function(e){
e.data.callback.apply(e.data.context,e.data.args);
e.data.args[0].unbind("load").unbind("error")}
,error:function(e){
e.data.args.push("image loading error:"+e.data.url);
e.data.callback.apply(e.data.context,e.data.args);
e.data.args[0].unbind("load").unbind("error")}
,cancel:function(){
this.$img.unbind("load")}
}
}
)(jQuery);
(function(f){
f.fn.tn3.Timer=function(e,a,c){
this.$target=e;
this.duration=a;
this.tickint=c}
;
f.fn.tn3.Timer.prototype={
$target:null,duration:null,id:null,runs:false,counter:null,countDuration:null,tickid:null,ticks:null,tickint:500,start:function(){
if(!this.runs){
this.runs=true;
this.startCount(this.duration);
this.trigger("timer_start")}
}
,startCount:function(e){
this.clean();
this.countDuration=e;
this.counter=+new Date;
var a=this;
this.id=setTimeout(function(){
a.clean.call(a);
a.runs=false;
a.trigger.call(a,"timer_end")}
,e);
var c=this.duration/this.tickint;
this.ticks=Math.round(e/c);
this.tickid=setInterval(function(){
a.ticks=Math.ceil((e-new Date+a.counter)/c);
a.ticks>0&&a.trigger.call(a,"timer_tick",{
tick:a.ticks,totalTicks:a.tickint}
)}
,c);
this.trigger("timer_tick",{
tick:this.ticks,totalTicks:this.tickint}
)}
,stop:function(){
this.clean();
this.runs=false;
this.trigger("timer_stop")}
,clean:function(){
clearTimeout(this.id);
this.id=null;
clearInterval(this.tickid);
this.elapsed=this.tickid=null}
,elapsed:null,pause:function(e){
if(this.runs)if(e){
this.clean();
e=this.duration/this.tickint;
this.elapsed=Math.floor((+new Date-this.counter)/e)*e}
else if(this.elapsed!=null){
this.startCount(this.countDuration-this.elapsed);
this.elapsed=null}
}
,trigger:function(e,a){
var c=f.Event(e),d;
for(d in a)c[d]=a[d];
this.$target.trigger(c)}
}
}
)(jQuery);
(function(f){
var e=f.fn.tn3.Transitions=function(c,d,b,g,i){
this.ts=c;
this.def=f.extend(true,{
}
,this[d.type+"Config"],d);
if(!c)this.ts=[this.def];
for(var n in this.ts)this.ts[n]=f.extend(true,{
}
,this[this.ts[n].type+"Config"],this.ts[n]);
this.random=b;
this.end=f.proxy(g,i)}
,a=e.prototype={
ts:null,def:{
type:"slide"}
,random:false,gs:[],end:null,ct:null,counter:-1,setTransition:function(){
if(this.ts.length==1)this.ct=this.ts[0];
else{
this.counter++;
if(this.counter==this.ts.length)this.counter=0;
this.random&&this.counter==0&&f.fn.tn3utils.shuffle(this.ts);
this.ct=this.ts[this.counter]}
}
,start:function(c,d,b){
this.setTransition();
if(this[this.ct.type+"Condition"]!==undefined&&!this[this.ct.type+"Condition"](c,d,this.ct))this.ct=this.def;
this[this.ct.type](c,d,this.ct,b)}
,stop:function(c,d){
this[this.ct.type+"Stop"](c,d,this.ct)}
,makeGrid:function(c,d,b){
var g=c.width(),i=Math.round(g/d);
g=g-i*d;
var n=c.height(),k=Math.round(n/b);
n=n-k*b;
var h,j,l,m,p,q=0,r=0,t="url("+c.find("img").attr("src")+") no-repeat scroll -";
for(h=0;
h<d;
h++){
this.gs[h]=[];
m=g>h?i+1:i;
for(j=0;
j<b;
j++){
l=c.append("<div></div>").find(":last");
p=n>j?k+1:k;
l.width(m).height(p).css("background",t+q+"px -"+r+"px").css("left",q).css("top",r).css("position","absolute");
this.gs[h].push(l);
r+=p}
q+=m;
r=0}
c.find("img").remove()}
,stopGrid:function(){
for(var c=0;
c<this.gs.length;
c++)for(var d=0;
d<this.gs[c].length;
d++){
this.gs[c][d].clearQueue();
this.gs[c][d].remove()}
this.gs=[]}
,flatSort:function(c){
for(var d=[],b=0;
b<this.gs.length;
b++)for(var g=0;
g<this.gs[b].length;
g++)d.push(this.gs[b][g]);
c&&d.reverse();
return d}
,randomSort:function(){
var c=this.flatSort();
f.fn.tn3utils.shuffle(c);
return c}
,diagonalSort:function(c,d){
for(var b=[],g=c>0?this.gs.length-1:0,i=d>0?0:this.gs[0].length-1;
this.gs[g];
){
b.push(this.addDiagonal([],g,i,c,d));
g-=c}
g+=c;
for(i+=d;
this.gs[g][i];
){
b.push(this.addDiagonal([],g,i,c,d));
i+=d}
return b}
,addDiagonal:function(c,d,b,g,i){
c.push(this.gs[d][b]);
return this.gs[d+g]&&this.gs[d+g][b+i]?this.addDiagonal(c,d+g,b+i,g,i):c}
,circleSort:function(c){
var d=[],b=this.gs.length,g=this.gs[0].length,i=[Math.floor(b/2),Math.floor(g/2)];
b=b*g;
g=[[1,0],[0,1],[-1,0],[0,-1]];
var n=0,k=0,h;
for(d.push(this.gs[i[0]][i[1]]);
d.length<b;
){
for(h=0;
h<=n;
h++)this.addGridPiece(d,i,g[k]);
if(k==g.length-1)k=0;
else k++;
n+=0.5}
c&&d.reverse();
return d}
,addGridPiece:function(c,d,b){
d[0]+=b[0];
d[1]+=b[1];
this.gs[d[0]]&&this.gs[d[0]][d[1]]&&c.push(this.gs[d[0]][d[1]])}
,getSlidePositions:function(c,d){
var b={
dir:d}
;
switch(d){
case "left":b.pos=c.outerWidth(true);
break;
case "right":b.pos=-c.outerWidth(true);
b.dir="left";
break;
case "top":b.pos=-c.outerHeight(true);
break;
case "bottom":b.pos=c.outerHeight(true);
b.dir="top"}
return b}
,animateGrid:function(c,d,b,g,i,n,k){
var h={
duration:g,easing:b,complete:function(){
f(this).remove()}
}
;
for(b=0;
b<c.length;
b++){
g=f.easing[i](0,b,0,n,c.length);
if(b==c.length-1){
var j=this;
h.complete=function(){
f(this).remove();
k.call(j)}
}
if(f.isArray(c[b]))for(var l in c[b])c[b][l].delay(g).animate(d[b],h);
else c[b].delay(g).animate(d[b],h)}
}
,getValueArray:function(c,d,b){
var g=[],i=f.isArray(d),n=f.isArray(b),k;
for(k=0;
k<c;
k++){
o={
}
;
o[i?d[k%d.length]:d]=n?b[k%b.length]:b;
g.push(o)}
return g}
}
;
e.defined=[];
e.define=function(c){
for(var d in c)switch(d){
case "type":e.defined.push(c.type);
break;
case "config":a[c.type+"Config"]=c.config;
break;
case "f":a[c.type]=c.f;
break;
case "stop":a[c.type+"Stop"]=c.stop;
break;
case "condition":a[c.type+"Condition"]=c.condition;
break;
default:a[d]=c[d]}
}
;
e.define({
type:"none",config:{
}
,f:function(){
this.end()}
,stop:function(){
this.end()}
}
);
e.define({
type:"fade",config:{
duration:300,easing:"easeInQuad"}
,f:function(c,d,b){
var g=this;
c.animate({
opacity:0}
,b.duration,b.easing,function(){
g.end()}
)}
,stop:function(c){
c.stop();
this.end()}
}
);
e.define({
type:"slide",config:{
duration:300,direction:"auto",easing:"easeInOutCirc"}
,f:function(c,d,b,g){
g=this.getSlidePositions(d,b.direction=="auto"?g:b.direction);
var i={
}
,n={
}
;
d.css(g.dir,g.pos);
i[g.dir]=0;
d.animate(i,b.duration,b.easing,this.end);
n[g.dir]=-g.pos;
c.animate(n,b.duration,b.easing)}
,stop:function(c,d){
d.stop();
c.stop();
c.css("left",0).css("top",0);
d.css("left",0).css("top",0);
this.end()}
}
);
e.define({
type:"blinds",config:{
duration:240,easing:"easeInQuad",direction:"vertical",parts:12,partDuration:100,partEasing:"easeInQuad",method:"fade",partDirection:"auto",cross:true}
,f:function(c,d,b,g){
b.direction=="horizontal"?this.makeGrid(c,1,b.parts):this.makeGrid(c,b.parts,1);
g=b.partDirection=="auto"?g:b.partDirection;
c=this.flatSort(g=="left"||g=="top");
var i;
switch(b.method){
case "fade":i=this.getValueArray(c.length,"opacity",0);
break;
case "scale":i=this.getValueArray(c.length,g=="left"?"width":"height","1px");
break;
case "slide":d=this.getSlidePositions(d,g);
i=this.getValueArray(c.length,d.dir,b.cross?[d.pos,-d.pos]:d.pos)}
this.animateGrid(c,i,b.partEasing,b.partDuration,b.easing,b.duration,this.blindsStop)}
,stop:function(){
this.stopGrid();
this.end()}
,condition:function(c,d){
return!c.data("scaled")||!d.data("scaled")}
}
);
e.define({
type:"grid",config:{
duration:260,easing:"easeInQuad",gridX:7,gridY:5,sort:"diagonal",sortReverse:false,diagonalStart:"bl",method:"fade",partDuration:300,partEasing:"easeOutSine",partDirection:"left"}
,f:function(c,d,b,g){
this.makeGrid(c,b.gridX,b.gridY);
c=b.partDirection=="auto"?g:b.partDirection;
var i,n;
if(b.sort=="diagonal")switch(b.diagonalStart){
case "tr":i=this.diagonalSort(1,1);
break;
case "tl":i=this.diagonalSort(-1,1);
break;
case "br":i=this.diagonalSort(1,-1);
break;
case "bl":i=this.diagonalSort(-1,-1)}
else i=this[b.sort+"Sort"](b.sortReverse);
switch(b.method){
case "fade":n=this.getValueArray(i.length,"opacity",0);
break;
case "scale":n=this.getValueArray(i.length,c=="left"?"width":"height","1px")}
this.animateGrid(i,n,b.partEasing,b.partDuration,b.easing,b.duration,this.gridStop)}
,stop:function(){
this.stopGrid();
this.end()}
,condition:function(c,d){
return!c.data("scaled")||!d.data("scaled")}
}
)}
)(jQuery);
(function(f){
function e(h){
var j=h&&h.message!==undefined?h.message:undefined;
h=f.extend({
}
,f.tn3block.defaults,h||{
}
);
j=j===undefined?h.message:j;
k&&a({
}
);
var l=h.baseZ,m=f.browser.msie||h.forceIframe?f('<iframe class="blockUI" style="z-index:'+l++ +';
display:none;
border:none;
margin:0;
padding:0;
position:absolute;
width:100%;
height:100%;
top:0;
left:0" src="'+h.iframeSrc+'"></iframe>'):f('<div class="blockUI" style="display:none"></div>'),p=f('<div class="blockUI '+h.cssID+'-overlay" style="z-index:'+l++ +';
display:none;
border:none;
margin:0;
padding:0;
width:100%;
height:100%;
top:0;
left:0"></div>');
l=f('<div class="blockUI '+h.blockMsgClass+' blockPage" style="z-index:'+l+';
display:none;
position:fixed"></div>');
l.css("left","0px").css("top","0px");
if(!h.applyPlatformOpacityRules||!(f.browser.mozilla&&/Linux/.test(navigator.platform)))p.css(h.overlayCSS);
p.css("position","fixed");
if(f.browser.msie||h.forceIframe)m.css("opacity",0);
var q=[m,p,l],r=f("body");
f.each(q,function(){
this.appendTo(r)}
);
q=i&&(!f.boxModel||f("object,embed",null).length>0);
if(n||q){
h.allowBodyStretch&&f.boxModel&&f("html,body").css("height","100%");
f.each([m,p,l],function(t,u){
var s=u[0].style;
s.position="absolute";
if(t<2){
s.setExpression("height","Math.max(document.body.scrollHeight,document.body.offsetHeight)- (jQuery.boxModel?0:"+h.quirksmodeOffsetHack+') + "px"');
s.setExpression("width",'jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"')}
else if(h.centerY){
s.setExpression("top",'(document.documentElement.clientHeight || document.body.clientHeight) / 2- (this.offsetHeight / 2)+ (blah = document.documentElement.scrollTop? document.documentElement.scrollTop:document.body.scrollTop)+ "px"');
s.marginTop=0}
else h.centerY||s.setExpression("top",'(document.documentElement.scrollTop ? document.documentElement.scrollTop:document.body.scrollTop) + "px"')}
)}
if(j){
j.data("blockUI.parent",j.parent());
l.append(j);
if(j.jquery||j.nodeType)f(j).show()}
if((f.browser.msie||h.forceIframe)&&h.showOverlay)m.show();
h.showOverlay&&p.show();
j&&l.show();
h.onBlock&&h.onBlock();
d(1,h);
k=j}
function a(h){
h=f.extend({
}
,f.tn3block.defaults,h||{
}
);
d(0,h);
var j=f("body").children().filter(".blockUI").add("body > .blockUI");
c(j,h)}
function c(h,j){
h.each(function(){
this.parentNode&&this.parentNode.removeChild(this)}
);
k.data("blockUI.parent").append(k);
k=null;
typeof j.onUnblock=="function"&&j.onUnblock.call(j.con)}
function d(h,j){
if(h||k)!j.bindEvents||h&&!j.showOverlay||(h?f(document).bind("mousedown mouseup keydown keypress",j,b):f(document).unbind("mousedown mouseup keydown keypress",b))}
function b(h){
var j=h.data;
if(f(h.target).parents("div."+j.blockMsgClass).length>0)return true;
return f(h.target).parents().children().filter("div.blockUI").length==0}
var g=document.documentMode||0,i=f.browser.msie&&(f.browser.version<8&&!g||g<8),n=f.browser.msie&&/MSIE 6.0/.test(navigator.userAgent)&&!g;
f.tn3block=function(h){
e(h)}
;
f.tn3unblock=function(h){
a(h)}
;
var k=undefined;
f.tn3block.defaults={
message:"<h1>Please wait...</h1>",overlayCSS:{
}
,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank",forceIframe:false,baseZ:1E3,allowBodyStretch:true,bindEvents:true,showOverlay:true,applyPlatformOpacityRules:true,onBlock:null,onUnblock:null,quirksmodeOffsetHack:4,blockMsgClass:"blockMsg",cssID:"tn3"}
}
)(jQuery);
(function(f){
(f.fn.tn3.External=function(e,a){
if(e){
this.context=a;
this.reqs=e.length;
for(var c=0;
c<e.length;
c++)new f.fn.tn3.External[e[c].origin](e[c],this)}
}
).prototype={
context:null,reqs:0,getImages:function(e,a){
e.origin.getImages(e,a)}
,setAlbumData:function(e,a){
this.reqs--;
this.context.setAlbumData.call(this.context,e,a)}
,setImageData:function(e,a,c){
this.context.setImageData.call(this.context,e,a,c)}
}
}
)(jQuery);