

(function($) {
 $.prettyPhoto = { version: '2.5.4' };

 $.fn.prettyPhoto = function(settings) {
 settings = jQuery.extend({
 animationSpeed: 'normal', 

 padding: 40, 

 opacity: 0.80, 

 showTitle: false, 

 allowresize: true, 

 counter_separator_label: '/', 

 theme: 'light_rounded', 

 hideflash: true, 

 modal: false, 

 changepicturecallback: function() { }, 

 callback: function() { } 

 }, settings);

 if ($.browser.msie && $.browser.version == 6) {
 settings.theme = "light_square";
 }

 if ($('.pp_overlay').size() == 0) {
 _buildOverlay(); // If the overlay is not there, inject it!
 } else {

 $pp_pic_holder = $('.pp_pic_holder');
 $ppt = $('.ppt');
 }

 var doresize = true, percentBased = false, correctSizes,

 $pp_pic_holder, $ppt,

 pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth, pp_type = 'image',

 setPosition = 0,

 $scrollPos = _getScroll();

 $(window).scroll(function() { $scrollPos = _getScroll(); _centerOverlay(); _resizeOverlay(); });
 $(window).resize(function() { _centerOverlay(); _resizeOverlay(); });
 $(document).keydown(function(e) {
 if ($pp_pic_holder.is(':visible'))
 switch (e.keyCode) {
 case 37:
 $.prettyPhoto.changePage('previous');
 break;
 case 39:
 $.prettyPhoto.changePage('next');
 break;
 case 27:
 if (!settings.modal)
 $.prettyPhoto.close();
 break;
 };
 });

 $(this).each(function() {
 $(this).bind('click', function() {

 link = this; // Fix scoping

 theRel = $(this).attr('rel');
 galleryRegExp = /\[(?:.*)\]/;
 theGallery = galleryRegExp.exec(theRel);

 var images = new Array(), titles = new Array(), descriptions = new Array();
 if (theGallery) {
 $('a[rel*=' + theGallery + ']').each(function(i) {
 if ($(this)[0] === $(link)[0]) setPosition = i; // Get the position in the set
 images.push($(this).attr('href'));
 titles.push($(this).find('img').attr('alt'));
 descriptions.push($(this).attr('title'));
 });
 } else {
 images = $(this).attr('href');
 titles = ($(this).find('img').attr('alt')) ? $(this).find('img').attr('alt') : '';
 descriptions = ($(this).attr('title')) ? $(this).attr('title') : '';
 }

 $.prettyPhoto.open(images, titles, descriptions);
 return false;
 });
 });


 

 $.prettyPhoto.open = function(gallery_images, gallery_titles, gallery_descriptions) {

 if ($.browser.msie && $.browser.version == 6) {
 $('select').css('visibility', 'hidden');
 };

 if (settings.hideflash) $('object,embed').css('visibility', 'hidden');

 images = $.makeArray(gallery_images);
 titles = $.makeArray(gallery_titles);
 descriptions = $.makeArray(gallery_descriptions);

 if ($('.pp_overlay').size() == 0) {
 _buildOverlay(); // If the overlay is not there, inject it!
 } else {

 $pp_pic_holder = $('.pp_pic_holder');
 $ppt = $('.ppt');
 }

 $pp_pic_holder.attr('class', 'pp_pic_holder ' + settings.theme); // Set the proper theme

 isSet = ($(images).size() > 0) ? true : false; // Find out if it's a set

 _getFileType(images[setPosition]); // Set the proper file type

 _centerOverlay(); // Center it

 _checkPosition($(images).size());

 $('.pp_loaderIcon').show(); // Do I need to explain?

 $('div.pp_overlay').show().fadeTo(settings.animationSpeed, settings.opacity, function() {
 $pp_pic_holder.fadeIn(settings.animationSpeed, function() {

 $pp_pic_holder.find('p.currentTextHolder').text((setPosition + 1) + settings.counter_separator_label + $(images).size());

 if (descriptions[setPosition]) {
 $pp_pic_holder.find('.pp_description').show().html(unescape(descriptions[setPosition]));
 } else {
 $pp_pic_holder.find('.pp_description').hide().text('');
 };

 if (titles[setPosition] && settings.showTitle) {
 hasTitle = true;
 $ppt.html(unescape(titles[setPosition]));
 } else {
 hasTitle = false;
 };

 if (pp_type == 'image') {

 imgPreloader = new Image();

 nextImage = new Image();
 if (isSet && setPosition > $(images).size()) nextImage.src = images[setPosition + 1];
 prevImage = new Image();
 if (isSet && images[setPosition - 1]) prevImage.src = images[setPosition - 1];

 pp_typeMarkup = '<img id="fullResImage" src="' + images[setPosition] + '" />';
 $pp_pic_holder.find('#pp_full_res')[0].innerHTML = pp_typeMarkup;

 $pp_pic_holder.find('.pp_content').css('overflow', 'hidden');


 imgPreloader.onload = function() {

 correctSizes = _fitToViewport(imgPreloader.width, imgPreloader.height);

 _showContent();
 };

 imgPreloader.src = images[setPosition];
 } else {

 movie_width = (parseFloat(grab_param('width', images[setPosition]))) ? grab_param('width', images[setPosition]) : "425";
 movie_height = (parseFloat(grab_param('height', images[setPosition]))) ? grab_param('height', images[setPosition]) : "344";

 if (movie_width.indexOf('%') != -1 || movie_height.indexOf('%') != -1) {
 movie_height = ($(window).height() * parseFloat(movie_height) / 100) - 100;
 movie_width = ($(window).width() * parseFloat(movie_width) / 100) - 100;
 percentBased = true;
 }

 movie_height = parseFloat(movie_height);
 movie_width = parseFloat(movie_width);

 if (pp_type == 'quicktime') movie_height += 15; // Add space for the control bar

 correctSizes = _fitToViewport(movie_width, movie_height);

 if (pp_type == 'youtube') {
 pp_typeMarkup = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + correctSizes['width'] + '" height="' + correctSizes['height'] + '"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://www.youtube.com/v/' + grab_param('v', images[setPosition]) + '" /><embed src="http://www.youtube.com/v/' + grab_param('v', images[setPosition]) + '" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="' + correctSizes['width'] + '" height="' + correctSizes['height'] + '"></embed></object>';
 } else if (pp_type == 'quicktime') {
 pp_typeMarkup = '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="' + correctSizes['height'] + '" width="' + correctSizes['width'] + '"><param name="src" value="' + images[setPosition] + '"><param name="autoplay" value="true"><param name="type" value="video/quicktime"><embed src="' + images[setPosition] + '" height="' + correctSizes['height'] + '" width="' + correctSizes['width'] + '" autoplay="true" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>';
 } else if (pp_type == 'flash') {
 flash_vars = images[setPosition];
 flash_vars = flash_vars.substring(images[setPosition].indexOf('flashvars') + 10, images[setPosition].length);

 filename = images[setPosition];
 filename = filename.substring(0, filename.indexOf('?'));

 pp_typeMarkup = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + correctSizes['width'] + '" height="' + correctSizes['height'] + '"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="' + filename + '?' + flash_vars + '" /><embed src="' + filename + '?' + flash_vars + '" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="' + correctSizes['width'] + '" height="' + correctSizes['height'] + '"></embed></object>';
 } else if (pp_type == 'iframe') {
 movie_url = images[setPosition];
 movie_url = movie_url.substr(0, movie_url.indexOf('iframe') - 1);

 pp_typeMarkup = '<iframe src ="' + movie_url + '" width="' + (correctSizes['width'] - 10) + '" height="' + (correctSizes['height'] - 10) + '" frameborder="no"></iframe>';
 }

 _showContent();
 }
 });
 });
 };

 

 $.prettyPhoto.changePage = function(direction) {
 if (direction == 'previous') {
 setPosition--;
 if (setPosition < 0) {
 setPosition = 0;
 return;
 }
 } else {
 if ($('.pp_arrow_next').is('.disabled')) return;
 setPosition++;
 };

 if (!doresize) doresize = true;

 _hideContent();
 $('a.pp_expand,a.pp_contract').fadeOut(settings.animationSpeed, function() {
 $(this).removeClass('pp_contract').addClass('pp_expand');
 $.prettyPhoto.open(images, titles, descriptions);
 });
 };

 

 $.prettyPhoto.close = function() {
 $pp_pic_holder.find('object,embed').css('visibility', 'hidden');

 $('div.pp_pic_holder,div.ppt').fadeOut(settings.animationSpeed);

 $('div.pp_overlay').fadeOut(settings.animationSpeed, function() {
 $('div.pp_overlay,div.pp_pic_holder,div.ppt').remove();

 if ($.browser.msie && $.browser.version == 6) {
 $('select').css('visibility', 'visible');
 };

 if (settings.hideflash) $('object,embed').css('visibility', 'visible');

 setPosition = 0;

 settings.callback();
 });

 doresize = true;
 };

 

 _showContent = function() {
 $('.pp_loaderIcon').hide();

 if ($.browser.opera) {
 windowHeight = window.innerHeight;
 windowWidth = window.innerWidth;
 } else {
 windowHeight = $(window).height();
 windowWidth = $(window).width();
 };

 projectedTop = $scrollPos['scrollTop'] + ((windowHeight / 2) - (correctSizes['containerHeight'] / 2));
 if (projectedTop < 0) projectedTop = 0 + $pp_pic_holder.find('.ppt').height();

 $pp_pic_holder.find('.pp_content').animate({ 'height': correctSizes['contentHeight'] }, settings.animationSpeed);

 $pp_pic_holder.animate({
 'top': projectedTop,
 'left': ((windowWidth / 2) - (correctSizes['containerWidth'] / 2)),
 'width': correctSizes['containerWidth']
 }, settings.animationSpeed, function() {
 $pp_pic_holder.width(correctSizes['containerWidth']);
 $pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(correctSizes['height']).width(correctSizes['width']);

 $pp_pic_holder.find('#pp_full_res').fadeIn(settings.animationSpeed);

 if (isSet && pp_type == "image") { $pp_pic_holder.find('.pp_hoverContainer').fadeIn(settings.animationSpeed); } else { $pp_pic_holder.find('.pp_hoverContainer').hide(); }
 $pp_pic_holder.find('.pp_details').fadeIn(settings.animationSpeed);

 if (settings.showTitle && hasTitle) {
 $ppt.css({
 'top': $pp_pic_holder.offset().top - 20,
 'left': $pp_pic_holder.offset().left + (settings.padding / 2),
 'display': 'none'
 });

 $ppt.fadeIn(settings.animationSpeed);
 };

 if (correctSizes['resized']) $('a.pp_expand,a.pp_contract').fadeIn(settings.animationSpeed);

 if (pp_type != 'image') $pp_pic_holder.find('#pp_full_res')[0].innerHTML = pp_typeMarkup;

 settings.changepicturecallback();
 });
 };

 

 function _hideContent() {

 $pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility', 'hidden');
 $pp_pic_holder.find('.pp_hoverContainer,.pp_details').fadeOut(settings.animationSpeed);
 $pp_pic_holder.find('#pp_full_res').fadeOut(settings.animationSpeed, function() {
 $('.pp_loaderIcon').show();
 });

 $ppt.fadeOut(settings.animationSpeed);
 }

 

 function _checkPosition(setCount) {

 if (setPosition == setCount - 1) {
 $pp_pic_holder.find('a.pp_next').css('visibility', 'hidden');
 $pp_pic_holder.find('a.pp_arrow_next').addClass('disabled').unbind('click');
 } else {
 $pp_pic_holder.find('a.pp_next').css('visibility', 'visible');
 $pp_pic_holder.find('a.pp_arrow_next.disabled').removeClass('disabled').bind('click', function() {
 $.prettyPhoto.changePage('next');
 return false;
 });
 };

 if (setPosition == 0) {
 $pp_pic_holder.find('a.pp_previous').css('visibility', 'hidden');
 $pp_pic_holder.find('a.pp_arrow_previous').addClass('disabled').unbind('click');
 } else {
 $pp_pic_holder.find('a.pp_previous').css('visibility', 'visible');
 $pp_pic_holder.find('a.pp_arrow_previous.disabled').removeClass('disabled').bind('click', function() {
 $.prettyPhoto.changePage('previous');
 return false;
 });
 };

 if (setCount > 1) {
 $('.pp_nav').show();
 } else {
 $('.pp_nav').hide();
 }
 };

 

 function _fitToViewport(width, height) {
 hasBeenResized = false;

 _getDimensions(width, height);

 imageWidth = width;
 imageHeight = height;

 windowHeight = $(window).height();
 windowWidth = $(window).width();

 if (((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allowresize && !percentBased) {
 hasBeenResized = true;
 notFitting = true;

 while (notFitting) {
 if ((pp_containerWidth > windowWidth)) {
 imageWidth = (windowWidth - 200);
 imageHeight = (height / width) * imageWidth;
 } else if ((pp_containerHeight > windowHeight)) {
 imageHeight = (windowHeight - 200);
 imageWidth = (width / height) * imageHeight;
 } else {
 notFitting = false;
 };

 pp_containerHeight = imageHeight;
 pp_containerWidth = imageWidth;
 };

 _getDimensions(imageWidth, imageHeight);
 };

 return {
 width: imageWidth,
 height: imageHeight,
 containerHeight: pp_containerHeight,
 containerWidth: pp_containerWidth,
 contentHeight: pp_contentHeight,
 contentWidth: pp_contentWidth,
 resized: hasBeenResized
 };
 };

 

 function _getDimensions(width, height) {
 $pp_pic_holder.find('.pp_details').width(width).find('.pp_description').width(width - parseFloat($pp_pic_holder.find('a.pp_close').css('width'))); 


 pp_contentHeight = height + $pp_pic_holder.find('.pp_details').height() + parseFloat($pp_pic_holder.find('.pp_details').css('marginTop')) + parseFloat($pp_pic_holder.find('.pp_details').css('marginBottom'));
 pp_contentWidth = width;
 pp_containerHeight = pp_contentHeight + $pp_pic_holder.find('.ppt').height() + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
 pp_containerWidth = width + settings.padding;
 }

 function _getFileType(itemSrc) {
 if (itemSrc.match(/youtube\.com\/watch/i)) {
 pp_type = 'youtube';
 } else if (itemSrc.indexOf('.mov') != -1) {
 pp_type = 'quicktime';
 } else if (itemSrc.indexOf('.swf') != -1) {
 pp_type = 'flash';
 } else if (itemSrc.indexOf('iframe') != -1) {
 pp_type = 'iframe'
 } else {
 pp_type = 'image';
 };
 };

 function _centerOverlay() {
 if ($.browser.opera) {
 windowHeight = window.innerHeight;
 windowWidth = window.innerWidth;
 } else {
 windowHeight = $(window).height();
 windowWidth = $(window).width();
 };

 if (doresize) {
 $pHeight = $pp_pic_holder.height();
 $pWidth = $pp_pic_holder.width();
 $tHeight = $ppt.height();

 projectedTop = (windowHeight / 2) + $scrollPos['scrollTop'] - ($pHeight / 2);
 if (projectedTop < 0) projectedTop = 0 + $tHeight;

 $pp_pic_holder.css({
 'top': projectedTop,
 'left': (windowWidth / 2) + $scrollPos['scrollLeft'] - ($pWidth / 2)
 });

 $ppt.css({
 'top': projectedTop - $tHeight,
 'left': (windowWidth / 2) + $scrollPos['scrollLeft'] - ($pWidth / 2) + (settings.padding / 2)
 });
 };
 };

 function _getScroll() {
 if (self.pageYOffset) {
 scrollTop = self.pageYOffset;
 scrollLeft = self.pageXOffset;
 } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
 scrollTop = document.documentElement.scrollTop;
 scrollLeft = document.documentElement.scrollLeft;
 } else if (document.body) {// all other Explorers
 scrollTop = document.body.scrollTop;
 scrollLeft = document.body.scrollLeft;
 }

 return { scrollTop: scrollTop, scrollLeft: scrollLeft };
 };

 function _resizeOverlay() {
 $('div.pp_overlay').css({
 'height': $(document).height(),
 'width': $(window).width()
 });
 };

 function _buildOverlay() {
 toInject = "";

 toInject += "<div class='pp_overlay'></div>";

 toInject += '<div class="pp_pic_holder"><div class="pp_top"><div class="pp_left"></div><div class="pp_middle"></div><div class="pp_right"></div></div><div class="pp_content"><a href="#" class="pp_expand" title="Expand the image">Expand</a><div class="pp_loaderIcon"></div><div class="pp_hoverContainer"><a class="pp_next" href="#">next</a><a class="pp_previous" href="#">previous</a></div><div id="pp_full_res"></div><div class="pp_details clearfix"><a class="pp_close" href="#">Close</a><p class="pp_description"></p><div class="pp_nav"><a href="#" class="pp_arrow_previous">Previous</a><p class="currentTextHolder">0' + settings.counter_separator_label + '0</p><a href="#" class="pp_arrow_next">Next</a></div></div></div><div class="pp_bottom"><div class="pp_left"></div><div class="pp_middle"></div><div class="pp_right"></div></div></div>';

 toInject += '<div class="ppt"></div>';

 $('body').append(toInject);

 $('div.pp_overlay').css('opacity', 0);

 $pp_pic_holder = $('.pp_pic_holder');
 $ppt = $('.ppt');

 $('div.pp_overlay').css('height', $(document).height()).hide().bind('click', function() {
 if (!settings.modal)
 $.prettyPhoto.close();
 });

 $('a.pp_close').bind('click', function() { $.prettyPhoto.close(); return false; });

 $('a.pp_expand').bind('click', function() {
 $this = $(this); // Fix scoping

 if ($this.hasClass('pp_expand')) {
 $this.removeClass('pp_expand').addClass('pp_contract');
 doresize = false;
 } else {
 $this.removeClass('pp_contract').addClass('pp_expand');
 doresize = true;
 };

 _hideContent();

 $pp_pic_holder.find('.pp_hoverContainer, .pp_details').fadeOut(settings.animationSpeed);
 $pp_pic_holder.find('#pp_full_res').fadeOut(settings.animationSpeed, function() {
 $.prettyPhoto.open(images, titles, descriptions);
 });

 return false;
 });

 $pp_pic_holder.find('.pp_previous, .pp_arrow_previous').bind('click', function() {
 $.prettyPhoto.changePage('previous');
 return false;
 });

 $pp_pic_holder.find('.pp_next, .pp_arrow_next').bind('click', function() {
 $.prettyPhoto.changePage('next');
 return false;
 });

 $pp_pic_holder.find('.pp_hoverContainer').css({
 'margin-left': settings.padding / 2
 });
 };
 };

 function grab_param(name, url) {
 name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
 var regexS = "[\\?&]" + name + "=([^&#]*)";
 var regex = new RegExp(regexS);
 var results = regex.exec(url);
 if (results == null)
 return "";
 else
 return results[1];
 }
})(jQuery);
