
var ItemEffect = Class.create({
	
	id: null,
	field: null,

	inEffectName: "",
	outEffectName: "",

	inParameters: null,
	outParameters: null,
	
	inEffect: null,
	outEffect: null,

	initialize: function (id,field,inEffectName,outEffectName,inParameters,outParameters,startWithIn) {
		this.id = id;
		this.field = field;

		this.inEffectName = inEffectName;
		this.outEffectName = outEffectName;
		
		this.inParameters = inParameters;
		this.outParameters = outParameters;
		
		if (!startWithIn){
			this.applyOutEffect();
		}
	},
	
	stop: function(){
		if (this.inEffect){
			this.inEffect.cancel();
			this.inEffect = null;
		}			

		if (this.outEffect){
			this.outEffect.cancel();
			this.outEffect = null;
		}		
	},
	
	applyInEffect: function(){
		
		//if ((this.inEffectName=="")||(!this.field)) return;
		
		//this.stop();
		this.inEffect =  new Effect[this.inEffectName](this.field,this.inParameters);

	},
	applyOutEffect: function() {
		
		//if ((this.outEffectName=="")||(!this.field)) return;
		
		//this.stop();		

		this.outEffect = new Effect[this.outEffectName](this.field,this.outParameters);
	}
	
});


var BrightnessEffect = Class.create(ItemEffect,{	

	initialize: function ($super,id,field,inParameters,outParameters,startWithIn) {
		
		if (!inParameters){
			inParameters = { 
			  duration: 0.6,
			  transition: Effect.Transitions.linear,
			  from: 0.4, 
			  to: 1.0
			};
		}
		
		if (!outParameters){
			outParameters = { duration: 0.6,
			  transition: Effect.Transitions.linear,
			  from: 1.0,
			  to: 0.4 };
		}
		
		$super(id,field,'Opacity','Opacity',inParameters,outParameters,startWithIn);
	},

	applyInEffect: function(){
		
		if (!this.field) return;
		
		this.stop();
		
		this.inEffect = new Effect.Opacity(this.field,this.inParameters);
		// alert('in');		
	},
	applyOutEffect: function() {
		
		if (!this.field) return;
		
		this.stop();		
		
		this.outEffect = new Effect.Opacity(this.field,this.outParameters);
		// alert('out');
	}
	
	
});


var ScaleEffect = Class.create(ItemEffect,{	

	inPercent: null,
	outPercent: null,
	originalWidth: null,
	originalHeight: null,

	initialize: function ($super,id,field,inParameters,outParameters,startWithIn) {
		this.inPercent = inParameters.percent;
		this.outPercent = outParameters.percent;
		
		this.originalWidth = $(field).offsetWidth;
		this.originalHeight = $(field).offsetHeight;
		
		$super(id,field,'Scale','Scale',inParameters,outParameters,startWithIn);
	},

	applyInEffect: function(){
		
		if (!this.field) return;
		
		this.stop();
		
		//var percent = ($(this.field).offsetWidth*this.inPercent)/this.originalWidth;
		var percent = (this.originalWidth*this.outPercent*this.inPercent/($(this.field).offsetWidth))/100;
		
		
		this.inEffect = new Effect.Scale(this.field,percent,this.inParameters);
		// alert('in');		
	},
	applyOutEffect: function() {
		
		if (!this.field) return;
		
		this.stop();
		
		//var percent = ($(this.field).offsetWidth*this.outPercent)/this.originalWidth;
		var percent = (this.originalWidth*this.outPercent/$(this.field).offsetWidth);
		
		// var percent = this.outPercent;
				
		this.outEffect = new Effect.Scale(this.field,percent,this.outParameters);
		// alert('out');
	}
	
	
});


var NullEffect = Class.create(ItemEffect,{	

	initialize: function ($super,id,field,inParameters,outParameters) {		
		$super(id,field,'','',inParameters,outParameters,true);
	},

	applyInEffect: function(){
		return;
	},
	applyOutEffect: function() {
		
		return;
	}	
});

var EffectsManager = Class.create({
	effects:new Array(),
	
	initialize: function () {
	},
	
	addEffect: function (effect){
		this.effects[effect.id] = effect;
	},
	
	removeEffect: function (id) {
		this.effects[id] = null;
	},
	
	getEffect: function(id) {
		return this.effects[id];
	}

});

var effectsManager = new EffectsManager();
