// 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.lightningcast.net:80/';
top.lcGetPlaylistPath = 'http://web.lightningcast.net/servlets/getPlaylist';
top.lcNetworkId = 28002;
top.lcPlayerId = 'vi_player';
top.lcLevel = 'The Digital Partnership:World Rally Championship Homepage';
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;
}