// Video Portal Dectector Priority Settings

//old defaults
/*var mediaPreferencePriority = {
  "Explorer" : [ windowsMediaCheck, flashCheck, quicktimeMediaCheck, realMediaCheck ],
  "Mozilla" : [ windowsMediaCheck, flashCheck, quicktimeMediaCheck, realMediaCheck ]
};*/
var mediaPreferencePriority = {"Explorer": ["wmv", "flash", "quicktime"], "Mozilla": ["wmv", "flash", "quicktime"], "Safari": ["flash", "quicktime"]};

var mediaName2Function = {
  'wmv' : windowsMediaCheck,
  'flash' : flashCheck,
  'quicktime' : quicktimeMediaCheck
};

var flashPortalFolder = "flash";
var windowsMediaPortalFolder = "windows";
var realMediaPortalFolder = "real";
var quicktimeMediaPortalFolder = "quicktime";


var PASSED = '<span class="passed">PASSED</span> ';
var FAILED = '<span class="failed">FAILED</span> ';
var CHECKING = '<span class="checking">CHECKING</span> ';


var OS_Text = "Operating System";
var MediaPlayer_Text = "Media Player Plugin";
var FlashPlayer_Text = "Flash Plugin";
var RealPlayer_Text = "Real Player";
var QuicktimePlayer_Text = "Quicktime";

var FlashPlayerDownloadLink = getDownloadUpdateLink("http://www.adobe.com/go/getflashplayer");


var videoIDParameter = "vidid";

var TR = '<tr><td width="33%">';
var TDY = '</td><td width="33%">';
var TD = '</td><td>';
var TDR = '</td></tr>';


// Building videoXML string that needs to be passed to the browser
//QueryxString_Parse();
var videoXML = "";

// reference to direct video XML
var segmentID = QueryString(videoIDParameter);
if (segmentID != null) {
  videoXML = getVideoXMLPath(segmentID);
}



// override redirect destination handler.. deref the QueryString and point to a method
/*
var	getRedirectLinkMethod = ( QueryString("getRedirectLinkMethod" ) ) ?
// custom redirect
eval( QueryString("getRedirectLinkMethod" ) ) :

// default handler
getVideoPortalURL;
*/

// defines the handler for determining sniffer redirect
// default is "load video portal"
var getRedirectLinkMethod = getVideoPortalURL;


// default assignment if no particular EVP is sniffed this will be used to
var portalURL = null;
//var portalURL = getVideoPortalURL( flashPortalFolder, videoXML);

// customize logic as necessary
var processFlag = processMediaSnifferRules();

// warn if color not fully set
if (!(screen.colorDepth >= 24)) {
  writeStatus('Color Depth', 'Suggest setting graphics display to 32-bit color', PASSED);
}


// case of no plugins
if (!processFlag) {
  reportResults("No+Usable+Plug-in");
}


// ========= methods

// Custom Media Type Rules Logic
function processMediaSnifferRules() {
  var status = false;
  var OS;

  // Determine which of the two implementations to choose
  browser = (is_ie) ? "Explorer" : "Mozilla";

  if (is_win) {
    OS = 'Windows';
  }
  else if (is_mac) {
    OS = 'Mac';
  }
  else if (is_unix) {
    OS = 'Unix';
  }
  else {
    OS = 'Other OS';
  }
  writeStatus(OS_Text, OS, PASSED);
  //returns an array of media types wmv, flash, quicktime
  var processingCheckList = mediaPreferencePriority[browser];

  // step through each of preferred checklist
  for (var i in processingCheckList) {
    //based on the media type get a checker function
    var processorFunction = mediaName2Function[processingCheckList[i]];

    if (status = processorFunction()) {
      go(portalURL);
      break;
    }


  }

  return status;
}


// check if Windows Media
function windowsMediaCheck() {
  var status = false;

  if (is_ie5up) {
    writeBrowserStatus(PASSED);

    if (is_Flash) {
      if (is_FlashVersion >= 9) {

        writeStatus(FlashPlayer_Text, 'Flash ' + is_FlashVersion, PASSED);

        if (is_WMP) {

          if (is_WMP9up) {
            status = true;
            writeStatus(MediaPlayer_Text, 'Windows Media ' + is_WMPMajor, PASSED);

            portalURL = getRedirectLinkMethod(windowsMediaPortalFolder, videoXML);
            reportResults("wmv2");

          }
          else {
            writeStatusDownload(MediaPlayer_Text, 'Windows Media 8 or older', FAILED, getDownloadUpdateLink('http://www.windowsmedia.com/download/'));

          }
        }

        else {
          writeStatusDownload(MediaPlayer_Text, 'No Windows Media Detected', FAILED, getDownloadUpdateLink('http://www.windowsmedia.com/download/'));
        }

      }

      else {
        writeStatusDownload(FlashPlayer_Text, 'Flash ' + is_FlashVersion + ' is too old', FAILED, FlashPlayerDownloadLink);
      }

    }

    else {
      writeStatusDownload(FlashPlayer_Text, 'No Flash detected', FAILED, FlashPlayerDownloadLink);
    }
  }
  else {

    // now in 2007 there is Firefox/PC/WMP plugin .. check for that combo
    if (is_win && is_moz) {

      // have the port25 lab plugin
      if (is_WMP) {
        status = true;
        writeStatus(MediaPlayer_Text, 'Windows Media Firefox Plugin', PASSED);
        portalURL = getRedirectLinkMethod(windowsMediaPortalFolder, videoXML);
        reportResults("wmv2");

        // non ie, no WMP plugin
      }
      else {
        writeStatusDownload(MediaPlayer_Text, getBrowserName() + ' missing the Windows Media Plugin', FAILED, getDownloadUpdateLink('http://port25.technet.com/pages/windows-media-player-firefox-plugin-download.aspx'));
      }

    }
    else {
      writeStatusDownload(MediaPlayer_Text, getBrowserName() + ' not supporting ActiveX Plugin', FAILED, getDownloadUpdateLink('http://www.microsoft.com/windows/ie/downloads/'));
    }

  }


  return status;
}


// check if Real
function realMediaCheck() {
  var status = false;

  if (is_getElementById) {
    writeStatus('Browser', getBrowserName(), PASSED);

    if (is_Flash) {
      if (is_FlashVersion >= 9) {

        writeStatus(FlashPlayer_Text, 'Flash ' + is_FlashVersion, PASSED);

        is_RM = sniffRealPlugin();

        if (is_RM) {

          writeStatus(MediaPlayer_Text, RealPlayer_Text, PASSED);

          status = true;
          portalURL = getRedirectLinkMethod(realMediaPortalFolder, videoXML);
          reportResults("rm2");

        }

        else {
          writeStatusDownload(MediaPlayer_Text, 'No ' + RealPlayer_Text + ' detected', FAILED, getDownloadUpdateLink('http://www.real.com/download/'));
        }

      }

      else {
        writeStatusDownload(FlashPlayer_Text, 'Flash ' + is_FlashVersion + ' is too old', FAILED, getDownloadUpdateLink('http://www.macromedia.com/go/getflashplayer'));
      }

    }

    else {
      writeStatusDownload(FlashPlayer_Text, 'No Flash detected', FAILED, getDownloadUpdateLink('http://www.macromedia.com/go/getflashplayer'));
    }
  }
  else {

    writeStatusDownload('Browser', getBrowserName() + ' or older', FAILED, getDownloadUpdateLink('http://www.microsoft.com/windows/ie/downloads/'));
  }

  return status;
}


// check if Quicktime
function quicktimeMediaCheck() {
  var status = false;

  if (is_getElementById) {
    writeStatus('Browser', getBrowserName(), PASSED);

    if (is_Flash) {
      if (is_FlashVersion >= 9) {

        writeStatus(FlashPlayer_Text, 'Flash ' + is_FlashVersion, PASSED);

        is_QT = sniffQuicktimePlugin();

        if (is_QT) {

          writeStatus(MediaPlayer_Text, QuicktimePlayer_Text, PASSED);

          status = true;
          portalURL = getRedirectLinkMethod(quicktimeMediaPortalFolder, videoXML);
          reportResults("qt");
        }

        else {
          writeStatusDownload(MediaPlayer_Text, 'No ' + QuicktimePlayer_Text + ' detected', FAILED, getDownloadUpdateLink('http://www.apple.com/quicktime/download/'));
        }

      }

      else {
        writeStatusDownload(FlashPlayer_Text, 'Flash ' + is_FlashVersion + ' is too old', FAILED, getDownloadUpdateLink('http://www.macromedia.com/go/getflashplayer'));
      }

    }

    else {
      writeStatusDownload(FlashPlayer_Text, 'No Flash detected', FAILED, getDownloadUpdateLink('http://www.macromedia.com/go/getflashplayer'));
    }
  }
  else {

    writeStatusDownload('Browser', getBrowserName() + ' or older', FAILED, getDownloadUpdateLink('http://www.microsoft.com/windows/ie/downloads/'));
  }

  return status;
}


// check Flash version
function flashCheck() {
  var status = false;

  if (is_Flash) {
    if (is_FlashVersion >= 9) {
      writeStatus(FlashPlayer_Text, 'Flash ' + is_FlashVersion, PASSED);
      portalURL = getRedirectLinkMethod(flashPortalFolder, videoXML);
      status = true;

      // add in version
      reportResults("Flash" + parseInt(is_FlashVersion));

    }
    else {

      // PC and Mac
      if (! is_unix) {
        writeStatusDownload(FlashPlayer_Text, 'Flash ' + is_FlashVersion + " outdated", FAILED, getDownloadUpdateLink('http://www.macromedia.com/go/getflashplayer'));
      }

      // linux Flash9
      if (is_unix) {
        writeStatusDownload(FlashPlayer_Text, 'Flash ' + is_FlashVersion + " outdated . Download version " + CVP_Flash_Version + " <small>(or higher)</small>", FAILED, FlashPlayerDownloadLink);
      }

    }

  }
  else {

    writeStatusDownload(FlashPlayer_Text, 'No Flash detected', FAILED, FlashPlayerDownloadLink);

  }


  return status;
}

function reportResults(message) {
  sendReporting("evp", "load", "media", message, "No+user+ID");
}


function getDownloadUpdateLink(u) {
  var msg = "Get Update &gt;&gt;";
  return '<a class="update" href="' + u + '" target="_blank">' + msg + '</a>';
}


function writeStatus(component, implementation, status) {
  document.write(TR + component + TDY + implementation + TDY + status + TDR);
}

var _displayedFlashErrorFlag = false;
function writeStatusDownload(component, implementation, status, link) {

  if (! _displayedFlashErrorFlag) {
    document.write(TR + component + TDY + implementation + TDY + status + TD + link + TDR);
  }

  // hides multiple flash error entries
  if (component.toLowerCase().indexOf("flash") >= 0) {
    _displayedFlashErrorFlag = true;
  }

}


var _browserResultWrittenFlag = false;
function writeBrowserStatus(status) {

  if (_browserResultWrittenFlag) {
    writeStatus('Browser', getBrowserName(), status);
  }

  if (status == PASSED) {
    _browserResultWrittenFlag = true;
  }

}


function getBrowserName() {
  var a = navigator.userAgent;
  if (is_ie) {
    a = "Explorer " + is_minor;
  }
  if (a.length > 20) {
    a = "<small>" + a + "</small>";
  }
  return a;
}


var _goOnce = false;
function go(URL) {
  if (! _goOnce) {
    _goOnce = true;
    setTimeout("launchPortal('" + URL + "')", 10);
  }
}

function launchPortal(u) {
  document.location = u;
}

