// requires jQuery 1.4 min

function GalleryManager (photos, params, random_sequence) {

	var first = true;
	var current = 0;
	var interval;
	var is_playing = true;
	
	if (random_sequence == null) random_sequence = false;
	
	if (random_sequence) {
		function random_order (){
  			return (Math.round(Math.random())-0.5);
		}
		photos.sort (random_order);
	}
		
	var defaults = {
	  	delay : 10000,
	  	transition : 1000,
	  	photos:photos,
	  	id_front:null,
	  	id_rear:null
	};
	
	var data = jQuery.extend (defaults, params);
	data.delay = data.delay + data.transition;
	
	// private method instead of this.startGallery = function () {...}
	
	this.startGallery = function () {
		this.play ();
		$(data.id_front).css("opacity", 0).css({backgroundImage:"url(" + data.photos[1] + ")"});
		$(data.id_rear).css({backgroundImage:"url(" + data.photos[0] + ")"});
		current = 1;
	}
	
	this.play = function () {
		var t = this;
		interval = setInterval (function () {
			t.changePhoto ();
		}, data.delay);
	}
	
	this.stop = function () {
		clearInterval (interval);
	}
	
	this.changePhoto = function () {
		current ++;
		if (current == data.photos.length) current = 0;
		this.fade (current);	
	}
	
	this.fade = function (next_img) {
	
		var front = data.id_front;
		var rear = data.id_rear;
	
		if ($(front).css("opacity") == 0) {
			$(front).css({display:"block"}).stop().animate ({
				opacity:1
			}, data.transition, function () {
				$(rear).css({backgroundImage:"url(" + data.photos[next_img] + ")"});
			});
		} else {
			$(front).stop().animate ({
				opacity:0
			}, data.transition, function () {
				$(front).css({display:"none", backgroundImage:"url(" + data.photos[next_img] + ")"});
			});
		}		
	}
	
	this.startGallery ();
}


