var aflax = null;
var flashLoaded = false;
var flashLoadedCallbacks = [];

function initAFLAX() {
  var requiredVersion = new com.deconcept.PlayerVersion([8, 0, 0]);
  var installedVersion = com.deconcept.FlashObjectUtil.getPlayerVersion();
  if (!installedVersion.versionIsValid(requiredVersion))
    return;
  aflax = new AFLAX("http://" + document.domain + "/aflax.swf");
  aflax.insertFlash(1, 1, "#ffffff", "insertFlashDone", true);
}

function insertFlashDone() {
  flashLoaded = true;
  for (i = 0; i < flashLoadedCallbacks.length; i++) {
    var func = flashLoadedCallbacks[i];
    func();
  }
  flashLoadedCallbacks = [];
}

function waitOnFlash(func) {
  if (flashLoaded)
    func();
  else
    flashLoadedCallbacks.push(func);
}

function playAudioFlash(url, onDone) {
  var sound = null;
  var timeoutID = null;
  function play() {
    sound = new AFLAX.FlashObject(aflax, "Sound");
    sound.exposeFunction("loadSound", sound);
    sound.exposeFunction("start", sound);
    sound.exposeFunction("stop", sound);
    sound.exposeProperty("position", sound);
    sound.exposeProperty("duration", sound);
    sound.loadSound(url, true);
    sound.start();
    if (onDone) {
      function poll() {
        if (sound.getPosition() >= sound.getDuration() && sound.getDuration() > 0)
          onDone();
        else
          timeoutID = window.setTimeout(poll, 50);
      }
      poll();
    }
  }
  waitOnFlash(play);
  function stop() {
    if (sound)
      sound.stop();
    if (timeoutID)
      window.clearTimeout(timeoutID);
  }
  return {stop: stop};
}

function playAudioWMP(url, onDone) {
  var wmp = new ActiveXObject("WMPlayer.OCX");
  wmp.settings.volume = 100;
  wmp.URL = url;
  var timeoutID = null;
  function stop() {
    wmp.controls.stop();
    if (timeoutID)
      window.clearTimeout(timeoutID);
  }
  if (onDone) {
    function poll() {
      var state = wmp.playState;
      if (state == 8 || state == 1)
        onDone();
      else
        timeoutID = window.setTimeout(poll, 50);
    }
    poll();
  }
  return {stop: stop};
}

var playAudio;

var audioQueue = [];
var currentPlayer = null;

function playNext() {
  if (audioQueue.length > 0) {
    var url = audioQueue.shift();
    function onDone() {
      currentPlayer = null;
      playNext();
    }
    currentPlayer = playAudio(url, onDone);
  }
}

function enqueueAudio(url) {
  audioQueue.push(url);
  if (currentPlayer == null)
    playNext();
}

function enqueuePrompt(name) {
  enqueueAudio("http://www.satogo.com/prompts/" + name + ".mp3");
}

function stopAudio() {
  if (currentPlayer) {
    currentPlayer.stop();
    currentPlayer = null;
  }
  audioQueue = [];
}

function accLink_onClick(event) {
  stopAudio();
  if (navigator.appName != "Microsoft Internet Explorer") {
    enqueuePrompt("othersite/ie_required");
    return false;
  }
  document.getElementById("acclink").blur();
  return true;
}

function onKeyDown(event) {
  if (event.keyCode == 0xc0 && event.altKey) {
    stopAudio();
    if (navigator.appName == "Microsoft Internet Explorer") {
      document.getElementById("acclink").focus();
      enqueuePrompt("welcome");
    } else {
      enqueuePrompt("othersite/ie_required");
    }
    return false;
  }
  return true;
}

function start() {
  enqueuePrompt("air/welcome");
  if (navigator.appName == "Microsoft Internet Explorer") {
    poll();
  }
  document.getElementById("acclink").focus();
}

var xmlHttp = null;
var prevStatus = null;
var pollCount = 0;

function poll() {
  var script = document.createElement("script");
  script.src = "http://www.satogo.com/statusJSON?callback=gotStatus&pollCount=" + pollCount;
  pollCount++;
  document.getElementsByTagName("head").item(0).appendChild(script);
}

function gotStatus(result) {
  var status = result.status;
  if (status != prevStatus) {
    prevStatus = status;
    if (status == "started") {
      enqueuePrompt("download_dialog");
    } else if (status == "done") {
      function runPrompt() {
        stopAudio();
        enqueuePrompt("run_dialog");
      }
      window.setTimeout(runPrompt, 1000);
      return;
    }
  }
  window.setTimeout(poll, 1000);
}
function initAudioPlayer() {
  initAFLAX();
  if (aflax)
    playAudio = playAudioFlash;
  else
    playAudio = playAudioWMP;
}
