/**
 *	PokkariPlayer class
 * 	subclasses @PokkariElement
 *	For writing of video player inline
 *	$Header: /usr/local/cvsroot/otter/html/scripts/pokkariPlayer.js,v 1.30 2006/11/28 00:46:21 mike Exp $
*/

function PokkariPlayer(params) {
	this.MAX_WIDTH = 500;
	this.MAX_HEIGHT = 500;
}

PokkariPlayer.prototype = new Object();
PokkariPlayer.prototype.constructor = PokkariPlayer;

PokkariPlayer.eventContext = new Object();

PokkariPlayer.prototype.destroy = function() {
}

PokkariPlayer.prototype.setSiteUrl = function(url) {
	this.site_url = url;
}

PokkariPlayer.prototype.getSiteUrl = function() {
	if(this.site_url) {
		return this.site_url;
	} else {
		return '';
	}
}

PokkariPlayer.prototype.setPrimaryMediaUrl = function(url) {
	this.primary_media_url = url;
}

PokkariPlayer.prototype.getPrimaryMediaUrl = function() {
	return this.primary_media_url;
}

PokkariPlayer.prototype.setPostsId = function(id) {
	this.posts_id = id;
}

PokkariPlayer.prototype.getPostsId = function() {
	return this.posts_id;
}

PokkariPlayer.prototype.setWidth = function(width) {
	if(width == -1) { width = 320 }
	this.width = width;
}

PokkariPlayer.prototype.setResizeRatio = function(ratio) {
	this.resizeRatio = ratio;
}

PokkariPlayer.prototype.getResizeRatio = function() {
	return this.resizeRatio;
}

/**
* TODO - FIXME
* You MUST call getWidth() before getHeight() - otherwise you'll get
* the wrong aspect ratio.
* Should probably move this into a single getDimensions() method.
*/
PokkariPlayer.prototype.getWidth = function() {
	if(this.width) {
		if(this.width < this.MAX_WIDTH) {
			return this.width;
		} else {
			this.setResizeRatio(this.MAX_WIDTH / this.width);
			return this.MAX_WIDTH;
		}
	} else {
		return '320';
	}
}

PokkariPlayer.prototype.getPlayerWidth = function() {
	return this.getWidth();
}

PokkariPlayer.prototype.setHeight = function(height) {

	if(height == -1) { height = 240 }

	this.height = height;
}

PokkariPlayer.prototype.getHeight = function() {
	if(this.height) {
		if(this.getResizeRatio()) {
			return this.height * this.getResizeRatio();
		} else {
			if(this.height < this.MAX_HEIGHT) {
				return this.height;
			} else {
				return this.MAX_HEIGHT;
			}
		}
	} else {
		return '260';
	}
}

PokkariPlayer.prototype.getPlayerHeight = function() {
	return this.getHeight();
}

PokkariPlayer.prototype.setAutoPlay = function(ap) {
	this.autoPlay = ap;
}

PokkariPlayer.prototype.getAutoPlay = function() {
	if(this.autoPlay) {
		return true;
	} else {
		return false;
	}
}

PokkariPlayer.prototype.setPlayerTarget = function(obj) {
	this.playerTarget = obj;
}

PokkariPlayer.prototype.getPlayerTarget = function() {
	return this.playerTarget;
}

PokkariPlayer.prototype.getPlayer = function() {
	return document.getElementById('video_player_object');
}

PokkariPlayer.prototype.getTime = function() {
	var player = this.getPlayer();

	if (typeof(player) != "undefined" && player) {
		if (typeof(player.object) != "undefined" && typeof(player.object.CurrentPosition) != "undefined") {
			return player.object.CurrentPosition;
		}
		if (typeof(player.controls) != "undefined") {
			return player.controls.currentPosition;
		}
		else if (typeof(player.GetTime) != "undefined") {
			return player.GetTime() / player.GetTimeScale();
		}
		else if (typeof(player.GetVariable) != "undefined") {
			return player.GetVariable("videoCurrentTime");
		}
	}

	return this.getRenderedTime();
}

PokkariPlayer.prototype.getRenderedTime = function() {
	if (this.renderTime) {
		var t = new Date();

		var time = (t.getTime() - this.renderTime.getTime()) / 1000;

		return time;
	}

	return null;
}

PokkariPlayer.prototype.setTime = function() {
	throw("Cannot set time on generic embed");
}

PokkariPlayer.prototype.getDuration = function() {
	// TODO FIXME Ad player specific implementation.
	return this.duration;
}

PokkariPlayer.prototype.setDuration = function(value) {
	this.duration = value;
}

PokkariPlayer.prototype.getStatus = function() {
	var player = this.getPlayer();

	if (typeof(player) != "undefined" && player) {
		if (typeof(player.playState) != "undefined") {
			return PokkariWindowsPlayer.prototype.getStatus.apply(this);
		}
		else if (typeof(player.GetPluginStatus) != "undefined") {
			return PokkariQuicktimePlayer.prototype.getStatus.apply(this);
		}
		else if (typeof(player.GetVariable) != "undefined") {
			return PokkariFlashPlayer.prototype.getStatus.apply(this);
		}
	}

	var time = this.getTime();
	var duration = this.getDuration();

	if (time && duration) {
		return (time < duration) ? "Playing" : "Played";
	}

	return null;
}

PokkariPlayer.prototype.setPermalinkUrl = function(url) {
	this.permalinkUrl = url;
}

PokkariPlayer.prototype.getPermalinkUrl = function() {
	return this.permalinkUrl;
}

PokkariPlayer.prototype.setAdvertisingType = function(t) {
	this.adType = t;
}

PokkariPlayer.prototype.getAdvertisingType = function() {
	return this.adType;
}

PokkariPlayer.prototype.isAdProvidedBy = function(provider) {
	if (typeof(this.adType) == "string") {
		provider = provider.toLowerCase();
		var parts = this.adType.toLowerCase().split(/\s*,\s*/);
		for (var i=0; i<parts.length; i++) {
			if (parts[i] && parts[i] == provider)
				return true;
		}
	}

	return false;
}

PokkariPlayer.prototype.setPrerollAnimationUrl = function(value) {
	this.prerollAnimationUrl = value;
}

PokkariPlayer.prototype.getPrerollAnimationUrl = function() {
	return this.prerollAnimationUrl;
}

PokkariPlayer.prototype.setPostrollAnimationUrl = function(value) {
	this.postrollAnimationUrl = value;
}

PokkariPlayer.prototype.getPostrollAnimationUrl = function() {
	return this.postrollAnimationUrl;
}

PokkariPlayer.prototype.getPostsTitle = function() {
	return this.postsTitle;
}

PokkariPlayer.prototype.setPostsTitle = function(value) {
	this.postsTitle = value;
}

PokkariPlayer.prototype.getUsersId = function() {
	return this.usersId;
}

PokkariPlayer.prototype.setUsersId = function(value) {
	this.usersId = value;
}

PokkariPlayer.prototype.getUsersLogin = function() {
	return this.usersLogin;
}

PokkariPlayer.prototype.setUsersLogin = function(value) {
	this.usersLogin = value;
}

PokkariPlayer.prototype.getTopics = function() {
	return this.topics;
}

PokkariPlayer.prototype.setTopics = function(value) {
	this.topics = value;
}

PokkariPlayer.prototype.getGuid = function() {
	return this.guid;
}

PokkariPlayer.prototype.setGuid = function(value) {
	this.guid = value;
}

PokkariPlayer.prototype.initializeFromPost = function(post) {
	this.setPrimaryMediaUrl(post.media.url);
    this.setPermalinkUrl(post.url);
    this.setAdvertisingType(post.advertising);
    this.setPostsId(post.postsId);
    this.setUsersId(post.usersId);
    this.setUsersLogin(post.login);
    this.setPostsTitle(post.title);
    this.setGuid(post.postsGuid);
    if (post.topics) {
    	this.setTopics(post.topics.join(', '));
    }

    if (post.media.width && post.media.height) {
    	this.setWidth(post.media.width);
    	this.setHeight(post.media.height);
    }
    else {
    	this.setWidth(320);
    	this.setHeight(240);
    }
}

PokkariPlayer.prototype.convertTimeToSeconds = function(timecode) {
	var time = timecode.replace(/;\d+$/,"");
	var timeParts = time.split(':');
	var result = timeParts[0]*60*60 + timeParts[1]*60 + timeParts[2];
	return result;
}

PokkariPlayer.prototype.convertSecondsToTime = function(s) {
	var d = new Date(s*1000);
	return d.toGMTString().substr(17,8);
}

PokkariPlayer.prototype.ensureSeconds = function(p) {
	if (isNaN(p)) { return this.convertTimeToSeconds(p); }
	else { return p; }
}

PokkariPlayer.prototype.ensureTime = function(p) {
	if (!isNaN(p)) { return this.convertSecondsToTime(p); }
	else { return p; }
}

PokkariPlayer.prototype.getDocumentWidth = function(d) {
	if (!d) d = document;

	if (d.body && typeof(d.body.clientWidth != "undefined"))
		return d.body.clientWidth;
	else if (d.documentElement && typeof(d.documentElement.clientWidth != "undefined"))
		return d.documentElement.clientWidth;
	else if (typeof(window.innerWidth) != "undefined")
		return window.innerWidth;
}

PokkariPlayer.prototype.getDocumentHeight = function(d) {
	if (!d) d = document;

	if (d.body && typeof(d.body.clientHeight != "undefined"))
		return d.body.clientHeight;
	else if (d.documentElement && typeof(d.documentElement.clientHeight != "undefined"))
		return d.documentElement.clientHeight;
	else if (typeof(window.innerHeight) != "undefined")
		return window.innerHeight;
}

PokkariPlayer.prototype.openFullscreen = function() {
	var width = window.screen.availWidth;
	var height = window.screen.availHeight;

	this.getPlayerTarget().innerHTML = "<b>Full-screen mode, make sure pop-ups aren't blocked</b>";

	this.fullWindow = window.open("","fullWindow","top=0,left=0,status=0,toolbar=0,titlebar=0,resizable=0,location=0,fullscreen=1,directories=0,width="+width+",height="+height);
	this.fullWindow.document.open("text/html","replace");
	this.fullWindow.document.write("<html><head><title>" + document.title +
		" (Full Screen)</title></head><body style='padding:0; margin:0; background-color: black;'>" +
		"<table width='100%' height='100%'><tr><td align='center' valign='middle'>" +
		"<div id='video_player' style='margin:auto'></div>" +
		"</td></tr></table></body></html>"
	);
	this.fullWindow.document.close();
	this.fullWindow.document.title = document.title + " (Full Screen)";
	var div = this.fullWindow.document.getElementById('video_player');
	this.setPlayerTarget(div);

	this.setFullscreenSize(this.fullWindow.document);
	this.setAutoPlay(true);

	this.render();
}

PokkariPlayer.prototype.setFullscreenSize = function(d)
{
	var width = this.getWidth();
	var height = this.getHeight();
	var doc_width = this.getDocumentWidth(d);
	var doc_height = this.getDocumentHeight(d);
	var aspect = width/height;

	// Safari won't let me set height = 100%, so gotta make up some number...
	if (doc_height < 100) {
		doc_height = window.screen.availHeight - 30;
	}

	if (!d) d = document;

	width = doc_width - (20 * aspect);
	height = Math.round(width / aspect);

	if (width < height || height > doc_height) {
		height = doc_height - 20;
		width = Math.round(height*aspect);
	}

	this.MAX_WIDTH = width;
	this.MAX_HEIGHT = height;
	this.setWidth(width);
	this.setHeight(height);
}

PokkariPlayer.prototype.getHtml = function() {
	if(!this.getPrimaryMediaUrl()) {
		throw("Cannot render without primary media URL");
	}
        if(!this.getPlayerTarget()) {
                throw("Cannot render without player target");
        }

	var autoPlay = (this.getAutoPlay()) ? 'true' : 'false';

	var html = '<embed src="' + this.getPrimaryMediaUrl() + '" autoplay="' + autoPlay + '" controller="true" width="' + this.getPlayerWidth() + '" height="' + this.getPlayerHeight() + '" scale="aspect" EnableJavaScript="true" ></embed>';

	return html;
}

PokkariPlayer.prototype.render = function() {
	var html = this.getHtml();

	this.getPlayerTarget().style.width = this.getPlayerWidth() + "px";
	this.getPlayerTarget().style.height = this.getPlayerHeight() + "px";

	this.getPlayerTarget().innerHTML = html;

	this.onRendered();
}

PokkariPlayer.prototype.getScanScoutHtml = function() {
	this.hasScanScoutHtml = true;

	var html = '' +
	'<form name="ss_extframeForm" id="ss_extframeForm" action="" target="ss_extFrame" method="post" style="margin:0; padding:0; margin-top: 5px">'+
    '<input type="hidden" name="a" value="servescriptad">' +
    '<input type="hidden" name="url" value="">' +
    '<input type="hidden" name="contextorder" value="">' +
    '<input type="hidden" name="contexttime" value="">' +
    '<input type="hidden" name="typecd" value="">' +
    '<input type="hidden" name="iteminfo" value="">' +
    '<input type="hidden" name="clienttypecd" value="">' +
    '<input type="hidden" name="clientversion" value="">' +
  	'</form>' +
	'<div id="ss_adPresentation" style="width: 480px; height: 185px; display:block;">' +
    '<iframe name="ss_extFrame" id="ss_extFrame" src="" width="480px" height="185px;" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>' +
	'</div>';

	return html;
}

PokkariPlayer.prototype.adjustSizeForScanScout = function() {
	var width = parseInt(this.getWidth());
	var height = parseInt(this.getHeight());

	var newWidth = (width > 480) ? width : 480;
	var newHeight = height + 235;

	this.getPlayerTarget().style.width = newWidth + "px";
	this.getPlayerTarget().style.height = newHeight + "px";
}

PokkariPlayer.prototype.onRendered = function() {
	if (this.isAdProvidedBy("scanscout") && this.hasScanScoutHtml) {
		if (self.ss_isLoaded == true) {
			this.adjustSizeForScanScout();

			ss_startAdPresentation('pokkari', 'pokkari', '241', this.getGuid(), this);
		}
	}

	this.renderTime = new Date();
}


PokkariPlayer.ChangeInstanceByMimeType = function(obj,type) {
	var newobj = PokkariPlayer.GetInstanceByMimeType(type);

	if (obj && newobj) {
		for (var i in obj) {
			if (typeof(obj[i]) == "function") {
				delete obj[i];
			}
		}
		for (var i in newobj) {
			if (typeof(newobj[i]) == "function") {
				obj[i] = newobj[i];
			}
		}
	}

	return obj;
}

PokkariPlayer.GetInstanceByMimeType = function(type) {

	var obj;

        switch(type) {
                case 'video/quicktime':
			return new PokkariQuicktimePlayer();
                break;
		case 'video/mpg':
			return new PokkariQuicktimePlayer();
		break;
		case 'video/mpeg':
			return new PokkariQuicktimePlayer();
		break;
		case 'video/mp4':
			return new PokkariQuicktimePlayer();
		break;
		case 'video/x-dv':
			return new PokkariQuicktimePlayer();
		break;
		case 'video/x-flv':
			return new PokkariFlashPlayer();
		break;
		case 'video/ms-wmv':
			return new PokkariWindowsPlayer();
		break;
		case 'video/x-ms-wmv':
			return new PokkariWindowsPlayer();
		break;
		case 'video/ms-wmv,video/x-ms-wmv':
			return new PokkariWindowsPlayer();
		break;
		case 'video/msvideo':
			return new PokkariWindowsPlayer();
		break;
		case 'application/ogg':
			return new PokkariTheoraPlayer();
		break;
		case 'video/theora':
			return new PokkariTheoraPlayer();
		break;
		case 'video/vnd.objectvideo':
			return new PokkariQuicktimePlayer();
		break;
		case 'image/jpeg':
			return new PokkariImagePlayer();
		break;
		case 'image/png':
			return new PokkariImagePlayer();
		break;
		case 'image/bmp':
			return new PokkariImagePlayer();
		break;
		case 'image/gif':
			return new PokkariImagePlayer();
		break;
		case 'audio/mpeg':
			return new PokkariMp3Player();
		break;
		default:
			return new PokkariPlayer();
		break;
        }

	return new PokkariPlayer();
}

function PokkariWindowsPlayer(params) {

}

PokkariWindowsPlayer.prototype = new PokkariPlayer();
PokkariWindowsPlayer.prototype.constructor = PokkariWindowsPlayer;
PokkariWindowsPlayer.prototype.superclass = PokkariPlayer;

PokkariWindowsPlayer.prototype.getPrimaryMediaUrl = function() {

	if (window.navigator.platform == "Win32" &&
		(this.getAdvertisingType() == "postroller" ||
		this.getPrerollAnimationUrl() ||
		this.getPostrollAnimationUrl()))
	{
		var url = new Url(this.getPermalinkUrl());
		url.setQueryParam("skin","asx");
		url.setQueryParam("preurl",this.getPrerollAnimationUrl());
		url.setQueryParam("posturl",this.getPostrollAnimationUrl());

		return url.getUrl();
	}
	else {
		return PokkariPlayer.prototype.getPrimaryMediaUrl.apply(this,[]);
	}
}

PokkariWindowsPlayer.prototype.getPlayerWidth = function() {
	return this.getWidth();
}

PokkariWindowsPlayer.prototype.getPlayerHeight = function() {
	if(document.all) {
		return parseInt(this.getHeight()) + 26;
	} else {
		return parseInt(this.getHeight()) + 40;
	}
}

PokkariWindowsPlayer.prototype.getHtml = function() {
		if(!this.getPrimaryMediaUrl()) {
		throw("Cannot render without primary media URL");
	}
	if(!this.getPlayerTarget()) {
		throw("Cannot render without player target");
	}

	var autoPlay = (this.getAutoPlay()) ? 'true' : 'false';

	var html = '<object id="video_player_object" width="' + this.getPlayerWidth() + '" height="' + this.getPlayerHeight() + '" classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" standby="Loading Microsoft Windows Media Player components...", type="application/x-oleobject">';


	html += '<param name="fileName" value="' + this.getPrimaryMediaUrl() + '">';
	html += '<param name="animationStart" value="true">';

	if (typeof(this.startTime) != "undefined" && this.startTime) {
		html += '<param name="currentPosition" value="'+this.startTime+'">';
		autoPlay = true;
	}

	html += '<param name="AutoStart" value="' + autoPlay + '">';
	html += '<param name="showControls" value="true">';
	html += '<param name="transparentatStart" value="false">';
	html += '<param name="loop" value="false">';

	html += '<embed type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" id="video_player_object" name="video_player_object" displaysize="4" autosize="-1" bgcolor="darkblue" showcontrols="true" showtracker="-1" showdisplay="0" showstatusbar="-1" videoborder3d="-1" width="' + this.getPlayerWidth() + '" height="' + this.getPlayerHeight() + '" src="' + this.getPrimaryMediaUrl() + '" autostart="' + autoPlay + '" designtimesp="5311" loop="false"';
	if (typeof(this.startTime) != "undefined" && this.startTime) {
		html += ' currentPosition="'+this.startTime+'"';
	}

	html += '></embed>';
	html += '</object>';

	if (this.isAdProvidedBy("scanscout")) {
		html += this.getScanScoutHtml();
	}

	return html;
}

PokkariWindowsPlayer.prototype.render = function() {
	var html = this.getHtml();

	this.getPlayerTarget().style.width = this.getPlayerWidth() + "px";
	this.getPlayerTarget().style.height = this.getPlayerHeight() + "px";

	this.getPlayerTarget().innerHTML = html;

	this.onRendered();
}

PokkariWindowsPlayer.prototype.setTime = function(time) {
	var s = this.ensureSeconds(time);
	var player = this.getPlayer();

	if (typeof(player) != "undefined") {
		if (typeof(player.object) != "undefined")
			player.object.CurrentPosition = s;
		else if (typeof(player.controls) != "undefined")
			player.controls.currentPosition = s;
	}
}

PokkariWindowsPlayer.prototype.getTime = function() {
	var player = this.getPlayer();

	if (typeof(player) != "undefined") {
		if (typeof(player.object) != "undefined")
			return player.object.CurrentPosition;
		else if (typeof(player.controls) != "undefined")
			return player.controls.currentPosition;
	}

	return null;
}

PokkariWindowsPlayer.prototype.getDuration = function() {
	var player = this.getPlayer();

	if (typeof(player) != "undefined") {
		if (typeof(player.currentMedia) != "undefined")
			return player.currentMedia.duration;
		else if (typeof(player.object) != "undefined")
			return player.object.Duration;
	}

	return null;
}

PokkariWindowsPlayer.prototype.getStatus = function() {
	// TODO FIXME Convert status
	//Value 	State 	Description
	//0 	Undefined 	Windows Media Player is in an undefined state.
	//1 	Stopped 	Playback of the current media item is stopped.
	//2 	Paused 	Playback of the current media item is paused. When a media item is paused, resuming playback begins from the same location.
	//3 	Playing 	The current media item is playing.
	//4 	ScanForward 	The current media item is fast forwarding.
	//5 	ScanReverse 	The current media item is fast rewinding.
	//6 	Buffering 	The current media item is getting additional data from the server.
	//7 	Waiting 	Connection is established, but the server is not sending data. Waiting for session to begin.
	//8 	MediaEnded 	Media item has completed playback.
	//9 	Transitioning 	Preparing new media item.
	//10 	Ready 	Ready to begin playing.
	//11 	Reconnecting
	var player = this.getPlayer();

	if (typeof(player) != "undefined") {
		var state;

		if (typeof(player.object) != "undefined")
			state = player.object.PlayState;
		else if (typeof(player.playState) != "undefined")
			state = player.playState;

		if (state == 1 || state == 0)
			return "Paused";
		else if (state == 2)
			return "Playing";
		else if (state == 5)
			return "Loading";
		else if (state == 6)
			return "Waiting";
		else if (state == 7)
			return "Played";
		else if (state == 9)
			return "Complete";
		else
			return "Undefined";
	}
	else {
		return "Unsupported";
	}
}


function PokkariQuicktimePlayer(params) {

}

PokkariQuicktimePlayer.prototype = new PokkariPlayer();
PokkariQuicktimePlayer.prototype.constructor = PokkariQuicktimePlayer;
PokkariQuicktimePlayer.prototype.superclass = PokkariPlayer;

PokkariQuicktimePlayer.prototype.getPrimaryMediaUrl = function() {

	return PokkariPlayer.prototype.getPrimaryMediaUrl.apply(this,[]);

	if (this.getAdvertisingType() == "postroller" ||
		this.getPrerollAnimationUrl() ||
		this.getPostrollAnimationUrl())
	{
		var url = new Url(this.getPermalinkUrl());
		url.setQueryParam("skin","smil");
		url.setQueryParam("preurl",this.getPrerollAnimationUrl());
		url.setQueryParam("posturl",this.getPostrollAnimationUrl());
		return url.getUrl();
	}
	else {
		return PokkariPlayer.prototype.getPrimaryMediaUrl.apply(this,[]);
	}
}

PokkariQuicktimePlayer.prototype.getTime = function() {
	var player = this.getPlayer();

	return player.GetTime() / player.GetTimeScale();
}

PokkariQuicktimePlayer.prototype.setTime = function(time) {
	var player = this.getPlayer();

	time = time * player.GetTimeScale();

	player.SetTime(time);
}

PokkariQuicktimePlayer.prototype.getDuration = function() {
	var player = this.getPlayer();

	return player.GetDuration() / player.GetTimeScale();
}

PokkariQuicktimePlayer.prototype.getPlayer = function() {

	return document.video_player_object;

}

PokkariQuicktimePlayer.prototype.getStatus = function() {
	var player = this.getPlayer();

	if (player && typeof(player.GetPluginStatus) != "undefined") {
		var status = player.GetPluginStatus();

		if (status == "Complete" || status == "Completed" || status == "Playable") {

			var time = player.GetTime();
			var totalTime = player.GetDuration();
			var rate = player.GetRate();

			if (time >= totalTime)
				return "Played";
			else if (rate > 0)
				return "Playing";
			else if (rate == 0)
				return "Paused";
			else
				return status;
		}
		else
			return status;
	}

	return "Undefined";
}

PokkariQuicktimePlayer.prototype.getPlayerWidth = function() {
	return this.getWidth();
}

PokkariQuicktimePlayer.prototype.getPlayerHeight = function() {
	return parseInt(this.getHeight()) + 20;
}

PokkariQuicktimePlayer.prototype.getHtml = function() {
	if(!this.getPrimaryMediaUrl()) {
		throw("Cannot render without primary media URL");
	}
	if(!this.getPlayerTarget()) {
		throw("Cannot render without player target");
	}

	var autoPlay = (this.getAutoPlay()) ? 'true' : 'false';

	var html = '<object id="video_player_object" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="' + this.getPlayerWidth() +
		'" height="' + this.getPlayerHeight() + '" codebase="http://www.apple.com/qtactivex/qtplugin.cab">';

	html += '<param name="src" value="' + this.getPrimaryMediaUrl() + '">';
	html += '<param name="autoplay" value="' + autoPlay + '">';
	html += '<param name="controller" value="true">';
	html += '<param name="uimode" value="full">';
	html += '<param name="scale" value="aspect">';

	html += '<embed name="video_player_object" src="' + this.getPrimaryMediaUrl() + '" autoplay="' + autoPlay +
		'" controller="true" width="' + this.getPlayerWidth() + '" height="' + this.getPlayerHeight() +
		'" scale="aspect" EnableJavaScript="true" type="video/quicktime"></embed>';

	html += '</object>';

	if (this.isAdProvidedBy("scanscout")) {
		html += this.getScanScoutHtml();
	}

	return html;
}

PokkariQuicktimePlayer.prototype.render = function() {
	var html = this.getHtml();

	this.getPlayerTarget().style.width = this.getPlayerWidth() + "px";
	this.getPlayerTarget().style.height = this.getPlayerHeight() + "px";

	this.getPlayerTarget().innerHTML = html;

	this.onRendered();
}

function PokkariImagePlayer(params) {

}

PokkariImagePlayer.prototype = new PokkariPlayer();
PokkariImagePlayer.prototype.constructor = PokkariImagePlayer;
PokkariImagePlayer.prototype.superclass = PokkariPlayer;

PokkariImagePlayer.prototype.getHtml = function() {
	var html = '<img src="' + this.getPrimaryMediaUrl() + '" width="' + this.getWidth() + '" height="' + this.getHeight() + '" />';

	return html;
}

PokkariImagePlayer.prototype.render = function() {
	var html = this.getHtml();

	this.getPlayerTarget().style.width = this.getWidth() + "px";
	this.getPlayerTarget().style.height = this.getHeight() + "px";

	this.getPlayerTarget().innerHTML = html;

	if (!this.duration) {
		this.duration = 15;
	}

	this.onRendered();
}

//PokkariImagePlayer.prototype.getStatus = function() {
//	return "Played";
//}

function PokkariFlashPlayer(params) {

}

PokkariFlashPlayer.prototype = new PokkariPlayer();
PokkariFlashPlayer.prototype.constructor = PokkariFlashPlayer;
PokkariFlashPlayer.prototype.superclass = PokkariPlayer;

PokkariFlashPlayer.prototype.getPlayerHeight = function() {
	return parseInt(this.getHeight()) + 20;
}

PokkariFlashPlayer.prototype.getHtml = function() {
	var autoPlay = (this.getAutoPlay()) ? '1' : '0';
	var query = "file=" + escape(this.getPrimaryMediaUrl());

	if (this.getAutoPlay()) {
		query += "&autoStart=1";
	}
	if (this.isAdProvidedBy("postroller")) {
		query += "&trailerMovie=http://ad3.postroller.com/ad/12060%3Fvid=" + this.getPostsId();
	}
	else if (this.isAdProvidedBy("immense")) {
		query += "&adProvider=immense";
	}
	else if (this.getPostrollAnimationUrl()) {
		query += "&trailerMovie=" + this.getPostrollAnimationUrl();
	}
	if (this.getPrerollAnimationUrl()) {
		query += "&thumbNail=" + this.getPrerollAnimationUrl();
	}
	if (this.getUsersId()) {
		query += "&userId=" + escape(this.getUsersId());
	}
	if (this.getUsersLogin()) {
		query += "&userLogin=" + escape(this.getUsersLogin());
	}
	if(this.getPostsTitle()) {
		query += "&postsTitle=" + escape(this.getPostsTitle());
	}
	if(this.getPostsId()) {
		query += "&postsId=" + escape(this.getPostsId());
	}
	if(this.getTopics()) {
		query += "&topics=" + escape(this.getTopics());
	}

	var html = '<object id="video_player_object" type="application/x-shockwave-flash" width="' + this.getPlayerWidth() + '" height="' + this.getPlayerHeight() + '" wmode="transparent" data="' + this.getSiteUrl() + '/scripts/flash/blipplayer.swf?' + query + '">';
	html += '<param name="movie" value="' + this.getSiteUrl() + '/scripts/flash/blipplayer.swf?' + query + '">';
	html += '<param name="flashvars" value="' + query + '" />';
	html += '<param name="wmode" value="transparent" />';
	html += '</object>';

	if (this.isAdProvidedBy("scanscout")) {
		html += this.getScanScoutHtml();
	}

	return html;
}

PokkariFlashPlayer.prototype.render = function() {

	var hasProductInstall = DetectFlashVer(6, 0, 65);
	var hasRequestedVersion = DetectFlashVer(8, 0, 0);

	if(hasProductInstall && hasRequestedVersion) {
		var html = this.getHtml();

		this.getPlayerTarget().style.width = this.getPlayerWidth() + "px";
		this.getPlayerTarget().style.height = this.getPlayerHeight() + "px";
		this.getPlayerTarget().innerHTML = html;

		this.onRendered();
	} else {
		var html = '<div class="flash_error_msg">'
		+ '<div class="user_info_title">Ooops</div>'
		+ '<p>If you\'d like to see this video you\'ll need to install <a href="http://www.adobe.com/go/getflashplayer/">Macromedia Flash Player 8</a> (please note that we require Flash 8, and an installation of an earlier version like Flash 7 will not work).</p>'
		+ '<a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" /></a>'
		+ '<p>If you feel you\'ve reached this message in error, please <a href="mailto:support@blip.tv">let us know</a>.</p>'
		+ '</div></div>';
		this.getPlayerTarget().innerHTML = html;
	}
}

PokkariFlashPlayer.prototype.getTime = function() {
	var player = this.getPlayer();

	try {
		if (player && typeof(player.GetVariable) != "undefined") {
			return player.GetVariable("_root.videoCurrentTime");
		}
	}
	catch (err) {}

	return null;
}

PokkariFlashPlayer.prototype.setTime = function(value) {
	var player = this.getPlayer();

	try {
		if (player && typeof(player.SetVariable) != "undefined") {
			player.SetVariable("_root.videoSetCurrentTime",value);
		}
	}
	catch (err) {}
}

PokkariFlashPlayer.prototype.getDuration = function(value) {
	var player = this.getPlayer();

	try {
		if (player && typeof(player.GetVariable) != "undefined") {
			return player.GetVariable("_root.videoTotalTime");
		}
	}
	catch (err) {}

	return null;
}

PokkariFlashPlayer.prototype.getStatus = function(value) {
	var player = this.getPlayer();

	try {
		if (player && typeof(player.GetVariable) != "undefined") {
			var status = player.GetVariable("_root.currentVideoStatus");

			return status || "Undefined";
		}
	}
	catch (err) {}

	return "Undefined";
}

function PokkariTheoraPlayer(params) {
}

PokkariTheoraPlayer.prototype = new PokkariPlayer();
PokkariTheoraPlayer.prototype.constructor = PokkariTheoraPlayer;
PokkariTheoraPlayer.prototype.superclass = PokkariPlayer;  // This isnt necessary is it?

PokkariTheoraPlayer.prototype.getHtml = function() {
		var url = this.getPrimaryMediaUrl();
	var width = this.getWidth();
	var height = this.getHeight();

	var html =  '<object classid="clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA"\n' +
		'width="' + width + '" height="' + height + '"\n' +
	    'codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,0">\n' +
		'<param name="code" value="com.fluendo.player.Cortado.class" />\n' +
		'<param name="codebase" value="/cortado.jar" />\n' +
		'<param name="archive" value="/cortado.jar" />\n' +
	    '<param name="type" value="application/x-java-applet;jpi-version=1.4.2">\n' +
	    '<param name="scriptable" value="true">\n' +
		'<param name="url" value="' + url + '" />\n' +
		'<param name="local" value="false" />\n' +
		'<param name="keepaspect" value="true" />\n' +
		'<comment>\n' +
		'<APPLET code="com.fluendo.player.Cortado.class"\n' +
		'codebase="/cortado.jar"\n' +
		'archive="/cortado.jar"\n' +
        'width="' + width + '" height="' + height + '">\n' +
  		'<PARAM name="url" value="' + url + '"/>\n' +
	  	'<PARAM name="local" value="false"/>\n' +
	  	'<PARAM name="keepaspect" value="true"/>\n' +
		'</APPLET>\n' +
		'</comment>\n' +
		'</object>\n';

	return html;
}
PokkariTheoraPlayer.prototype.render = function() {
	var html = this.getHtml();

	this.getPlayerTarget().innerHTML = html;

	this.onRendered();
}

function PokkariMp3Player(params) {

}

PokkariMp3Player.prototype = new PokkariPlayer();
PokkariMp3Player.prototype.constructor = PokkariMp3Player;
PokkariMp3Player.prototype.superclass = PokkariPlayer;

PokkariMp3Player.prototype.getHtml = function() {
	var autoPlay = (this.getAutoPlay()) ? 'true' : 'false';
	var query = "song_url=" + escape(this.getPrimaryMediaUrl()) + "&autoplay=" + autoPlay;

	var html = '<object id="video_player_object" type="application/x-shockwave-flash" width="' + this.getPlayerWidth() + '" height="' + this.getPlayerHeight() + '" wmode="transparent" data="' + this.getSiteUrl() + '/scripts/flash/blipmp3player.swf?' + query + '">';
	html += '<param name="movie" value="' + this.getSiteUrl() + '/scripts/flash/blipmp3player.swf?' + query + '">';
	html += '<param name="flashvars" value="' + query + '" />';
	html += '<param name="wmode" value="transparent" />';
	html += '</object>';

	return html;
}

PokkariMp3Player.prototype.render = function() {
	var html = this.getHtml();

	this.getPlayerTarget().innerHTML = html;

	this.onRendered();
}

