var gallery = {
	automatic: true,
	count: function() {
		return gallery.select.items().length;
	},
	currentImage: 0,
	defaults: {
		changeSpeed: 5000,
		fadeInSpeed: 750,
		gallerySelector: '#gallery'
	},
	direction: 1,
	displayImage: function() {
		if ( gallery.automatic ) {
			setTimeout(function () {
					if ( gallery.automatic ) {
						gallery.select.items().eq(gallery.currentImage).fadeOut(gallery.config.fadeInSpeed);
						gallery.move();
						gallery.select.items().eq(gallery.currentImage).fadeIn(gallery.config.fadeInSpeed);
						gallery.select.count().html((gallery.currentImage + 1).toString());
						gallery.displayImage();
					}
				},
				gallery.config.changeSpeed
			);
		} else {
			gallery.select.items().eq(gallery.currentImage).fadeOut(gallery.config.fadeInSpeed);
			gallery.move();
			gallery.select.items().eq(gallery.currentImage).fadeIn(gallery.config.fadeInSpeed);
			gallery.select.count().html((gallery.currentImage + 1).toString());
		}
	},
	hasGallery: function() {
		return 1 < gallery.count()
	},
	init: function(args) {
		this.config = $.extend(this.defaults, args);
		if ( 0 < this.config.additionalImages.length ) {
			for(image in this.config.additionalImages) {
				galleryItem = '<li><div class="image"><img style="margin: ' + this.config.additionalImages[image].marginTop + 'px ' + this.config.additionalImages[image].marginRight + 'px;" src="' + this.config.additionalImages[image].src + '" height="' + this.config.additionalImages[image].height + '" width="' + this.config.additionalImages[image].width + '" alt="" /></div>';
				if ( this.config.hasCaption) {
					galleryItem = galleryItem + '<div class="text">' + this.config.additionalImages[image].caption + '</div>';
				}
				galleryItem = galleryItem + '</li>';
				gallery.select.list().append(galleryItem);
			}
		}
		this.initDisplay();
	},
	initCounterDisplay: function() {
		gallery.select.container().append('<div class="counter"><span>' + (this.currentImage + 1).toString() + '</span>/' + this.count() + '</div>');
		
	},
	initDisplay: function() {
		this.select.container().css('position', 'relative');
		this.select.container().css('height', this.config.containerHeight);
		this.select.items().css('position', 'absolute');
		this.select.items().css('display', 'none');
		this.select.items().eq(0).css('display', 'block');
	},
	initNavigationDisplay: function() {
		gallery.select.container().append('<div class="previous galleryNavigation"><a><img src="' + gallery.config.previousImage + '" alt="Previous" /></a></div>');
		gallery.select.navigation('previous').click(function() {gallery.navigation('previous')});
		gallery.select.container().append('<div class="next galleryNavigation"><a><img src="' + gallery.config.nextImage + '" alt="Next" /></a></div>');
		gallery.select.navigation('next').click(function() {gallery.navigation('next')});
	},
	move: function() {
		gallery.currentImage += gallery.direction;		
		if ( gallery.currentImage == gallery.count() )
			gallery.currentImage = 0;			
		if ( gallery.currentImage == -1)
			gallery.currentImage = gallery.count() - 1;
	},
	navigation: function(direction) {
		this.automatic = false;
		this.direction = direction == 'previous' ? this.direction = -1 : this.direction = 1;
		this.displayImage();
	},
	select: {
		container: function() {
			return jQuery(gallery.config.gallerySelector);
		},
		count: function() {
			return jQuery(gallery.config.gallerySelector + ' .counter span');			
		},
		items: function() {
			return jQuery(gallery.config.gallerySelector + ' li');
		},
		list: function() {
			return jQuery(gallery.config.gallerySelector + ' ul');
		},
		navigation: function(button) {
			return jQuery(gallery.config.gallerySelector + ' .' + button + ' a');		
		}
	},
	start: function() {
		if ( gallery.hasGallery() ){
			if ( gallery.config.showNav) {
				gallery.initCounterDisplay();
				gallery.initNavigationDisplay();
			}
			gallery.displayImage();
		}
	}
}



