/*Copyright 2003-2008 Maven Networks, Inc.  All rights reserved.*/
var sMMSManager = null;
var sRPVersion = null;
var sQueryArgs = null;
// browser detection
var userAgent = navigator.userAgent.toLowerCase();
// platform
var isMac = (userAgent.indexOf("mac") != -1);
var isWin = (userAgent.indexOf("win") != -1);
// browser
var isSafari = ((userAgent.indexOf("safari") != -1) || (userAgent.indexOf("applewebkit") != -1));
var isSafari13Up = (isSafari && document.execCommand);
var isGecko = (!isSafari && (navigator.product == 'Gecko'));
var isGecko17Up = (isGecko && (window.find != undefined));
var isGecko18Up = (isGecko17Up && ([].forEach != undefined));
var isIe = (userAgent.indexOf("msie") != -1);
var isIe6Up = (isIe && document.getElementById && document.compatMode);
var enableQueryStringFiltering = false;
function doLoad(pDepth, pPageName) {
  sQueryArgs = parseQueryString ();
  if(!sQueryArgs["playerId"]) {
    var feedbackHTML = document.getElementById('feedbackHTML');
    feedbackHTML.style.display = 'none';
    feedbackHTML.innerHTML = "Choose from the players listed below.  [Ctrl-click to open in a new window.]";
  }
  checkSystem();
  // if the publisher is the referrer, use a bogus app id so that we don't think we're installed
  sMMSManager = initializeMMS ((sQueryArgs["referrer"] == "publisher" ? "_maven_fake_bogus_appid_" : "") + applicationId, pDepth, pPageName, notificationCallback);
  // NOTE: if we are running in current, redirect to that version's url.
  // MMS-6070: no longer shortcut for current, as it conflicts with players with 'current' in the name
//  if(document.location.href.indexOf('current') != -1) {
//    sMMSManager.getVersionList ();
//  }
//  else {
    sMMSManager.getReleasePackageVersion ();
//  }
}
function checkSystem() {
  var currentConfiguration = navigator.appName + ' ' + navigator.appVersion + ' on ' + navigator.platform;
  var minRequiredConfiguration = 'Internet Explorer 6 or 7 or Firefox 1.5/2.0 on Windows XP SP2 or Windows Vista, or Safari 2.0 or Firefox 1.5/2.0 on Mac OS X v10.4 or Mac OS X v10.5 is required to view this player.'; 
  var configurationFeedback = minRequiredConfiguration + ' Current configuration is ' + currentConfiguration;
  var downloadIe = 'http://www.microsoft.com/downloads/details.aspx?FamilyID=1e1550cb-5e5d-48f5-b02b-20b602228de6&displaylang=en'
  var downloadFf = 'http://www.mozilla.com/firefox/';
  var downloadSafari = 'http://www.apple.com/support/downloads/safariupdate131.html';
  var downloadBrowserLink = null;
  if( isWin ) {
    if( !isIe && !isGecko || isIe && !isIe6Up )
      downloadBrowserLink = downloadIe;
    else if( isGecko && !isGecko18Up )
      downloadBrowserLink = downloadFf;
  }
  else if( isMac ) {
    if( !isSafari && !isGecko || isSafari && !isSafari13Up )
      downloadBrowserLink = downloadSafari;
    else if( isGecko && !isGecko18Up )
      downloadBrowserLink = downloadFf;
  }
  if (downloadBrowserLink)
    showSysReq( configurationFeedback, downloadBrowserLink );
}
function showSysReq(message, link) {
  var wSize = getWindowSize();
  sysReqContainer = document.getElementById("sysReqContainer");
  sysReqContainer.style.display = 'block';
  // minimum size should be 240x180 for layout purposes (unless the width/height is less than that)
  sysReqContainer.style.width = Math.max(Math.min(wSize[0], 240), wSize[0] * .3) + "px";
  sysReqContainer.style.height = Math.max(Math.min(wSize[1], 180), wSize[1] * .3) + "px";
  if(link)
    sysReqContainer.innerHTML = "<p align='center'><font color='#000000'> " + message + "</font><br><br><br><a href=" + link + ">Click here to update.</a></p>";
  else
    sysReqContainer.innerHTML = "<p align='center'><font color='#000000'> " + message + "</font>";
  positionDialog('sysReqContainer');
}
function getWindowSize() {
  var windowWidth, windowHeight;
  if (self.innerHeight) {
    windowWidth = self.innerWidth;
    windowHeight = self.innerHeight;
  }
  else if (document.documentElement && document.documentElement.clientHeight) {
    windowWidth = document.documentElement.clientWidth;
    windowHeight = document.documentElement.clientHeight;
  }
  return [windowWidth, windowHeight];
}
function positionDialog(d) {
  var de = (typeof(d) == "string") ? document.getElementById(d) : d;
  var wSize = getWindowSize();
  if(de) {
    de.style.left = (wSize[0] - de.offsetWidth) / 2 + 'px';
    de.style.top = (wSize[1] - de.offsetHeight) /2 + 'px';
  }
}
function notificationCallback (pType, pParam) {
  switch (pType) {
    case "onNotification":
      onNotification(pParam);
      break;
    case "onQueryResult":
      onQueryResult (pParam);
      break;
    case "onReleasePackageVersion":
      onReleasePackageVersion (pParam);
      break;
    default:
      break;
  }
}
function onQueryResult (pQuery) {
  var context = pQuery.context;
  var callback = context[0][1];
  if(callback) {
    eval(callback + '(pQuery.result, pQuery.context);');
  }
  else {
    alert('no callback for '+ pQuery.context + ' supplied.');
    alert(pQuery.result.xml);
  }
}
function onReleasePackageVersion (pRPVersion) {
  sRPVersion = pRPVersion;
  var context = [
      ["callback", "getEditionPlayersCallback"]
    ];
  var params = [];
  sRPVersion.executeQuery(context, "edition", "editionPlayersPublic");
}
var editionXML = null;
function getEditionPlayersCallback(pResponseXML) {
  var feedbackHTML = document.getElementById('feedbackHTML');

  editionXML = XMLUtils.findNode(pResponseXML, 'app:QueryResults/app:results/app:Object');
  if(editionXML) {
    var players = XMLUtils.findNodes(editionXML,"app:players/app:Player");
    if(players.length == 1) 
      sQueryArgs["playerId"] = players[0].getAttribute("playerId");
    var playerId = sQueryArgs["playerId"];
    if(playerId) {
      var playerXML = findNodeWithAttribute(editionXML, "app:players/app:Player", "playerId", playerId, "");
      if(!playerXML) {
        feedbackHTML.innerHTML = "The player " + playerId + " cannot be found.";
        feedbackHTML.style.display = "inline";
        var spinnerHTML = document.getElementById('spinnerHTML');
        if(spinnerHTML)
          spinnerHTML.style.display = 'none';
        return;
      }
      var skinnedPlayerTemplateId = playerXML.getAttribute('skinnedPlayerTemplateId');
      var skinnedPlayerTemplateXML = findNodeWithAttribute(editionXML, "app:templates/app:SkinnedPlayerTemplate", "skinnedPlayerTemplateId", skinnedPlayerTemplateId, "");
      if(!skinnedPlayerTemplateXML) {
        feedbackHTML.innerHTML = "The template for" + playerId + ", named " + skinnedPlayerTemplateId + ", cannot be found.";
        feedbackHTML.style.display = "inline";
        var spinnerHTML = document.getElementById('spinnerHTML');
        if(spinnerHTML)
          spinnerHTML.style.display = 'none';
        return;
      }
skinnedPlayerTemplateId = sQueryArgs["viralSkinnedPlayerTemplateId"] ? sQueryArgs["viralSkinnedPlayerTemplateId"] : skinnedPlayerTemplateId;
      var playerTemplateId = skinnedPlayerTemplateXML.getAttribute('playerTemplateId');
playerTemplateId = sQueryArgs["viralPlayerTemplateId"] ? sQueryArgs["viralPlayerTemplateId"] : playerTemplateId;
      sQueryArgs["playlistId"] = playerXML.getAttribute('categoryId');
      sQueryArgs["streamingFormat"] = skinnedPlayerTemplateXML.getAttribute('streamingFormat');
      var temp = document.location.href;
      var root = temp.substring(0, temp.indexOf('launch.html'));
      var page = sQueryArgs["embedded"] == 'true' ? 'embedded/embeddedFlash' : 'player';
      var url = root + skinnedPlayerTemplateId + "/" + playerTemplateId + "/client/" + page + ".html";
      var queryString = "";
      for (var fieldName in sQueryArgs)
        queryString += "&" + fieldName + "=" + sQueryArgs[fieldName];
      if (queryString.length > 0)
        queryString = "?" + queryString.substring(1);
      url += queryString;
      var feedback = document.getElementById('feedbackHTML');
      feedback.style.display = 'none';
      var players = document.getElementById('playersHTML');
      players.style.display = 'none';
      document.location.href = url;
      return;
    }
    feedbackHTML.style.display = "inline";
    var spinnerHTML = document.getElementById('spinnerHTML');
    if(spinnerHTML)
      spinnerHTML.style.display = 'none';
    var playersHTML = document.getElementById('playersHTML');
    var temp = document.location.href;
    var root = temp.substring(0, temp.indexOf('launch.html'));
    var players= XMLUtils.findNodes(editionXML, 'app:players/app:Player');
    for(var i = 0; i < players.length; i++) {
      var playerXML = players[i];
      var div = document.createElement('div');
      div.style.paddingTop = '10px';
      div.innerHTML = playerXML.getAttribute('name');
      playersHTML.appendChild(div);
      var playerId = playerXML.getAttribute('playerId');
      var a = document.createElement('a');
      var url = root + "launch.html?maven_playerId="+playerId;
      a.href = url;
      a.innerHTML = url;
      playersHTML.appendChild(a);
      var br = document.createElement('br');
      playersHTML.appendChild(br);
      var a2 = document.createElement('a');
      var url2 = root + playerId+".html";
      a2.href = url2;
      a2.innerHTML = url2;
      playersHTML.appendChild(a2);
    }
  }
  else {
    var feedbackHTML = document.getElementById('feedbackHTML');
    feedbackHTML.innerHTML = "Error requesting Edition data."
    feedbackHTML.style.display = "inline";
  }
}
function doContextMenu() {
  var ev = window.event;
  return (ev.altKey && ev.ctrlKey);
}
function parseQueryString (str) {
  str = str ? str : location.search;
  var parentWin = window.parent;
  while (!str) {
    try {
      str = parentWin.location.search;
    } catch (e) {
      break;
    }
    if (parentWin == parentWin.parent)
      break;
    parentWin = parentWin.parent;
  }
  var query = str.charAt(0) == '?' ? str.substring(1) : str;
  var args = new Object();
  var maven_args = new Object();
  if (query) {
    var fields = query.split('&');
    for (var f = 0; f< fields.length; f++) {
      var field = fields[f].split('=');
      var fieldName = field[0];
      if (fieldName.indexOf("maven_") == 0)
        maven_args[fieldName.substring("maven_".length)] = field[1];
      else
        args[fieldName] = field[1];
    }
    if (enableQueryStringFiltering && ("&" + query).search(/&maven_/) != -1)
      args = maven_args;
    else {
      for (var fieldName in maven_args)
        args[fieldName] = maven_args[fieldName];
    }
  }
  return args;
}
function findNodeWithAttribute(startNode, searchPrefix, attributeName, attributeValue, searchSuffix) {
  var theNode = null;
  var allNodes = findNodesWithAttribute(startNode, searchPrefix, attributeName, attributeValue, searchSuffix, true);
  if (allNodes.length > 0)
    theNode = allNodes[0];
  return theNode;
}
function findNodesWithAttribute(startNode, searchPrefix, attributeName, attributeValue, searchSuffix, singleNode) {
  var theNodes = new Array();
  if (isSafari) {
    var prefixNodes = XMLUtils.findNodes(startNode, searchPrefix);
    var matchingNodes = new Array();
    var i;
    for (i = 0; i < prefixNodes.length; i++) {
      if (prefixNodes[i].getAttribute(attributeName) == attributeValue) {
        matchingNodes.push(prefixNodes[i]);
      }
    }
    if (searchSuffix) {
      var aNode;
      for (i = 0; i < matchingNodes.length; i++) {
        aNode = XMLUtils.findNode(matchingNodes[i], searchSuffix);
        if (aNode) {
          theNodes.push(aNode);
          if (singleNode)
            break;
        }
      }
    }
    else
      theNodes = matchingNodes;
  }
  else {
    if (singleNode) {
      aNode = XMLUtils.findNode(startNode, searchPrefix + "[@" + attributeName + "=\"" + attributeValue + "\"]" + (searchSuffix ? "/" + searchSuffix : ""));
      if (aNode)
        theNodes.push(aNode);
    }
    else
      theNodes = XMLUtils.findNodes(startNode, searchPrefix + "[@" + attributeName + "=\"" + attributeValue + "\"]" + (searchSuffix ? "/" + searchSuffix : ""));
  }
  return theNodes;
}
