var exhibitionist_vi_mainImage_crosfade = function(){
	this.frameDelay = 34; //minimum of 30
	this.itemsArray = Array();
	this.lastItem = -1;
	this.init = function(object,holder,settingArray){
		this.holder = holder;
		this.object = object;
		this.crossfadeDuration = parseInt(settingArray['crossfadeDuration']);
		if (this.crossfadeDuration < 30){
			this.crossfadeDuration = 1000;
			alert("Crossfade Timer set too low. Resetting to 1000.");
		}
		this.fadeAmmount = this.frameDelay / this.crossfadeDuration;
	}
	this.start = function(){
		for(imageNumber in this.object.mainItems){
			//get the copy
			var imageClassCopy = this.object.mainItems[imageNumber].getImageCopy();
			this.holder.style.height = imageClassCopy.aligner.biggestDimention.height + "px";
			this.holder.style.width = imageClassCopy.aligner.biggestDimention.width + "px";
			//change the copy
			this.setOpacity(imageClassCopy,0);
			//save the copy
			this.itemsArray[this.itemsArray.length] = imageClassCopy;
		}
	}
	this.changeToItem = function(itemNumber){
		if (this.lastItem > -1){
			this.removeObject(this.itemsArray[this.lastItem]);
		}
		this.addObject(this.itemsArray[itemNumber]);
		this.lastItem = itemNumber;
	}
	this.removeObject = function(imageClass){
		this.object.threadsBusy++;
		imageClass.image.style.position = "absolute";
		this.fadeOut(imageClass,this.fadeAmmount);
	}
	this.addObject = function(imageClass){
		this.object.threadsBusy++;
		imageClass.image.style.position = "relative";
		this.holder.appendChild(imageClass.image);
		this.fadeIn(imageClass,this.fadeAmmount);
	}
	this.fadeOut = function(imageClass,ammount){
		var newAmmount = imageClass.currentOpacity - ammount;
		this.setOpacity(imageClass,newAmmount);
		if (newAmmount > 0){
			setTimeout(function(controller,imageClass,ammount){
				return function(){
					controller.fadeOut(imageClass,ammount);
				}
			}(this,imageClass,ammount),this.frameDelay);
		}else{
			this.holder.removeChild(imageClass.image);
			this.object.threadsBusy--;
		}
	}
	this.fadeIn = function(imageClass,ammount){
		var newAmmount = imageClass.currentOpacity + ammount;
		this.setOpacity(imageClass,newAmmount);
		if (newAmmount < 1){
			setTimeout(function(controller,imageClass,ammount){
				return function(){
					controller.fadeIn(imageClass,ammount);
				}
			}(this,imageClass,ammount),this.frameDelay);
		}else{
			this.object.threadsBusy--;
		}
	}
	this.setOpacity = function(imageClass,opacity){
		imageClass.currentOpacity = opacity;
		imageClass.image.style.opacity = opacity;
		imageClass.image.style.filter="alpha(opacity='"+parseInt(opacity*100)+"')";
	}
}