function CustomPlayer() {
  const audio_wrap = document.getElementById('radioklassik-player');
  const audio_player = document.getElementById('audio-player');
  const play_button = document.getElementById('audio-play');
  const btn_mute = document.getElementById('audio-mute');
  const sound_range = document.getElementById('audio-volume');
  const audio_title = document.getElementById('audio-title');
  const audio_description = document.getElementById('audio-description');
  const audio_progress = document.getElementById('audio-progress');
  const audio_progress_label = document.getElementById('audio-progress-label');
  const audio_duration_label = document.getElementById('audio-duration');
  const audio_progress_bar = document.getElementById('audio-progress-bar');
  const host_portrait = document.getElementById('host-portrait');
  const host_description = document.getElementById('host-description');

  let host_portrait_path = '';
  let track_list = [];
  let volume_temp = 0.5;

  audio_player.addEventListener('timeupdate', function () {
    if (audio_player.paused) {
      play_button.classList.remove('playing');
    } else {
      play_button.classList.add('playing');
    }

    if (!audio_player.currentTime || !audio_player.duration) {
      audio_progress.value = 0;
      return;
    }

    if (audio_player.duration === Infinity) {
      audio_wrap.classList.remove('-show-progress');
      return;
    }

    const addLeadingZero = function (num) {
      return (num < 10) ? ('0' + num) : num;
    }

    const formatSecondsToReadable = function (seconds) {
      const h = Math.floor(seconds / 3600);
      const m = Math.floor((seconds % 3600) / 60);
      const s = Math.floor(seconds % 3600 % 60);
      return addLeadingZero(h) + ':' + addLeadingZero(m) + ':' + addLeadingZero(s);
    }

    audio_duration_label.innerHTML = formatSecondsToReadable(audio_player.duration);
    audio_progress_label.innerHTML = formatSecondsToReadable(audio_player.currentTime);
    audio_progress_bar.style.width = ((audio_player.currentTime / audio_player.duration) * 100) + '%';
    audio_wrap.classList.add('-show-progress');
    audio_progress.value = (audio_player.currentTime / audio_player.duration) * 10000;
  });

  audio_progress.addEventListener('input', function (e) {
    if (audio_progress.value === 0) {
      audio_player.currentTime = 0;
      return;
    }
    audio_player.currentTime = (audio_progress.value / 10000) * audio_player.duration;
  });

  play_button.addEventListener('click', function () {
    if (audio_player.paused) {
      audio_player.play();
    } else {
      audio_player.pause();
    }
  });

  sound_range.addEventListener('input', function (e) {
    audio_player.volume = sound_range.value / 100;
    if (audio_player.volume === 0) {
      btn_mute.classList.add('muted');
    } else {
      btn_mute.classList.remove('muted');
    }
  });

  btn_mute.addEventListener('click', function () {
    btn_mute.classList.toggle('muted');
    if (audio_player.volume === 0) {
      audio_player.volume = volume_temp;
    } else {
      audio_player.volume = 0;
    }
  });

  document.getElementById('audio-details-toggle').addEventListener('click', function () {
    document.getElementById('audio-details').classList.toggle('open');
    document.getElementById('radioklassik-player').classList.toggle('details-visible');
  });

  setInterval(function () {
    const that = this;
    if (track_list.length > 0) {
      const tracks = track_list.filter(function (t) {
        return (t.start <= audio_player.currentTime);
      });
      if (tracks.length > 0) {
        const desc = tracks[tracks.length - 1].description;
        audio_description.innerHTML = desc ? desc : '';
        audio_wrap.classList.remove('-no-details');
      } else {
        audio_description.innerHTML = '';
        audio_wrap.classList.add('-no-details');
      }
    }

  }, 1000);

  this.play = function () {
    audio_player.play();
  }

  this.pause = function () {
    audio_player.pause();
  }

  this.setAudio = function (src, _track_list) {
    audio_player.src = src;
    track_list = _track_list
  }

  this.setTitle = function (title) {
    if (title) {
      audio_title.innerHTML = title;
    }
  }

  this.setDescription = function (description) {
    if (description) {
      document.getElementById('audio-description').innerHTML = description;
      audio_wrap.classList.remove('-no-details');
    } else {
      document.getElementById('audio-description').innerHTML = '';
      audio_wrap.classList.add('-no-details');
    }
  }

  this.setHostPortrait = function (path) {
    if (host_portrait_path === path) {
      return;
    }

    host_portrait_path = path;
    if (!host_portrait_path) {
      host_portrait.innerHTML = '';
      return;
    }

    host_portrait.innerHTML = '<img src="' + path + '" alt="Moderator" />'
  }

  this.setHostDescription = function (description) {
    if (!description) {
      host_description.innerHTML = '';
      return;
    }

    host_description.innerHTML = description;
  }

  this.setLiveTag = function (is_live) {
    if (is_live) {
      audio_wrap.classList.add('-live');
    } else {
      audio_wrap.classList.remove('-live');
    }
  }
}


