/**
 * jQuery.photoslider - 
 * Date: 2010/08/04
 *
 * @author Michaël van Oosten
 * @version 1.0
 *
 **/

(function($) {
	$.fn.photoslider = function(settings) {

		var config = {
			'addclass' : 'photoalbum_jquery',
			'html' : '<a href="#" class="nav [prev]"><span></span></a><div class="[imgwrp]">[]</div><a href="#" class="nav [next]"><span></span></a>',
			'before' : '<div class="[imgwrp_large]"><img /><div class="title"></div></div>',
			'previous' : 'previous',
			'imgwrp' : 'imgwrp',
			'imgwrp_large' : 'imgwrp_large',
			'next' : 'next',
			'pixelPerSec' : 500
			
		};
		if (settings) $.extend(config, settings);
		
		this.each(function() {

			// addClass and change html
			$(this)
				.addClass(config.addclass)
				.html(
					config.html
						.replace('[]', $(this).html())
						.replace('[prev]', config.previous)
						.replace('[imgwrp]', config.imgwrp)
						.replace('[next]', config.next))
				.before(config.before.replace('[imgwrp_large]', config.imgwrp_large));
			
			// view first image
			var imgwrp_large = $(this).prev();
			var first_link = $(this).find('img:eq(0)').parents('a');
			imgwrp_large.find('img').attr('src', first_link.attr('href'));
			imgwrp_large.find('.title').text( first_link.attr('title') );
			
			// reset margin-right of last <li>
			$(this).find('li:last').css('margin-right',0);
			
			// set width <ul>
			var ulWidth = 0;
			$(this).find('li').each(function() {
				ulWidth = ulWidth + $(this).width() + parseInt($(this).css('padding-left')) + parseInt($(this).css('padding-right')) + parseInt($(this).css('margin-right'));
			});
			$(this).find('ul').width(ulWidth);
			
			// a.previous:hover
			var previous = $(this).find('a.'+config.previous);
			previous.click(function() { return false; });
			previous.hover(
				function() { 
					var currentMarginLeft = parseInt($(this).parents('.' + config.addclass + ':first').find('ul').css('margin-left'));
					var toMarginLeft = 0; 
					var distance = Math.abs(currentMarginLeft - toMarginLeft);
					var time = Math.round((distance/config.pixelPerSec)*1000);
					
					$(this).parents('.'+config.addclass+':first').find('ul').animate({'margin-left':toMarginLeft}, time);
				},
				function() {
					$(this).parents('.'+config.addclass+':first').find('ul').stop();
				}
			);
			
			// a.next:hover
			var next = $(this).find('a.'+config.next);
			next.click(function() { return false; });
			next.hover(
				function() {
					var currentMarginLeft = parseInt($(this).parents('.' + config.addclass + ':first').find('ul').css('margin-left'));
					var toMarginLeft = $(this).parents('.' + config.addclass + ':first').find('.' + config.imgwrp).width() - $(this).parents('.' + config.addclass + ':first').find('ul').width();
					var distance = Math.abs(currentMarginLeft - toMarginLeft);
					var time = Math.round((distance/config.pixelPerSec)*1000);

					$(this).parents('.'+config.addclass+':first').find('ul').animate({'margin-left':toMarginLeft}, time);
				},
				function() {
					$(this).parents('.'+config.addclass+':first').find('ul').stop();
				}
			);
			
			// thumb click
			var thumblink = $(this).find('.' + config.imgwrp + ' a');
			thumblink.click(function() {
				var large_image = $(this).parents('.' + config.addclass).prev();
				large_image.find('img').attr('src', $(this).attr('href'));
				large_image.find('.title').text( $(this).attr('title') );
				
				return false;
			});

		});

		return this;

	}; 
	
 })(jQuery);
