function Fader() {
	this.config = {};
}

Fader.prototype.itemClassName = 'faderitem';
Fader.prototype.automaticFade = true;
Fader.prototype.automaticFadeInterval = 5000;
Fader.prototype.fadeSpeed = 1000;
Fader.prototype.stopOnMouseHover = true;
Fader.prototype.showNav = true;
Fader.prototype.prevClassName = 'prevbtn';
Fader.prototype.nextClassName = 'nextbtn';
Fader.prototype.intervals;
Fader.prototype.indexes;

Fader.prototype.makeFaders = function(element, faderclassname) {
	this.intervals = new Array();
	this.indexes = new Array();
	var faders = clienti.getElementsByClassName(element, faderclassname);
	
	for (var a = 0; a < faders.length; a++) {
		var fader = faders[a];
		this.indexes[this.indexes.length] = 0;
		this.intervals[this.intervals.length] = '';
		
		this.makeFader(fader,a);
	}
}

Fader.prototype.makeFader = function(fader,i) {
	var items = clienti.getElementsByClassName(fader,this.itemClassName);
	
	if (this.showNav) {
		var nextbtn = document.createElement('div');
		var prevbtn = document.createElement('div');
		
		nextbtn.className = this.nextClassName;
		prevbtn.className = this.prevClassName;
		
		fader.appendChild(nextbtn);
		fader.appendChild(prevbtn);
		
		clienti.addEventHandler(nextbtn,'click',function() {
			var _fader = arguments[0];
			var _items = arguments[1];
			var _i = arguments[2];
			var _prev = arguments[3];
			var _next = arguments[4];
			var _indexes = arguments[5];
			
			var intv = this.intervals[_i];
			
			if (intv != undefined) {
				clearInterval(intv);
			}
			
			var iw = _items[0].offsetWidth;
			
			var currentitem = _items[_indexes[_i]];
			var nextitem;
			
			if (_indexes[_i]+1 == _items.length) {
				nextitem = _items[0];
				this.indexes[_i] = 0;
			} else {
				nextitem = _items[_indexes[_i]+1];
				this.indexes[_i]++;
			}
			
			nextitem.style.left = '0px';
			
			$(currentitem).stop(true,true).fadeOut(this.fadeSpeed,function() {
				currentitem.style.left = iw + 'px';
			});
			$(nextitem).stop(true,true).fadeIn(this.fadeSpeed);
		}.bind(this,fader,items,i,prevbtn,nextbtn,this.indexes));
		
		clienti.addEventHandler(prevbtn,'click',function() {
			var _fader = arguments[0];
			var _items = arguments[1];
			var _i = arguments[2];
			var _prev = arguments[3];
			var _next = arguments[4];
			var _indexes = arguments[5];
			
			var intv = this.intervals[_i];
			
			if (intv != undefined) {
				clearInterval(intv);
			}
			
			var iw = _items[0].offsetWidth;
			
			var currentitem = _items[_indexes[_i]];
			var nextitem;
			
			if (_indexes[_i]-1 < 0) {
				nextitem = _items[_items.length-1];
				this.indexes[_i] = _items.length-1;
			} else {
				nextitem = _items[_indexes[_i]-1];
				this.indexes[_i]--;
			}
			
			nextitem.style.left = '0px';
			
			$(currentitem).stop(true,true).fadeOut(this.fadeSpeed,function() {
				currentitem.style.left = iw + 'px';
			});
			$(nextitem).stop(true,true).fadeIn(this.fadeSpeed);
		}.bind(this,fader,items,i,prevbtn,nextbtn,this.indexes));
	}
	
	if (items.length > 1) {
		if (this.stopOnMouseHover && this.automaticFade) {
			$(fader).mouseenter(function() {
				var ind = arguments[0];
				
				if (this.intervals[ind] != undefined) {
					clearInterval(this.intervals[ind]);
				}
			}.bind(this,i));
			
			$(fader).mouseleave(function() {
				var is = arguments[0];
				var ind = arguments[1];
				
				this.updateInterval(is,ind,this.fadeSpeed);
			}.bind(this,items,i));
		}
		
		var zindex = items.length;
		
		for (var a = 0; a < items.length; a++) {
			items[a].style.zIndex = zindex;
			if (a != 0) {
				items[a].style.display = 'none';
			}
			zindex--;
		}
		
		if (this.automaticFade) {
			this.updateInterval(items,i,this.fadeSpeed);
		}
	}
}

Fader.prototype.updateInterval = function(items,i,fadespeed) {
	this.intervals[i] = setInterval(function() {
		var indxs = arguments[0];
		var currentitem = items[indxs[i]];
		var nextitem;
		var iw = items[0].offsetWidth;
		
		if (indxs[i]+1 == items.length) {
			nextitem = items[0];
			indxs[i] = 0;
		} else {
			nextitem = items[indxs[i]+1];
			indxs[i]++;
		}
		
		nextitem.style.left = '0px';
		
		$(currentitem).stop(true,true).fadeOut(fadespeed,function() {
			currentitem.style.left = iw + 'px';
		});
		$(nextitem).stop(true,true).fadeIn(fadespeed);
	}.bind(this,this.indexes),this.automaticFadeInterval);
}
