﻿
var playing = ''; // имя текущего играемого файла
var position = '0'; // позиция
var status = 'stop';

function show_text(url) {
  if($('song_text').getStyle('display')=='none' || $('song_text').getStyle('opacity')<0.5){
    $('song_text').appear({duration: 0.5, to: 0.5});
  };
  if($('song_text').getStyle('opacity')>0.0){
    $('song_text').fade({duration: 0.5, to: 0.5});
  };
  $('song_text').update('<div class=\'loading\'><img src=\'/assets/templates/stupeni/loader.gif\' /></div>');
  setTimeout(function() { 
    new Ajax.Updater('song_text', '/'+url, {
      onComplete: function() { $('song_text').appear({duration: 0.5, to: 1}); },
    });
  }, 1000);
}

/*
function play_song(url, img) {
  // сейчас играется
  if(playing == url) {
    if(status == 'pause') {
      sound.setPosition(position);
      sound.start();
      status = 'play';
      img.writeAttribute('src', '/assets/templates/stupeni/playing.gif');
    } else if(status == 'play') {
      sound.stop();
      status = 'pause';
      position = sound.getPosition();
      img.writeAttribute('src', '/assets/templates/stupeni/pause.gif');
    }
  } else {
    sound.stop();
    $$('img[src=/assets/templates/stupeni/playing.gif]').each(function(el){
      el.writeAttribute('src', '/assets/templates/stupeni/listen.png');
    });
    img.writeAttribute('src', '/assets/templates/stupeni/playing.gif');
    sound.loadSound(url, true);
    playing = url;
    position = '0';
    status = 'play';
  }

}
*/

function Player() {
  this.track = '';
  this.paused = true;
  this.stoped = true;
  this.sound = new Sound();
  this.position = 0;
  this.frequency = 1000;
  this.duration = 0;
  this.button = '';
  this.registerCallback(); // создаём callback функцию
}

Player.prototype.registerCallback = function() {
  // вызываем onTimerEvent с частотой frequency
  setInterval(this.onTimerEvent.bind(this), this.frequency);
}

// функция проверки "что происходит"
Player.prototype.onTimerEvent = function() {
  // если не на паузе
  if(!this.paused) {
  
    var position = this.sound.getPosition();
    if(!position) position = 0;
    if(position != this.position && position != 0) {
       this.onPlaying();
    } else {
       this.onBuffering();
    }
    this.position = position;
    
    var duration = 0;
    duration = this.sound.getDuration();
    if(!duration) duration = 0;
    this.duration = duration;

    var progress = position/duration;
    if (progress == 1 && duration != 0 && position != 0) {
      this.onSoundComplete();
    }

  } 
}

// когда процесс играния
Player.prototype.onPlaying = function() {
  // $('status').writeAttribute('src', 'assets/templates/stupeni/playing.gif');
  var obj = $(this.button);
  obj.writeAttribute('src', 'assets/templates/stupeni/playing.gif');
}

// когда процесс загрузки   
Player.prototype.onBuffering = function() {
  // $('status').writeAttribute('src', 'assets/templates/stupeni/buffering.gif');
  var obj = $(this.button);
  obj.writeAttribute('src', 'assets/templates/stupeni/buffering.gif');
}   

Player.prototype.onSoundComplete = function() {
  if(!this.paused) {
    this.onStopButtonClick();
    // $('status').writeAttribute('src', 'assets/templates/stupeni/playing.gif');
    // var obj = $(this.button);
    // obj.writeAttribute('src', 'assets/templates/stupeni/listen.gif');
  }
}

Player.prototype.onPlayButtonClick = function() {
  if(this.paused) {
    this.paused = false;
    if(this.stoped) {
      this.sound.loadSound(this.track, true);
    }
    this.sound.start(this.position/1000, 1);
    this.stoped = false;
  } else {
    this.position = this.sound.getPosition();
    this.sound.stop();         
    this.paused = true;
    this.onPause();
  }
}

Player.prototype.onStopButtonClick = function() {
  this.paused = true;
  this.stoped = true;
  this.position = 0;
  this.duration = 0;
  this.sound.start(this.duration/1000, 1);
  this.sound.stop();         
  // $('status').writeAttribute('src', 'assets/templates/stupeni/listen.png');
  var obj = $(this.button);
  obj.writeAttribute('src', 'assets/templates/stupeni/listen.png');
}   

Player.prototype.onPause = function() {
  // $('status').writeAttribute('src', 'assets/templates/stupeni/pause.gif');
  var obj = $(this.button);
  obj.writeAttribute('src', 'assets/templates/stupeni/pause.gif');
}   

Player.prototype.loadTrack = function(track) {
  this.track = track;
}

function mega_play(_this, link) {
  if(player.track=='' || player.track==undefined) {
    player.button = Element.identify(_this);
    player.loadTrack(link);
    player.onPlayButtonClick();
  } else {
    if(player.track == link) {
      player.onPlayButtonClick();
    } else {
      var obj = $(player.button);
      obj.writeAttribute('src', 'assets/templates/stupeni/listen.png');

      player.button = Element.identify(_this);
      player.onStopButtonClick();
      player.loadTrack(link);
      player.onPlayButtonClick();
    }

  }
}

