





// 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.com:80/';
top.lcGetPlaylistPath = 'http://web.lightningcast.net/servlets/getPlaylist';
top.lcNetworkId = 9920;
top.lcPlayerId = 'MediaPlayer';
top.lcLevel = 'bio:aggregating';
top.lcFormat = 'VideoWindows-400-400x300';

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);

	if (mediaEntry.name == cur_wmv_content) {
		omniture_track_video_PLAY('BIO', '', mediaEntry.name, 'BIO:BB_CLIPVIEW', 'WMV');
	}

	

	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 += "<IMG src='"+this.preAuditURLs[x]+"'/>\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 += "<IMG src='"+this.midAuditURLs[x]+"'/>\n";
		}
		if (null != this.percentAuditURL) {
			auditHTML += "<IMG src='"+this.percentAuditURL+"&pct=50'/>\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 += "<IMG src='"+this.postAuditURLs[x]+"'/>\n";
		}
		if (null != this.percentAuditURL) {
			auditHTML += "<IMG src='"+this.percentAuditURL+"&pct=100&pctf=t'/>\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 = '<embed id="'+playerName+'" width="320" height="300" type="application/x-mplayer2" src="' + url + '"><param name="AUTOSTART" value="TRUE"><param name="uiMode" value="full"></embed>';
}
	
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 = '<HTML><IFRAME src="' + newBannerUrl + '" frameborder="0" scrolling="no" width="100%" height="100%" marginwidth="0" marginheight="0"/></HTML>';
	} else if (0 == bannerHTML.indexOf("http")) {
	  bannerHTML = '<HTML><CENTER><A HREF="' + newBannerClick + '" target="_blank"><IMG SRC="' + newBannerUrl + '" border="0"></A></CENTER></HTML>';		
	} else {
	  bannerHTML = '<HTML>' + newBannerUrl + '</HTML>';
	}
	lastBanner = newBannerUrl;
	bannerDiv.innerHTML = bannerHTML;
}

function _lcCheckPercentAudits(mediaPlayer, auditDiv) {
    if (null != window.percentAuditTimer) {
    	window.clearTimeout(window.percentAuditTimer);
    	window.percentAuditTimer = null;
    }
    
    if (mediaPlayer != null) {
    	window.percentAuditPlayer = mediaPlayer;
    } else {
    	mediaPlayer = window.percentAuditPlayer;
    }
    
    if (auditDiv != null) {
    	window.auditDiv = auditDiv;
    } else {
    	auditDiv = window.auditDiv;
    }
    
    media = mediaPlayer.currentMedia;
    
    currentEntry = _lcGetMediaEntry(media);
    
    currentEntry.duration = media.duration;
    
    var timeout = 3000;
    
    if (0 != currentEntry.duration) {
    	var controls = mediaPlayer.controls;
    	
    	if (controls.currentPosition > currentEntry.currentPosition) {
    	    currentEntry.currentPosition = controls.currentPosition;
    	}
    	
    	currentEntry.percentPlayed = ((currentEntry.currentPosition * 100) / currentEntry.duration);
    	
    	if (currentEntry.percentPlayed >= 50) {
    	    if (null != auditDiv) {
    	        auditDiv.innerHTML = currentEntry.getMidAuditHTML();
    	    }
    	} else {
    	    timeout = ((1000 * currentEntry.duration) / 2) - (1000 * currentEntry.currentPosition);
    	}
    }
    
    if (200 >= timeout) {
    	timeout = 200;
    } else if (timeout > 3000) {
    	timeout = 3000;
    }
    
    if (mediaPlayer.playState > 2 && 10 != mediaPlayer.playState) {
    	window.percentAuditTimer = window.setTimeout('top._lcCheckPercentAudits(null)', timeout);
    }
}

top._lcCheckPercentAudits = _lcCheckPercentAudits;

function lcPlayerClickEvent(nButton, nShiftState, fX, fY) {
  if (nButton != 1 || fX > 20 || fY > 20) {
    lastPlayerClick = 0;
    return;
  }
  if (playerClickState == 0 && nShiftState == 2) {
    playerClickState = 1;
    return;
  }
  if (playerClickState == 1 && nShiftState == 6) {
    var debugWindow = window.open(null, "lcPlayerDebug", "resizable=yes,scrollbars=yes,toolbar=no,status=no,menubar=no,location=no,directories=no,width=800,height=400");
    var d = debugWindow.document;
    d.write("<HTML><HEAD><TITLE>Lightningcast Player Debug</TITLE></HEAD>");
    d.write("<BODY onLoad=\"self.focus();\">");
    d.write("<H3>getPlaylist URL:</H3>");
    d.write("<A id='getPlaylist' href='"+top.lcPlayerURL+"'>"+top.lcPlayerURL+"</A>");
    d.write("<H3>Current Playlist:</H3>");
    
    var playlist = window.lcMediaPlayer.currentPlaylist;
    var controls = window.lcMediaPlayer.controls;
    
    d.write("<PRE>\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: <A target=\"_mediaView\" href=\""+listItem.sourceURL+"\">"+listItem.sourceURL+"</A>\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+": <A target=\"_bannerView\" href=\""+info+"\">"+info+"</A>\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("</PRE>");
    d.write("</BODY>");
    d.close();
  }
  playerClickState = 0;
}
