File "skin.js"
Full path: E:/sites/Single15/tinmung2007/webroot/res/skin.js
File size: 13.04 KiB (13354 bytes)
MIME-type:
Charset: utf-8
/* Constants
*/
var UNDEF='undefined';
var C = {
THMB:'#thumbs',
THMBC:'#cont',
THMC:'#cont>ul.thmb',
SCRL:'#scroll-left',
SCRR:'#scroll-right',
CLOS:'#close',
IMGS:'#images',
HEAD:'#header',
FOOT:'#footer',
UPBTN:'#up',
PRVBTN:'#prev',
NXTBTN:'#next'
};
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,'');
};
String.prototype.cleanupHTML = function() {
return this.replace(/<br>/g,'\n').replace(/\&/g,'&').replace(/\</g,'<').replace(/\>/g,'>').replace(/\&(m|n)dash;/g,'-').replace(/\'/g,'\'').replace(/\"/g,'"');
};
String.prototype.appendSep = function(s,sep) {
if(typeof sep=='undefined') sep=' · ';
return (this.length?(this+sep):'')+s;
};
/* Easing by George Smith
*/
jQuery.extend(jQuery.easing, {
easeOutBack: function (x, t, b, c, d, s) {
if(s==undefined) s=1.70158;
return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;
},
easeOutSine: function (x, t, b, c, d) {
return c * Math.sin(t/d * (Math.PI/2)) + b;
}
});
/* Cookie handling from http://www.quirksmode.org/js/cookies.html
*/
var Cookie = {
put: function(name,value,hours){
if(typeof hours==UNDEF) hours=1;
var expires='';
if(hours){
var date=new Date();
date.setTime(date.getTime()+(hours*60*60*1000));
expires='; expires='+date.toGMTString();
}
document.cookie=name+"="+value+expires+"; path=/";
},
get: function(name){
var nm=name+'=';
var ca=document.cookie.split(';');
for(var i in ca) {
var c=ca[i].replace(/^\s*/,'');
if(c.indexOf(nm)==0)
return c.substring(nm.length);
}
return null;
},
getBoolean: function(name){
var c=Cookie.get(name);
return c!=null&&c!='false';
},
clear: function(name){
Cookie.put(name,'',-1);
}
};
/* Skin code
*/
var Ctrl = {
top:null,
bottom:null,
topOn:captionsOn,
bottomOn:thumbsOn,
init:function(){
Ctrl.top=$('#top');
Ctrl.bottom=$('#bottom');
Ctrl.center();
$('#toptab').click(Ctrl.toggleTop);
$('#bottomtab').click(Ctrl.toggleBottom);
var c=Cookie.get('_cs_top');
if(c) this.topOn=(c!='false');
if(!this.topOn)
Ctrl.top.css({top:-Ctrl.top.height()});
c=Cookie.get('_cs_bottom');
if(c) this.bottomOn=(c!='false');
if(!this.bottomOn)
Ctrl.bottom.css({bottom:-Ctrl.bottom.height()+25});
},
center:function(){
var wh=$('#images').height();
var bh=$('#prev').height();
$('#prev,#next').css({top:Math.round((wh-bh)/2)});
},
toggleTop:function(){
var ch=Ctrl.top.height();
Ctrl.top.stop(true,false);
if(Ctrl.topOn)
Ctrl.top.animate({top:-ch},500,'easeOutSine');
else
Ctrl.top.animate({top:0},500,'easeOutSine');
Ctrl.topOn=!Ctrl.topOn;
Cookie.put('_cs_top',Ctrl.topOn);
},
toggleBottom:function(){
var ch=Ctrl.bottom.height();
Ctrl.bottom.stop(true,false);
if(Ctrl.bottomOn)
Ctrl.bottom.animate({bottom:-ch+25},500,'easeOutSine');
else
Ctrl.bottom.animate({bottom:0},500,'easeOutSine');
Ctrl.bottomOn=!Ctrl.bottomOn;
Cookie.put('_cs_bottom',Ctrl.bottomOn);
},
goUp:function(){
window.location=(typeof parentIndexPage=='undefined' || !parentIndexPage.length)?'../':parentIndexPage;
}
};
var Imgs = {
div:null,
curr:-1,
width:0,
height:0,
left:0,
ul:null,
anim:0,
fit:true,
init:function(){
Imgs.ul=$('#images>ul');
if(images.length>0){
l=Imgs.getImg(0);
Imgs.curr=0;
Imgs.width=Imgs.div.width();
Imgs.height=Imgs.div.height();
Imgs.left=Imgs.ul.offset().left;
Imgs.fit=Cookie.getBoolean('_cs_fit');
Imgs.setImg(1,0);
Imgs.setImg(2,1);
Imgs.preload(2);
$('#prev').click(Imgs.prev);
$('#next').click(Imgs.next);
Imgs.setCaption();
Thumbs.setactive();
}
},
preload:function(n){
if(n<(images.length)&&n>=0){
var img=new Image();
img.src=decodeURIComponent(images[n].file);
}
},
next:function(){
if(Imgs.curr==(images.length-1)){
//Imgs.stop();
Alert.show('<h3>'+text.atLastPage+'</h3><p>'+text.atLastPageQuestion+'</p>',
new Array({t:text.startOver,h:function(){Imgs.goto(0);}},
{t:text.up,h:function(){Ctrl.goUp();}},
{t:text.stop,h:null}));
}
else
Imgs.goto(Imgs.curr+1);
},
prev:function(){
Imgs.goto((Imgs.curr==0)?(images.length-1):Imgs.curr-1);
},
getImg:function(pos){
return Imgs.ul.find('li').eq(pos);
},
setImg:function(pos,n){
if(n<0||n>=images.length) return;
var l=Imgs.getImg(pos);
l.empty().append('<img src="'+decodeURIComponent(images[n].file)+'" />');
Imgs.fitWindow(pos,n);
},
fitWindow:function(pos,n){
if(n<0||n>=images.length) return;
var iw=parseInt(images[n].width), ih=parseInt(images[n].height);
var l=Imgs.getImg(pos);
if(Imgs.fit){
if(Imgs.width/iw<=Imgs.height/ih){ih=Math.round(ih*Imgs.width/iw);iw=Imgs.width;}
else{iw=Math.round(iw*Imgs.height/ih);ih=Imgs.height;}
}
l.find('img').css({width:iw,height:ih,top:Math.round((Imgs.height-ih)/2),left:Math.round((Imgs.width-iw)/2)}).dblclick(Imgs.toggleFit);
},
toggleFit:function(){
var iw=parseInt(images[Imgs.curr].width), ih=parseInt(images[Imgs.curr].height);
var ww=Imgs.width, wh=Imgs.height;
var l=(ww-iw)/2, t=(wh-ih)/2;
if(!Imgs.fit){
if(ww/iw<=wh/ih) {ih=Math.round(ih*ww/iw);iw=ww;}
else {iw=Math.round(iw*wh/ih);ih=wh;}
l=(ww-iw)/2; t=(wh-ih)/2;
}else{
if(typeof c!=UNDEF && (iw>ww&&ih>wh)){
l=Math.round(ww/2-c.x*iw);
t=Math.round(wh/2-c.y*ih);
if(l>0) l=0; else if(l<(ww-iw)) l=ww-iw;
if(t>0) t=0; else if(t<(wh-ih)) t=wh-ih;
}else{
l=(ww-iw)/2; t=(wh-ih)/2;
}
}
Imgs.fit=!Imgs.fit;
Cookie.put('_cs_fit',Imgs.fit);
Imgs.getImg(1,Imgs.curr).find('img').animate({width:iw,height:ih,left:l,top:t},500);
Imgs.fitWindow(0,Imgs.curr-1);
Imgs.fitWindow(2,Imgs.curr+1);
},
stopRight:function(){
Imgs.getImg(3).remove();
Imgs.anim=0;
},
moveRight:function(n){
Imgs.ul.prepend('<li> </li>').css({left:Imgs.left-Imgs.width});;
if(n<(Imgs.curr-1)){Imgs.setImg(1,n);Imgs.setImg(2,n+1);}
Imgs.setImg(0,n-1);
Imgs.ul.animate({left:Imgs.left},1000,'easeOutSine',Imgs.stopRight);
Imgs.preload(n-2);
},
stopLeft:function(){
Imgs.getImg(0).remove();
Imgs.ul.css({left:Imgs.left});
Imgs.anim=0;
},
moveLeft:function(n){
Imgs.ul.append('<li> </li>');
if(n>(Imgs.curr+1)){Imgs.setImg(2,n);Imgs.setImg(1,n-1);}
Imgs.setImg(3,n+1);//alert("Current="+Imgs.ul.css('left')+"\nImgs.left="+Imgs.left+"\nImgs.width="+Imgs.width);
Imgs.ul.css({left:Imgs.left});
Imgs.ul.animate({left:(Imgs.left-Imgs.width)},1000,'easeOutSine',Imgs.stopLeft);
Imgs.preload(n+2);
},
stopMove:function(){
if(Imgs.anim==0) return;
Imgs.ul.stop(true,false);
if(Imgs.anim<0) Imgs.stopRight();
else Imgs.stopLeft();
},
goto:function(n){
if(n==Imgs.curr) return;
$('#caption>div').stop(true,false).fadeOut(250);
Imgs.stopMove();
Imgs.anim=n-Imgs.curr;
if(Imgs.anim<0) Imgs.moveRight(n);
else Imgs.moveLeft(n);
Imgs.curr=n;
Imgs.setCaption();
Thumbs.setactive();
},
setCaption:function(){
var txt=images[Imgs.curr].comment.cleanupHTML();
var title=images[Imgs.curr].title.cleanupHTML();
if(title.length)
txt='<b>'+title+'</b> · '+txt;
$('#caption>div').hide().empty();
if(txt.length)
$('#caption>div').hide().empty().append(txt).fadeIn(500);
},
center:function(){
Imgs.width=Imgs.div.width();
Imgs.height=Imgs.div.height();
Imgs.left=-Imgs.width;
Imgs.ul.css({left:Imgs.left,height:Imgs.height,width:4*Imgs.width}).find('li').css({width:Imgs.width,height:Imgs.height});
Imgs.fitWindow(1,Imgs.curr);
Imgs.fitWindow(0,Imgs.curr-1);
Imgs.fitWindow(2,Imgs.curr+1);
}
};
var Thumbs = {
div:null,
thc:null,
thm:null,
cnt:0,
tw:0,
th:0,
lw:0,
init:function(){
this.load();
this.lw=this.thm.find('li:first').outerWidth();
this.cnt=this.thm.find('li').length;
this.tw=this.cnt*this.lw;
this.thm.find('li.image>a').each(function(i){
Hints.add($(this),'<span>'+(i+1)+'</span> '+(images[i].title.length?('<b>'+images[i].title.cleanupHTML()+'</b> '):'')+(images[i].comment.length?'<small>'+images[i].comment.cleanupHTML()+'</small>':''));
$(this).click(function(){Imgs.goto(i);return false});
});
this.thm.find('li.folder,li.folderi').each(function(i){
Hints.add($(this),'<b>'+folders[i].name+'</b>'+'<small>'+folders[i].desc+'<br />images:'+folders[i].imgs+'<br/>last mod:'+folders[i].lastmod+'</small>');
});
$(C.SCRR).click(function() {
Thumbs.scrollright();
return false;
});
$(C.SCRL).click(function() {
Thumbs.scrollleft();
return false;
});
},
scrollleft:function(){
var sw=Thumbs.thc.width();
if(sw<Thumbs.tw)
Thumbs.thm.stop(true,false).animate({left:Math.min(parseInt(Thumbs.thm.css('left'))+sw,0)+'px'},2000,'easeOutBack');
},
scrollright:function(){
var sw=Thumbs.thc.width();
if(sw<Thumbs.tw)
Thumbs.thm.stop(true,false).animate({left:Math.max(parseInt(Thumbs.thm.css('left'))-sw,sw-Thumbs.tw)+'px'},2000,'easeOutBack');
},
setactive:function(){
var n=images[Imgs.curr].rel;
var sw=Thumbs.thc.width();
var lw=n*Thumbs.lw;
var lo=-parseInt(Thumbs.thm.css('left'));
var rt=((n<(Thumbs.cnt-1))?2:1)*Thumbs.lw;
if((lw-lo)>(sw-rt))
Thumbs.thm.stop(true,false).animate({left:Math.max(-lw+sw-rt,sw-Thumbs.tw)+'px'},1000,'easeOutSine');
else if((lw-lo)<Thumbs.lw)
Thumbs.thm.stop(true,false).animate({left:Math.min(-lw+Thumbs.lw,0)+'px'},1000,'easeOutSine');
this.thm.find('li.active').each(function(){$(this).removeClass('active');});
$(this.thm.find('li').get(n)).addClass('active');
},
load:function(){
var st=Thumbs.thc.find('li.image a').each(function(i){
$(this).empty().append('<img src="'+decodeURIComponent(images[i].thumb)+'" />').css({backgroundImage:'none'});
$(this).find('img').css({display:'inline'});
});
}
};
var Hints = {
init:function(){
$('a.showhint,div.showhint,ul.showhint>li').each(function() {Hints.add($(this));});
},
add:function(to,txt){
if(typeof txt==UNDEF) {
txt=to.attr('title');
to.removeAttr('title');
}
if(txt.length){
to.data('hint',txt.cleanupHTML()).hover(function(){
$('body').append('<p id="hint">'+to.data('hint')+'</p>');
var h=$('#hint');
var o=to.offset();
var t=o.top-h.outerHeight()-10;
var l=Math.round(o.left+(to.outerWidth()-h.outerWidth())/2);
if(t<0){
t=o.top+to.outerHeight()+10;
if((t+to.outerHeight())>$(window).height())
t=$(window).height()-h.outerHeight();
}
if(l<0){
l=o.left+to.outerWidth()+10;
t=o.top+(to.outerHeight()-h.outerHeight())/2;
}
else if((l+h.outerWidth())>$(window).width()) {
l=o.left-10-h.outerWidth();
t=o.top+(to.outerHeight()-h.outerHeight())/2;
}
h.css({left:l,top:t}).fadeIn();
},function(){$('#hint').remove()});
}
}
};
var Alert = {
show:function(text,buttons){
$('#modal').remove();
$('body').append('<div id="modal"><div class="panel">'+text+'<div class="buttons"></div></div></div>');
var b=$('#modal .buttons');
for(var i in buttons){
b.append('<a href="javascript:void(0)">'+buttons[i].t+'</a>')
b.find('a:last-child').click(buttons[i].h);
}
$('#modal').fadeIn(250);
b.find('a').click(function(){$('#modal').fadeOut(250,function(){$(this).remove();});});
}
};
var Help = {
init:function(){
$('.showhelp').click(Help.show);
$('#help .close a').click(Help.hide);
},
show:function(){
$('#help').fadeIn(500);
$('#help .window').css({marginTop:(Math.round((Imgs.height-$('#help .window').height()-46)/2))});
},
hide:function(){
if($('#help').is(':visible'))
$('#help').fadeOut(500);
}
};
$(document).ready(function(){
Hints.init();
Help.init();
Ctrl.init();
Thumbs.div=$(C.THMB);
Thumbs.thm=$(C.THMC);
Thumbs.thc=$(C.THMBC);
Imgs.div=$(C.IMGS);
if(images.length){
Imgs.init();
Thumbs.init();
}
$(document).keydown(function(e){
if(typeof _jaWidgetFocus!=UNDEF&&_jaWidgetFocus || $('#modal').length) return true;
var k=e?e.keyCode:window.event.keyCode; //alert(k);
switch(k) {
case 38: window.location=(typeof parentIndexPage=='undefined' || !parentIndexPage.length)?'../':parentIndexPage; break;
case 39: Imgs.next(); break;
case 37: Imgs.prev(); break;
case 109: Ctrl.toggleTop(); Ctrl.toggleBottom(); break;
case 107: Imgs.toggleFit(); break;
case 112: Help.show(); break;
case 27: Help.hide(); break;
default: return true;
}
return false;
});
$(window).resize(function(){ Ctrl.center(); Imgs.center();});
if(/MSIE ((5\.5)|6)/.test(navigator.userAgent) && /Win((32)|(64))/.test(navigator.platform)){
$('img[src$=.png]').each(function(){
if(!this.complete) this.onload=function(){fixPng(this)};
else fixPng(this);
});
$('#toptab a,#bottomtab a,ul.thmb li.folder,ul.thmb li.folderi,#scroll-left,#scroll-right,#thumbs #close,#up a,#prev a,#next a').each(function(){fixPngBg(this);});
if(level==0) setTimeout(function(){Alert.show('<h3>'+text.upgradeBrowser+'</h3><p>'+text.upgradeBrowserExplain+'</p>',new Array(text.contin))},2000);
}
});