
jQuery.noConflict();

Gallery = function(container, options) {
	container = jQuery(container);
	options = options || {};
	
	var instance = this;
	var timeAutoChange = 6000;
	var timeFadeImage = 3000;
	var timeFadeText = 400;
	var timeFadeImageFast = 400;
	var timeFadeTextFast = 40;
	
	if (options.width == null) options.width 	= 600;
	if (options.height == null) options.height 	= 400;

	var changeRunning = false;
	var debug = true;
	var logout;
	var images = jQuery('div.img', container);
	var texts = jQuery('div.img p', container);
	var nextButtons = jQuery('div.img a.next', container);
	var prevButtons = jQuery('div.img a.prev', container);
	
	nextButtons.click(function() {
		log('click next ' + changeRunning);
		changeNextFast();
		return false;
	});
	prevButtons.click(function() {
		log('click prev ' + changeRunning);
		changePrevFast();
		return false;
	});
	
	container.css({
		'position': 'relative', 
		'width': options.width + 'px', 
		'height': options.height + 'px'
	});

	images.css({
		'position': 'absolute', 
		'top': '0', 
		'left': '0'
	});

	var log = function(str) {
		if (!debug) return;
		
		if (typeof console != 'undefined' && console != null) console.log(str);
	}

	var changeImage;
	var changer;
	
	var startAnimation = function() {
		changer = setInterval(function() {
			changeNext();
		}, timeAutoChange);
	}
	startAnimation();
	var stopAnimation = function() {
		clearInterval(changer);
	}
	
	var changeNext = function() {
		if (changeRunning) return;
		changeRunning = true;
		log('changeNext ' + (new Date()).getTime());
		instance.changeImage = jQuery('div.img:last', instance.container);
		texts.fadeOut(timeFadeText);
		nextButtons.fadeOut(timeFadeText);
		prevButtons.fadeOut(timeFadeText);
		instance.changeImage.fadeOut(timeFadeImage, function() {
			jQuery(container).prepend(this);
			jQuery(this).show();
			texts.fadeIn(timeFadeText);
			nextButtons.fadeIn(timeFadeText);
			prevButtons.fadeIn(timeFadeText);
			changeRunning = false;
		});
	}
	
	var changeNextFast = function() {
		if (changeRunning) return;
		changeRunning = true;
		log('changeNextFast ' + (new Date()).getTime());
		stopAnimation();
		instance.changeImage = jQuery('div.img:last', instance.container);
		texts.fadeOut(timeFadeTextFast);
		instance.changeImage.fadeOut(timeFadeImageFast, function() {
			jQuery(container).prepend(this);
			jQuery(this).show();
			texts.fadeIn(timeFadeTextFast);
			changeRunning = false;
			startAnimation();
		});
	}
	
	var changePrevFast = function() {
		if (changeRunning) return;
		changeRunning = true;
		log('changePrevFast ' + (new Date()).getTime());
		stopAnimation();
		instance.changeImage = jQuery('div.img:first', instance.container);
		instance.changeImage.hide();
		jQuery(container).append(instance.changeImage);
		texts.fadeOut(timeFadeTextFast);
		instance.changeImage.fadeIn(timeFadeImageFast, function() {
			texts.fadeIn(timeFadeTextFast);
			changeRunning = false;
			startAnimation();
		});
	}
	
	log('start with ' + images.length + ' images!');
	
}
