/* =========================================================================
Title: picShow Plugin
Version: 1.0
Description: Adds gallery-type and carousel functionality to picShow control
Call: $('.picShowContainer').picShow({options});
Options:
	elementsToShow 		- # of elements to display at a given time
	imgContainer 			- Container where the full-size image is displayed
	tnContainer 			- Container housing thumbnails
	thumbnails 				- List elements of actual thumbnails
	descContainer			- Identifier for description container
	imgControlsClass	- Class for image controls container
	maxButtonClass		- Class for max button
	descButtonClass		- Class for description button
	prevButtonClass		- Class for previous button
	nextButtonClass		- Class for next button
	loadingClass			- Class to display when loading
	spacesToMove			- # of spaces to move on next / prev click
	timeToMove				- Time taken to move carousel (ms)
	lightboxSettings	- Image paths for lightbox plugin
============================================================================ */

(function($){$.expr[':'].linkingToImage=function(elem,index,match){return $(elem).is('a')&&elem.href&&(/\.(gif|jpe?g|png|bmp)$/).test(elem.href);};$.fn.picShow=function(options){var defaultSettings={elementsToShow:4,imgContainer:'.picShow_imgContainer',tnContainer:'.picShow_tnContainer',thumbnails:'.picShow_thumbnails ul li',descContainer:'.picShow_descContainer',imgControlsClass:'picShow_imgControls',maxButtonClass:'picShow_maxButton',descButtonClass:'picShow_descButton',prevButtonClass:'picShow_prev',nextButtonClass:'picShow_next',loadingClass:'loading',spacesToMove:4,timeToMove:1000,lightboxSettings:{imageLoading:'styles/images/loading.gif',imageBtnPrev:'_addons/lightbox/lightbox-btn-prev.gif',imageBtnNext:'_addons/lightbox/lightbox-btn-next.gif',imageBtnClose:'_addons/lightbox/lightbox-btn-close.gif',imageBlank:'_addons/lightbox/lightbox-blank.gif'}},settings=$.extend({},defaultSettings,options),$container=this,$imgContainer=$(settings.imgContainer,$container),$tnContainer=$(settings.tnContainer,$container),$thumbnails=$(settings.thumbnails,$container),$descContainer=$(settings.descContainer,$container),$links=$($thumbnails).children('a'),$ul=$($tnContainer).children('div').children('ul'),elementWidth=$($thumbnails).width(),elementCount=$thumbnails.length,width=elementWidth*elementCount,index=0,isChanging=false,isLoading=false;var prevButtonHtml='<a class="'+settings.prevButtonClass+'" href="#prev">Previous</a>';var nextButtonHtml='<a class="'+settings.nextButtonClass+'" href="#next">Next</a>';$($tnContainer).prepend('\n'+prevButtonHtml+'\n'+nextButtonHtml+'\n');var maxButtonHtml='<a class="'+settings.maxButtonClass+'" href="#max">Maximize</a>';var descButtonHtml='<a class="'+settings.descButtonClass+'" href="#desc">Description</a>';$($imgContainer).append('<div class="'+settings.imgControlsClass+'" />\n');$imgControls=$('.'+settings.imgControlsClass,$container);$($imgControls,$imgContainer).append('\n'+maxButtonHtml+'\n'+descButtonHtml+'\n');$($container).addClass('js');$($ul).width(width);var href=$($imgContainer).children('img').attr('src');var title=$($imgContainer).children('img').attr('alt');$('.'+settings.maxButtonClass).attr({'href':href,'title':title});$('.'+settings.maxButtonClass).lightBox({imageLoading:settings.lightboxSettings.imageLoading,imageBtnPrev:settings.lightboxSettings.imageBtnPrev,imageBtnNext:settings.lightboxSettings.imageBtnNext,imageBtnClose:settings.lightboxSettings.imageBtnClose,imageBlank:settings.lightboxSettings.imageBlank});$($descContainer).hide();$('.'+settings.prevButtonClass,$container).click(function(){if(elementCount>settings.elementsToShow&&!isChanging){isChanging=true;var left=parseInt($($ul).css("left").replace(/px$/,""));var moveLeft=left+(settings.spacesToMove*elementWidth);if(moveLeft>=(settings.spacesToMove*elementWidth)){moveLeft=-1*width+(settings.elementsToShow*elementWidth);}else if(moveLeft>0&&moveLeft<(settings.elementsToShow*elementWidth)){moveLeft=0;}$($ul).animate({left:moveLeft},settings.timeToMove,function(){isChanging=false;});}return false;});$('.'+settings.nextButtonClass,$container).click(function(){if(elementCount>settings.elementsToShow&&!isChanging){isChanging=true;var $ul=$($tnContainer).children('div').children('ul');var left=parseInt($($ul).css("left").replace(/px$/,""));var moveLeft=left-(settings.spacesToMove*elementWidth);if(Math.abs(left)>=(width-(settings.elementsToShow*elementWidth))){moveLeft=0;}else if((width-Math.abs(moveLeft))<(settings.elementsToShow*elementWidth)){while((width-Math.abs(moveLeft))<(settings.elementsToShow*elementWidth)){moveLeft+=elementWidth}}$($ul).animate({left:moveLeft},settings.timeToMove,function(){$($ul).load();isChanging=false;});}return false;});$($links).click(function(){var $link=this;var $objectContainer=$($link).parent('li').children('code');var href=$($link).attr('href');var title=$($link).children('img').attr('alt');var desc=$($link).parent('li').children('p').html();if($objectContainer.length>0||$($link).is(":linkingToImage")){if(!isLoading){isLoading=true;var oldHeight=$($imgContainer).height();$($imgContainer).css({height:oldHeight});var showDesc=$($descContainer,$imgContainer).is(':visible');$($descContainer,$imgContainer).slideUp(200);$($imgControls,$imgContainer).hide();$($imgContainer).animate({opacity:0},500,function(){$($imgContainer).children('img').remove();$($imgContainer).children('object').remove();$($imgContainer).css({opacity:1});$($imgContainer).addClass(settings.loadingClass);if($objectContainer.length>0){var containerWidth=$($imgContainer).width();var newHeight=300;var newWidth=containerWidth;if($($objectContainer).children('object').length>0){var newWidth=$($objectContainer).children('object').attr('width');var newHeight=$($objectContainer).children('object').attr('height');if(newWidth<=0||newHeight<=0){newWidth=$($objectContainer).children('object').css('width');newHeight=$($objectContainer).children('object').css('height');}if(newWidth>containerWidth){newHeight=Math.round((newHeight/newWidth)*containerWidth);newWidth=containerWidth;$($objectContainer).children('object').attr({'width':newWidth,'height':newHeight});}}if($($objectContainer).children('object').children('embed').length>0){var newWidth=$($objectContainer).children('object').children('embed').attr('width');var newHeight=$($objectContainer).children('object').children('embed').attr('height');if(newWidth<=0||newHeight<=0){newWidth=$($objectContainer).children('object').children('embed').css('width');newHeight=$($objectContainer).children('object').children('embed').css('height');}if(newWidth>containerWidth){newHeight=Math.round((newHeight/newWidth)*containerWidth);newWidth=containerWidth;$($objectContainer).children('object').children('embed').attr({'width':newWidth,'height':newHeight});}}$($imgContainer).prepend($($objectContainer).html());$($imgContainer).animate({height:newHeight},500,function(){isLoading=false;$($imgContainer).removeClass(settings.loadingClass);});}else{var $img=new Image;$($img).load(function(){var newWidth=$($img).attr('width');var newHeight=$($img).attr('height');var containerWidth=$($imgContainer).width();if(newWidth>containerWidth){newHeight=Math.round((newHeight/newWidth)*containerWidth);newWidth=containerWidth;$($img).attr({'width':newWidth,'height':newHeight});}$($img).hide();$($imgContainer).animate({height:newHeight},500,function(){$($imgContainer).removeClass(settings.loadingClass);$($imgContainer).prepend($img).prepend('\n');$($img).fadeIn(function(){isLoading=false;$($descContainer,$imgContainer).children('p').html(title+' - '+desc);$('.'+settings.maxButtonClass,$imgContainer).attr({'href':href,'title':title});if(showDesc){$($descContainer,$imgContainer).slideDown();}else{$($descContainer,$imgContainer).hide();}$($imgControls,$imgContainer).fadeIn();});});}).attr({'src':href,'alt':title});}});}return false;}else{return true;}});$("."+settings.descButtonClass,$imgContainer).click(function(){$($descContainer).slideToggle(500);return false;});}})(jQuery);