Dissipador.INTERVAL_MILISEGONS = 50;

function Dissipador(Element, Velocitat, OpacitatInicial, OpacitatMinima, OpacitatMaxima)
{
  this._Element = Element;
  this._ID_Interval = null;
  this._Velocitat = Velocitat;
  this._EstaDissipat = true;
  this._OpacitatMinima = 0;
  this._OpacitatMaxima = 99; //Evitem possibles intermitències
  this._Opacitat = 99;
  if (typeof OpacitatMinima != 'undefined')
  {
    if (OpacitatMinima < 0)
    {
      this._OpacitatMinima = 0;
    }
    else if (OpacitatMinima > 99)
    {
      this._OpacitatMinima = 99;
    }
    else
    {
      this._OpacitatMinima = OpacitatMinima;
    }
  }
  if (typeof OpacitatMaxima != 'undefined')
  {
    if (OpacitatMaxima < 0)
    {
      this._OpacitatMaxima = 0;
    }
    else if (OpacitatMaxima > 99)
    {
      this._OpacitatMaxima = 99;
    }
    else
    {
      this._OpacitatMaxima = OpacitatMaxima;
    }
    if (this._OpacitatMaxima < this._OpacitatMinima)
    {
      this._OpacitatMaxima = this._OpacitatMinima;
    }
  }
  if (typeof OpacitatInicial != 'undefined')
  {
    if (OpacitatInicial > this._OpacitatMaxima)
    {
      this._Opacitat = this._OpacitatMaxima;
    }
    else if (OpacitatInicial < this._OpacitatMinima)
    {
      this._Opacitat = this._OpacitatMinima;
    }
    else
    {
      this._Opacitat = OpacitatInicial;
    }
  }
  if(typeof Element.style.opacity != 'undefined')
  {
    this._ActualitzaOpacitat = this._ActualitzaOpacitatW3C;
  }
  else if(typeof Element.style.filter != 'undefined')
  {
    if (Element.style.filter.indexOf("alpha") == -1)
    {
      var FiltresActuals = "";
      if (Element.style.filter)
      {
        FiltresActuals = Element.style.filter+" ";
      }
      Element.style.filter = FiltresActuals+"alpha(opacity="+this._Opacitat+")";
    }
    this._ActualitzaOpacitat = this._ActualitzaOpacitatMSIE;
  }
  else
  {
    this._ActualitzaOpacitat = this._ActualitzaVisibilitat;
  }
  this._ActualitzaOpacitat();
}

Dissipador.prototype.LlevarTransparencia = function ()
{
  this._EstaDissipat = true;
  this._IniciaDissipacio();
}

Dissipador.prototype.AplicarTransparencia = function ()
{
  this._EstaDissipat = false;
  this._IniciaDissipacio();
}

Dissipador.prototype.AturaDissipacio = function ()
{
  clearInterval(this._ID_Interval);
}

Dissipador.prototype._IniciaDissipacio = function ()
{
  this.AturaDissipacio();
  var objref = this;
  this._ID_Interval = setInterval(function() { objref._ComptadorOpacitat(); },Dissipador.INTERVAL_MILISEGONS);
}

Dissipador.prototype._ComptadorOpacitat = function ()
{
  if (this._EstaDissipat)
  {
    this._Opacitat -= this._Velocitat;
    if (this._Opacitat < this._OpacitatMinima)
    {
      this._Opacitat = this._OpacitatMinima;
      this.AturaDissipacio();
    }
  }
  else
  {
    this._Opacitat += this._Velocitat;
    if (this._Opacitat > this._OpacitatMaxima )
    {
      this._Opacitat = this._OpacitatMaxima;
      this.AturaDissipacio();
    }
  }
  this._ActualitzaOpacitat();
}

Dissipador.prototype._ActualitzaVisibilitat = function ()
{  
  if (this._Opacitat > 0)
  {
    this._Element.style.visibility = 'visible';
  }
  else
  {
    this._Element.style.visibility = 'hidden';
  }
}

Dissipador.prototype._ActualitzaOpacitatW3C = function ()
{  
  this._Element.style.opacity = this._Opacitat/100;
  this._ActualitzaVisibilitat();
}

Dissipador.prototype._ActualitzaOpacitatMSIE = function ()
{
  this._Element.filters.alpha.opacity = this._Opacitat;
  this._ActualitzaVisibilitat();
}

Dissipador.prototype._ActualitzaOpacitat = null;

