/**

 * jQuery.ScrollTo - Easy element scrolling using jQuery.

 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com

 * Dual licensed under MIT and GPL.

 * Date: 5/25/2009

 * @author Ariel Flesler

 * @version 1.4.2

 *

 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html

 */

;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);



jQuery(function() {

	// ======================= imagesLoaded Plugin ===============================

	// https://github.com/desandro/imagesloaded



	// jQuery('#my-container').imagesLoaded(myFunction)

	// execute a callback when all images have loaded.

	// needed because .load() doesn't work on cached images



	// callback function gets image collection as argument

	//  this is the container



	// original: mit license. paul irish. 2010.

	// contributors: Oren Solomianik, David DeSandro, Yiannis Chatzikonstantinou



	jQuery.fn.imagesLoaded 		= function( callback ) {

	var $images = this.find('img'),

		len 	= $images.length,

		_this 	= this,

		blank 	= 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';



	function triggerCallback() {

		callback.call( _this, $images );

	}



	function imgLoaded() {

		if ( --len <= 0 && this.src !== blank ){

			setTimeout( triggerCallback );

			$images.unbind( 'load error', imgLoaded );

		}

	}



	if ( !len ) {

		triggerCallback();

	}



	$images.bind( 'load error',  imgLoaded ).each( function() {

		// cached images don't fire load sometimes, so we reset src.

		if (this.complete || this.complete === undefined){

			var src = this.src;

			// webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f

			// data uri bypasses webkit log warning (thx doug jones)

			this.src = blank;

			this.src = src;

		}

	});



	return this;

	};



	// gallery container

	var $rgGallery			= jQuery('#rg-gallery'),

	// carousel container

	$esCarousel			= $rgGallery.find('div.es-carousel-wrapper'),

	// the carousel items

	$items				= $esCarousel.find('ul > li'),

	// total number of items

	itemsCount			= $items.length;

	

	Gallery				= (function() {

			// index of the current item

		var current			= 0, 

			// mode : carousel || fullview

			mode 			= 'carousel',

			// control if one image is being loaded

			anim			= false,

			init			= function() {

				

				// (not necessary) preloading the images here...

				$items.add('<img src="images/ajax-loader.gif"/><img src="images/black.png"/>').imagesLoaded( function() {

					// add options

					_addViewModes();

					

					// add large image wrapper

					_addImageWrapper();

					

					// show first image

					_showImage( $items.eq( current ) );

						

				});

				

				// initialize the carousel

					if( mode === 'carousel' )

				_initCarousel();

				

			},

			_initCarousel	= function() {

				

				// we are using the elastislide plugin:

				// http://tympanus.net/codrops/2011/09/12/elastislide-responsive-carousel/

				var imgsize = $rgGallery.attr('data-size') ? parseInt($rgGallery.attr('data-size')) : 108;

				$esCarousel.show().elastislide({

					imageW 	: imgsize,
					
					minItems: 5,

					onClick	: function( $item ) {

						if( anim ) return false;

						anim	= true;

						// on click show image

						_showImage($item);

						// change current

						current	= $item.index();

					}

				});

				

				// set elastislide's current to current

				$esCarousel.elastislide( 'setCurrent', current );

				

			},

			_addViewModes	= function() {

				

				// top right buttons: hide / show carousel

				

				var $viewfull	= jQuery('<a href="#" class="rg-view-full"></a>'),

					$viewthumbs	= jQuery('<a href="#" class="rg-view-thumbs rg-view-selected"></a>');

				

				$rgGallery.prepend( jQuery('<div class="rg-view"/>').append( $viewfull ).append( $viewthumbs ) );

				

				$viewfull.bind('click.rgGallery', function( event ) {

						if( mode === 'carousel' )

							$esCarousel.elastislide( 'destroy' );

						$esCarousel.hide();

					$viewfull.addClass('rg-view-selected');

					$viewthumbs.removeClass('rg-view-selected');

					mode	= 'fullview';

					return false;

				});

				

				$viewthumbs.bind('click.rgGallery', function( event ) {

					_initCarousel();

					$viewthumbs.addClass('rg-view-selected');

					$viewfull.removeClass('rg-view-selected');

					mode	= 'carousel';

					return false;

				});

				

					if( mode === 'fullview' )

						$viewfull.trigger('click');

					

			},

			_addImageWrapper= function() {

				

				// adds the structure for the large image and the navigation buttons (if total items > 1)

				// also initializes the navigation events

				

				//jQuery('#img-wrapper-tmpl').tmpl( {itemsCount : itemsCount} ).prependTo( $rgGallery );

				

				if( itemsCount > 1 ) {

					// addNavigation

					var $navPrev		= $rgGallery.find('a.rg-image-nav-prev'),

						$navNext		= $rgGallery.find('a.rg-image-nav-next'),

						$imgWrapper		= jQuery('body').find('div.rg-image');

						

					$navPrev.bind('click.rgGallery', function( event ) {

						_navigate( 'left' );

						return false;

					});	

					

					$navNext.bind('click.rgGallery', function( event ) {

						_navigate( 'right' );

						return false;

					});

				

					// add touchwipe events on the large image wrapper

					$imgWrapper.touchwipe({

						wipeLeft			: function() {

							_navigate( 'right' );

						},

						wipeRight			: function() {

							_navigate( 'left' );

						},

						preventDefaultEvents: false

					});

				

					jQuery(document).bind('keyup.rgGallery', function( event ) {

						if (event.keyCode == 39)

							_navigate( 'right' );

						else if (event.keyCode == 37)

							_navigate( 'left' );	

					});

					

				}

				

			},

			_navigate		= function( dir ) {

				

				// navigate through the large images

				

				if( anim ) return false;

				anim	= true;

				

				if( dir === 'right' ) {

					if( current + 1 >= itemsCount )

						current = 0;

					else

						++current;

				}

				else if( dir === 'left' ) {

					if( current - 1 < 0 )

						current = itemsCount - 1;

					else

						--current;

				}

				

				_showImage( $items.eq( current ) );

				

			},

			_showImage		= function( $item ) {

				

				// shows the large image that is associated to the $item

				

				//var $loader	= $rgGallery.find('div.rg-loading').show();

				var $loader	= jQuery('body').find('div.rg-loading').show();

				

				$items.removeClass('selected');

				$item.addClass('selected');

					 

				var $thumb		= $item.find('img'),

					largesrc	= $thumb.data('large'),

					title		= $thumb.data('description');

				

				jQuery('<img/>').load( function() {

					

					//$rgGallery.find('div.rg-image').empty().append('<img src="' + largesrc + '"/>');

					

					if(jQuery(window).scrollTop() >100)jQuery.scrollTo(jQuery('body').find('div.rg-image'),300);

					jQuery('body').find('div.rg-image').empty().append('<img src="' + largesrc + '"/>');

					

					if( title )

						$rgGallery.find('div.rg-caption').show().children('p').empty().text( title );

					

					$loader.hide();

					

					if( mode === 'carousel' ) {

						$esCarousel.elastislide( 'reload' );

						$esCarousel.elastislide( 'setCurrent', current );

					}

					

					anim	= false;

					

				}).attr( 'src', largesrc );

				

			};

		

		return { init : init };

	

	})();



	Gallery.init();

});
