/*
 * jQuery Popeye 2.1 - http://dev.herr-schuessler.de/jquery/popeye/
 *
 * converts a HTML image list in image gallery with inline enlargement
 *
 * Copyright (C) 2008 - 2011 Christoph Schuessler (schreib@herr-schuessler.de)
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 */
 
(function($){
	$.fn.popeye=function(options){
		var opts=$.extend({},
		$.fn.popeye.defaults,options);
	function debug(text,type){if(window.console&&window.console.log&&opts.debug){
		if(type=='info'&&window.console.info){window.console.info(text)}
		else if(type=='warn'&&window.console.warn){window.console.warn(text)}
		else{window.console.log(text)}}}return this.each(function(){
			$(this).addClass('ppy-active');
			var $self=$(this),
			img=$self.find('.ppy-imglist > a > img'),
			a=$self.find('.ppy-imglist > a'),
			tot=img.length,singleImageMode=(tot==1)?true:false,
			ismouseover=false,
			enlarged=false,
			cur=0,
			eclass='ppy-expanded',
			lclass='ppy-loading',
			sclass='ppy-single-image',
			ppyPlaceholder=$('<span></span>'),
			ppyStageWrap=$('<div class="ppy-stagewrap"></div>'),
			ppyCaptionWrap=$('<div class="ppy-captionwrap"></div>'),
			ppyOuter=$self.find('.ppy-outer'),
			ppyStage=$self.find('.ppy-stage'),
			ppyNav=$self.find('.ppy-nav'),
			ppyPrev=$self.find('.ppy-prev'),
			ppyNext=$self.find('.ppy-next'),
			ppySwitchEnlarge=$self.find('.ppy-switch-enlarge'),
			ppySwitchCompact=$self.find('.ppy-switch-compact').addClass('ppy-hidden'),
			ppyPlay=$self.find('.ppy-play'),
			ppyPause=$self.find('.ppy-pause').addClass('ppy-hidden'),
			ppyCaption=$self.find('.ppy-caption'),
			ppyText=$self.find('.ppy-text'),
			ppyCounter=$self.find('.ppy-counter'),
			ppyCurrent=$self.find('.ppy-current'),
			ppyTotal=$self.find('.ppy-total'),
			cssSelf={position:'absolute',
			width:'auto',
			height:'auto',
			margin:0,
			top:0,
			left:(opts.direction=='right')?0:'auto',
			right:(opts.direction=='left')?0:'auto'},
			cssStage={height:ppyStage.height(),
			width:ppyStage.width()},
			cssCaption={height:ppyCaption.height()},
			cssPlaceholder={'height':(opts.caption=='hover'||false)?ppyOuter.outerHeight():$self.outerHeight(),'width':(opts.caption=='hover'||false)?ppyOuter.outerWidth():$self.outerWidth(),'float':$self.css('float'),'margin-top':$self.css('margin-top'),'margin-right':$self.css('margin-right'),'margin-bottom':$self.css('margin-bottom'),'margin-left':$self.css('margin-left')};
			var cap=[];
			for(var i=0;i<img.length;i++){var extcap=$self.find('.ppy-imglist a').eq(i).find('.ppy-extcaption');
			cap[i]=extcap.length>0?extcap.html():img[i].alt}if(!ppyStage.length||!ppyNav.length||!ppyOuter.length){debug('$.fn.popeye: Incorrect HTML structure','warn')}
			else if
			(tot===0){debug('$.fn.popeye: No images found','warn')}
			else{singleImageMode?debug('$.fn.popeye -> SingleImageMode started'):debug('$.fn.popeye -> '+tot+' thumbnails found.');
			init()}
			function showThumb(i,transition){transition=transition||false;i=i||cur;
			var cssStageImage={backgroundImage:'url('+img[i].src+')'};
			var cssTemp={height:'+=0'};if(enlarged){hideCaption();
			ppyStage.fadeTo((opts.duration/2),0).animate(cssStage,{queue:false,duration:opts.duration,easing:opts.easing,complete:function(){enlarged=false;debug('$.fn.showThumb: Entering COMPACT MODE','info');
			$self.removeClass(eclass);
			$self.css('z-index','').parent().css('z-index','');
			ppySwitchEnlarge.removeClass('ppy-hidden');
			ppySwitchCompact.addClass('ppy-hidden');
			showThumb();$(this).fadeTo((opts.duration/2),1)}})}else{if(transition){ppyStageWrap.addClass(lclass);ppyStage.fadeTo((opts.duration/2),0);
			var thumbPreloader=new Image();
			thumbPreloader.onload=function(){debug('$.fn.popeye.showThumb: Thumbnail '+i+' loaded','info');
			ppyStageWrap.removeClass(lclass);
			ppyStage.animate(cssTemp,1,'linear',function(){ppyStage.css(cssStageImage);
			$(this).fadeTo((opts.duration/2),1);
			if(opts.caption=='hover'&&ismouseover){showCaption(cap[i])}
			else if
			(opts.caption=='permanent'){updateCaption(cap[i])}updateCounter()});
			thumbPreloader.onload=function(){}};
			thumbPreloader.src=img[i].src}else{ppyStage.css(cssStageImage);
			updateCounter();
			showCaption(cap[i],true)}var preloader=new Image();
			preloader.onload=function(){debug('$.fn.popeye.showThumb: Image '+i+' loaded','info');
			preloader.onload=function(){}};
			preloader.src=a[i].href}}
			function showImage(i){i=i||cur;ppyStageWrap.addClass(lclass);ppyStage.fadeTo((opts.duration/2),0);
			var allPpy=$('.'+eclass);allPpy.css('z-index',opts.zindex-1);
			$self.css('z-index',opts.zindex).parent().css('z-index',opts.zindex);
			var preloader=new Image();
			preloader.onload=function(){ppyStageWrap.removeClass(lclass);
			var cssStageTo={width:preloader.width,height:preloader.height};
			var cssStageIm={backgroundImage:'url('+a[i].href+')',backgroundPosition:'left top'};
			hideCaption();ppyStage.animate(cssStageTo,{queue:false,duration:opts.duration,easing:opts.easing,complete:function(){if(opts.navigation=='hover'&&ismouseover){showNav()}enlarged=true;debug('$.fn.popeye.showImage: Entering ENLARGED MODE','info');
			$self.addClass(eclass);ppySwitchCompact.removeClass('ppy-hidden');
			ppySwitchEnlarge.addClass('ppy-hidden');
			updateCounter();$(this).css(cssStageIm).fadeTo((opts.duration/2),1);
			showCaption(cap[i]);
			preloadNeighbours()}})};
			preloader.src=a[i].href}function updateCounter(i){i=i||cur;ppyTotal.text(tot);
			ppyCurrent.text(i+1);debug('$.fn.popeye.updateCounter: Displaying image '+(i+1)+' of '+tot)}
			function preloadNeighbours(i){i=i||cur;
			var preloaderNext=new Image();
			var preloaderPrev=new Image();
			var neighbour=i;if(neighbour<(tot-1)){neighbour++}
			else{neighbour=0}preloaderNext.src=a[neighbour].href;neighbour=i;if(neighbour<=0){neighbour=tot-1}
			else{neighbour--}preloaderPrev.src=a[neighbour].href}function showNav(){ppyNav.stop().fadeTo(150,opts.opacity)}
			function hideNav(){ppyNav.stop().fadeTo(150,0)}
			function updateCaption(caption){if(opts.caption){ppyText.html(caption)}}
			function showCaption(caption,force){if(caption&&opts.caption){updateCaption(caption);debug('$.fn.popeye.showCaption -> ppyCaptionWrap.outerHeight(true): '+ppyCaptionWrap.outerHeight(true));
			var cssTempCaption={visibility:'visible'};
			ppyCaption.css(cssTempCaption);
			if(opts.caption==='permanent'&&!enlarged){ppyCaption.css(cssCaption)}
			else{ppyCaption.animate({'height':ppyCaptionWrap.outerHeight(true)},{queue:false,duration:90,easing:opts.easing})}}
			else if
			(!caption&&!force){hideCaption()}}
			function hideCaption(){
				var cssTempCaption={visibility:'hidden',overflow:'hidden'};
				ppyCaption.animate({'height':'0px'},{queue:false,duration:90,easing:opts.easing,complete:function(){ppyCaption.css(cssTempCaption)}})}function previous(){
					if(cur<=0){cur=tot-1}
					else
					{cur--}if(enlarged){showImage(cur)}
				else
				{showThumb(cur,true)}return cur}
				function next(){if(cur<(tot-1)){cur++}
				else
				{cur=0}if(enlarged){showImage(cur)}
				else
				{showThumb(cur,true)}
				return cur}
				function init(){ppyPlaceholder.css(cssPlaceholder);
				$self.css(cssSelf);
$self.wrap(ppyPlaceholder);
ppyStageWrap=ppyStage.wrap(ppyStageWrap).parent();
ppyCaptionWrap=ppyCaption.wrapInner(ppyCaptionWrap).children().eq(0);
showThumb();if(opts.navigation=='hover'){hideNav();
$self.hover(function(){showNav()},function(){hideNav()});
ppyNav.hover(function(){showNav()},function(){hideNav()})}if(!singleImageMode){ppyPrev.click(function(e){e.stopPropagation();
previous()});
ppyNext.click(function(e){e.stopPropagation();
next()})}
else{$self.addClass(sclass);
ppyPrev.remove();
ppyNext.remove();
ppyPlay.remove();
ppyPause.remove();
ppyCounter.remove()}if(opts.caption=='hover'){hideCaption();
$self.hover(function(){showCaption(cap[cur])},function(){hideCaption(true)})}

//ppySwitchEnlarge.click(function(e){e.stopPropagation();
//showImage();return false});

ppySwitchCompact.click(function(e){e.stopPropagation();
showThumb(cur);return false});
//ppyStage.click(function(){if(enlarged){showThumb(cur)}
//else{showImage()}});
ppyPlay.click(function(e){e.stopPropagation();
ppyPause.removeClass('ppy-hidden');
ppyPlay.addClass('ppy-hidden');
slideshow=window.setInterval(function(){next()},opts.slidespeed);return false});
ppyPause.click(function(e){e.stopPropagation();
ppyPlay.removeClass('ppy-hidden');
ppyPause.addClass('ppy-hidden');window.clearInterval(slideshow);return false});
$self.mouseenter(function(){ismouseover=true}).mouseleave(function(){ismouseover=false});
if(opts.autoslide){ppyPlay.trigger('click')}}})};
$.fn.popeye.defaults={navigation:'hover',caption:'hover',zindex:10000,direction:'right',duration:240,opacity:0.8,easing:'swing',slidespeed:2000,autoslide:false,debug:false}})(jQuery);jQuery('head').append('<style type="text/css"> .ppy-imglist { position: absolute; top: -1000em; left: -1000em; } </style>');
