/**
 * EggFade
 */
var EggFade = Class.create({
  /**
   * Init EggFade
   */	
  initialize: function() {
	this.options = Object.extend({
	  elemContent : null,
	  nOpacity	  : 1
	}, arguments[0] || { });		
	
	this.elem = this.options.elemContent;
	this.fadeEffect = null;
	this.nDuration = 1;
	
	// hide
	if (css3Transition) {
      this.elem.style.opacity = 0;      
	}
	else {
      this.elem.setOpacity(0);
	}
  },
  
  show: function() {	
    this.showNow.bind(this).delay(0.1);
  },
  
  showNow: function() {
    this.elem.style.visibility = "visible";    
	if (css3Transition) {
	  this.elem.addClassName('css3_fade');		
	  this.elem.style.opacity = this.options.nOpacity;
	}
	else {
	  if (this.fadeEffect) {
		this.fadeEffect.cancel();
	  }		
	  
      this.elem.setOpacity(0);
      var nStart = this.elem.getStyle('opacity');
	  this.fadeEffect = new Effect.Opacity(this.elem, { from: nStart, to: this.options.nOpacity, duration: this.nDuration });
	}
  },

  hide: function() {
	if (css3Transition) {
	  this.elem.style.opacity = 0;  
      this.onHidden.bind(this).delay(this.nDuration);		  
	}
	else {
	  if (this.fadeEffect) {
		this.fadeEffect.cancel();
	  }				  
      var nStart = this.elem.getStyle('opacity');
	  this.fadeEffect = new Effect.Opacity(this.elem, { from: nStart, to: 0, duration: this.nDuration, afterFinish: this.onHidden.bind(this) });		  
	}
  },

  hideNow: function() {
	if (css3Transition) {
	  this.elem.style.opacity = 0;  
	}
	else {
	  if (this.fadeEffect) {
		this.fadeEffect.cancel();
	  }
      this.elem.setOpacity(0);
	}
	this.elem.style.visibility = "hidden";
  },
  
  onHidden: function(evt) {	  
	this.elem.style.visibility = "hidden";
	// fire event
	if (this.elem) {
	  this.elem.fire("eggfade:hidden");
	}
  }
  
});
