/**
 * AdjustableSlider jQuery Plugin
 * -
 * jquery.plugin.js
 *
 * @author Thomas Michelbach <thomas@nomoresleep.net>
 * @version 1.1
 */

(function($){

	$.fn.adjustableSlider = function(options){
		
		var defaultOptions = {  
			adjust: {height: true, width: false},
			duration: 500,
			initialSlide: 0,
			selectors: {content: '.slide', heading: 'h2'}
		};  
		var options = $.extend(defaultOptions, options);
		var slides = {};
		
		if(window.location.hash){
			var hash = (window.location.hash).match('([0-9]+)');
			options.initialSlide = hash[1];
		}
		
		return this.each(function(){
			/* save instance for later usage */
			var me = $(this);

			/* remove 'noscript-class' (for styling purpose) */
			$(me).find('.noscript').removeClass('noscript');
			
			/* calculate dimensions */ 
			var w = 0;
			for(var s = 0; s < $(me).find(options.selectors.content).length; s++){
				$(me).find(options.selectors.content).eq(s).data('width', w);
				w += $(me).find(options.selectors.content).eq(s).width();
			}
				
			/* bring headings in order, wrap in a list-element & assign event */
			$(me).data('slide', 0).prepend($(me).find(options.selectors.heading)).find(options.selectors.heading).wrap('<li></li>').parent().wrapAll('<ul></ul>');
			$(me).find(options.selectors.heading).wrapInner('<a href="#"></a>').each(function(i, heading){
				$(heading).find('a').click(function(e){
					var s = Math.abs($(me).data('slide') - i);
					var d = (e.duration >= 0) ? (e.duration/2) : (options.duration/2);
					var h = $(me).find(options.selectors.content).eq(i).outerHeight() + $(me).find('ul').eq(0).outerHeight();
					var l = $(me).find(options.selectors.content).eq(i).data('width');
					var w = $(me).find(options.selectors.content).eq(i).outerWidth();
					var a = options.adjust.width ? {height: h, width: w} : {height: h};

					$(me).animate(a, d, function(){
						$(me).find(options.selectors.content).parent().animate({left: -l}, d*s, function(){
							$(me).data('slide', i).find(options.selectors.heading).parent().removeClass('selected');
							$(heading).parent().addClass('selected');
						});						
					});
					window.location.hash = i;
					return false;
				});
			});
			
			/* bring slides in order, wrap slides & calculate width */
			$(me).find(options.selectors.content).wrapAll('<div class="slider-track"></div>').parent().width(w);
			
			/* preload images */
			var images = [];
			$(me).find('img').each(function(i, img){
				images.push($(img).attr('src'));
				$(img).attr('src', '');
			});
			/* make initial slide in no-time */
			$.fn.adjustableSlider.preload(me, images, 0, function(){
				$(me).find(options.selectors.heading).eq(options.initialSlide).find('a').trigger({type: 'click', duration: 0});	
				options.callback();
			});
				
		});
		};
		

		$.fn.adjustableSlider.callslider = function(i){
                $('#sliderdiv ul li h2 a').eq(i).trigger({type: 'click', duration: 500});
		}



			
		$.fn.adjustableSlider.preload = function(me, images, i, callback){
			if(i < images.length){
				$(me).find('img').eq(i).load(function(){
					$(this).unbind();
					$.fn.adjustableSlider.preload(me, images, i+1, callback);	
				});
				$(me).find('img').eq(i).attr('src', images[i]);	
			}else{
				callback();
			}
		}

	
})(jQuery);