
var animateFT = function(nameID,nameClass) {
	this.nameID = nameID;
	this._obj = $(nameID).children();
	this.obj = this._obj.filter(nameClass);
	this.obj.css('position', 'relative');
	this.obj.css('top', 0);
	this._prvni = this._obj_i = 0;
	this._posledni = this.obj.size()-1;
};

animateFT.prototype = {
	prvni: function(){
		this._obj_i = 0;
		return $(this.obj.get(this._prvni));
	},
	posledni: function(){
		this._obj_i = this._posledni;
		return $(this.obj.get(this._posledni));
	},
	za_id: function(){
		if(this._obj_i+1 >= this.pocet())
			return 0;
		else
			return this._obj_i+1;
	},
	za: function(){
		return $(this.obj.get(this.za_id()));
	},
	dalsi: function(){
		if(this._obj_i+1 >= this.pocet())
			this._obj_i=0;
		else
			++this._obj_i;
		return $(this.obj.get(this._obj_i));
	},
	aktualni_id: function(){
		return this._obj_i;
	},
	aktualni: function(){
		return $(this.obj.get(this.aktualni_id()));
	},
	vymena: function(a,b){
		var p = this.obj[a];
		this.obj[a] = this.obj[b];
		this.obj[b] = p;
	},
	pocet: function(){
		return this.obj.size();
	},
	ziskat: function(num){
		return $(this.obj.get(num));
	},
	bezi: function(){
		return this.obj.queue("fx").length;
	}
}

var animateFT_typ1 = function(nameID,nameClass,speed,pauza) {
	this.speed = speed;
	this.pauza = pauza;
	this.obj = new animateFT(nameID,nameClass);
	var _self = this; setTimeout(function(){ _self.run();}, this.pauza);
}

animateFT_typ1.prototype = {
	run: function(){
		var animate_pocet = Math.floor(this.obj.pocet()/2);
		var animate_offset = this.obj.ziskat(animate_pocet).offset().top - this.obj.ziskat(0).offset().top;

		for(var i=0;i<animate_pocet;i++){
			this.obj.ziskat(i).animate({opacity: 0}, this.speed).animate({top: "+="+animate_offset},100).animate({opacity: 1}, this.speed);
			this.obj.ziskat(i+animate_pocet).animate({opacity: 0}, this.speed).animate({top: "-="+animate_offset},100).animate({opacity: 1}, this.speed);

			this.obj.vymena(i,i+animate_pocet);
		}
		var _self = this;
		setTimeout(function(){_self.pokracovani();}, this.speed + this.pauza);
	},
	pokracovani: function(){
		if(this.obj.bezi()>0) {
			var _self = this; setTimeout(function(){ _self.pokracovani();}, this.pauza);
		}else{
			this.run();
		}
	}
}

var animateFT_typ2 = function(nameID,nameClass,speed,pauza) {
	this.speed = speed;
	this.pauza = pauza;
	this.obj = new animateFT(nameID,nameClass);
	var _self = this; setTimeout(function(){ _self.run();}, this.pauza);
}

animateFT_typ2.prototype = {
	run: function(){
		var akt = this.obj.aktualni();
		var za = this.obj.za();
		if(akt.outerHeight(true)!=za.outerHeight(true)) return;
		var delka = za.offset().top - akt.offset().top;
		akt.animate({opacity: 0}, this.speed, function(){
			akt.css('top', (parseFloat(akt.css('top'))+delka)+"px" );
		});
		za.animate({opacity: 0}, this.speed, function(){
			za.css('top', (parseFloat(za.css('top'))-delka)+"px");
		});
		akt.animate({opacity: 1}, this.speed);
		za.animate({opacity: 1}, this.speed);

		this.obj.vymena(this.obj.aktualni_id(),this.obj.za_id());
		this.obj.dalsi();
		if(this.obj.za_id()==0)
			this.obj.prvni();
		var _self = this;
		setTimeout(function(){_self.pokracovani();}, this.speed + this.pauza);
	},
	pokracovani: function(){
		if(this.obj.bezi()>0) {
			var _self = this; setTimeout(function(){ _self.pokracovani();}, this.pauza);
		}else{
			this.run();
		}
	}
}

var animateFT_typ3 = function(nameID,nameClass,speed,pauza) {
	this.speed = speed;
	this.pauza = pauza;
	this.akt_i = 0;
	this.obj = new animateFT(nameID,nameClass);
	var _self = this; setTimeout(function(){ _self.run();}, this.pauza);
}

animateFT_typ3.prototype = {
	run: function(){
		var akt = this.obj.aktualni();
		var za = this.obj.za();

		akt.animate({opacity: 0}, this.speed, function(){
			akt.hide();
			za.css('opacity',0).show().animate({opacity: 1}, this.speed);
		});

		this.obj.dalsi();

		var _self = this;
		setTimeout(function(){_self.pokracovani();}, this.speed + this.pauza);
	},
	pokracovani: function(){
		if(this.obj.bezi()>0) {
			var _self = this; setTimeout(function(){ _self.pokracovani();}, this.pauza);
		}else{
			this.run();
		}
	}
}

