if (window.addEventListener)
{
window.addEventListener('load', function(e) {
  var tables = document.getElementsByTagName('table');
  for (i=0; i < tables.length; i++)
  {
    if (tables[i].className == "calc")
    {
      initTableCalc(tables[i]);
    }
  }
}, false);
}

function getElementsByClassName(oElm, strClassName){
   if (document.getElementsByClassName)
   {
      return oElm.getElementsByClassName(strClassName);
   }
   var strTagName = "*";
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : 
        oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

function initTableCalc(elm)
{
  var elements = elm.getElementsByTagName('td');
  var el_length = elements.length;

  for (i2=0; i2 < el_length; i2++)
  {
    if (elements[i2].innerHTML == '=SUM(ROW)')
    {
      var row_idx = elements[i2].parentNode.rowIndex;
      var total = 0;

      for (j=0; j < el_length; j++)
      {
        if (elements[j].parentNode.rowIndex == row_idx)
          alert(elements[j].innerHTML);
      }
    }
    else if (elements[i2].innerHTML == '=SUM(COLUMN)')
    {
      var col_idx = elements[i2].cellIndex;
      var total = 0;

      for (j=0; j < el_length; j++)
      {
        if (elements[j].cellIndex != col_idx)
          continue;
        if (!elements[j].innerHTML.match(/[-+][0-9.]+/))
          continue;

        var nb = elements[j].innerHTML.replace(/[^0-9]+/, '');

        if (elements[j].innerHTML.match(/[-][0-9.]+/))
        {
          total = total - parseFloat(nb);
        }
        else
        {
          total = total + parseFloat(nb);
        }
      }

      elements[i2].innerHTML = total;
    }
  }
}

audioPlayer = function(player_id)
{
    this.tracks = new Array();
    this.currentTrack = 1;
    this.firstTrack = 1;
    this.init = false;
    this.object = false;
    this.player_div = document.getElementById(player_id);

    /**
     * Initialisation
     */
    this.onInit = function()
    {
        this.position = 0;
        this.autoNext = false;
        this.object = getElementsByClassName(this.player_div, "playerObject")[0];
        this.object.width = 1;
        this.object.height = 1;
    };

    this.onUpdate = function()
    {
        var isPlaying = (this.isPlaying == "true");
        this.player_div.className = this.player_div.className.replace(/[ ]*(paused|playing|waiting|$)/, isPlaying ? " playing" : " paused");

        getElementsByClassName(this.player_div, "progress_play")[0].style.width = Math.round((this.position / this.duration) * 100) + "%";
        getElementsByClassName(this.player_div, "progress_load")[0].style.width = this.bytesPercent + "%";

        var max_duration = parseInt(this.duration) - 2000;

        if (this.bytesTotal == this.bytesLoaded && parseInt(this.position) >= max_duration && !this.autoNext)
        {
            this.autoNext = true;
            window.setTimeout("player.next(true)", 2000);
        }
    };

    this.playPause = function(Id)
    {
        if (!this.object)
        {
            alert("Vous devez installer Flash pour utiliser ce lecteur.");
            return false;
        }
        
        if (Id == false && this.init == false)
        {
            Id = this.firstTrack;
        }

        if (Id == false)
        {
            if (this.isPlaying == "true")
            {
                this.object.SetVariable("method:pause", "");
            }
            else
            {
                this.object.SetVariable("method:play", "");
            }
        }
        else
        {
            getElementsByClassName(this.player_div, "track_"+this.currentTrack)[0].className = "track_"+this.currentTrack;
            this.object.SetVariable("method:setUrl", this.tracks[Id][0]);
            this.object.SetVariable("method:play", "");
            this.currentTrack = Id;
            getElementsByClassName(this.player_div, "track_"+this.currentTrack)[0].className += " current";
        
            if (this.init == false)
            {
                this.object.SetVariable("enabled", "true");
                this.init = true;
            }
        }
    };

    this.next = function(autoNext)
    {
        var next = false;
        var last_id = false;

        for (id in this.tracks)
        {
            if (last_id == this.currentTrack)
                next = id;

            last_id = id;
        }

        if (!next)
            next = this.firstTrack;

        getElementsByClassName(this.player_div, "track_"+this.currentTrack)[0].className = "track_"+this.currentTrack;
        this.playPause(next);

        if (autoNext)
        {
            this.autoNext = false;
        }
    };

    this.previous = function()
    {
        var prev = false;
        var last_id = false;

        for (id in this.tracks)
        {
            if (id == this.currentTrack)
                prev = last_id;

            last_id = id;
        }

        if (!prev)
            prev = last_id;

        getElementsByClassName(this.player_div, "track_"+this.currentTrack)[0].className = "track_"+this.currentTrack;
        this.playPause(prev);
    };

    this.setPosition = function(e, o)
    {
        var curleft = 0;
        var curwidth = o.offsetWidth;

        if (o.offsetParent) {
            while (o.offsetParent) {
                curleft += o.offsetLeft;
                o = o.offsetParent;
            }
        }
        else if (o.x) curleft += o.x;

        var percent = ((e.clientX - curleft) / curwidth);
        var pos = Math.round(this.duration * percent);
        this.object.SetVariable("method:setPosition", pos);
    };
};