/**
 * A function that can move objects. 
 * 
 * VERSION 1
 * 	- Only vertical moving 
 * 
 * @author Sybren Dotinga, JDI internet professionals
 * @version 0.1
 */
(function($) {
	$.fn.Mover = function(options) {		
		options = $.extend( {
			
			defaults: {
				log: true,
				wrapper: $(this)
			},
			
			Slides : {
				Items: null,
				HowMany: 0,
				Active: 1,
				Holder: null
			},
			
			Settings : {
				SlideHeight: 0,
				SlideClass: 'Mover',
				SlideHolderID: 'Items',
				Mode: 'Vertical',
				Speed: 350,
				StartSlide: 1
			},
			
			Navigation : {
				Up: $(this).find('#Up'),
				Down: $(this).find('#Down')
			}
			
		}, options );
			
		init();
		
		function init() {
			
			if (typeof(window["console"]) == "undefined") {
				options.defaults.log = false;
			}
			
			options.Slides.Holder = $(options.defaults.wrapper).find('#' + options.Settings.SlideHolderID),
			options.Slides.Items = $(options.defaults.wrapper).find('.' + options.Settings.SlideClass),
			options.Slides.HowMany = options.Slides.Items.length;			
			
			if (options.defaults.log)
				console.info('Items in this mover: ' + options.Slides.HowMany );
			
			if (options.defaults.log)
				console.info( 'Start with slide ' + options.Settings.StartSlide );
			
			create();
			canMove();
			
			if (options.defaults.log)
				console.info('Actieve item: ' + options.Slides.Active );
			
			if ( options.Settings.StartSlide > 1 ) {
				moveDown( options.Settings.StartSlide );
			}
		};
		
		function create() {
			
			switch ( options.Settings.Mode ) {
				case 'Vertical' : 
					$(options.Navigation.Up).click( function() {
						moveUp();
						return false;
					});
					$(options.Navigation.Down).click( function() {
						moveDown();
						return false;
					});
				break;
				
				case 'Horizontal' :
					if (options.defaults.log)
						console.error('Function not yet implemented!');
				break;
			}
			
		};
		
		function moveUp() {
			if ( !$(options.Navigation.Up).hasClass('Inactive') ) {

				var Top = parseInt( options.Slides.Holder.css('top') );
				Top = Top + options.Settings.SlideHeight;
				
				$(options.Slides.Holder).animate({
					top: Top + 'px'
				}, options.Settings.Speed , function() {
					
					if (options.defaults.log)
						console.info('Omhoog!');
					
					options.Slides.Active--;
					canMove();
				});
				
			}
			
			if (options.defaults.log)
				console.info('Actieve item: ' + options.Slides.Active );
		};
		
		function moveDown( StartSlide ) {
			
			if ( !$(options.Navigation.Down).hasClass('Inactive') ) {

				var Top = parseInt( options.Slides.Holder.css('top') );
				
				if ( StartSlide ) {
					Top = Top - ( ( StartSlide - 1 ) * options.Settings.SlideHeight );
				} else {
					Top = Top - options.Settings.SlideHeight;
				}
				
				$(options.Slides.Holder).animate({
					top: Top + 'px'
				}, options.Settings.Speed , function() {
					
					if (options.defaults.log)
						console.info('Omlaag!');
					
					if ( StartSlide ) {
						options.Slides.Active = StartSlide;
					} else {
						options.Slides.Active++;
					}
					canMove();
				});
				
			}
			
			if (options.defaults.log)
				console.info('Actieve item: ' + options.Slides.Active );
			
		};
		
		function canMove() {
			if ( options.Slides.HowMany <= 1 ) {
				$(options.Navigation.Up).addClass('Inactive');
				$(options.Navigation.Down).addClass('Inactive');
			} else {
				//Actieve + 1 > HowMany dan mag het niet
				if ( options.Slides.Active - 1 < 1 ) {
					$(options.Navigation.Up).addClass('Inactive');
				} else {
					$(options.Navigation.Up).removeClass('Inactive');
				}
				
				//Actieve - 1 < 1 dan mag het niet
				if ( options.Slides.Active + 1 > options.Slides.HowMany ) {
					$(options.Navigation.Down).addClass('Inactive');	
				} else {
					$(options.Navigation.Down).removeClass('Inactive');
				}
			}
		};
		
	}
})(jQuery);
