//ObjectName: fade
//Author:     Buzu.
//Varsion:    1.1
//Changes:    Implemented the pseudoevents onFadeStep and onFadeStart.
//todo:       evitar que se cancele el efecto una vez terminado.
//Bugs?:      Please report any bug to @imbuzu on twitter. use #fade1.1 #Bug


fade = {
	el : null,
	intervalo : null,
	mod : null,
	inAlph : null,
	seg : null,
	fadeF : function(e, m, s){
		//fadeF sig. fadeFunction
		//aceleramos el acceso a fade con una variable local.
		var f = fade;
		f.seg = s || 3;
		!e ? alert('No Elem') : (f.el = e);
		f.mod = m || 's';
		f.mod == 's' ? f.fadeout() : f.mod == 'e' ? f.fadein() : alert('no valid mode');
	},
	fadein : function(){
		var f = fade;
		//si se vuleve a activar el fade sobre el mismo objeto
		//no queremos que el objeto vuelva a alpha 0
		//sino que el efecto comienze con el alpha que el 
		//elemento ya tiene.
		f.inAlph = f.inAlph || 0;
		f.onFadeStart();
		f.intervalo = setInterval(
			function(){
				f.onFadeStep();
				f.inAlph += 1/(f.seg*10);
				f.el.style.opacity = f.inAlph;
				if(f.inAlph >= 1){clearInterval(f.intervalo); f.onFadeEnd(f.el)};
			}, 100
		);
	},
	fadeout : function(){
		var f = fade;
		f.inAlph = f.inAlph || 1;
		f.onFadeStart();
		f.intervalo = setInterval(
			function(){
				f.onFadeStep();
				f.inAlph -= 1/(f.seg*10);
				f.el.style.opacity = f.inAlph;
				if(f.inAlph <= 0){clearInterval(f.intervalo); f.onFadeEnd(f.el);};
			},100
		);
	},
	onFadeEnd : function(){},
	onFadeStart : function(){},
	onFadeStep : function(){}
}
