/*
 * Copyright 2006, Internet Broadcasting Systems. All Rights Reserved.
 *
 * $Id: WmvPlayer.js,v 1.2 2006/07/13 18:06:23 breisinger Exp $
 */

using("ibsys");

var activexVideo = false;
var embedVideo = false;

try {
	if(window.ActiveXObject && ((new ActiveXObject("WMPlayer.OCX.7")) != null))
		activexVideo = true;
} catch(ex)  { }

if(!activexVideo)
{
	try {
		if(navigator.mimeTypes && navigator.mimeTypes['application/x-mplayer2'].enabledPlugin)
			embedVideo = true;
	} catch(ex) { }
}

// NOTE: USING windowlessVideo = 0
// USAGE: ibsys.WmvPlayer.getInstance("player1").createPlayer("video",1234568,true);
ibsys.WmvPlayer =
{
	all: [],
	controls: {},
	buffering: {},
	adDetect: {},
	adTarget: {},
	playlistHandler: {},
	getInstance: function(playerID)
	{
		for(var j=0, pp=this.all[j]; j < this.all.length; ++j)
			if(pp.playerID == playerID)
				return pp.player;

		var player =
		{
			playerID: playerID,		// player ID
			status: -1,			// setInterval ID number
			isActiveX: activexVideo,	// activeX
			lastClickTime: -1,		// time of last user click in millis

			getPlugin: function()
			{
				return document.getElementById("videoplug" + player.playerID);
			},

			stop: function()
			{
				if(player.getPlugin() && activexVideo &&
					player.getPlugin().playState != 1)
				{
					player.getPlugin().controls.stop();
				}
				else if(player.getPlugin() && embedVideo &&
					player.getPlugin().parentNode)
				{
					player.getPlugin().parentNode.removeChild(
						player.getPlugin());
				}
			},
			/**
			 * @type (video|url|image)
			 * @coid phaedra content id
			 * @autoplay autoplay value
			 * @uiMode (full|mini|none)
			 * @preroll (true | false)
			 */
			createPlayer: function(type,coid,autoplay,uiMode,preroll)
			{
				preroll = (typeof preroll == 'boolean' ? (preroll?'y':'n'):'y');
				uiMode = (uiMode ? uiMode : "full");
				// COMMENTED-OUT BY RITESH var vidurl = (type != 'url' ? "http://" + window.location.host + "/videofiles/" + coid + "/playlist.asx?qs=t;speed=high;ng="+preroll : coid);

				var vidurl = (type != 'url' ? "/portal/site/nbcsports/template.BINARYPORTLET/menuitem.af05b8f10634b76025f12e10073c2d04/?javax.portlet.tpst=a4a12dcddba148608c781c10073c2d04_ws_BI" : coid);

				if(type == 'url') {
					coid = vidurl.split("/")[4];
				}
				// COMMENTED-OUT if(ibsys.WmvPlayer.adTarget[this.playerID])
			//		vidurl += ";adtarget=" + ibsys.WmvPlayer.adTarget[this.playerID];
			//	if(ibsys.WmvPlayer["qstail"])
			//		vidurl += ibsys.WmvPlayer["qstail"];

				if(type == 'url' || type == 'video' || type == 'image')
				{
					//create video in IE / Win
					if(activexVideo)
					{
						var el = document.getElementById("videoplug" + this.playerID);

						// NOTE: redneck doubleclick detection
						var now = new Date().getTime();
						if(now - this.lastClickTime <= 3000)
						{
							//////debug.println("Waiting " + (now - this.lastClickTime));
							return;
						}
						else
						{
							this.lastClickTime = now;
						}

						//control functions
						function callStop() {
							if(ibsys.WmvPlayer.controls[self.playerID] && ibsys.WmvPlayer.controls[self.playerID].enabled) {
								el.controls.stop();
							}

						}
						function callPause() {
							if(ibsys.WmvPlayer.controls[self.playerID] && ibsys.WmvPlayer.controls[self.playerID].enabled) {
								el.controls.pause();
								ibsys.WmvPlayer.controls[self.playerID].getPlay().className = "control play";
							}
						}
						function callFastReverse() {
							if(ibsys.WmvPlayer.controls[self.playerID] && ibsys.WmvPlayer.controls[self.playerID].enabled) {
								el.controls.fastReverse();
							}
						}

						function callPlay() {
							//debug(getStateString(el.playState));
							if(ibsys.WmvPlayer.controls[self.playerID] && ibsys.WmvPlayer.controls[self.playerID].enabled) {
								//if the player is playing, pause it.
								if(el.playState == 3) {
									el.controls.pause();
								//create a new player with the specified video (PLAYME)
								} else if (el.playState == 0) {

									ibsys.WmvPlayer.getInstance(self.playerID).createPlayer("video",ibsys.WmvPlayer.controls[self.playerID].PLAYME,true,"none");
									//enable seeking if required
									if(ibsys.WmvPlayer.controls[self.playerID].seekEnabled && ibsys.WmvPlayer.controls[self.playerID].enabled) {
										ibsys.WmvPlayer.controls[self.playerID].startSeek();
									}
								} else {
									el.controls.play();
								}
							}
						}

						// IMPORTANT: call plugin.close() before removing an active player
						if(el != null)	{
							// //////debug.println("Player present, closing....");
							// el.controls.stop();
							el.close();
							if(ibsys.WmvPlayer.adDetect[this.playerID]) {
								ibsys.WmvPlayer.adDetect[this.playerID].stop();
							}
						} else {
							el = document.createElement("object");
							el.id = "videoplug"+this.playerID;
							el.setAttribute("classid","CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6");
							el.setAttribute("codebase","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701");
							el.setAttribute("standby","Loading");
							el.setAttribute("type","application/x-oleobject");
							el.setAttribute("width","100%");
							el.setAttribute("height","100%");
							el.stretchToFit = true;
							el.autoStart = autoplay;
							el.windowlessvideo = true;
							el.uiMode = uiMode;
							document.getElementById(this.playerID).appendChild(el);
						}

						//ADDED DDJOHNSON Jun 1, 2006
						//NOTE: PLAYER ATTACHED TO DOCUMENT AT THIS TIME
						//ADD CLICK EVENT LISTENER FOR POPUP AD
						/**
						 * open an Ad window if the current media is an Ad.
						 */
						function playerMouseDown()
						{
							if(el.currentPlaylist && el.currentPlaylist.item(0).getItemInfo("MoreInfoRef") != "")
							{
								window.open(
									el.currentPlaylist.item(0).getItemInfo("MoreInfoRef"),
									"videoadwindow",
									"width=800,height=400,resizable=1,scrollbars=1,status=1,toolbar=1");
							}
						}

						// TODO: use addEvent to register events so we can
						// unload them with the window.  Internet Explorer
						// registers most DOM events using "ON" + event name,
						// while activeX events are registered with just the
						// event name, so addEvent may need to change.
						el.attachEvent("onmousedown", playerMouseDown);
						// addEvent(el,"mousedown",playerMouseDown);

						var self = this;

						// OpenStateChange handler: watch for tracker param in
						// asx files from doubleclick
						function handleOpenStateChange(newstate)
						{
							if(newstate == 13 && el.currentMedia)
							{
								if(el.currentMedia.getItemInfo("tracker") &&
									el.currentMedia.getItemInfo("tracker").indexOf("http") != -1)
								{
									var trackingimage = new Image();
									trackingimage.src = el.currentMedia.getItemInfo("tracker");
								}
							}
						}

						el.attachEvent("openstatechange", handleOpenStateChange);

						//Gets status of video player, changes class name of buttons based on status.
						function statechangeHandler(newstate)
						{
							if(ibsys.WmvPlayer.controls[self.playerID])
							{
								switch(newstate)
								{
									//player is stopped
									case 1 :
									//player is paused
									case 2 :
									//player is in fast reverse
									case 5 :
									//ready
									case 10 :
										if(ibsys.WmvPlayer.controls[self.playerID].enabled) {
											ibsys.WmvPlayer.controls[self.playerID].getPlay().className = "control play";
										} else {
											ibsys.WmvPlayer.controls[self.playerID].getPlay().className = "control playoff";
										}
										break;
									//media ended
									case 8 :
									//player is playing
									case 3 :
										if(ibsys.WmvPlayer.controls[self.playerID] && ibsys.WmvPlayer.controls[self.playerID].enabled) {
											ibsys.WmvPlayer.controls[self.playerID].getPlay().className = "control pause";
										} else {
											ibsys.WmvPlayer.controls[self.playerID].getPlay().className = "control pauseoff";
										}
										break;
									default :
										if(ibsys.WmvPlayer.controls[self.playerID] && ibsys.WmvPlayer.controls[self.playerID].enabled) {
											ibsys.WmvPlayer.controls[self.playerID].getPlay().className = "control pause";
										} else {
											ibsys.WmvPlayer.controls[self.playerID].getPlay().className = "control pauseoff";
										}
										break;
								}
							}
						}

						el.attachEvent("playstatechange", statechangeHandler);

						function openstatechangeHandler(newstate)
						{
							//window.status = "openstatechangeHandler: " +newstate;
							var pp = document.getElementById("videoplugplayer2");
							if(newstate == 13 && pp.currentMedia)
							{
								var lastEntry = pp.currentMedia.getItemInfo("LastEntry");
								if(lastEntry != "")
									ibsys.WmvPlayer.playlistHandler[self.playerID]();
							}
						}

						if(ibsys.WmvPlayer.playlistHandler[self.playerID])
						{
							el.attachEvent("openstatechange", openstatechangeHandler);
						}

						window.attachEvent("onunload", function() {
							window.clearInterval(player.status);
							// el.detachEvent("playstatechange",statechangeHandler);
							// el.detachEvent("openstatechange",openstatechangeHandler);
						});

						//unset timed function below
						if(typeof player.status != "undefined") {
							window.clearInterval(player.status);
						}

						player.status = window.setInterval(function() {
							var ps = document && document.getElementById("videoplug"+self.playerID) ?
								 document.getElementById("videoplug"+self.playerID).playState : -1;
							if(ps == -1)
								return;
							if(ibsys.WmvPlayer.buffering[self.playerID])
							{
								if(ps == 6 || ps == 9)
								{
									document.getElementById(self.playerID).style.display = "none";
									ibsys.WmvPlayer.buffering[self.playerID].style.display = "block";
								}
								else {
									document.getElementById(self.playerID).style.display = "block";
									ibsys.WmvPlayer.buffering[self.playerID].style.display = "none";
								}
							}
							var length = (el.controls.currentItem) ? el.controls.currentItem.duration : 1;
							var position = (el.controls) ? el.controls.currentPosition : 1;
							var pct = parseInt(Math.round(((position / length) * 100) * 100) * 0.01);
							if(isNaN(pct))
								pct = 0;
							// window.status = getStateString(ps) + ", " + pct + "%";
							if(ibsys.WmvPlayer.controls[self.playerID])
							{
								if(!ibsys.WmvPlayer.controls[self.playerID].progressInterrupt) {
									try {
										ibsys.WmvPlayer.controls[self.playerID].getFill().style.width = pct + "%";
									} catch(ex) {
										// //////debug.println(ex.message,2);
									}
								}
							}

							if(ibsys.WmvPlayer.playlistHandler[self.playerID])
							{
								if(pct > 95 && el.currentMedia && el.currentMedia.getItemInfo("LastEntry") != "")
								{
									//window.status = "calling playlistHandler: " + self.playerID;
									ibsys.WmvPlayer.playlistHandler[self.playerID]();
								}
							}

						}, 200);

						if(ibsys.WmvPlayer.controls[self.playerID])
						{
							ibsys.WmvPlayer.controls[self.playerID].getStop().attachEvent("onclick", callStop);
							ibsys.WmvPlayer.controls[self.playerID].getBack().attachEvent("onclick", callFastReverse);
							ibsys.WmvPlayer.controls[self.playerID].getPlay().onclick = callPlay;
							ibsys.WmvPlayer.controls[self.playerID].setEnabled(true);
						}

						//set the url, which starts the video player
						if(el.URL != vidurl) {
							el.URL = vidurl;
							//enable seeking if required
							if(ibsys.WmvPlayer.controls[self.playerID] && ibsys.WmvPlayer.controls[self.playerID].seekEnabled) {
								ibsys.WmvPlayer.controls[self.playerID].startSeek();
							}
						}

						//start preroll ad detection if required
						if(ibsys.WmvPlayer.adDetect[self.playerID]) {
							ibsys.WmvPlayer.adDetect[self.playerID].go();
						}
					}
					//create video in other browsers / systems
					else if(embedVideo)
					{
						if(document.getElementById("videoplug"+this.playerID) != null)
							document.getElementById("videoplug"+this.playerID).parentNode.removeChild(
								document.getElementById("videoplug"+this.playerID));
						var str = "<embed showtracker=\"0\" showstatusbar=\"0\" transparentstart=\"1\" showcontrols=\"1\""+
									" autostart=\"1\" + type=\"application/x-mplayer2\"" +
									" src=\"" + vidurl + "\"" +
									" id=\"videoplug" + this.playerID + "\""+
									" height=\"100%\" width=\"100%\">";
						document.getElementById(this.playerID).innerHTML = str;
					}
				}
			}
		}
		ibsys.WmvPlayer.all.push({
			playerID:playerID,
			player:player});
		return player;
	}
};

/***************
* Custom controls
* 	@parent (string: id of div to hold controls)
*	@playerID (string: playerID of ibsys.WmvPlayer object)
* 	@seekEnabled (boolean: enable/disable user seeking)
* Usage:
* 	ibsys.WmvPlayer.controls["player"] = new ibsys.WmvControls(parent,playerId,seekEnabled,detectAds);
****************/
ibsys.WmvControls = function(parent,playerID,seekEnabled,detectAds)
{
	this.enabled = false;
	this.progressInterrupt = false;
	this.seekEnabled = seekEnabled;
	this.playerID = playerID ? playerID : false;
	this.detectAds = (typeof detectAds == "undefined") ? true : (detectAds ? detectAds : false);

	var el = document.getElementById(parent).appendChild(document.createElement("div"));
	el.className = "controls";
	this.getControls = function() { return el };

	var back = el.appendChild(document.createElement("div"));
	back.className = "control backoff";
	back.title = "Back";
	this.getBack = function() { return back; }

	var play = el.appendChild(document.createElement("div"));
	play.className = "control playoff";
	play.title = "Play / Pause";
	this.getPlay = function() { return play; }

	var stop = el.appendChild(document.createElement("div"));
	stop.className = "control stopoff";
	stop.title = "Stop";
	this.getStop = function() { return stop; }

	var track = el.appendChild(document.createElement("div"));
	track.className = "track trackoff";
	this.getTrack = function() { return track; }

	var fill = track.appendChild(document.createElement("div"));
	fill.className = "fill filloff";
	this.getFill = function() { return fill; }

	//seek knob
	var seekKnob = false;
	if(this.seekEnabled) {
		seekKnob = this.getFill().appendChild(document.createElement("div"));
		seekKnob.className = "seekKnob";
	}
	this.getSeekKnob = function() { return seekKnob; }

	this.setEnabled = function(b)
	{
		this.enabled = b;
		var str = b ? "" : "off";
		this.getBack().className = "control back" + str;
		this.getPlay().className = "control play" + str;
		this.getStop().className = "control stop" + str;
		this.getTrack().className = "track track" + (b ? "on" : "off");
		this.getFill().className = "fill fill" + (b ? "on" : "off");
		if(this.getSeekKnob()) {
			this.getSeekKnob().className = "seekKnob" + str;
		}
	}

	if(this.seekEnabled) {
		this.initSeek(this.playerID);
	}
	if(this.detectAds) {
		ibsys.WmvPlayer.adDetect[this.playerID] = new ibsys.WmvAdDetect(this.playerID);
	}
}

/*******************
*
* Seeking behavior
*
********************/
ibsys.WmvControls.prototype.initSeek = function(playerID) {
	this.pl = "videoplug" + playerID;
	this.el = null;
	this.trackwidth = "";
	this.controlsheight = "";
	this.pos = {
		x: 0,
		y: 0,
		trackX: 0,
		mediaDur: 0,
		controlsY: 0
	};

	//div to hold time elapsed / total time
	var timeElapsed = this.getControls().appendChild(document.createElement("div"));
	timeElapsed.className = "timeElapsed";
	this.reportContainer = timeElapsed;

	this.active = true;
	this.track = this.getTrack();
	this.seekKnob = this.getSeekKnob();
	this.t = null; //timer object for progress monitoring
	this.t2 = null; //timer object for dragging progress bar knob
}

/****
/ reset for new video
/****/
ibsys.WmvControls.prototype.resetSeek = function() {
	window.clearInterval(this.t);
	this.reportContainer.innerHTML = "";
	this.pos.x = 0;
	this.pos.mediaDur = 0;
	this.el = null;
}

/*****
/ call this after video is played
/****/
ibsys.WmvControls.prototype.startSeek = function() {
	this.trackwidth = this.getTrack().offsetWidth;
	this.controlsheight = this.getControls().offsetHeight;

	//this element doesn't exist until after video starts the first time.
	this.el = document.getElementById(this.pl);

	//find and store beginning x position of progress bar
	var trackCoords = this.getOffset(this.track);
	this.pos.trackX = trackCoords.x;

	//find and store the beginning y position of controls
	var controlsCoords = this.getOffset(this.getControls());
	this.pos.controlsY = controlsCoords.y;

	var self = this;

	if(this.enabled) {
		//track x position over progress bar
		document.attachEvent("onmousemove",function() {
			coords = self.getMouseXY();
			self.pos.x = coords.x;
			self.pos.y = coords.y;
		});

		//allow user to click in progress bar to seek to that position
		this.track.attachEvent("onmouseup",function() {
			self.seekToMousePosition(self);
		});

		//this event monitors dragging of seek knob and repositions knob on x-axis
		this.seekKnob.attachEvent("onmousedown",function() {

			if(self.t2) {
				window.clearInterval(self.t2);
			}

			self.t2 = window.setInterval(function() {
				//interrupt WMP progress bar interval function
				self.progressInterrupt = true;
				self.moveBarToMouseX();
			},10);
		});

		//"drop" seek knob
		this.seekKnob.attachEvent("onmouseup",function() {
			//clear knob timer
			if(self.t2) {
				window.clearInterval(self.t2);
			}
			//allow WMP to resume updating the progress bar
			self.progressInterrupt = false;
		});

		//keeps seek working if user drags off of slider before mouseup
		document.attachEvent("onmouseup",function() {
			if(self.t2) {
				if(self.progressInterrupt) {
					self.moveBarToMouseX();
					//clear knob timer
					window.clearInterval(self.t2);
					//go to position user dragged knob to
					self.seekToMousePosition(self);
					//allow WMP to resume updating the progress bar
					self.progressInterrupt = false;
				}
			}
		});

		// attach event to stop button
		this.getStop().attachEvent("onclick", function() {
			return function() {
				self.resetSeek();
			}
		});

		//monitor elapsed time
		this.t = window.setInterval(function() {
			//record duration of video in seconds (for seeking)
			self.pos.mediaDur = self.el.currentMedia.duration;
			if(self.pos.mediaDur == 0) {
				self.reportContainer.style.display = "none";
			} else {
				self.reportContainer.style.display = "block";
			}
			//update elapsed time report in video controls box
			self.showTime(self.el.controls.currentPosition);
		},1000);
	}
}
/****
/ move slider/progress bar to position
/***/
ibsys.WmvControls.prototype.moveBarToMouseX = function() {
	//calculate current mouse position in seconds
	var posSeconds = parseInt(((this.pos.x - this.pos.trackX) * this.pos.mediaDur) / this.trackwidth);
	//calculate current mouse position in percent
	var percent = parseInt(((this.pos.x - this.pos.trackX)/this.trackwidth)*100);
	//enforce limits on progress bar width
	if(percent > 99) {
		percent = 99;
	} else if (percent < 1) {
		percent = 1;
	}
	//move progress bar.  knob should be aligned right so it moves, too.
	this.getFill().style.width =  percent + "%";
	//show time of dragged knob
	this.showTime(posSeconds);
}
/****
/ show elapsed time as a string like this: 0:15/4:32
/***/
ibsys.WmvControls.prototype.showTime = function(seconds) {
	//enforce limits on time display
	if(parseInt(seconds) > parseInt(this.pos.mediaDur)) {
		seconds = this.pos.mediaDur;
	} else if (parseInt(seconds) < 0) {
		seconds = 0;
	}
	//construct time string
	var elapsed = this.timeVal(parseInt(seconds)) + " / ";
	elapsed += this.timeVal(parseInt(this.pos.mediaDur));
	this.reportContainer.innerHTML = elapsed;
}

/****
/ Turn base 10 seconds into base 60 time
/***/
ibsys.WmvControls.prototype.timeVal = function(seconds) {
	//minutes
	var mins = parseInt(seconds/60);
	//seconds
	var secs = seconds%60;
	if(parseInt(secs) < 10) {
		secs = "0" + secs;
	}
	var time = mins + ":" + secs;
	return time;
}

/*****
/ Calculate mouse position within progress bar, seek to that position in video
/****/
ibsys.WmvControls.prototype.seekToMousePosition = function(self) {
	//find user mouse position relative to progress bar
	var xRelativePos = self.pos.x - self.pos.trackX;
	//enforce limits on mouse position relative to progress bar
	if(xRelativePos > self.trackwidth) {
		xRelativePos = self.trackwidth - 1;
	} else if (xRelativePos < 1) {
		xRelativePos = 1;
	}
	//turn that number into seconds
	var currentSeconds = parseInt((xRelativePos * self.pos.mediaDur)/self.trackwidth);
	//seek to that time in the video
	if(self.enabled) {
		self.el.controls.currentPosition = currentSeconds;
	}
	return true;
}

/*****
/ Track user mouse position
/	note: this fct is IE-specific...
/****/
ibsys.WmvControls.prototype.getMouseXY = function(e) {
	var coords = {
		x: event.clientX + document.body.scrollLeft,
		y: event.clientY + document.body.scrollTop
	}
	return coords;
}

/******
/ Get the x offset of an element on the page
/*****/
ibsys.WmvControls.prototype.getOffset = function(el) {
	var coords = {
		x:el.offsetLeft,
		y:el.offsetTop
	}
	var parent = el.offsetParent;
	while(parent != null)
	{
		coords.x += parent.offsetLeft;
		coords.y += parent.offsetTop;
		parent = parent.offsetParent;
	}
	return coords;
}

/***************
* Ad Detection
* 	Disables custom controls based on presence of advertisement
*	@playerID (string: playerID of ibsys.WmvPlayer object)
* Usage:
* 	init:
* 	ibsys.WmvPlayer.adDetect["player"] = new ibsys.WmvAdDetect("player");
****************/
ibsys.WmvAdDetect = function(playerID) {
	this.playerID = playerID ? playerID : false;
	this.timer = null;
	this.currentFileName = null;
	this.isDisabled = false;
	this.adFlags = ["/ads/","/sponsors/"];
}
/*******
* clear timed driver
********/
ibsys.WmvAdDetect.prototype.stop = function() {
	var self = this;
	if(self.timer != null) {
		window.clearInterval(self.timer);
	}
}
/*****************
* checks <title> attr of asx playlist for "Advertisement:"
******************/
ibsys.WmvAdDetect.prototype.checkTitle = function() {
	var self = this;
	var title = document.getElementById("videoplug" + self.playerID).currentMedia.getItemInfo("Title");
	if(title.indexOf("Advertisement:") != -1) {
		return true;
	}
	return false;
}

/******************
* checks the path of currently playing file for adFlags (defined above)
******************/
ibsys.WmvAdDetect.prototype.checkPath = function() {
	var self = this;
	var path = document.getElementById("videoplug" + self.playerID).currentMedia.sourceURL;
	for(var i=0; i<self.adFlags.length;i++) {
		if(path.indexOf(self.adFlags[i]) != -1) {
			return true;
		}
	}
	return false;
}

/*******************
* driver for ad detection / control enabling
*******************/
ibsys.WmvAdDetect.prototype.go = function() {
	var self = this;
	if(activexVideo && ibsys.WmvPlayer.controls[this.playerID]) {
		self.timer = window.setInterval(function() {
			if(document.getElementById("videoplug"+self.playerID) == null) return false;
			if(self.checkTitle() || self.checkPath()) {
				if(!self.isDisabled) {
					ibsys.WmvPlayer.controls[self.playerID].setEnabled(false);
					self.isDisabled = true;
				}
			} else {
				if(self.isDisabled) {
					ibsys.WmvPlayer.controls[self.playerID].setEnabled(true);
					ibsys.WmvPlayer.controls[self.playerID].getPlay().className = "control pause";
					self.isDisabled = false;
				}
			}
		},750);
		//remove this function on page unload
		if(window.attachEvent) {
			window.attachEvent("onunload",function() {
				self.stop();
			});
		}
	}
}
/*************************
* Write in a "buffering" swf file
* 	this is necessary to avoid an ActiveX component activation bounding box
*	drawn in by Internet Explorer
*
* 	Usage:
*		var url = "http://my.site.com/mybuffer.swf";
*		ibsys.WmvPlayer.buffering["player"] = new ibsys.WmvBufferingSwf("buffer",url).loadSwf();
*************************/
ibsys.WmvBufferingSwf = function(bufferingId,url) {
	this.url = url;
	this.bufferingId = bufferingId;
}
ibsys.WmvBufferingSwf.prototype.loadSwf = function() {
	var parent = document.getElementById(this.bufferingId);
	var embed = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ';
		embed += 'codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"';
		embed += 'width="100%" height="100%" id="buffering" align="middle">';
		embed += '<param name="allowScriptAccess" value="sameDomain" />';
		embed += '<param name="bgcolor" value="#000000" />';
		embed += '<param name="quality" value="high" />';
		embed += '<param name="movie" value="';
		embed += this.url;
		embed += '" />';
		embed += '<embed src="';
		embed += this.url;
		embed += '"  quality="high" bgcolor="#000000" width="100%" height="100%" ';
		embed += 'align="middle" allowScriptAccess="sameDomain"  type="application/x-shockwave-flash" ';
		embed += 'pluginspage="http://www.macromedia.com/go/getflashplayer" />';
		embed += '</object>';
	parent.innerHTML = embed;
	return parent;
}


var stateStrings = ["Stopped","Paused","Playing","ScanForward",
					"ScanReverse","Buffering","Waiting","MediaEnded",
					"Transitioning","Ready","Reconnecting"];
function getStateString(i)
{
	return i > 0 && i < stateStrings.length ? stateStrings[i-1] : null;
}

