/* ------------------------------------------------------------------------
 * 	Class: prettyPhoto
 * 	Use: Lightbox clone for jQuery
 * 	Author: Stephane Caron (http://www.no-margin-for-errors.com)
 * 	Version: 2.5.6
 ------------------------------------------------------------------------- */

(function($) {
	$.prettyPhoto = {
		version : '2.5.6'
	};
	$.fn.prettyPhoto = function(settings) {
		settings = jQuery
				.extend(
						{
							animationSpeed : 'fast',
							opacity : 0.80,
							showTitle : true,
							allowresize : true,
							default_width : 500,
							default_height : 344,
							counter_separator_label : '/',
							theme : 'facebook',/* light_rounded / dark_rounded / light_square / dark_square / facebook */
							hideflash : false,
							wmode : 'opaque',
							autoplay : true,
							modal : false,
							changepicturecallback : function() {
							},
							callback : function() {
							},
							markup : '<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_container"> \
       <div class="pp_left"> \
       <div class="pp_right"> \
        <div class="pp_content"> \
         <div class="pp_loaderIcon"></div> \
         <div class="pp_fade"> \
          <a href="#" class="pp_expand" title="Expand the image">Expand</a> \
          <div class="pp_hoverContainer"> \
           <a class="pp_hoverContainer" href="#"></a> \
          </div> \
          <div id="pp_full_res"></div> \
          <div class="pp_details clearfix"> \
           <a class="pp_close" href="#">Close</a> \
           \
           <div class="pp_nav"> \
            <a href="#" class="pp_arrow_previous">Previous</a> \
            <p class="currentTextHolder">0/0</p> \
            <a href="#" class="pp_arrow_next">Next</a> \
           </div> \
           <div class="pp_nav_direct_picture"> \
          </div> \
          </div> \
         </div> \
        </div> \
       </div> \
       </div> \
      </div> \
      <div class="pp_bottom"> \
       <div class="pp_left"></div> \
       <div class="pp_middle"></div> \
       <div class="pp_right"></div> \
      </div> \
     </div> \
     <div class="pp_overlay"></div> \
     <div class="ppt"></div>',
							image_markup : '<img id="fullResImage" src="" />',
							flash_markup : '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',
							quicktime_markup : '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',
							iframe_markup : '<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',
							inline_markup : '<div class="pp_inline clearfix">{content}</div>'
						}, settings);
		if ($.browser.msie && parseInt($.browser.version) == 6) {
			settings.theme = "light_square";
		}
		if ($('.pp_overlay').size() == 0)
			_buildOverlay();
		var doresize = true, percentBased = false, correctSizes, $pp_pic_holder, $ppt, $pp_overlay, pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth, windowHeight = $(
				window).height(), windowWidth = $(window).width(), 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() {
												_self = this;
												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] === $(_self)[0])
																			setPosition = i;
																		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);
			image_set = ($(images).size() > 0) ? true : false;
			_checkPosition($(images).size());
			$('.pp_loaderIcon').show();
			$pp_overlay.show()
					.fadeTo(settings.animationSpeed, settings.opacity);
			$pp_pic_holder.find('.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;
			}
			;
			movie_width = (parseFloat(grab_param('width', images[setPosition]))) ? grab_param(
					'width', images[setPosition])
					: settings.default_width.toString();
			movie_height = (parseFloat(grab_param('height', images[setPosition]))) ? grab_param(
					'height', images[setPosition])
					: settings.default_height.toString();
			if (movie_width.indexOf('%') != -1
					|| movie_height.indexOf('%') != -1) {
				movie_height = parseFloat(($(window).height()
						* parseFloat(movie_height) / 100) - 100);
				movie_width = parseFloat(($(window).width()
						* parseFloat(movie_width) / 100) - 100);
				percentBased = true;
			}
			$pp_pic_holder
					.fadeIn(function() {
						imgPreloader = "";
						switch (_getFileType(images[setPosition])) {
						case 'image':
							imgPreloader = new Image();
							nextImage = new Image();
							if (image_set && setPosition > $(images).size())
								nextImage.src = images[setPosition + 1];
							prevImage = new Image();
							if (image_set && images[setPosition - 1])
								prevImage.src = images[setPosition - 1];
							$pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup;
							$pp_pic_holder.find('#fullResImage').attr('src',
									images[setPosition]);
							imgPreloader.onload = function() {
								correctSizes = _fitToViewport(
										imgPreloader.width, imgPreloader.height);
								_showContent();
							};
							imgPreloader.onerror = function() {
								alert('Image cannot be loaded. Make sure the path is correct and image exist.');
								$.prettyPhoto.close();
							};
							imgPreloader.src = images[setPosition];
							break;
						case 'youtube':
							correctSizes = _fitToViewport(movie_width,
									movie_height);
							movie = 'http://www.youtube.com/v/' + grab_param(
									'v', images[setPosition]);
							if (settings.autoplay)
								movie += "&autoplay=1";
							toInject = settings.flash_markup.replace(
									/{width}/g, correctSizes['width']).replace(
									/{height}/g, correctSizes['height'])
									.replace(/{wmode}/g, settings.wmode)
									.replace(/{path}/g, movie);
							break;
						case 'vimeo':
							correctSizes = _fitToViewport(movie_width,
									movie_height);
							movie_id = images[setPosition];
							movie = 'http://vimeo.com/moogaloop.swf?clip_id=' + movie_id
									.replace('http://vimeo.com/', '');
							if (settings.autoplay)
								movie += "&autoplay=1";
							toInject = settings.flash_markup.replace(
									/{width}/g, correctSizes['width']).replace(
									/{height}/g, correctSizes['height'])
									.replace(/{wmode}/g, settings.wmode)
									.replace(/{path}/g, movie);
							break;
						case 'quicktime':
							correctSizes = _fitToViewport(movie_width,
									movie_height);
							correctSizes['height'] += 15;
							correctSizes['contentHeight'] += 15;
							correctSizes['containerHeight'] += 15;
							toInject = settings.quicktime_markup.replace(
									/{width}/g, correctSizes['width']).replace(
									/{height}/g, correctSizes['height'])
									.replace(/{wmode}/g, settings.wmode)
									.replace(/{path}/g, images[setPosition])
									.replace(/{autoplay}/g, settings.autoplay);
							break;
						case 'flash':
							correctSizes = _fitToViewport(movie_width,
									movie_height);
							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('?'));
							toInject = settings.flash_markup.replace(
									/{width}/g, correctSizes['width']).replace(
									/{height}/g, correctSizes['height'])
									.replace(/{wmode}/g, settings.wmode)
									.replace(/{path}/g,
											filename + '?' + flash_vars);
							break;
						case 'iframe':
							correctSizes = _fitToViewport(movie_width,
									movie_height);
							frame_url = images[setPosition];
							frame_url = frame_url.substr(0, frame_url
									.indexOf('iframe') - 1);
							toInject = settings.iframe_markup.replace(
									/{width}/g, correctSizes['width']).replace(
									/{height}/g, correctSizes['height'])
									.replace(/{path}/g, frame_url);
							break;
						case 'inline':
							myClone = $(images[setPosition])
									.clone()
									.css( {
										'width' : settings.default_width
									})
									.wrapInner(
											'<div id="pp_full_res"><div class="pp_inline clearfix"></div></div>')
									.appendTo($('body'));
							correctSizes = _fitToViewport($(myClone).width(),
									$(myClone).height());
							$(myClone).remove();
							toInject = settings.inline_markup
									.replace(/{content}/g, $(
											images[setPosition]).html());
							break;
						}
						;
						if (!imgPreloader) {
							$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
							_showContent();
						}
						;
					});
		};
		$.prettyPhoto.changePage = function(direction) {
			if (direction == 'previous') {
				setPosition--;
				if (setPosition < 0) {
					setPosition = 0;
					return;
				}
				;
			} else if(direction == 'next') {
				if ($('.pp_arrow_next').is('.disabled'))
					return;
				setPosition++;
			} else {
				if(isNaN(direction) == false) {
					if($(images).size() >= direction) {
						setPosition = direction;	
					}
				}
			}
			;
			if (!doresize)
				doresize = true;
			_hideContent(function() {
				$.prettyPhoto.open(images, titles, descriptions)
			});
			$('a.pp_expand,a.pp_contract').fadeOut(settings.animationSpeed);
		};
		$.prettyPhoto.close = function() {
			$pp_pic_holder.find('object,embed').css('visibility', 'hidden');
			$('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(
					settings.animationSpeed);
			$pp_overlay.fadeOut(settings.animationSpeed, function() {
				$('#pp_full_res').html('');
				$pp_pic_holder.attr('style', '').find(
						'div:not(.pp_hoverContainer)').attr('style', '');
				_centerOverlay();
				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();
			projectedTop = scrollPos['scrollTop']
					+ ((windowHeight / 2) - (correctSizes['containerHeight'] / 2));
			if (projectedTop < 0)
				projectedTop = 0 + $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.find(
										'.pp_hoverContainer,#fullResImage')
										.height(correctSizes['height']).width(
												correctSizes['width']);
								$pp_pic_holder.find('.pp_fade').fadeIn(
										settings.animationSpeed);
								if (image_set
										&& _getFileType(images[setPosition]) == "image") {
									$pp_pic_holder.find('.pp_hoverContainer')
											.show();
								} else {
									$pp_pic_holder.find('.pp_hoverContainer')
											.hide();
								}
								if (settings.showTitle && hasTitle) {
									$ppt
											.css( {
												'top' : $pp_pic_holder.offset().top - 25,
												'left' : $pp_pic_holder
														.offset().left + 20,
												'display' : 'none'
											});
									$ppt.fadeIn(settings.animationSpeed);
								}
								;
								if (correctSizes['resized'])
									$('a.pp_expand,a.pp_contract').fadeIn(
											settings.animationSpeed);
								settings.changepicturecallback();
							});
		};
		function _hideContent(callback) {
			$pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css(
					'visibility', 'hidden');
			$pp_pic_holder.find('.pp_fade').fadeOut(settings.animationSpeed,
					function() {
						$('.pp_loaderIcon').show();
						if (callback)
							callback();
					});
			$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;
			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 : Math.floor(imageWidth),
				height : Math.floor(imageHeight),
				containerHeight : Math.floor(pp_containerHeight),
				containerWidth : Math.floor(pp_containerWidth) + 40,
				contentHeight : Math.floor(pp_contentHeight),
				contentWidth : Math.floor(pp_contentWidth),
				resized : hasBeenResized
			};
		}
		;
		function _getDimensions(width, height) {
			width = parseFloat(width);
			height = parseFloat(height);
			$pp_details = $pp_pic_holder.find('.pp_details');
			$pp_details.width(width);
			detailsHeight = parseFloat($pp_details.css('marginTop'))
					+ parseFloat($pp_details.css('marginBottom'));
			$pp_details = $pp_details.clone().appendTo($('body')).css( {
				'position' : 'absolute',
				'top' : -10000
			});
			detailsHeight += $pp_details.height();
			detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight;
			if ($.browser.msie && $.browser.version == 7)
				detailsHeight += 8;
			$pp_details.remove();
			pp_contentHeight = height + detailsHeight;
			pp_contentWidth = width;
			pp_containerHeight = pp_contentHeight + $ppt.height()
					+ $pp_pic_holder.find('.pp_top').height()
					+ $pp_pic_holder.find('.pp_bottom').height();
			pp_containerWidth = width;
		}

		function _getFileType(itemSrc) {
			if (itemSrc.match(/youtube\.com\/watch/i)) {
				return 'youtube';
			} else if (itemSrc.match(/vimeo\.com/i)) {
				return 'vimeo';
			} else if (itemSrc.indexOf('.mov') != -1) {
				return 'quicktime';
			} else if (itemSrc.indexOf('.swf') != -1) {
				return 'flash';
			} else if (itemSrc.indexOf('iframe') != -1) {
				return 'iframe'
			} else if (itemSrc.substr(0, 1) == '#') {
				return 'inline';
			} else {
				return 'image';
			}
			;
		}
		;
		function _centerOverlay() {
			if (doresize) {
				titleHeight = $ppt.height();
				contentHeight = $pp_pic_holder.height();
				contentwidth = $pp_pic_holder.width();
				projectedTop = (windowHeight / 2) + scrollPos['scrollTop']
						- ((contentHeight + titleHeight) / 2);
				$pp_pic_holder.css( {
					'top' : projectedTop,
					'left' : (windowWidth / 2) + scrollPos['scrollLeft']
							- (contentwidth / 2)
				});
				$ppt.css( {
					'top' : projectedTop - titleHeight,
					'left' : (windowWidth / 2) + scrollPos['scrollLeft']
							- (contentwidth / 2) + 20
				});
			}
			;
		}
		;
		function _getScroll() {
			if (self.pageYOffset) {
				return {
					scrollTop : self.pageYOffset,
					scrollLeft : self.pageXOffset
				};
			} else if (document.documentElement
					&& document.documentElement.scrollTop) {
				return {
					scrollTop : document.documentElement.scrollTop,
					scrollLeft : document.documentElement.scrollLeft
				};
			} else if (document.body) {
				return {
					scrollTop : document.body.scrollTop,
					scrollLeft : document.body.scrollLeft
				};
			}
			;
		}
		;
		function _resizeOverlay() {
			windowHeight = $(window).height();
			windowWidth = $(window).width();
			$pp_overlay.css( {
				'height' : $(document).height()
			});
		}
		;
		function _buildOverlay() {
			$('body').append(settings.markup);
			$pp_pic_holder = $('.pp_pic_holder');
			$ppt = $('.ppt');
			$pp_overlay = $('div.pp_overlay');
			$pp_pic_holder.attr('class', 'pp_pic_holder ' + settings.theme);
			$pp_overlay.css( {
				'opacity' : 0,
				'height' : $(document).height()
			}).bind('click', function() {
				if (!settings.modal)
					$.prettyPhoto.close();
			});
			$('a.pp_close').bind('click', function() {
				$.prettyPhoto.close();
				return false;
			});
			$('a.pp_hoverContainer').bind('click', function() {
				$.prettyPhoto.close();
				return false;
			});
			$('a.pp_expand').bind(
					'click',
					function() {
						$this = $(this);
						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(function() {
							$.prettyPhoto.open(images, titles, descriptions)
						});
						$pp_pic_holder.find('.pp_fade').fadeOut(
								settings.animationSpeed);
						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_direct_picture').bind('click',
					function() {
						$.prettyPhoto.changePage($param);
						return false;
					});
		}
		;
		_centerOverlay();
	};
	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);

