// lcSyncBanner JavaScript
//
// Copyright Lightningcast, Inc. 2005
var lastBanner = null;
var lastCurrentMedia = null;
var lastCurrentMediaName = "";
var lastPreviousMedia = null;
var lastPreviousMediaName = "";
var lastReplaceBanner = null;
var playerClickState = 0;
var debugWindow = null;
window.percentAuditTimer = null;
window.percentAuditPlayer = null;
window.auditDiv = null;
top.lcBasePath = 'http://downloads.instream.com:80/';
top.lcGetPlaylistPath = 'http://web.instream.com/servlets/getPlaylist';
top.lcNetworkId = 11375;
top.lcPlayerId = 'videoplug';
top.lcLevel = 'Internet Broadcasting:IBSYS';
top.lcFormat = 'Video-Windows-300-320x240';
top.lcPlayerURL = null;
window.lcMediaPlayer = null;
// Array to contain all the Lightningcast Media Entries.
top.lcMediaEntries = new Array();
top.lcPlaylists = new Array();
function _lcGetMediaEntry(media) {
for (i = 0; top.lcMediaEntries.length > i; i++) {
if (top.lcMediaEntries[i].equals(media)) {
top.lcMediaEntries[i].media = media;
top.lcMediaEntries[i].duration = media.duration;
return top.lcMediaEntries[i];
}
}
mediaEntry = new LCMediaEntry(media);
top.lcMediaEntries.push(mediaEntry);
return mediaEntry;
}
function _lcAddMediaEntries(mediaPlayer) {
var playlist = mediaPlayer.currentPlaylist;
if ("undefined" == typeof(playlist) || null == playlist) {
return;
}
var previousEntry = null;
var currentEntry = null;
var media = null;
for (j = 0; j < playlist.count; j++ ) {
media = playlist.item(j);
currentEntry = _lcGetMediaEntry(media);
currentEntry.previousEntry = previousEntry;
if (null != previousEntry) {
previousEntry.nextEntry = currentEntry;
}
previousEntry = currentEntry;
}
return null;
}
function LCMediaEntry(media) {
// Current windows media player media entry.
this.media = media;
this.name = media.name;
this.duration = media.duration;
this.currentPosition = 0;
this.percentPlayed = 0;
this.previousEntry = null;
this.nextEntry = null;
this.preAuditSent = false;
this.midAuditSent = false;
this.postAuditSent = false;
this.preAuditURLs = new Array();
this.midAuditURLs = new Array();
this.postAuditURLs = new Array();
this.percentAuditURL = null;
this.percentAudited = 0;
this.percentFinal = false;
this.bannerUrl = media.getItemInfo('IAB_URL');
this.bannerClick = media.getItemInfo('IAB_CLICKTHRU');
var auditURL;
for (i = 1; i < 10; i++) {
auditURL = media.getItemInfo("PTAGPRE"+i);
if ("undefined" != typeof(auditURL) && null != auditURL && "" != auditURL) {
this.preAuditURLs.push(auditURL);
}
auditURL = media.getItemInfo("PTAGMID"+i);
if ("undefined" != typeof(auditURL) && null != auditURL && "" != auditURL) {
this.midAuditURLs.push(auditURL);
}
auditURL = media.getItemInfo("PTAGPOST"+i);
if ("undefined" != typeof(auditURL) && null != auditURL && "" != auditURL) {
this.postAuditURLs.push(auditURL);
}
}
auditURL = media.getItemInfo('LCAUDIT');
if ("undefined" != typeof(auditURL) && null != auditURL && "" != auditURL) {
this.preAuditURLs.push(auditURL);
}
auditURL = media.getItemInfo('LCPCTAUDIT');
if ("undefined" != typeof(auditURL) && null != auditURL && "" != auditURL) {
this.percentAuditURL = auditURL;
}
}
LCMediaEntry.prototype.equals = function(media) {
//return (this.name == media.name);
return this.media.isIdentical(media);
}
LCMediaEntry.prototype.getPreAuditHTML = function() {
if (this.preAuditSent) {
return "";
} else {
auditHTML = "";
for (x = 0; this.preAuditURLs.length > x; x++) {
auditHTML += "\n";
}
this.preAuditSent = true;
return auditHTML;
}
}
LCMediaEntry.prototype.getMidAuditHTML = function() {
if (this.midAuditSent) {
return "";
} else {
auditHTML = "";
for (x = 0; this.midAuditURLs.length > x; x++) {
auditHTML += "
\n";
}
if (null != this.percentAuditURL) {
auditHTML += "
\n";
}
this.midAuditSent = true;
return auditHTML;
}
}
LCMediaEntry.prototype.getPostAuditHTML = function() {
if (this.postAuditSent) {
return "";
} else {
auditHTML = "";
for (x = 0; this.postAuditURLs.length > x; x++) {
auditHTML += "
\n";
}
if (null != this.percentAuditURL) {
auditHTML += "
\n";
}
this.postAuditSent = true;
return auditHTML;
}
}
function lcUpdatePlaylistState(mediaPlayer, auditDiv, bannerDiv, newState) {
if ("undefined" == typeof(bannerDiv) || null == bannerDiv) {
return;
}
if ("undefined" == typeof(mediaPlayer) || null == mediaPlayer) {
return;
}
var currentMedia = mediaPlayer.currentMedia;
if ("undefined" == typeof(currentMedia) || null == currentMedia) {
return;
}
_lcAddMediaEntries(mediaPlayer);
_lcCheckPercentAudits(mediaPlayer, auditDiv);
if (8 == newState) {
var nextMedia = lcGetNextMedia(mediaPlayer, currentMedia);
lcReplaceBanner(nextMedia, bannerDiv);
lcAudit(auditDiv, currentMedia, nextMedia);
} else {
lcReplaceBanner(currentMedia, bannerDiv);
var previousMedia = lcGetPreviousMedia(mediaPlayer, currentMedia);
if ("undefined" == typeof(previousMedia) || null == previousMedia) {
lcAudit(auditDiv, previousMedia, currentMedia);
}
}
}
function lcGetNextMedia(mediaPlayer, currentMedia) {
var playlist = mediaPlayer.currentPlaylist;
if ("undefined" == typeof(playlist) || null == playlist) {
return;
}
for (i = 0; i < playlist.count; i++ ) {
var media = playlist.item(i);
// Doing this by name is not optimal.
if (media.name === currentMedia.name && (playlist.count > i+1)) {
media = playlist.item(i+1);
return media;
}
}
return null;
}
function lcGetPreviousMedia(mediaPlayer, currentMedia) {
var playlist = mediaPlayer.currentPlaylist;
if ("undefined" == typeof(playlist) || null == playlist) {
return;
}
for (i = 0; i < playlist.count; i++ ) {
var media = playlist.item(i);
if (media === currentMedia && (i-1 > 0)) {
media = playlist.item(i-1);
return media;
}
}
return null;
}
function lcAudit(auditDiv, previousMedia, currentMedia) {
if ("undefined" == typeof(auditDiv) || null == auditDiv) {
return;
}
var auditHTML = "";
var currentMediaEntry = null;
var previousMediaEntry = null;
var hasPreviousMedia = ("undefined" != typeof(previousMedia) && null != previousMedia);
var hasCurrentMedia = ("undefined" != typeof(currentMedia) && null != currentMedia);
if (hasCurrentMedia) {
currentMediaEntry = _lcGetMediaEntry(currentMedia);
if (lastCurrentMedia === currentMedia || lastCurrentMediaName == currentMedia.name) {
return;
}
lastCurrentMedia = currentMedia;
lastCurrentMediaName = currentMedia.name;
auditHTML += currentMediaEntry.getPreAuditHTML();
}
if (hasPreviousMedia) {
previousMediaEntry = _lcGetMediaEntry(previousMedia);
auditHTML += previousMediaEntry.getPostAuditHTML();
}
if ("" == auditHTML) {
return;
}
auditDiv.innerHTML = auditHTML;
}
function lcPlayVideoNotIE(url, playerName) {
var mediaPlayerDiv = document.getElementById("MediaPlayerDiv");
if (typeof(mediaPlayerDiv) == "undefined") { return; }
mediaPlayerDiv.innerHTML = '';
}
function lcPlayVideoClip(url) {
return lcPlayVideo(top.lcPlayerId, top.lcLevel, url);
}
function lcPlayVideo(playerName, level, url) {
var mediaPlayer = document.getElementById(playerName);
if (typeof(mediaPlayer) == "undefined") { return; }
var playerURL = top.lcGetPlaylistPath+'?ver=2.0&nwid=';
playerURL += top.lcNetworkId;
var hasPlayerAccess = (typeof(mediaPlayer.status) != "undefined");
if (hasPlayerAccess) {
playerURL += '&audit=param';
}
playerURL += '&format='+top.lcFormat+'&level=';
playerURL += escape(level);
playerURL += '&content=';
playerURL += escape(url);
playerURL += '&responseType=ASX&mswmext=.asx';
top.lcPlayerURL = playerURL;
window.lcMediaPlayer = mediaPlayer;
if (hasPlayerAccess) {
mediaPlayer.URL = playerURL;
} else {
lcPlayVideoNotIE(playerURL, playerName);
}
var lcLogger = document.getElementById("lcLoggerArea");
if ("undefined" != typeof(lcLogger) && null != lcLogger) { lcLogger.value += playerURL + "\n"; }
}
top.lcPlayVideo = lcPlayVideo;
top.lcPlayVideoClip = lcPlayVideoClip;
/**
* This is the really basic banner replacement routine.
*/
function lcReplaceBanner(currentMedia, bannerDiv)
{
var lcLogger = document.getElementById("lcLoggerArea");
if ("undefined" == typeof(lcLogger)) { lcLogger = null; }
if (null != lcLogger) { lcLogger.value += "replacing banner.\n"; }
if ("undefined" == typeof(currentMedia) || null == currentMedia) {
return;
}
if ("undefined" == typeof(bannerDiv) || null == bannerDiv) {
return;
}
if (null == lastReplaceBanner) {
if (null != lcLogger) { lcLogger.value += "adding replace banner timeout.\n"; }
window.currentMedia = currentMedia;
window.bannerDiv = bannerDiv;
lastReplaceBanner = window.setTimeout("lcReplaceBanner(window.currentMedia, window.bannerDiv)", 1000);
} else {
if (null != lcLogger) { lcLogger.value += "clearing replace banner timeout.\n"; }
window.currentMedia = null;
window.bannerDiv = null;
lastReplaceBanner = null;
}
var newBannerUrl = currentMedia.getItemInfo('IAB_URL');
var newBannerClick = currentMedia.getItemInfo('IAB_CLICKTHRU');
if (typeof(newBannerUrl) == 'undefined' || newBannerUrl == null || newBannerUrl == "") {
return;
}
var bannerHTML = newBannerUrl;
if (lastBanner == newBannerUrl) { return; }
if ("" == newBannerClick || "DHTML" == newBannerClick) {
bannerHTML = '';
} else if (0 == bannerHTML.indexOf("http")) {
bannerHTML = '
\n"); d.write("TITLE: "+playlist.name+"\n"); for (i = 0; i < playlist.count; i++) { var listItem = playlist.item(i); d.write(" ENTRY #"+(i+1)+"\n"); d.write(" TITLE: "+listItem.name+"\n"); d.write(" SOURCE: "+listItem.sourceURL+"\n"); for (j = 0; j < listItem.attributeCount; j++) { var name = listItem.getAttributeName(j); if (name == "SourceURL" || name == "Title") { continue; } var info = listItem.getItemInfo(name); if (name == "IAB_URL") { d.write(" "+name+": "+info+"\n"); } else { d.write(" "+name+": "+info+"\n"); } } } d.write("\nLightningcast Media Entries:\n"); for (i = 0; top.lcMediaEntries.length > i; i++) { d.write(" ENTRY #"+(i+1)+"\n"); mediaEntry = top.lcMediaEntries[i]; d.write(" NAME: "+mediaEntry.name+" - "+mediaEntry.duration+" / "+mediaEntry.currentPosition+"\n"); if (null != mediaEntry.previousEntry) { d.write(" Previous Entry: "+mediaEntry.previousEntry.name+" - "+mediaEntry.previousEntry.duration+"\n"); } if (null != mediaEntry.nextEntry) { d.write(" Next Entry: "+mediaEntry.nextEntry.name+" - "+mediaEntry.nextEntry.duration+"\n"); } d.write(" Pre-Audit Sent: "+mediaEntry.preAuditSent+"\n"); for (x = 0; mediaEntry.preAuditURLs.length > x; x++) { d.write(" "+mediaEntry.preAuditURLs[x]+"\n"); } d.write(" Mid-Audit Sent: "+mediaEntry.midAuditSent+"\n"); for (x = 0; mediaEntry.midAuditURLs.length > x; x++) { d.write(" "+mediaEntry.midAuditURLs[x]+"\n"); } d.write(" Post-Audit Sent: "+mediaEntry.postAuditSent+"\n"); for (x = 0; mediaEntry.postAuditURLs.length > x; x++) { d.write(" "+mediaEntry.preAuditURLs[x]+"\n"); } } d.write(""); d.write(""); d.close(); } playerClickState = 0; }