/*
-------------------------------------------------------------------------------------------
	-- script modification, adaptation and decompression into ltbx made by Upsite Ltd. --
	-- ltbx version 2.0 --
	please respect Author, leave credits below next line as they are:
	-------------------------------------------------------------------------------------
	
 *	Based on original script by Stephane Caron.
 *---------------------------------------------------------------------------------------*/

	( function( $ )
		
		{ $.ltbx = { version:'2.0' };
			
			$.fn.ltbx = function( settings ) {
				
				settings = jQuery.extend
				(
					{
						animationSpeed:'fast',
						opacity:0.50,
						showTitle:false,
						allowresize:true,
						default_width:500,
						default_height:344,
						counter_separator_label:'/',
						theme:'dark_rounded',
						hideflash:false,
						wmode:'transparent',
						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_fade"> \
													<a href="#" class="pp_expand" title="Expand the image"><img src="images/pix.gif" width="1" height="1" border="0" alt=""/></a> \
													<div class="pp_loaderIcon"></div> \
													<div class="pp_hoverContainer"> \
													</div> \
													<div id="pp_full_res"></div> \
													<div class="pp_details clearfix"> \
														<div class="rel"><div class="abs"><a class="pp_close" href="#"></a></div></div> \
														<p class="pp_description"></p> \
														<div class="pp_nav"> \
															<a href="#" class="pp_arrow_previous"></a> \
															<p class="currentTextHolder"><img src="images/pix.gif" width="10" height="1" border="0" alt=""/></p> \
															<a href="#" class="pp_arrow_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 && $.browser.version == 6 ) {
					
					settings.theme = "light_square";
				}
				
				if( !$pp_overlay ) {
					
					_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:$.ltbx.changePage('previous');
						break;
						
						case 39:$.ltbx.changePage('next');
						break;
						
						case 27:if(!settings.modal)$.ltbx.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( 'abbr' ) );
							});
						}
						else {
							
							images = $( this ).attr( 'href' );
							titles = ( $( this ).find( 'img' ).attr( 'alt' ) )? $( this ).find( 'img' ).attr( 'alt' ) : '';
							descriptions = ( $( this ).attr( 'abbr' ) )? $( this ).attr( 'abbr' ) : '';
						}
						
						$.ltbx.open( images, titles, descriptions );
						return false;
					});
				});
				
				
				
				$.ltbx.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;
					}
					
					imgPreloader = "";
					
					switch( _getFileType( images[ setPosition ] ) ) {
						
						case 'image' :
							
							imgPreloader 	= new Image();
							nextImage 		= new Image();
							prevImage 		= new Image();
							
							if( image_set && setPosition > $( images ).size() ) {
								
								nextImage.src=images[ setPosition + 1 ];
							}
							
							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.' );
								$.ltbx.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();
					};
				};
				
				
				
				
				$.ltbx.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( function() { $.ltbx.open( images, titles, descriptions ) } );
					
					$( 'a.pp_expand, a.pp_contract' ).fadeOut( settings.animationSpeed );
				};
				
				
				
				
				$.ltbx.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_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' ] - 82 );
							$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(){ $.ltbx.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(){ $.ltbx.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 - 82 );
					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 ) +61 } );
					};
				};
				
				
				
				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 )$.ltbx.close(); } );
					$( 'a.pp_close' ).bind( 'click', function() { $.ltbx.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() {
								
								$.ltbx.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() { $.ltbx.changePage( 'previous' ); return false; } );
					$pp_pic_holder.find( '.pp_next, .pp_arrow_next' ).bind( 'click', function(){ $.ltbx.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);

