/* ------------------------------------------------------------------------
 * 	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 :'normal',
							opacity :0.80,
							showTitle :true,
							allowresize :true,
							default_width :380,
							default_height :344,
							counter_separator_label :'/',
							theme :'light_rounded',
							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_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/0</p> \
            <a href="#" class="pp_arrow_next">Next</a> \
           </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_rounded";
		}
		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;
			}
			;
			//custom.
			p_code = grab_param('pCode', images[setPosition]);
			p_name = grab_param('pName', images[setPosition]);
			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':
							//custom.
							createCookie("pName", p_name);
							createCookie("pCode", p_code);
							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 == 'self')
			{//alert($('.pp_pic_holder').find("#email").val());
				setPosition = 0;
			}
			else
			{
				if($('.pp_arrow_next').is('.disabled'))
					return;
				setPosition++;
			}
			;
			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_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;
					});
		}
		;
		_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);

