/* Constants
*/
var UNDEF='undefined';
var C = {
	THMB:'#thumbs',
	THMBC:'#thumbcnt',
	THMC:'#thumbcnt>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>/gi,'\n').replace(/\&amp;/gi,'&').replace(/\&lt;/gi,'<').replace(/\&gt;/gi,'>').replace(/\&(m|n)dash;/gi,'-').replace(/\&apos;/gi,'\'').replace(/\&quot;/gi,'"');
};
String.prototype.appendSep = function(s,sep) {
	if(typeof sep=='undefined') sep=' &middot; ';
	return (this.length?(this+sep):'')+s;
};
var cssTableSupport=!$.browser.msie || $.browser.version >= 8;

/* Easing by George Smith
*/

jQuery.extend(jQuery.easing, {
	easeOutBack: function (x, t, b, c, d, s) {
		if(s==undefined) s=0;
		return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;
	}
});

var Imgs = {
	div:null,
	curr:-1,
	width:0,
	height:0,
	left:0,
	ul:null,
	anim:0,
	to:null,
	init:function(){
		Imgs.ul=$('#images>.cont>ul');
		if(images.length>0){
			l=Imgs.getImg(0);
			Imgs.curr=0;
			Imgs.width=l.outerWidth()+parseInt(l.css('margin-right'));
			Imgs.height=l.height();
			Imgs.left=parseInt(Imgs.ul.css('left'));
			Imgs.setImg(1,0);
			Imgs.setImg(2,1);
			Imgs.addCaption(1,0);
			Imgs.preload(2);
			$('#images #left a').click(Imgs.prev); $('#images #left img').bind('dragstart',function(){return false;});
			$('#images #right a').click(Imgs.next); $('#images #right img').bind('dragstart',function(){return false;});
			$('.playbtn a').click(Imgs.startStop);
			if(slideshow.auto) { $('.playbtn a').addClass('stop'); Imgs.to=setTimeout(Imgs.loop,slideshow.delay); }
			Thumbs.setactive();
		}
	},
	preload:function(n){
		if(n<(images.length)&&n>=0){
			var img=new Image();
			img.src=images[n].file;
		}	
	},
	addCaption:function(pos,n){
		if(Imgs.curr<0) return;
		var t=images[n].caption.trim();
		var m=(typeof images[n].meta===UNDEF)?'':images[n].meta.trim().cleanupHTML();
		if(t.length||m.length){
			Imgs.getImg(pos).append('<div class="caption">'+t+((m.length)?('<p class="meta">'+m+'</p>'):'')+'</div>');
			Imgs.ul.find('.caption').fadeIn(1000);
		}
	},
	startStop:function(){
		var d=$('.playbtn a');
		if(Imgs.to) clearTimeout(Imgs.to);
		if(d.hasClass('stop')) d.removeClass('stop');
		else { d.addClass('stop'); Imgs.to=setTimeout(Imgs.loop,100); }
	},
	loop:function(){
		if((Imgs.curr+1)<images.length||slideshow.loop){
			Imgs.next();
			Imgs.reloop();
		}
		else
			$('.playbtn a').removeClass('stop');
	},
	reloop:function(){
		if(Imgs.to){
			clearTimeout(Imgs.to);
			Imgs.to=setTimeout(Imgs.loop,slideshow.delay);
		}
	},
	next:function(){
		Imgs.goto((Imgs.curr+1)%images.length);
	},
	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="'+images[n].file+'" alt="'+images[n].file+'" />');
		l.find('img').css({marginTop:Math.round((Imgs.height-images[n].height)*4/5+0.5)});
		if(images[n].link.length)
			l.find('img').addClass('original').attr({title:text.original}).click(function(){
				window.open(images[n].link,'Original','width=840,height=600,scrollbars=yes,resizable=yes,menubar=no,toolbar=no,directories=no,status=no,copyhistory=no');});
	},
	stopRight:function(){
		Imgs.getImg(3).find('.caption').stop(true,false);
		Imgs.getImg(3).remove();
		Imgs.anim=0;
	},
	moveRight:function(n){
		Imgs.ul.prepend('<li>&nbsp;</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.addCaption(1,n);
		Imgs.ul.animate({left:Imgs.left+'px'},1000,'easeOutBack',Imgs.stopRight);
		Imgs.preload(n-2);
	},		
	stopLeft:function(){
		Imgs.getImg(0).find('.caption').stop(true,false);
		Imgs.getImg(0).remove();
		Imgs.ul.css({left:Imgs.left});
		Imgs.anim=0;
	},
	moveLeft:function(n){
		Imgs.ul.append('<li>&nbsp;</li>');
		if(n>(Imgs.curr+1)){Imgs.setImg(2,n);Imgs.setImg(1,n-1);}
		Imgs.setImg(3,n+1);
		Imgs.addCaption(2,n);
		//alert(Imgs.ul.css('left')+'\n'+(Imgs.left-Imgs.width));
		Imgs.ul.animate({left:(Imgs.left-Imgs.width)+'px'},1000,'easeOutBack',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;
		Imgs.ul.find('.caption').stop(true,false).fadeOut(250,function(){$(this).remove();});
		Imgs.stopMove();
		Imgs.anim=n-Imgs.curr;
		if(Imgs.anim<0) Imgs.moveRight(n);
		else Imgs.moveLeft(n);
		Imgs.curr=n;
		Thumbs.setactive();
	}	
};

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),images[i].thmcapt);
			$(this).click(function(){Imgs.goto(i);return false});
		});
		this.thm.find('li.folder,li.folderi').each(function(i){
			var days=Math.floor((new Date()).getTime()/86400000);
			Hints.add($(this),'<b>'+folders[i].name+'</b>'+'<small>'+folders[i].desc+'<br />images: '+folders[i].imgs+((folders[i].lastmod!='0')?('<br/>modified: '+(days-folders[i].lastmod)+' days ago</small>'):''));
		});
		$(C.SCRR).click(function() {
			Thumbs.scrollright();
			return false;
		});
		$(C.SCRL).click(function() {
			Thumbs.scrollleft();
			return false;
		});
		Thumbs.setscroll();
	},
	scrollleft:function(){
		var sw=Thumbs.thc.width()-Thumbs.lw;
		if(sw<Thumbs.tw)
			Thumbs.thm.stop(true,false).animate({left:Math.min(Thumbs.thm.position().left+sw,0)+'px'},2000,'easeOutBack',Thumbs.setscroll);
	},
	scrollright:function(){
		var sw=Thumbs.thc.width()-Thumbs.lw;
		if(sw<Thumbs.tw)
			Thumbs.thm.stop(true,false).animate({left:Math.max(Thumbs.thm.position().left-sw,sw-Thumbs.tw)+'px'},2000,'easeOutBack',Thumbs.setscroll);
	},
	setscroll:function(){
		$(C.SCRL).toggleClass('inactive',Thumbs.thm.position().left>=0);
		$(C.SCRR).toggleClass('inactive',(Thumbs.thm.width()+Thumbs.thm.position().left)<=Thumbs.thc.width());
	},
	setactive:function(){
		var n=images[Imgs.curr].rel;
		var sw=Thumbs.thc.width();
		var lw=n*Thumbs.lw;
		var lo=-Thumbs.thm.position().left;
		var rt=2*Thumbs.lw; //((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-2*Thumbs.tw)},1000,'easeOutBack',Thumbs.setscroll);
		else if((lw-lo)<Thumbs.lw) 
			Thumbs.thm.stop(true,false).animate({left:Math.min(-lw+Thumbs.lw,0)},1000,'easeOutBack',Thumbs.setscroll);
		this.thm.find('li').each(function(i){$(this).toggleClass('active',i===n);});
	},
	load:function(){
		var days=Math.floor((new Date()).getTime()/86400000);
		var i0=(cssTableSupport)?'':'<b> </b>';
		Thumbs.thc.find('li.image>a').each(function(i){
			$(this).css({backgroundImage:'none'}).html(i0+'<img src="'+images[i].thumb.cleanupHTML()+'" />');
			if(!cssTableSupport) $(this).css({display:'block'});
			if((days-images[i].mod)<=newDays) $(this).after('<span>&nbsp;</span>');
		});
		if(!cssTableSupport)
			Thumbs.thc.find('li.folderi>a,li.folder>a').each(function(i){
				$(this).css({display:'block'}).prepend('<b> </b>');
			});
	}
};

var Share = {
	div:null,
	over:false,
	init:function(){
		var d=$('#header #share');
		if(d.length){
			d=d.eq(0);
			var u=encodeURIComponent(window.location.href.split('\#')[0]);
			var t=$('#header h1').text();
			d.after('<div id="shares">'+Share.get(u,t,true)+'</div>')
			Share.div=$('#shares');
			d.mouseenter(function(){Share.div.fadeIn();}).mouseleave(function(){if(!Share.over) Share.div.fadeOut();});
			Share.div.hover(function(){Share.over=true;Share.div.stop(true,true).show();},function(){Share.over=false;Share.div.fadeOut();});
		}
	},	
	get:function(u,t,f){
		return (share.facebook?('<a href="http://www.facebook.com/sharer.php?u='+u+'&t='+t+'" target="_blank" title="'+text.shareOn+' Facebook"><img src="'+resPath+'/s_facebook.png" alt="Facebook" />'+(f?' FaceBook':'')+'</a>'):'') +
			(share.twitter?('<a href="http://twitter.com/home?status='+encodeURIComponent(text.checkOutThis)+': '+u+'" target="_blank" title="'+text.shareOn+' Twitter"><img src="'+resPath+'/s_twitter.png" alt="Twitter" />'+(f?' Twitter':'')+'</a>'):'') +
			(share.digg?('<a href="http://digg.com/submit?url='+u+'" target="_blank" title="'+text.shareOn+' Digg"><img src="'+resPath+'/s_digg.png" alt="Digg" />'+(f?' Digg':'')+'</a>'):'') +
			(share.delicious?('<a href="http://delicious.com/save?url='+u+'&title='+t+'&v=5" target="_blank" title="'+text.shareOn+' Delicious"><img src="'+resPath+'/s_delicious.png" alt="Delicious" />'+(f?' Delicious':'')+'</a>'):'') +
			(share.myspace?('<a href="http://www.myspace.com/index.cfm?fuseaction=postto&t='+t+'&u='+u+'&l=3" target="_blank" title="'+text.shareOn+' MySpace"><img src="'+resPath+'/s_myspace.png" alt="MySpace" />'+(f?' MySpace':'')+'</a>'):'') +
			(share.stumbleupon?('<a href="http://www.stumbleupon.com/submit?url='+u+'&title='+t+'" target="_blank" title="'+text.shareOn+' Stumbleupon"><img src="'+resPath+'/s_stumbleupon.png" alt="Stumbleupon" />'+(f?' StumbleUpon':'')+'</a>'):'') +
			(share.email?('<a href="mailto:?subject='+encodeURIComponent(text.checkOutThis)+'&body='+t+'%0D%0A'+u+'" title="'+text.shareOn+' Mail"><img src="'+resPath+'/s_email.png" alt="Email" />'+(f?' Email':'')+'</a>'):'');
	},
	getCurrent:function(ci){
		var u=encodeURIComponent(window.location.href), t=encodeURIComponent(ci.caption.stripHTML().trim());
		var s=Share.get(u,t,false);
		return s.length?('<div class="shares">'+s+'&nbsp;Share</div>'):'';
	}	
};	

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).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+h.outerWidth())>$(window).width())
					if((l=$(window).width()-h.outerWidth())<0) l=0;
				h.css({left:l,top:t}).fadeIn();
			},function(){$('#hint').remove()});
		}
	}
};

var Help = {
	init:function(){
		$('.showhelp').click(Help.show);
		$('#help .close a').click(Help.hide);
	},
	show:function(){
		$('#help').fadeIn(500);
	},
	hide:function(){
		if($('#help').is(':visible'))
			$('#help').fadeOut(500);
	}
};

$(document).ready(function(){
	Hints.init();
	Help.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) return true;
		var k=e?e.keyCode:window.event.keyCode; //alert(k);
  		switch(k) {
  			case 38: 
  				if(uplink.length){
  					if(!level&&parent) parent.location.href=uplink;
  					else window.location=uplink;
  				} 
				break;
			case 39: Imgs.next(); break;
			case 37: Imgs.prev(); break;
			case 106: case 179: Imgs.startStop(); break;
			case 112: Help.show(); break;
			case 27: Help.hide(); break;
			default: return true;
		}
		return false;
	});
	Share.init();
	$('#likeFacebook').append('<iframe src="http://www.facebook.com/plugins/like.php?href='+encodeURIComponent(window.location.href.split('#')[0])+'&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;action=like&amp;font=arial&amp;colorscheme='+likeBtnTheme+'&amp;height=20" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:90px;height:20px;" allowTransparency="true"></iframe>');
	$('#tweetTwitter').append('<iframe allowtransparency="true" frameborder="0" scrolling="no" src="http://platform.twitter.com/widgets/tweet_button.html?url='+encodeURIComponent(window.location.href.split('#')[0])+'&text='+encodeURIComponent(document.title)+'" style="width:55px; height:20px;"></iframe>');
});
