// ================ OVA callbacks =================
// these have to be global functions, unfortunately
function onCompanionAdShow()
{
	$('.video-companion').css('display', 'block');
}

function onTemplateLoadFailure(error)
{
	$.post('http://pandora.bonnint.net/video/ads/e.php',
		{ e: error },
		'json'
	);
}

function onVASTLoadFailure(error)
{
	$.post('http://pandora.bonnint.net/video/ads/e.php',
		{ e: error },
		'json'
	);
}

// playlist should be an array of objects:
// file 
// title
// image (optional)
// description (optional)
function KSLVideoPlayer(divId, playlist, options) {
	var self = this;
	self.divId = divId;
	self.playlist = playlist;
	if(typeof(options) != 'object')
		self.options = new Object();
	else
		self.options = options;

	self.version = "1";
	self.playerSoftware = "JW Player 5.7.0";
	self.playerName = self.playerSoftware+"-v"+self.version;
	self.logUrl = "/resources/widget/log.php";
	self.playerUrl = "/packages/jwplayer/player-5.7.0.swf";
	self.player = false;

	//self.s = false;		// omniture

	if(self.options.width && self.options.height) {
		self.defaultWidth = self.options.width;
		self.defaultHeight = self.options.height;
	}
	else {
		self.defaultWidth = 664;
		self.defaultHeight = 374;
	}

	self.playlistWidth = 424;
	self.playlistHeight = 244;

	self.clientId = Math.floor(Math.random()*1000000000);
	self.begin = false;
	self.watched = false;
	self.duration = false;
	self.position = false;
	self.item = false;
	self.file = false;

	if(self.options.autostart)
		self.autostart = true;
	else
		self.autostart = false;

	if(self.options.embed)
		self.embed = '1';
	else
		self.embed = '0';

	// look for sharing data
	// look for captions
	self.hasCaptions = false;
	self.hasSharing = false;
	for(var pItem in self.playlist) {
		if(self.playlist[pItem]["captions.file"])
			self.hasCaptions = true;
		if(self.playlist[pItem]["sharing.code"])
			self.hasSharing = true;
		if(self.playlist[pItem]["sharing.link"])
			self.hasSharing = true;
	}

	self.playCountKey = 'kslvideo';
	self.playCount = 0;

	// ================ METHODS =================
	self.log = function(fn, e, e1, e2, async)
	{
		$.ajax({
			type: 'post',
			url: self.logUrl,
			data: { i: self.clientId, f:fn, e:e, e1:e1, e2:e2, em:self.embed },
			dataType: 'json',
			async: async
		});
	};

	self.hasStorage = function()
	{
		try {
			return 'localStorage' in window && window['localStorage'] !== null;
		} catch (e) {
			return false;
		}
	};

	self.loadPlayCount = function()
	{
		if(self.hasStorage() === false
		   || localStorage.getItem(self.playCountKey) == null)
			self.playCount = 0;
		else
			self.playCount = localStorage.getItem(self.playCountKey);
		//alert('loadPlayCount:'+self.playCount);
	};

	self.increasePlayCount = function()
	{
		//var now = new Date();
		//var expTime = new Date(now.getTime() + (1000*86400*30));
		//var dateString = expTime.toUTCString();
		//self.playCount++;
		//document.cookie = 'kslvideo='+self.playCount+'; domain=ksl.com; expires='+dateString+'; path=/';

		self.playCount++;
		if(self.hasStorage() !== false) {
			localStorage.setItem(self.playCountKey, self.playCount);
			//alert('increasePlayCount:'+self.playCount);
		}
	};

	self.selectPlaylistItem = function(url)
	{
		self.player.playlistItem(url);
	};

	self.s_gi_wrap = function()
	{
		if(typeof s_gi == 'function')
			return s_gi('bonintkslcom');
		else
			return false;
	};

	self.onPlaylistItem = function(event)
	{
		self.item = event.index;
		self.file = self.player.getPlaylistItem(self.item).file;
		self.log(self.file, 'playlistItem', event.index, '-', true);
		self.begin = false;
		self.position = false;
		self.watched = 0;

		if(document.getElementById('plistItem-'+self.item)) {
			$('.plistItem').css('background-color', 'white');
			$('#plistItem-'+self.item).css('background-color', '#ccccee');
		}
	};

	self.onPlay = function(event)
	{
		var s = self.s_gi_wrap();

		self.duration = self.player.getPlaylistItem(self.item).duration;
		if(self.position === false)
			self.position = 0;

		if(self.begin === false) {
			if(s) { s.Media.open(self.file, self.duration, self.playerName); }
			self.log(self.file, 'start', self.duration, '-', true);
			self.begin = self.position;
		}

		self.log(self.file, 'play', self.position, self.duration, true);

		if(s) { s.Media.play(self.file, self.position); }
	};

	self.onPause = function(event)
	{
		var s = self.s_gi_wrap();

		self.position = self.player.getPosition();
		self.log(self.file, 'pause', self.position, '-', true);

		if(s) { s.Media.stop(self.file, self.position); }
	};

	self.onComplete = function(event)
	{
		var s = self.s_gi_wrap();

		self.position = self.player.getPosition();
		self.watched += Math.round(self.position-self.begin);
		self.log(self.file, 'complete', self.watched, '-', true);

		if(s) { s.Media.stop(self.file, self.position); }
		if(s) { s.Media.close(self.file); }

		self.begin = false;
		self.watched = false;
		self.position = false;
		//self.increasePlayCount();
	};

	self.onSeek = function(event)
	{
		var s = self.s_gi_wrap();

		self.position = event.position;
		self.watched += Math.round(self.position-self.begin);
		self.begin = event.offset;
		self.log(self.file, 'seek', event.offset, event.position, true);

		if(s) { s.Media.stop(self.file, self.position); }
		if(s) { s.Media.play(self.file, self.begin); }
	};

	self.onFullscreen = function(event)
	{
		self.log(self.file, 'fullscreen', event.fullscreen, '-', true);
	};

	self.onTime = function(event)
	{
		self.position = Math.floor(event.position);
	};

	// ================ CONSTRUCTOR =================
	//self.s = self.s_gi_wrap();
	//self.loadPlayCount();

	self.playerSettings = {
		flashplayer: self.playerUrl,
		"controlbar.idlehide": true,
		events: {
			onPlaylistItem: self.onPlaylistItem,
			onPlay: self.onPlay,
			onPause: self.onPause,
			onComplete: self.onComplete,
			onSeek: self.onSeek,
			onFullscreen: self.onFullscreen,
			onTime: self.onTime
		},
		playlist: self.playlist,
		autostart: self.autostart
	};

	if(self.playlist.length == 1) {
		self.playerSettings.width = self.defaultWidth;
		self.playerSettings.height = self.defaultHeight;
		self.playerSettings.plugins = { };

		if(self.hasSharing) {
			self.playerSettings.plugins['/packages/jwplayer/sharing-3.js'] = {};
		}

		if(self.hasCaptions) {
			self.playerSettings.plugins["/packages/jwplayer/captions-2.js"] = {
				state: false
			};
		}
		if(!self.options.noad) {
			self.playerSettings.plugins["/packages/jwplayer/ova-0.5.0-rc5.swf"] = { };
			self.playerSettings.config = "/resources/widget/ova-config.php";
			var adparams = [];
			if(self.options.adtarget) {
				adparams.push("t="+self.options.adtarget);
			}
			if(self.options.adsite) {
				adparams.push("s="+self.options.adsite);
			}
			self.playerSettings.config += "?"+adparams.join('&');
		}
	}
	else {
		self.playerSettings.width = self.playlistWidth;
		self.playerSettings.height = self.playlistHeight;
	}

	self.player = jwplayer(self.divId).setup(self.playerSettings);
}

