
  $(document).ready
  ( function()
    { init_players();
      init_player_listener();
    }
  );

  var current_track = false;

  function init_players()
  { $("audio").each
    ( function()
      { var audio_elt = $(this).get(0);
        var CAN_PLAY = false;
        var id_track = $(this).attr("id").substring(6);
        $(this).find("source").each
        ( function()
          { if(audio_elt.canPlayType($(this).attr("type"))) CAN_PLAY = true;
          }
        );
        if(!CAN_PLAY) $("#track_" + id_track + " .player_controls").remove();
        else
        { audio_elt.addEventListener("ended", track_ended, false);
          $("#player_controls_" + id_track + " .play").click(function() { play(id_track); return false; });
          $("#player_controls_" + id_track + " .play").css("display: block");
          $("#player_controls_" + id_track + " .pause").click(function() { pause(); return false; });
          $("#player_controls_" + id_track + " .stop").click(function() { stop(); return false; });
        }
      }
    );
  }

  function track_ended()
  { gui_state("stoped");
    var current_audio = $("#audio_" + current_track).get(0);
    if(current_audio.currentTime) current_audio.currentTime = 0;
    current_audio.pause();
  }

  function track_progress()
  { if(current_track != false)
    { var current_audio = $("#audio_" + current_track).get(0);
      var position = Math.round((100 * current_audio.currentTime) / current_audio.duration);
      $("#track_" + current_track).find(".position").get(0).style.width = position + "%";
    }
  }

  function init_player_listener()
  { setInterval("player_listener_update()", 300);
  }

  function player_listener_update()
  { if(current_track != false)
    { var current_audio = $("#audio_" + current_track).get(0);
      var progress_bar = $("#track_" + current_track).find(".position").get(0);
      if(current_audio && progress_bar)
      { progress_bar.style.width = Math.round((100 * current_audio.currentTime) / current_audio.duration) + "%";
      }
    }
  };

  function play(track)
  { if(current_track == track)
    { if($("#audio_" + current_track).get(0).paused)
      { $("#audio_" + current_track).get(0).play();
      }
    }
    else
    { if(current_track != false) stop();
      current_track = track;
      setTimeout("_play()", 1000);
    }
    gui_state("playing");
  }

  function _play()
  { if(current_track != false)
    { $("#audio_" + current_track).get(0).play();
    }
  }

  function pause()
  { if(current_track != false)
    { $("#audio_" + current_track).get(0).pause();
      gui_state("paused");
    }
  }

  function stop()
  { if(current_track != false)
    { $("#audio_" + current_track).get(0).pause();
      if($("#audio_" + current_track).get(0).currentTime) $("#audio_" + current_track).get(0).currentTime = 0;
      gui_state("stoped");
      current_track = false;
    }
  }

  function gui_state(state)
  { gui_blur();
    if(state == "playing")
    { $("#track_" + current_track).find(".play").get(0).style.display = "none";
      $("#track_" + current_track).find(".pause").get(0).style.display = "inline";
      $("#track_" + current_track).find(".stop").get(0).style.display = "inline";
      $("#track_" + current_track).get(0).className = "playing_download";

    }
    else if(state == "paused")
    { $("#track_" + current_track).find(".play").get(0).style.display = "inline";
      $("#track_" + current_track).find(".pause").get(0).style.display = "none";
      $("#track_" + current_track).find(".stop").get(0).style.display = "inline";
      $("#track_" + current_track).get(0).className = "playing_download";
    }
    else if(state == "stoped")
    { $("#track_" + current_track).find(".play").get(0).style.display = "inline";
      $("#track_" + current_track).find(".pause").get(0).style.display = "none";
      $("#track_" + current_track).find(".stop").get(0).style.display = "none";
      $("#track_" + current_track).get(0).className = "download";
      var progress_bar = $("#track_" + current_track).find(".position").get(0);
      if(progress_bar) $("#track_" + current_track).find(".position").get(0).style.width = "0%";
    }
  }

  function gui_blur()
  { $("#track_" + current_track).find(".play").get(0).blur();
    $("#track_" + current_track).find(".pause").get(0).blur();
    $("#track_" + current_track).find(".stop").get(0).blur();
  }

