﻿///////////////// Variables /////////////////////////////
host = typeof (host) == "undefined" ? (location.hostname == "localhost" ? "/" + location.pathname.split("/")[1] + "/" : "/") : host;
upStatsHost = location.hostname == "localhost" ? "http://localhost/up_stats/" : (host.indexOf("si-sv3109.com") > -1 ? "http://upstats.si-sv3109.com/" : "http://ustats.uplication.com/");
websiteId = typeof (websiteId) == "undefined" ? 0 : websiteId;
materialId = typeof (materialId) == "undefined" ? 0 : materialId;
frameColor = typeof (frameColor) == "undefined" ? "lightgray" : frameColor;
currentState = [];
///////////////// Player /////////////////////////////

function flash9Plugin() {
  var plugin = (navigator.mimeTypes && navigator.mimeTypes["application/x-shockwave-flash"] ?
    navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin : 0);
  if (plugin)
    return (plugin && parseInt(plugin.description.match(/\d*?\.\d*?/)) >= 9);
  try {
    new ActiveXObject("ShockwaveFlash.ShockwaveFlash.9");
    return true;
  }
  catch (x) {
    return false;
  }
}

function getPlayerId(clientId) { return clientId + "_Player"; }

function getPlayerSWFObject(clientId) {
  SWFObject.useExpressInstall = true;
  var s1 = new SWFObject(host + "javascripts/mediaplayer.swf", getPlayerId(clientId), "300", "170", "9");
  s1.addParam("allowscriptaccess", "always");
  s1.addParam("allowfullscreen", "true");
  s1.addVariable("repeat", "list");
  s1.addVariable("autostart", "true");
  return s1;
}

function createPlayer(clientId) { if (flash9Plugin()) getPlayerSWFObject(clientId).write(clientId + "_flashPlayerContainer"); }

function isPlayerReady(clientId) { return document.getElementById(getPlayerId(clientId)) != null && typeof (document.getElementById(getPlayerId(clientId)).sendEvent) != "undefined"; }

function playerReady(obj) {
  var clientId = obj['id'];
  var player = document.getElementById(clientId);
  player.addModelListener("TIME", "updateMarkerPosition");
  player.addModelListener("STATE", "udpateState");

  clientId = clientId.replace(/_Player/g, "");
  var nrddl = null;
  var autoPlay = eval(clientId + "_qsAutoPlay");
  try { nrddl = eval(clientId + "_narrationsCombo"); } catch (x) { }
  if (autoPlay) {
    var logoPlay = document.getElementById(clientId + "_logoPlay");
    if (logoPlay)
      click(logoPlay);
    else {
      rollOut(clientId);
      play(clientId);
    }
  }
  else if (nrddl && (nrddl.options.length <= 1)) nrddl.style.display = nrddl.parentNode.style.display = "none";

  var btnPlay = eval(clientId + "_btnPlay");
  if (btnPlay) btnPlay.title = "This is the bnarrator player. Clicking it will enable you to listen to human narration of the site\'s content. You may wish to supress the sound of your screen reader until the recording ends.";
}

function toggleControlBtns(clientId, state) { // states: stop - 0; play - 1; pause - 2; finished - 3
  var btnPlay = eval(clientId + "_btnPlay");
  var btnPause = eval(clientId + "_btnPause");
  var btnMarker = null, nrddl = null, clipLn = null, mayHide = true, fillPlayed = false, playedFiller = null;

  btnPlay.style.display = state == 0 || state == 2 || state == 3 ? displayed(btnPlay) : "none";
  btnPause.style.display = state == 1 ? displayed(btnPause) : "none";
  try { btnMarker = eval(clientId + "_btnMarker"); } catch (x) { }
  try { clipLn = eval(clientId + "_clipLine"); } catch (x) { }
  try { mayHide = eval(clientId + "_mayHide"); } catch (x) { }
  try { fillPlayed = eval(clientId + "_fillPlayed"); } catch (x) { }
  try { playedFiller = eval(clientId + "_playedFiller"); } catch (x) { }

  if (btnMarker && clipLn) {
    if (state == 1 || state == 2) {
      clipLn.style.display = displayed(clipLn);
      btnMarker.parentNode.style.display = displayed(btnMarker.parentNode);
      eval(clientId + "_loadingMessage").style.display = "none";
      btnMarker.style.display = displayed(btnMarker);
    }
    else if (mayHide) {
      clipLn.style.display = btnMarker.parentNode.style.display = btnMarker.style.display = "none";
    }
    if (state == 1 || state == 3) {
      if (fillPlayed) {
        btnMarker.style.width = (btnMarker.origWidth ? btnMarker.origWidth : btnMarker.offsetWidth) + "px";
        if (playedFiller) playedFiller.style.width = "0px";
      }
      else {
        btnMarker.style.left = "0px";
      }
    }
  }

  try { nrddl = eval(clientId + "_narrationsCombo"); } catch (x) { }
  if (nrddl) {
    var disp = nrddl.options.length > 1 && (state == 0 || state == 3 && eval("typeof(" + clientId + "_rolledInClassName)") == "undefined");
    nrddl.style.display = disp ? displayed(nrddl) : "none";
    nrddl.parentNode.style.display = disp ? displayed(nrddl.parentNode) : "none";
  }

  try {
    var lblListen = document.getElementById(clientId + "_lblListen");
    lblListen.innerHTML = state == 1 ? "עצור האזנה" : "האזנה לכתבה";
  }
  catch (x) { }

  currentState[clientId] = state;
}

function marker_onmouseup(evt, clientId) {
  var src = getSrcElement(evt);

  if (src.dragging) doScrub(clientId);
  src.dragging = false;
}

function marker_onmouseout(evt, clientId) {
  var src = getSrcElement(evt);

  if (src.dragging) doScrub(clientId);
  src.dragging = false;
}

function marker_onmousedown(evt, clientId) {
  var src = getSrcElement(evt);

  src.dragging = true;
  if (evt.preventDefault) evt.preventDefault();
}

function marker_onmousemove(evt, clientId) {
  var src = getSrcElement(evt);

  if (src.dragging) {
    scrub(clientId, getClientLeft(evt) - src.pos);
    src.pos = getClientLeft(evt);
  }
}

function syncSound(clientId) {
  if (eval("typeof(" + clientId + "_soundCount) != 'undefined'")) {
    var index;
    var found = false;
    var count = eval(clientId + "_soundCount");

    if (isNaN(parseInt(count))) count = 0;
    if (count == 0) sendEvent(clientId, "VOLUME", 100);
    else {
      for (var i = 0; i < count; i++) eval("var sound" + (i + 1) + " = null");
      for (var i = 0; i < count; i++) {
        index = i + 1;
        eval("sound" + index + " = " + clientId + "_sound" + index);
        eval("if (sound" + index + ".style.display != 'none') found = true");
        if (found) break;
      }
      if (found) sendEvent(clientId, "VOLUME", calcVolumeLevel(count, index));
      else sendEvent(clientId, "VOLUME", 100);
    }
  }
  else sendEvent(clientId, "VOLUME", 100);
}

function calcVolumeLevel(count, index) {
  if ((count <= 0) || (index >= count)) return 100;
  if (index <= 1) return 1;
  return (100 / (count - 1)) * (index - 1);
}

function toggleSound(evt, clientId, index) {
  var src = getSrcElement(evt);
  var count = eval(clientId + "_soundCount");
  var soundIncrease = eval(clientId + "_soundIncrease");
  var next = (soundIncrease ? getNextSibling(src) : getPrevSibling(src));

  if (!next) {
    if (soundIncrease) {
      next = getPrevSibling(src);
      index--;
      eval(clientId + "_soundIncrease = false");
    }
    else {
      next = getNextSibling(src);
      index++;
      eval(clientId + "_soundIncrease = true");
    }
  }
  else if (soundIncrease) index++;
  else index--;
  if (!next) next = src;
  next.style.display = displayed(next);
  src.style.display = "none";
  sendEvent(clientId, "VOLUME", calcVolumeLevel(count, index));
}

function toggleVolume(by, clientId) {
  var vol = document.getElementById(clientId + "_volScale");
  if (!vol) return;
  var curVol = parseInt(vol.style.width);
  if (isNaN(curVol)) curVol = Math.floor((vol.offsetWidth / vol.parentNode.offsetWidth) * 100);
  curVol += by;
  if (curVol < 0 || curVol > 100) return;
  vol.style.width = curVol + "%";
  sendEvent(clientId, "VOLUME", curVol);
}

function rollIn(clientId) {
  if (eval("typeof(" + clientId + "_rolledInClassName)") == "undefined" || !eval(clientId + "_rolledOut")) return;
  eval(clientId + "_rolledOut = false");
}

function rollOut(clientId) {
  var cssClass = null;
  var rolledOut = null;

  try { rolledOut = eval(clientId + "_rolledOut"); } catch (x) { return; }
  try { cssClass = eval(clientId + "_rolledOutClassName"); } catch (x) { return; }
  if (rolledOut || !cssClass) return;
  var nrddl = eval(clientId + "_narrationsCombo");

  if (nrddl && (nrddl.options.length > 1)) {
    nrddl.style.display = displayed(nrddl);
    nrddl.parentNode.style.display = displayed(nrddl.parentNode);
  }
  else {
    var clipLn = eval(clientId + "_clipLine");

    if (clipLn) clipLn.style.display = displayed(clipLn);
  }
  displaySoundControl(clientId);
  getChildNode(eval(clientId), 0).className = cssClass;
  eval(clientId + "_rolledOut = true");
}

function displaySoundControl(clientId) {
  var count = eval(clientId + "_soundCount");

  if (count > 0) {
    var found = false;

    for (var i = 0; i < count; i++) eval("var sound" + (i + 1) + " = null");
    for (var i = 0; i < count; i++) {
      index = i + 1;
      eval("sound" + index + " = " + clientId + "_sound" + index);
      eval("if (sound" + index + ".style.display != 'none') found = true");
      if (found) break;
    }
    if (!found) eval("sound" + count + ".style.display = ''");
  }

}

function upCreateHandleClick(campaignId, narrationId, url, clientId) {
  var s = document.createElement("script");
  s.src = upStatsHost + "default.aspx?m=handleClick&cid=" + campaignId
    + "&nid=" + narrationId
    + "&clnt=" + encodeURIComponent(clientId)
    + "&url=" + (typeof (url) != "undefined" ? encodeURI(url) : "");
  s.type = "text/javascript";
  return s;
}
function upInsertHandleClick(campaignId, narrationId, url, clientId) {
  if (!document.body) return;
  var s = upCreateHandleClick(campaignId, narrationId, url, clientId);
  document.body.appendChild(s);
}
function handleClick(clientId, playlistUrl) {
  playlistUrl = unescape(playlistUrl);
  var campaignId = playlistUrl.match(/cid=\d+/);
  campaignId = campaignId ? parseInt(campaignId[0].substring(4)) : 0;
  var narrationId = playlistUrl.match(/nid=\d+/);
  narrationId = narrationId ? parseInt(narrationId[0].substring(4)) : 0;
  upInsertHandleClick(campaignId, narrationId, typeof (widgetCallerUrl) != "undefined" ? widgetCallerUrl : document.location.href, clientId);
}

function upCreateClickTiming(clickId, totalBufferTime, totalPlayTime) {
  var s = document.createElement("script");
  s.src = upStatsHost + "default.aspx?m=handleClick&clid=" + clickId
    + "&tbt=" + totalBufferTime
    + "&tpt=" + totalPlayTime;
  s.type = "text/javascript";
  return s;
}
function upInsertClickTiming(clickId, totalBufferTime, totalPlayTime) {
  if (!document.body) return;
  s = upCreateInteract(clickId, totalBufferTime, totalPlayTime);
  document.body.appendChild(s);
}
function sendClickTiming(clientId) {
  if (eval("typeof(" + clientId + "_clickId) == 'undefined'")) {
    setTimeout("sendClickTiming('" + clientId + "')", 1000);
    return;
  }
  upInsertClickTiming(eval(clientId + "_clickId"), eval(clientId + "_totalBufferTime"), eval(clientId + "_totalPlayTime"));
}

function handleClickTiming(clientId, bufferTime, playTime) // in mili seconds
{
  if (eval("typeof(" + clientId + "_totalBufferTime) == 'undefined'"))
    eval(clientId + "_totalBufferTime = " + bufferTime);
  else
    eval(clientId + "_totalBufferTime += " + bufferTime);
  if (eval("typeof(" + clientId + "_totalPlayTime) == 'undefined'"))
    eval(clientId + "_totalPlayTime = " + playTime);
  else
    eval(clientId + "_totalPlayTime += " + playTime);

  sendClickTiming(clientId);
}


function play(clientId) {
  if (!isPlayerReady(clientId)) return;
  if (!flash9Plugin()) {
    window.open("http://www.macromedia.com/go/getflashplayer", "_top");
    return;
  }
  if (eval(clientId + "_paused")) {
    sendEvent(clientId, "PLAY");
    toggleControlBtns(clientId, 1);
    eval(clientId + "_paused = false");
    return;
  }
  if (currentState[clientId] != null && currentState[clientId] == 1) {
    pause(clientId);
    return;
  }

  var narrationsCombo, url;

  try {
    narrationsCombo = eval(clientId + "_narrationsCombo");
    if (narrationsCombo.options.length > 0)
      if (narrationsCombo.selectedIndex >= 0) url = narrationsCombo.value;
    else url = narrationsCombo.options[0].value;
    else url = eval(clientId + "_url");
  }
  catch (x) { url = eval(clientId + "_url"); }
  if (url == "") return;
  if (url.indexOf(".aspx") > -1) wbnGetInclude(clientId, url.replace(/\?/g, "?cl=" + clientId + "&"), "sendEvent('" + clientId + "', 'LOAD', eval(" + clientId + "playlist)); sendEvent('" + clientId + "', 'ITEM', 0);");
  else {
    eval(clientId + "playlist = [{type:'sound', file:'" + url + "'}]");
    sendEvent(clientId, "LOAD", eval(clientId + "playlist"));
    sendEvent(clientId, 'ITEM', 0);
  }
  toggleControlBtns(clientId, 1);
  syncSound(clientId);
  handleClick(clientId, url);
}

function stop(clientId) {
  if (!isPlayerReady(clientId)) return;
  sendEvent(clientId, "STOP");
  toggleControlBtns(clientId, 0);
}

function pause(clientId) {
  if (!isPlayerReady(clientId)) return;
  eval(clientId + "_paused = true");
  sendEvent(clientId, "PLAY");
  toggleControlBtns(clientId, 2);
}

function clipLength(clientId) {
  if (!isPlayerReady(clientId)) return;
  return eval(clientId + "_clipLength");
}

function scrub(clientId, by) {
  if (!isPlayerReady(clientId)) return;
  if (currentState[clientId] != 1) return;

  var btnMarker = eval(clientId + "_btnMarker");
  var fillPlayed = eval(clientId + "_fillPlayed");

  if (isNaN(by)) by = 1;

  if (fillPlayed) {
    scrub.newPos = parseInt(btnMarker.style.width) + by;
    if (scrub.newPos < btnMarker.origWidth) scrub.newPos = btnMarker.origWidth;
    else if (scrub.newPos > clipLength(clientId) + btnMarker.origWidth) scrub.newPos = clipLength(clientId) + btnMarker.origWidth;
    btnMarker.style.width = scrub.newPos + "px";
  }
  else {
    scrub.newPos = parseInt(btnMarker.style.left) + by;
    if (scrub.newPos < 0) scrub.newPos = 0;
    else if (scrub.newPos > clipLength(clientId)) scrub.newPos = clipLength(clientId);
    btnMarker.style.left = scrub.newPos + "px";
  }
}

function doScrub(clientId) {
  if (!isPlayerReady(clientId)) return;
  sendEvent(clientId, "SEEK", Math.round(eval(clientId + "_duration") * (scrub.newPos / clipLength(clientId))));
}

function formatTime(seconds) {
  seconds = Math.round(seconds);
  var min = Math.floor(seconds / 60);
  min = min < 10 ? "0" + min : min.toString();
  var sec = seconds % 60;
  sec = sec < 10 ? "0" + sec : sec.toString();
  return min + ":" + sec;
}

function updateMarkerPosition(obj) {
  var elapsed = isNaN(obj["position"]) ? 0 : obj["position"];
  //if (obj["position"]<0) {alert(obj["position"]); elapsed=0;}
  var dur = isNaN(obj["duration"]) ? 0 : obj["duration"];
  var clientId = obj["id"].substr(0, obj["id"].lastIndexOf("_"));
  eval(clientId + "_duration = " + dur.toString());
  var btnMarker = eval(clientId + "_btnMarker");
  var fillPlayed = eval(clientId + "_fillPlayed");
  var playedFiller = eval(clientId + "_playedFiller");
  if (!btnMarker.dragging) {
    if (eval("typeof(" + clientId + "_timeDurationLabel)") != "undefined") {
      var tdl = eval(clientId + "_timeDurationLabel");
      if (tdl) tdl.innerHTML = formatTime(elapsed) + "/" + formatTime(dur);
    }

    var f = elapsed / dur;
    f = isNaN(f) ? 0 : f;

    if (!btnMarker.origWidth) btnMarker.origWidth = btnMarker.offsetWidth;

    if (fillPlayed) {
      btnMarker.style.width = Math.round(clipLength(clientId) * f) + btnMarker.origWidth + "px";
      if (playedFiller) playedFiller.style.width = Math.max(parseInt(btnMarker.style.width) - btnMarker.origWidth - 1, 0) + "px";
    }
    else
      btnMarker.style.left = Math.round(clipLength(clientId) * f) + "px";
    eval(clientId + "_loadingMessage").style.display = "none";
  }
}

function sendEvent(clientId, typ, prm) { if (isPlayerReady(clientId)) document.getElementById(getPlayerId(clientId)).sendEvent(typ, prm); }

function udpateState(obj) {
  var newstate = obj["newstate"];
  var oldstate = obj["oldstate"];
  var swf = obj["id"];
  var clientId = swf.substr(0, swf.lastIndexOf("_"));

  if (oldstate == "IDLE") eval(clientId + "_timesCompleted=0");

  if (newstate == "COMPLETED") {
    eval(clientId + "_timesCompleted++");
    if (eval(clientId + "playlist").length == eval(clientId + "_timesCompleted")) {
      toggleControlBtns(clientId, 3); // finished playing  
      rollIn(clientId);
    }
  }

  if (newstate == "BUFFERING")
    eval(clientId + "_bufferStartTime = " + (new Date()).getTime());
  else if (oldstate == "BUFFERING")
    handleClickTiming(clientId, (new Date()).getTime() - eval(clientId + "_bufferStartTime"), 0);

  if (newstate == "PLAYING" && eval(clientId + "_timesCompleted") == 1)
    eval(clientId + "_playStartTime = " + (new Date()).getTime());
  else if (oldstate == "PLAYING" && eval("typeof(" + clientId + "_playStartTime) != 'undefined'")) {
    handleClickTiming(clientId, 0, (new Date()).getTime() - eval(clientId + "_playStartTime"));
    eval(clientId + "_playStartTime = undefined");
  }
}

///////////////// General /////////////////////////////

function getClientLeft(evt) { return document.all ? evt.clientX : evt.pageX; }

function getClientTop(evt) { return document.all ? evt.clientY : evt.pageY; }

function displayed(elem) {
  if (!elem) return "";
  var tn = elem.tagName.toLowerCase();

  return document.all ? "block" : (tn == "td" ? "table-cell" : (tn == "tr" ? "table-row" : (tn == "table" ? "table" : "block")));
}

function wbnGetInclude(clientId, url, callback) {
  var d = document;
  var id = "playlistIncludeScript";
  var include = d.getElementById(id);
  var head = d.getElementsByTagName("head").item(0);
  if (include) head.removeChild(include);
  include = d.createElement("script");
  include.setAttribute("src", url);
  include.setAttribute("type", "text/javascript");
  include.setAttribute("id", id);
  head.appendChild(include);

  if (d.all) {
    if (include.readyState == "loaded") {
      eval(callback);
      include.onreadystatechange = null;
    }
    else {
      wbnCheckAgain.callback = callback;
      wbnCheckAgain.include = include;
      include.onreadystatechange = wbnCheckAgain;
    }
  }
  else {
    wbnCheckAgain.clientId = clientId;
    wbnCheckAgain.callback = callback;
    wbnCheckAgain.include = include;
    setTimeout(wbnCheckAgain, 100);
  }
}

function wbnCheckAgain() {
  if (!wbnCheckAgain.include) return;

  if (document.all) {
    if (wbnCheckAgain.include.readyState == "loaded") {
      eval(wbnCheckAgain.callback);
      wbnCheckAgain.include.onreadystatechange = null;
      wbnCheckAgain.include = null;
    }
  }
  else {
    if (eval("typeof(" + wbnCheckAgain.clientId + "playlist)") != "undefined") {
      eval(wbnCheckAgain.callback);
      wbnCheckAgain.include = null;
    }
    else
      setTimeout(wbnCheckAgain, 100);
  }
}

